25b4a009

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

Self-weed: report unused configured roots, root-instances and root-modules

Weeder now reports configured `roots` patterns, `root-instances` entries
and `root-modules` patterns that match no identifiers, treating stale
configuration as a weed in its own right (issue #154).

A `roots` pattern is only considered unused when it matches no identifier
Weeder is aware of at all (`allDeclarations`), not merely no outputable
declaration -- so a root naming a real type or constructor is not flagged
just because `unused-types` happens to be disabled.

Only entries the user explicitly set are reported; defaults are left
alone, since flagging an unconfigured default as unused is not
actionable. When `type-class-roots` is set, `root-instances` is ignored
entirely and so is never reported.

To name the offending entry in the output, compiled patterns now carry
their source string (`CompiledRegex`), and `ConfigType` records whether
each root section was explicitly configured.

Adds a SelfWeeding integration test. No existing golden output changes.

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 45s 4s 4s 49s 45s
Eval 1m07s 10m07s 12m37s 13m45s 17s
Build - - - - -
Suite 45s 10m11s 12m59s 13m45s 3m33s