Skip to content

v2.66.0 - Prisma generators end-to-end + 82% faster plugin discovery

Choose a tag to compare

@BartWaardenburg BartWaardenburg released this 06 May 08:59
· 3954 commits to main since this release
v2.66.0
d668381

Highlights

Prisma generator-provider crediting end-to-end (canonical layouts AND custom prisma.config.ts schema paths), an 82% speedup on the plugin-discovery stage for large monorepos, and fallow dupes now actually honors duplicates.* settings from .fallowrc.jsonc.

Performance

Surface Before After Delta
Plugin discovery (Next.js, 21,033 files) 7378 ms 1362 ms -82%
Bare fallow (Next.js, 21,033 files) 9.7 s 3.3 s -66%
fallow audit --gate all (Next.js, 21,033 files) 11.7 s 5.4 s -54%

audit also caches base-branch snapshots and runs HEAD analyses concurrently with base-snapshot computation, and combined-mode fallow now runs check + dupes in parallel via rayon::join.

Added

  • Prisma generator providers credited from schema.prisma. Custom-generator npm packages declared in generator <name> { provider = "<pkg>" } blocks (e.g. prisma-json-types-generator, prisma-erd-generator) are now credited as referenced dependencies instead of surfacing under unused-dependency. Covers prisma/schema.prisma, root schema.prisma, and the multi-file prisma/schema/*.prisma layout. Datasource providers, shell-command form, relative-path form, and commented-out generators are all handled correctly. (Closes #288)
  • Custom Prisma schema paths from prisma.config.ts are honored. The plugin reads the static schema field from prisma.config.{ts,mts,cts,js,mjs,cjs} and the new .config/prisma.{ts,...} Prisma 6 alternate location, resolves it against the project root, marks the configured schema file or folder as always-used, and recursively scans it for generator providers. Layouts where the schema sits outside the canonical prisma/ directory (e.g. db/schema/) are now covered without ignoreDependencies. Thanks @M-Hassan-Raza for the patch. (#291)
  • VS Code: client-side diagnostic mute and dynamic issue types. Mute diagnostics from the editor without round-tripping through .fallowrc.jsonc; the issue-type list in the LSP filter is populated dynamically from the language server so newly-added kinds appear without an extension release. Thanks @FunctionDJ for the report. (#287)

Changed

  • Plugin discovery skips the FS walk for source-extension config patterns. Patterns like webpack.config.{ts,js,mjs,cjs} describe source files already in the file index, so re-stat'ing them once per plugin during discover_config_files was redundant. Root-anchored patterns whose extensions are all in SOURCE_EXTENSIONS now match against the in-memory file set instead. Production mode preserves the FS fallback to keep correctness on *.config.*-excluded source walks. See the table above for measured impact.
  • fallow audit caches base-branch snapshots and parallelizes HEAD work. Repeat audit runs reuse cached dead-code + dupes snapshots; the worktree analysis runs concurrently with base snapshot rebuild.
  • Combined fallow runs check + dupes via rayon::join. Independent analysis trees now share wall-clock instead of stacking sequentially.

Fixed

  • fallow dupes honors duplicates.{minLines, minTokens, threshold, mode, skipLocal} from .fallowrc.jsonc. Standalone fallow dupes previously stomped these config values with the clap defaults (minLines=5, minTokens=50, etc.) because the CLI args were typed as usize/f64 with default_value, so "flag omitted" was indistinguishable from "user passed the default". The CLI scalars are now Option<T>, an absent flag falls through to the toml value, and skipLocal adopts the OR-merge already used for crossLanguage/ignoreImports. The failure threshold for the gate now sources from the merged config too, so an omitted --threshold no longer disables a config-declared gate. audit, combined, and the programmatic API are unaffected. Thanks @ryota-murakami for the patch. (#290)
  • fallow dupes --performance actually emits the duplication performance panel. The flag was parsed by clap but never plumbed into DupesOptions, so it was silently a no-op. Combined-mode fallow --performance already printed a duplication stage; the standalone command now does the same on stderr (human / compact / markdown only; structured formats stay clean).

Full Changelog: v2.65.0...v2.66.0