Skip to content

v2.60.0 — config-driven includeEntryExports + SCSS/.tsx collision fix

Choose a tag to compare

@BartWaardenburg BartWaardenburg released this 01 May 16:39
· 4103 commits to main since this release
v2.60.0
c215170

Highlights

  • includeEntryExports is now a config option, and --include-entry-exports is a global CLI flag. Persistently opt in to entry-file export validation via "includeEntryExports": true in your fallow config, or pass the flag once on combined mode (fallow --include-entry-exports). Previously the bare combined invocation rejected the flag because it was only defined on the dead-code subcommand.
  • SCSS / Sass @use 'X' no longer resolves to a sibling X.tsx. Stylesheet importers now reject standard-resolver hits on JS/TS-family extensions and route through SCSS-aware fallbacks instead, eliminating phantom circular dependencies in standard CSS-modules / Angular styleUrls patterns.

Added

  • includeEntryExports config option. Set "includeEntryExports": true (JSON / JSONC) or includeEntryExports = true (TOML) in your fallow config. The CLI flag ORs with the config value when set.
  • --include-entry-exports is now a global flag. Accepted on combined mode (fallow --include-entry-exports), fallow dead-code, fallow audit, and fallow watch (with the override applied at every config reload).
  • include_entry_exports MCP param on the audit tool. Sibling-tool parity with analyze and check_changed. Forwards --include-entry-exports to the dead-code sub-pass.
  • Stable-API listings updated. --include-entry-exports and includeEntryExports are now part of docs/backwards-compatibility.md and follow the project's semver guarantees.

Thanks @filipw01 for the report. (Closes #249)

Fixed

  • SCSS / Sass @use 'X' no longer resolves to a sibling X.tsx. When both Widget.scss and Widget.tsx exist next to each other and a .scss importer does @use 'Widget', fallow now resolves the import to Widget.scss per Sass's actual resolution algorithm. Stylesheet importers now reject any standard-resolver hit whose extension is a JS/TS-family extension (.tsx, .ts, .mts, .cts, .js, .jsx, .mjs, .cjs) and re-route through the SCSS-aware fallback chain (CSS-extension probe, _filename partial convention, framework include paths, node_modules walk-up). When those also fail, the import is reported as unresolved instead of falling through to JS/TS extensions. This eliminates phantom 3-file circular dependencies in standard CSS-modules / Angular styleUrls patterns where the .tsx component imports its own .scss and a sibling .scss shares variables/mixins via @use. Thanks @OmerGronich for the precise reproduction and the suggested fix. (Closes #245)

Full Changelog: v2.59.0...v2.60.0