Skip to content

fix(cli): match lint test-file exclusion relative to scan root#490

Merged
MarioCadenas merged 2 commits into
mainfrom
fix/lint-tests-path-match
Jul 23, 2026
Merged

fix(cli): match lint test-file exclusion relative to scan root#490
MarioCadenas merged 2 commits into
mainfrom
fix/lint-tests-path-match

Conversation

@MarioCadenas

Copy link
Copy Markdown
Collaborator

Problem

appkit lint's isTestFile substring-matched "/tests/" against the absolute file path:

filePath.includes("/tests/")

Any ancestor directory named tests — e.g. an app scaffolded under ~/Developer/personal/tests/my-app — makes every file in the project match, so it's treated as a test file. Rules marked includeTests: false (no-variants-in-prod, no-as-any) are then silently skipped for the entire project, and appkit lint reports no violations even when they exist.

This defeats the no-variants-in-prod guardrail exactly where it matters: a leftover dev-only <Variants> block can ship to production while the lint stays green, purely because of an unlucky (and common) parent directory name.

Fix

Match against the path relative to the scan root, with path-segment boundaries, instead of a substring of the absolute path. rootDir is threaded from runLintlintFileisTestFile.

Verification

  • tsc --noEmit on the changed file: clean.

  • Behavioral before/after:

    scenario old new
    app under a tests/ ancestor (…/personal/tests/app/src/Foo.tsx) true (bug) false
    real test file (src/foo.spec.tsx) true true
    project-local tests/ dir (tests/smoke.ts) true true
    normal source (src/App.tsx) false false

Reproduced originally by scaffolding an app under a tests/ parent directory and observing no-variants-in-prod never fire on a real <Variants> block in the app source.

isTestFile substring-matched "/tests/" against the absolute path, so any
ancestor directory named tests (e.g. ~/Developer/tests/my-app) classified
every file in the project as a test file and silently disabled all
includeTests:false rules (no-variants-in-prod, no-as-any).

Match against the path relative to the scan root with path-segment
boundaries instead, so only the project's own test files and tests/ dirs
are excluded.

Signed-off-by: MarioCadenas <MarioCadenas@users.noreply.github.com>
@MarioCadenas
MarioCadenas requested a review from a team as a code owner July 23, 2026 15:02
@MarioCadenas
MarioCadenas requested a review from ditadi July 23, 2026 15:02
@github-actions

Copy link
Copy Markdown
Contributor

🔬  Run evals on this PR  ·  Go to Evals Monitor →

@github-actions

Copy link
Copy Markdown
Contributor

📦 Bundle size report

Compared against bundle-size-baseline.json (main).

✅ No size changes vs the baseline.

@databricks/appkit

npm tarball (packed): 753 KB — gzipped download (dist + bin; excludes release-only docs/NOTICE).

dist raw gzip
JS (runtime) 783 KB 273 KB
Type declarations 284 KB 97 KB
Source maps 1.5 MB 510 KB
Other 11 KB 3.7 KB
Total 2.6 MB 883 KB
Per-entry composition (own code — deps external (as shipped))
Entry Initial (gz) Lazy (gz) Total (gz) node_modules (min) Own code (min)
. 85 KB 2.5 KB 88 KB external 279 KB
./beta 40 KB 231 B 40 KB external 119 KB
./type-generator 19 KB 0 B 19 KB external 54 KB

Chunks:

Entry Chunk Load Size (gz)
. index.js initial 81 KB
. utils.js initial 4.0 KB
. remote-tunnel-manager.js lazy 2.5 KB
./beta beta.js initial 30 KB
./beta databricks.js initial 5.8 KB
./beta service-context.js initial 3.2 KB
./beta client-options.js initial 220 B
./beta databricks.js lazy 128 B
./beta index.js lazy 103 B
./type-generator index.js initial 19 KB

@databricks/appkit-ui

npm tarball (packed): 295 KB — gzipped download (dist + bin; excludes release-only docs/NOTICE).

dist raw gzip
JS (runtime) 350 KB 116 KB
Type declarations 201 KB 72 KB
Source maps 669 KB 218 KB
CSS 16 KB 3.3 KB
Total 1.2 MB 410 KB
Per-entry composition (consumer bundle — deps bundled, peerDeps external)
Entry Initial (gz) Lazy (gz) Total (gz) node_modules (min) Own code (min)
./js 4.3 KB 49 KB 54 KB 208 KB 12 KB
./js/beta 20 B 0 B 20 B 0 B 0 B
./react 428 KB 49 KB 476 KB 1.3 MB 163 KB
./react/beta 20 B 0 B 20 B 0 B 0 B

Chunks:

Entry Chunk Load Size (gz)
./js index.js initial 4.2 KB
./js chunk initial 120 B
./js apache-arrow lazy 49 KB
./js/beta beta.js initial 20 B
./react index.js initial 426 KB
./react tslib initial 2.1 KB
./react apache-arrow lazy 49 KB
./react/beta beta.js initial 20 B

Trim the isTestFile WHY comment to one line and let biome reflow the
lintFile signature to multi-line.

Signed-off-by: MarioCadenas <MarioCadenas@users.noreply.github.com>
@MarioCadenas
MarioCadenas merged commit 716a219 into main Jul 23, 2026
10 checks passed
@MarioCadenas
MarioCadenas deleted the fix/lint-tests-path-match branch July 23, 2026 15:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants