npx eslint . reported 0 errors, 53 warnings. The floor eroded the signal: a
genuinely new warning had to be spotted against noise, so 'lint is clean' was not
usable as a check. This takes it to zero.
Fifty of the 53 were one category in gsd-core/bin/gsd-tools.cjs — all unused
ARGUMENTS (error x30, cwd x10, raw x7, args x3), never unused variables. They are
the Command Routing Hub's uniform handler signature, function routeX({ args, cwd,
raw, error }), declared identically whether or not a handler uses all four
members. argsIgnorePattern: '^_' is structurally in conflict with that convention:
satisfying it would mean _-prefixing ~50 parameters and making the signature
non-uniform across the table. Option 1 of #2453: disable args checking for that
file only, keeping varsIgnorePattern intact so genuinely dead variables (the #2379
class) still surface — verified by injecting an unused variable, which still warns.
This is the config decision #732 explicitly deferred ('Severities stay warn (no
config change in this pass)').
The remaining three predate the issue's count of 51 and are real defects, not
suppressions:
- tests/workflow-compat.test.cjs — the step-9 lookahead used (?=\*\*10\.|\z).
\z is a Perl/Ruby end-of-input anchor with NO meaning in JavaScript; it matched
a literal 'z', so the lazy span silently stopped at the first z whenever **10.
was absent, truncating the captured step and letting the assertion pass against
a partial block. Corrected to $.
- tests/debugger-prevention.test.cjs — an unused RegExp built one line above the
one actually used. Removed.
- tests/installer-migrations.test.cjs — try/finally inside a test body, which
CONTRIBUTING prohibits ('verbose, masks test failures, not an approved
pattern'); the unused t was the symptom. Converted to t.after().
Closes #2453
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -419,4 +419,33 @@ export default tseslint.config(
|
||||
languageOptions: { sourceType: 'commonjs', globals: { ...globals.node } },
|
||||
rules: { 'local/no-source-grep': 'error' },
|
||||
},
|
||||
|
||||
// ── #2453 Command Routing Hub: uniform handler signature ────────────────────
|
||||
// Every route handler in gsd-tools.cjs is declared with the SAME destructured
|
||||
// signature — `function routeX({ args, cwd, raw, error })` — whether or not it
|
||||
// uses all four members. That uniformity is the point: it is the dispatch
|
||||
// contract, so a handler can be moved or added without re-deriving which
|
||||
// members exist.
|
||||
//
|
||||
// `argsIgnorePattern: '^_'` is structurally in conflict with that convention:
|
||||
// satisfying it would mean `_`-prefixing ~50 parameters, which makes the
|
||||
// signature non-uniform across the table and defeats the contract. So args
|
||||
// checking is disabled HERE ONLY.
|
||||
//
|
||||
// `varsIgnorePattern` is deliberately left intact: genuinely dead *variables*
|
||||
// (the #2379 case — unused `require()` results) must still surface. This
|
||||
// narrows the exemption to the one category the convention actually forces.
|
||||
//
|
||||
// Decision deferred by #732 ("Severities stay `warn` (no config change in this
|
||||
// pass)"), resolved by #2453 option 1.
|
||||
{
|
||||
files: ['gsd-core/bin/gsd-tools.cjs'],
|
||||
rules: {
|
||||
'no-unused-vars': ['warn', {
|
||||
args: 'none',
|
||||
varsIgnorePattern: '^_',
|
||||
caughtErrors: 'none',
|
||||
}],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user