Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: fallow-rs/fallow
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v2.63.0
Choose a base ref
...
head repository: fallow-rs/fallow
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v2.64.0
Choose a head ref
  • 12 commits
  • 108 files changed
  • 2 contributors

Commits on May 4, 2026

  1. Configuration menu
    Copy the full SHA
    8f5018f View commit details
    Browse the repository at this point in the history
  2. feat(plugins): add tap and tsd test runner support

    Adds two new built-in plugins that mark test files as entry points so
    test-only code is not falsely flagged as unused.
    
    - tap: activates from the `tap` dep; treats node-tap default test
      discovery (`test/`, `tests/`, `__tests__/`, `*.test.*` / `*.spec.*`,
      top-level `test.*` / `tests.*`) and `.taprc` configs as reachable.
    - tsd: activates from the `tsd` dep; treats `.test-d.ts(x)` declaration
      tests as reachable and reads `package.json#tsd.directory` so custom
      directories like `test/types` stay discoverable.
    
    Both plugins ship as test entry points (`EntryPointRole::Test`).
    
    Validated against real consumers:
    - minipass (tap): unused_files 50 -> 16, removes 34 false-positive test
      file reports
    - fastify (tsd): unused_files 242 -> 225, removes 16 false-positive
      `.test-d.ts` reports
    
    Bumps the headline plugin count from 91 to 93 across README, npm
    description, internal positioning copy, npm wrapper README, and the
    .claude/rules/ surfaces.
    BartWaardenburg committed May 4, 2026
    Configuration menu
    Copy the full SHA
    0478c57 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    4839d80 View commit details
    Browse the repository at this point in the history
  4. Merge pull request #272 from fallow-rs/fix/public-package-members

    fix(core): respect public package members
    BartWaardenburg authored May 4, 2026
    Configuration menu
    Copy the full SHA
    82d71ca View commit details
    Browse the repository at this point in the history
  5. fix(plugins): treat vitest config + storybook conventions as framewor…

    …k-used
    
    Fixes #271. With --include-entry-exports, fallow flagged vitest.config.*
    default exports and storybook story / .storybook convention exports as
    unused. The vitest plugin now contributes used_exports for vitest.config.*
    and vitest.workspace.* (default), and the storybook plugin contributes a
    "*" wildcard for **/*.stories.* and .storybook/**. The wildcard required
    restoring symmetry in is_export_ignored: plugin-supplied used_exports now
    honor "*" the same way user-config ignoreExports already did.
    
    Adds regression fixtures for nested-workspace vitest and storybook with
    includeEntryExports, and documents usedExports: ["*"] for plugin authors.
    BartWaardenburg committed May 4, 2026
    Configuration menu
    Copy the full SHA
    ce5580c View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    f184f5d View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    9152ddb View commit details
    Browse the repository at this point in the history
  8. feat(plugins): parse webpack resolve.alias and entry context

    Webpack plugin now extracts resolve.alias mappings (parity with Vite/Nuxt/SvelteKit) so aliased imports from webpack.config.js no longer surface as unresolved-import or unused-export. Also normalizes entry paths against the optional context root.
    
    Closes #273.
    BartWaardenburg committed May 4, 2026
    Configuration menu
    Copy the full SHA
    a5481bf View commit details
    Browse the repository at this point in the history
  9. fix(plugins): strip leading './' from entry patterns

    Webpack/Rollup/Rspack/Rsbuild/Rolldown configs commonly write
    entry/input as './src/foo.ts'. globset compiles entry patterns
    with literal_separator(true), so a './'-prefixed pattern would
    never match the project-relative path 'src/foo.ts' that appears
    in the file index. Strip the prefix in extend_entry_patterns and
    push_entry_pattern so descriptor entries without an accompanying
    'context:' (and plain string entries like 'entry: "./src/app.js"')
    resolve end-to-end.
    
    Adds a webpack-no-context-project regression fixture and
    integration test that fail without this change.
    BartWaardenburg committed May 4, 2026
    Configuration menu
    Copy the full SHA
    39758b3 View commit details
    Browse the repository at this point in the history
  10. fix(extract): credit nested Playwright fixture members

    Playwright fixtures with nested object types like
    `{ pages: { adminPage: AdminPage } }` did not credit POM methods,
    because the type-binding extractor only walked the top level of the
    TSTypeLiteral and the use-side pattern extractor only handled a
    single destructure level. The visitor now passes a dotted path through
    both sides:
    
    - Type traversal recurses through nested TSTypeLiteral / aliased
      TSTypeReference props, emitting def sentinels keyed by
      `pages.adminPage` etc.
    - Object pattern destructuring recurses into nested ObjectPattern
      values, mapping each leaf local to its full dotted path.
    - Member access resolves dotted object names against the local map
      with prefix-matching, so both `pages.adminPage.method()` (chained
      access on a top-level destructure) and `adminPage.method()` (nested
      destructure) emit the same use sentinel keyed by
      `pages.adminPage`. The matched chain is not re-walked, preventing
      spurious intermediate `(pages, adminPage)` accesses.
    
    Bumps CACHE_VERSION since the member_accesses string shape changes
    for nested-fixture files.
    
    Closes #268.
    BartWaardenburg committed May 4, 2026
    Configuration menu
    Copy the full SHA
    d7e425c View commit details
    Browse the repository at this point in the history
  11. fix(extract): credit nested Playwright fixtures via named alias

    When the inner nested type is referenced by an alias name (the
    idiomatic shape: `type PageFixtures = { adminPage: AdminPage }; type
    MyFixtures = { pages: PageFixtures }`), `extract_type_annotation_name`
    returned the alias's leaf identifier (`PageFixtures`) and the binding
    was emitted as `(pages, PageFixtures)` instead of expanding the alias
    under the prefix.
    
    Add a guard that recurses through a known alias reference under the
    current path prefix before falling back to the simple-leaf branch, so
    `pages.adminPage` and `pages.userPage` are emitted just like the inline
    literal case. The integration fixture is reshaped to use the alias
    form, matching what users actually write.
    
    Bumps CACHE_VERSION.
    BartWaardenburg committed May 4, 2026
    Configuration menu
    Copy the full SHA
    7a10555 View commit details
    Browse the repository at this point in the history
  12. Configuration menu
    Copy the full SHA
    6a1cc5c View commit details
    Browse the repository at this point in the history
Loading