Skip to content

v2.96.0: dupes ignores imports by default, Impact moves to user dir, VS Code mute fix

Choose a tag to compare

@BartWaardenburg BartWaardenburg released this 13 Jun 08:20
· 974 commits to main since this release
v2.96.0
24a30b1

Highlights

This release changes two analysis defaults, relocates Fallow Impact history out of your repo, and fixes the VS Code diagnostic-mute toggle.

Changed

fallow dupes ignores import declarations by default

Token-identical sorted import blocks are a structural property of well-formatted code, not copy-paste, so they no longer surface as clone groups. ignoreImports (opt-in since 2.33.0) now defaults to true.

  • Opt out with "ignoreImports": false in config, --no-ignore-imports on fallow dupes, or --dupes-no-ignore-imports on bare fallow. The MCP find_dupes / trace_clone tools accept ignore_imports: false, and the VS Code fallow.duplication.ignoreImports setting controls both directions.
  • Scope: ES import declarations only; CommonJS require() and export ... from re-export blocks are still counted.
  • Upgraders on a duplicates.threshold gate: the measured duplication percentage drops, so re-baseline against the new numbers (or set "ignoreImports": false to keep the old behavior). Saved duplication baselines should be re-saved; a one-time step-down in duplication trend at the upgrade boundary is expected.

Thanks @danielo515 for the report (#1224).

Fallow Impact history moved to your user config dir

Enabling Impact (or recording a run) no longer creates a .fallow/ directory or edits the repo's .gitignore. The per-project store moved to <config-dir>/fallow/impact/<key>.json (~/Library/Application Support/fallow/ on macOS, $XDG_CONFIG_HOME/fallow/ on Linux, %APPDATA%\fallow\ on Windows). The store is keyed by repo identity, so any subdirectory or git worktree of a repo shares one history, and nothing is written into the working tree. An existing in-repo .fallow/impact.json is imported once on first run. Impact is now explicitly off in CI.

Added

  • fallow impact default on|off turns Impact on once for every project (a user-global opt-in); a per-project enable / disable always wins. The report and the impact MCP tool gain an enabled_source field (project / user / default).
  • fallow impact reset [--all] deletes stored history for this project, or with --all every project's history; the user-global default toggle is left untouched. fallow impact now prints the resolved store path and project key.

Fixed

VS Code: "Toggle Hide All Findings" can be undone again

After the extension moved open-file diagnostics to the LSP 3.17 pull path, toggling a mute updated only the push diagnostic collection, which the language server keeps empty for open files once the editor starts pulling. So hiding took effect only on the next edit, un-hiding did nothing visible, and findings stayed hidden through reinstalls and restarts (the muted state persists per workspace). Three fixes:

  • Mute toggles now re-pull open documents, so squiggles and Problems entries hide and show instantly.
  • Open-file findings no longer render twice after a toggle (pull results are no longer cached into the separate push collection).
  • Unchecking "All Fallow Findings" in the Manage Hidden Findings picker now reveals findings instead of silently re-hiding each category.

Thanks @VariableVince for the report (discussion #287).

Full Changelog: v2.95.0...v2.96.0