chore(deps): update dependency fallow to v2.85.0#144
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
2.84.0→2.85.0Release Notes
fallow-rs/fallow (fallow)
v2.85.0Compare Source
Added
fallow coverage upload-source-mapsnow uploads each map's repo-relative path, so the source-evidence viewer can resolve monorepo sub-package source. A bundled map under a sub-package (e.g.dashboard/dist/assets/X.js.map) lists its sources relative to the map file (../../src/components/X.tsx); the cloud previously had only the basename and collapsed that tosrc/components/X.tsx, which never matched the package-prefixed runtime pathdashboard/src/components/X.tsx, so the viewer reported "source not in maps" even though the file was in an uploaded map. The CLI now sends the map's path relative to the repo root alongside the existingfileName, letting the cloud resolve each source against the map's directory and recoverdashboard/src/components/X.tsx. The field is omitted when a map is not under the repo root (an absolute--diroutside it), in which case the cloud falls back to its previous behavior. Runupload-source-mapsfrom the repo root so the prefix is correct. No change for single-package projects. (Closes #260.)fallow flagsnow surfaces the configuration surface when it finds nothing. The empty-result line (No feature flags detected) is no longer byte-identical whether a project truly has no flags or just uses an SDK fallow does not recognize. On full defaults, the human output now lists the built-in env-var prefixes and SDK providers it scanned for, then points atflags.sdkPatterns,flags.configObjectHeuristics, and the configuration docs, so you can tell a true negative from a missing detector and add your own SDK (PostHog, in-house, anything not listed). Projects that already configured customflags.*patterns get a single terse line acknowledging their config instead of the discovery block. The enumerated detectors are derived from fallow's built-in tables, so the hint stays in sync as defaults grow. JSON, SARIF, compact, markdown, and CodeClimate output are unchanged, and--quietsuppresses the hint. (Closes #562.)fallow impactreports what fallow has done for you, opt-in and local-only. A newfallow impactcommand shows how many issues fallow is currently surfacing, the trend since the previous recorded run, and how many commits its pre-commit gate blocked then cleared. Enable it withfallow impact enable(withdisableandstatussiblings); once enabled, eachfallow auditrun appends a small record to a single rolling.fallow/impact.json(gitignored, never uploaded). The generatedfallow init --hookspre-commit hook now tags gate runs so a blocked-then-fixed commit is recorded as contained. Writes are best-effort and never change a command's exit code or output. Human,--format json, and--format markdownoutput are available, and the JSON shape ships in the published output schema.fallow impactnow also credits per-finding resolutions: when a finding you previously saw goes away because you fixed the code, it counts as resolved, and when it goes away because you added afallow-ignore, it is reported separately as intentionally managed and never counted as a win. It distinguishes the two by capturing which suppressions are present each run, and it ignores findings that merely moved rather than being removed (within a file, or relocated to another file, including across separate commits). Resolution attribution covers dead code, complexity, and duplication, accrues from your local runs (it is a local-developer signal, not a CI metric, since it lives in.fallow/impact.json), and addsresolved_total,suppressed_total, and a recent-resolutions list to all three output formats and the published schema.fallow impactnow tracks a whole-project view and credits cleanups you make outside a changed-file audit. Previously every recorded run came fromfallow audit, which is scoped to the files changed against your base, so a duplication or whole-repo cleanup you verified withfallow dupes(or any fullfallowrun) was never credited. Now a fullfallowrun (dead code + duplication + complexity, with no--changed-since/--workspace/--diff/--productionnarrowing) records a separate whole-project entry, and its resolution pass credits any finding that has gone away anywhere in the repo, including a clone group you removed without touching it in the current commit. The report gains an understated whole-project section (project_surfacingandproject_trendin--format json) kept separate from the changed-file trend so the two scopes never mix into one misleading number; it advances only on your local fullfallowruns, not in CI, and the report says so. A clone that is merely reshaped (one of several identical copies removed while the rest still duplicate) is not counted as resolved. The report's JSON shape stays at schema version 1 (the new fields are additive and optional).The Fallow Impact value report is now available over MCP. A new read-only
impactMCP tool wrapsfallow impact --format json, so AI agents can read the local report (current surfacing, trend since the last recorded run, pre-commit gate containment, and, on impact v1.5+, resolved/suppressed attribution) the same way they callcheck_healthoraudit. It runs no analysis, so it takes only aroot; the mutatingenable/disablelifecycle is intentionally not exposed, and on a never-enabled project it returns a populated{"enabled": false, ...}report (never{}) so an agent can tell "not set up" from "set up, no history yet" and recommendfallow impact enablerather than toggling it. Because impact is a local-developer signal, the tool surfaces an empty report in ephemeral CI runners and should not be used as a CI metric.Opt-in product telemetry for improving agent, CI, MCP, and editor workflows, off by default.
fallow telemetry status|enable|disable|inspectmanages it, andFALLOW_TELEMETRY=inspect fallow <command>prints the exact payload a real run would send without sending it. When enabled, Fallow sends one small, allowlisted, workflow-level event per run (which workflow ran, the integration surface, the invocation context, output format, OS and architecture, and coarse duration and exit-code buckets) and never repository names, file paths, package or dependency names, source code, config values, environment variable names or values, raw command lines, or errors.DO_NOT_TRACKandFALLOW_TELEMETRY_DISABLEDare honored as top-precedence kill switches, and CI stays off unless telemetry is explicitly enabled in that environment. Agents and wrappers can declare their integration with an allowlistedFALLOW_AGENT_SOURCE(codex,claude_code,cursor,copilot,opencode,aider,roo,windsurf,gemini,cline,continue,zed,goose); setting it never enables telemetry and uploads no codebase content. The upload is best-effort on a background thread and never blocks the command or changes its output or exit code. Seedocs/telemetry.md.fallow healthnow emits acoverage_intelligenceverdict when coverage, runtime, complexity, and change-scope evidence combine into an actionable recommendation. The additive JSON block carries its own schema version, headline verdict, summary counts, stablefallow:coverage-intel:<hash>finding IDs, ordered signals, compact evidence, related runtime IDs, and agent-ready actions. It currently surfaces risky changed hot paths, high-confidence delete candidates, owner-review-required cold code, and hot covered code that still needs careful refactoring. Human, markdown, compact, SARIF, and CodeClimate output render actionable findings; audit receives the block through its nested health payload without changing the default audit verdict or exit behavior. (Closes #507.)Clone groups now have a stable fingerprint, and
fallow dupes --tracecan deep-dive one by id. Every clone group infallow dupesnow carries a content-derived fingerprint, usuallydup:<8hex>and widened only on rare report collisions, shown beside each group in the human listing and emitted on everyclone_groups[]entry (plus nestedclone_families[].groups[]and the per-bucket--group-byoutput) in--format json.fallow dupes --tracenow accepts that fingerprint (fallow dupes --trace dup:7f3a2c1e) in addition to the existingFILE:LINEform, so you can deep-dive a specific group without hunting for one of its line numbers. The trace output now also shows, per group, an extract-function suggestion with estimated line savings, a best-effort proposed function name (derived from the dominant identifier; omitted when it would be generic), and a docs link. The fingerprint is derived from the group's source content, so it is stable across runs and editing one clone group never changes another's id; collision handling is report-scoped, so a short collision widens only the colliding groups and ambiguous short ids do not resolve to the wrong group. The MCPtrace_clonetool gained an optionalfingerprintparameter (file/lineare now optional, exactly one addressing form required), so an AI agent can read a fingerprint fromfind_dupesand deep-dive that group in a single follow-up call. (Closes #759.)fallow's static analysis is now guaranteed, at compile time, never to execute the analyzed project's code. The analysis crates (
fallow-core,fallow-extract,fallow-graph) ban raw process spawning with a clippy lint (std::process::Command::newis denied at each crate root); the only external program the analysis path can run isgit(for--changed-since, churn history, and repository-state queries), routed through a singlefallow_core::spawn::gitwrapper. Apackage.jsonlifecycle script such aspostinstallis read as data and never run, now backed by a regression test that asserts a sentinel-writing script never fires during analysis. On the build-time supply-chain surface (Cargobuild.rsand proc-macros, which run arbitrary code while compiling fallow),deny.tomlnow also rejects yanked crates (yanked = "deny"), andSECURITY.mddocuments the build-time trust boundary alongside the existing runtime one. No user-facing behavior change.Changed
vite-plugin-*,prettier-plugin-*) are now reported as unused devDependencies. Fallow carried a hardcoded list of known dev tooling that exempted a package from the unused-dependency report by exact name. Several entries on that list were framework plugins (vite-plugin-svgr,vite-plugin-eslint,prettier-plugin-tailwindcss,prettier-plugin-organize-imports,@ianvs/prettier-plugin-sort-imports), which meant a plugin you listed indevDependenciesbut never wired into yourvite.config.*or prettier config was silently treated as used. Those entries are gone: such a plugin is now credited only when it actually appears in the config (vite plugins through the import graph that already reads your config file, prettier plugins through the Prettier config parser, which now also reads thepluginsarray from.prettierrc.{yml,yaml,toml}), so a genuinely-unused one correctly surfaces. If a plugin you do use is flagged, fallow could not see it referenced in a config it parses; add it toignoreDependenciesand please open an issue with the config form. (Closes #462.)crates/core/data/tooling.toml. Adding a tool is a one-line entry with no code change and no regeneration step; see CONTRIBUTING.md. No behavior change for the tools that stayed on the list. (Refs #462.)fallow-v8-coveragecrate's ownership boundary withoxc_coverage_v8is now documented. The two crates solve inverse problems (fallow maps real Node V8 dumps in UTF-16-code-unit space;oxc_coverage_v8fills an AST-built IstanbulFileCoveragein byte space) and are intentionally not consolidated, recorded in ADR-010. The UTF-16 offset invariant is now pinned by a conformance test. No change to thefallowCLI's behavior, output, or the runtime-coverage wire format. (Closes #509.)Removed
fallow-v8-coveragedropped its never-consumed forward Istanbul emitter (normalize_scriptand itsIstanbulFileCoverage/IstanbulFunction/IstanbulRangeoutput types), leaving the V8 dump parser plus the UTF-16LineOffsetTablethefallowCLI actually uses. This is a breaking change to thefallow-v8-coveragecrate's public API; the crate is an internal building block of thefallowCLI (the only consumer) published under the lockstep workspace version, with no supported external consumers, so there is nofallowCLI behavior change.Fixed
Clone fingerprints (
dup:<id>) are now stable across Windows and Unix line endings. The fingerprint hashes a clone group's representative source fragment, which previously included the raw\rfrom CRLF checkouts, so the same code produced a differentdup:handle on a Windows dev machine than on a Linux CI runner. That brokefallow dupes --trace dup:<id>and any duplication baseline keyed on the fingerprint when the two ran on different platforms. The fragment is now CRLF-normalized before hashing, so a clone group gets the same fingerprint regardless of checkout line endings. Fingerprints on Unix-checkout sources are unchanged. (Test fixtures are also pinned to LF via.gitattributesso snapshot output is byte-identical across platforms.)fallow dupeshuman output now shows forward-slash paths on Windows. The clone-group, clone-family, and grouped-bucket listings rendered file paths via the raw OS separator, so on Windows they printed backslashes (src\copy1.ts) instead of the forward slashes used everywhere else in fallow's output, and the directory/filename split (which keys on/) misfired on those paths. The dupes renderer now routes every path through the sameformat_display_pathnormalization the rest of the report already uses, so Windows output matches Linux and macOS. No change on Unix, where paths were already forward-slash.ESLint plugins pulled in transitively by a meta-preset such as
@antfu/eslint-configare no longer reported as unused. A flat config that calls a preset factory (export default antfu({...})) names no individual plugins, so the plugins the preset enables (declared as its own optionalpeerDependencies) surfaced asunused-dev-dependencyand had to be silenced withignoreDependencies. When the config imports a package whose name matches a preset shape (eslint-config-*or@scope/eslint-config[-*]), fallow now reads that preset's ownpackage.jsonand credits the eslint-ecosystem entries (eslint-plugin-*, scoped plugins, shareable configs, parsers, import resolvers) it declares independencies/peerDependencies/optionalDependencies. This covers the optional framework-plugin peers that the generic peer-dependency closure intentionally skips. General-purpose runtime dependencies the preset also declares (such asglobals) are excluded, so a genuinely-unused general dependency you declared independently is still reported, and a plain plugin import does not pull in its own dependency fan. Plugins a preset does not declare (or that an older preset version pulled but the installed one no longer does) remain reported. Thanks @Noktomezo for the report. (Closes #754.)The churn-hotspot analysis window now travels with the count in
fallow health, including when there are zero hotspots. Before, the window (default6m, set via--since) appeared only in the● Hotspots (N files, since 6 months)section header, which is omitted entirely when a repo has no hotspots. So the orientation■ Metrics:line read0 churn hotspotswith no anchor, leaving you unable to tell "zero in the last 6 months" from "zero ever," and the window vanished completely on healthy repos. After, the metrics line reads0 churn hotspots (since 6 months)and the--format markdownVital Signs row reads| Hotspots (since 6 months) | 0 |, so the window is visible even when the Hotspots section is suppressed. When the churn pipeline did not run (non-git repo, shallow clone), the suffix is omitted rather than rendering an empty window. JSON, SARIF, compact, and CodeClimate output are unchanged (the window string was already serialized onhotspot_summary). (Closes #552.)SvelteKit layout-reset routes (
+page@.svelte,+layout@named.svelte) are no longer reported as unused files. SvelteKit's layout-reset convention appends an@suffix to a page or layout component to break it out of its parent layout chain (+page@.svelteresets to the root layout,+page@named.svelteresets to a named layout). The SvelteKit plugin only matched the non-@filenames as entry points, so any route using layout-reset surfaced asunused-file. The plugin now also markssrc/routes/**/+page@*.svelteandsrc/routes/**/+layout@*.svelteas entry points and credits theirdefaultexport, covering both the empty (@.svelte) and named (@named.svelte) forms. Only the.sveltecomponent files take the@suffix; SvelteKit itself rejects@in.ts/.jsroute files, so the co-located load files are unaffected. Thanks @codingthat for the report. (Closes #791.)@nuxt/content'scontent.config.tsis no longer reported as unused. @nuxt/content v3 defines collections in a rootcontent.config.ts(export default defineContentConfig({...})) that the module reads at build time; nothing in app source imports it, so fallow surfaced it asunused-fileplus an unuseddefaultexport and users had to add a manualentryor ignore. When@nuxt/contentis registered in the nuxt.configmodules:array, fallow now creditscontent.config.{ts,js,mts,mjs,cts,cjs}(resolved relative to the nuxt.config directory, so nested/monorepo configs credit the adjacent file) as a default-export entry point. The credit is gated on module registration rather than mere package.json presence, so an installed-but-unregistered@nuxt/contentstill correctly flags a genuinely-orphancontent.config. Scoped to the first-party@nuxt/contentonly; third-party Nuxt module config files are deliberately not hardcoded (per #138). (Closes #792.)oxlint-tsgolintis no longer reported as an unused dependency. oxlint loads its type-aware companion packageoxlint-tsgolintat runtime (via--type-awareoroptions.typeAware); it is never imported in source and never listed in an.oxlintrc.jsonjsPluginsarray, so the existingjsPluginscrediting did not cover it. fallow already silenced it indevDependenciesthrough a generaloxlinttooling prefix, but a project that declares it in proddependencies(for example via a pnpmcatalog:entry) still sawunused-dependencyand had to silence it withignoreDependencies. The oxlint plugin now creditsoxlint-tsgolintas a tooling dependency in both prod and dev categories whenever oxlint is active. The credit is by exact name, not anoxlint-*prefix, so an unrelatedoxlint--prefixed prod dependency that is genuinely unused still reports. Thanks @kevinmichaelchen whose effect-coffee-shop repo surfaced this. (Closes #753.)rspress
@themevirtual-module imports are no longer reported as unlisted dependencies. rspress (the Rsbuild/Rspack documentation framework) exposes its theme layer through the build-time@themevirtual module, the same way Docusaurus does, but fallow had no rspress plugin, so importing@theme(or a@theme/<component>subpath) from docs or source surfaced as anunlisted-dependencyand had to be silenced withignoreDependencies. A newrspressplugin activates onrspressor any@rspress/-scoped dependency (such as@rspress/core) and contributes@theme/and@theme-original/as framework virtual-module prefixes, so both the bare@themeimport and its subpaths are recognized as build-time virtual modules acrossunlisted-dependencyandunresolved-importreporting. Real scoped packages such as@theme-ui/coreare not affected. Docusaurus projects already handled the bare@themeimport; this closes the equivalent gap for rspress. Thanks @callstackincubator whoseagent-devicedocs site surfaced this. (Closes #756.)fallow healthcan now be a real CI gate:--min-scoreis authoritative and--min-score 0exits 0. Before, the exit code failed (1) whenever any above-threshold function existed, regardless of the health score, so--min-scoreonly ever added a second way to fail andfallow health --min-score 0still exited 1, the clearest tell that the score never drove the exit code. Health could only ever be advisory. After, when--min-score Nis set it is the authoritative complexity gate: the run exits 0 when the score is at or aboveN(so--min-score 0always passes) and complexity findings are demoted to informational while still printed.--min-severityis unchanged and now composes with--min-score(the run fails if either gate trips). Plainfallow healthwith no gate flag keeps the back-compatible behavior of exiting 1 on any finding. A new--report-onlyflag prints the score and findings but never fails CI (always exit 0), for surfacing health in logs without blocking; it is mutually exclusive with--min-score/--min-severity. The runtime-coverage and coverage-gap gates remain independent explicit opt-ins. For gating on newly-introduced complexity only,fallow audit --gate new-onlystays the right tool, andfallow health --helpnow signposts it. (Closes #786.)Coexisting config files no longer pick a winner silently. Fallow loads the first of
.fallowrc.json>.fallowrc.jsonc>fallow.toml>.fallow.tomlfound per directory. Before, if two of these coexisted (for example afallow.tomlyou maintain plus a stale.fallowrc.jsonleft over from a migration or a partialfallow init), fallow loaded the higher-precedence one with no signal, so you could see correct-looking output produced from the wrong source. After, config discovery emits atracing::warn!(visible on stderr at the default level) naming the file it loaded and the lower-precedence file(s) it ignored, and pointing at the precedence order; it fires once per directory per run. Passing an explicit--config <path>performs no discovery and never warns. The docs and thefallow confighelp text now also state that.fallowrc.jsonaccepts JSONC (comments and trailing commas) and that.fallowrc.jsoncis identical in behavior, with the extension serving only as an editor hint. (Closes #458.)In a monorepo, a workspace package's framework class-member allowlist and SCSS include paths are no longer dropped during plugin-result merging. When a framework is active only in a workspace package (Lit, Lexical, Ember, or Angular in
packages/<name>, not at the repo root), the package's plugin contributions to two fields were silently discarded while the root project's results were merged. A package's heritage-scoped class-member allowlist (for example Lit'sfirstUpdated/willUpdateon aLitElementsubclass) was dropped, so those framework-invoked methods surfaced as falseunused-class-memberfindings, and a package's AngularstylePreprocessorOptions.includePathswas dropped, so SCSS@use/@importresolving against those directories surfaced asunresolved-import. Both fields now flow through the merge. Single-package (non-monorepo) projects were never affected. (Closes #772.)Velite config, content, and generated
.veliteoutput are no longer reported as unused. Projects using Velite had to manually markvelite.config.tsas anentryand ignorecontent/**plus**/.velite/**, because fallow did not model Velite's build-time content pipeline. A new Velite plugin activates on thevelitedependency or avelite.config.{ts,mts,cts,js,mjs,cjs}file. It keeps the config and generated.velite/**output reachable (traversing the hidden.velitedirectory so app imports of generated collections resolve), credits packages imported by the config andveliteitself as a tooling dependency, and parsesdefineConfig/defineCollectionto mark each collectionpattern(joined to the top-levelroot, defaultcontent) as a content entry point so Velite-managed Markdown / MDX is not flagged. Patterns are scoped to the config file's package, so a monorepo app's content does not leak project-wide. (Closes #609.)Container-format diagnostics now point back to the original source lines. MDX import/export extraction now keeps a byte mapping from extracted statements back to the
.mdxfile, so imports after prose report their real line instead of the synthetic extracted-buffer line. Astro frontmatter and processed template scripts, plus Vue/Svelte<script>blocks, now remap parsed import/export spans back to their container files. CSS/SCSS directive imports now carry source spans when the directive has a real specifier, while intentionally synthetic Tailwind reachability edges stay unpositioned. Svelte 5$derived(new Class())bindings now also credit template member usage on the derived instance. (Closes #445.)A root
dangerfile.jsrun from CI is no longer reported as an unused file. Danger is commonly invoked straight from CI (npx danger ci, an Earthfile, a GitHub Action) withoutdangerever being listed in package.json, so the Danger plugin's dependency enabler never fired and the dangerfile surfaced asunused-file, forcing a manualentryworkaround. The plugin now also activates when adangerfile.{js,ts,mjs,cjs}is discovered at the repo root or in a workspace, mirroring how the k6 plugin activates on its convention files. The.jsextension was always covered by the existing allowlist; the gap was activation, not the extension. Exact-filename matching keeps lookalikes such aspredangerfile.jsanddangerfile.jsoninert. (Closes #758.)A package whose binary runs via
bun --bun <bin>in a script is no longer reported as unused. Before, apackage.jsonscript like"prepare": "is-ci || bun --bun prek install"left the providing package flagged as an unused dependency: the script parser treatedbun --bun ...as a barebun <script>invocation (likeyarn build) and dropped the whole command before theprekbinary could be resolved to its package. After,bun's runtime flags (--bun,--watch,--hot,--smol,--no-clear-screen) are skipped so the executed binary is extracted and credited through the existing bin-to-package map (prekto@j178/prek), whilebun --watch run devand barebun <script>still correctly resolve to script delegations.bun x <pkg>(the bun-native alias ofbunx) is now recognized too. An unrecognized leading flag is conservatively treated as a script delegation rather than guessed at. Thanks @Noktomezo for the report. (Closes #755.)Workspace packages whose tsconfig
pathspoint at unbuiltdistno longer reportunresolved-importplusunused-dependencypre-build. A common monorepo convention maps a sibling-package specifier to compiled output in tsconfig ("@​scope/*": ["../*/dist/index.d.ts"]). When the project is analyzed before a build, thatdisttarget does not exist, and fallow stopped at the path-alias step: every consumer of@scope/pkgreportedunresolved-import, and the package itself reportedunused-dependency. After, when a path-alias-shaped specifier is also a valid workspace package name and the alias target cannot be resolved, fallow falls through to the workspace-package fallback and resolves the import against the package's own source tree (reusing the existingdist-to-srcmapping). On a pre-build clone ofgraphql-markdown/graphql-markdownthis clears 264 falseunresolved-importfindings and the matchingunused-dependencyreports. (Closes #757.)Class members called only through a typed
$props()/ destructured binding are no longer reported as unused. A Svelte component that receives a class instance as a typed prop (let { resultState }: Props = $props()wherePropsdeclaresresultState: ResultState) and callsresultState.pin(...)from markup or script previously surfaced those methods asunused-class-member, because fallow only tracked instance bindings created withnew. Typed destructured bindings (fromlet/constand from destructured function parameters) now resolve their members onto the referenced class, so the calls are credited. The resolution is type-driven, so it also covers plain TypeScript and Vue (function render({ resultState }: Props) { resultState.pin() }). Genuinely unused members are still reported. Thanks @asciimoo for the report. (Closes #752.)GitHub Action baseline checks now catch config-only baseline drift. Before, pull request runs using the default
auto-changed-since: trueplus a generic dead-code baseline could hide baseline membership changes when the PR only changed fallow config, then fail later on the unscoped default-branch run. After, baseline-active dead-code/check action runs disable auto-derived PR scoping when a fallow config file changes, while preserving explicitchanged-sinceanddiff-fileoverrides. Saved generic baselines also keep pretty JSON and now end with a trailing newline. (Closes #746.)babel-plugin-react-compileris no longer reported as unused when React Compiler is enabled viareactCompilerPreset(). The #623 detection only recognised React Compiler wired through a Babelpluginsarray. The current documented@vitejs/plugin-react6.x setup feeds the compiler through thereactCompilerPreset()preset helper instead (babel({ presets: [reactCompilerPreset()] })via@rolldown/plugin-babel), so the dependency was being flagged and projects worked around it withignoreDependencies. Fallow now creditsbabel-plugin-react-compilerfor the preset form, in both Vitevite.config.*and electron-viteelectron.vite.config.*(where the preset commonly lives inrenderer.plugins). The credit is provenance-checked:reactCompilerPresetmust be a named import from@vitejs/plugin-react. The namespace-import form (import * as vr) and the variable-indirection form (const p = reactCompilerPreset()) remain reportable. Thanks to the maintainers of nicotsx/zerobyte and OpenWaggle/OpenWaggle whose configs surfaced this. (Closes #751.)Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.