From 11835f702cca044deb35c67319f36df3d1cd66bb Mon Sep 17 00:00:00 2001 From: p1 Date: Fri, 24 Jul 2026 11:04:43 +0530 Subject: [PATCH] Expose disabled linter rules --- src/cmd/lint.js | 2 ++ src/program.js | 5 ++++ tests/unit/test-cmd/test.lint.js | 23 ++++++++++++++++++ tests/unit/test.program.js | 40 ++++++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+) diff --git a/src/cmd/lint.js b/src/cmd/lint.js index be05a47b0c..81b0ff311d 100644 --- a/src/cmd/lint.js +++ b/src/cmd/lint.js @@ -11,6 +11,7 @@ export default function lint( { artifactsDir, boring, + disableLinterRules, enterprise, ignoreFiles, metadata, @@ -39,6 +40,7 @@ export default function lint( metadata, output, boring, + disableLinterRules, selfHosted, enterprise, shouldScanFile: (fileName) => fileFilter.wantFile(fileName), diff --git a/src/program.js b/src/program.js index d76263a3c4..344813051a 100644 --- a/src/program.js +++ b/src/program.js @@ -792,6 +792,11 @@ Example: $0 --help run. type: 'boolean', default: false, }, + 'disable-linter-rules': { + describe: 'Disable a comma-separated list of linter rules', + type: 'string', + requiresArg: true, + }, pretty: { describe: 'Prettify JSON output', type: 'boolean', diff --git a/tests/unit/test-cmd/test.lint.js b/tests/unit/test-cmd/test.lint.js index a739f3bd33..f985ad1f8d 100644 --- a/tests/unit/test-cmd/test.lint.js +++ b/tests/unit/test-cmd/test.lint.js @@ -93,6 +93,29 @@ describe('lint', () => { }); }); + it('passes disableLinterRules to the linter', () => { + const { lint, createLinter } = setUp(); + const disableLinterRules = 'no-implied-eval, no-unsanitized/property'; + return lint({ disableLinterRules }).then(() => { + sinon.assert.calledWithMatch(createLinter, { + config: { + disableLinterRules, + }, + }); + }); + }); + + it('passes disableLinterRules undefined to the linter', () => { + const { lint, createLinter } = setUp(); + return lint().then(() => { + sinon.assert.calledWithMatch(createLinter, { + config: { + disableLinterRules: undefined, + }, + }); + }); + }); + it('configures the linter when verbose', () => { const { lint, createLinter } = setUp(); return lint({ verbose: true }).then(() => { diff --git a/tests/unit/test.program.js b/tests/unit/test.program.js index e159aec3e8..b73a038dae 100644 --- a/tests/unit/test.program.js +++ b/tests/unit/test.program.js @@ -672,6 +672,46 @@ describe('program.main', () => { assert.equal(options.selfHosted, configObject.lint.selfHosted); }); + it('applies disabled linter rules from the specified config file', async () => { + const fakeCommands = fake(commands, { + lint: () => Promise.resolve(), + }); + const configFile = path.resolve('custom/web-ext-config.mjs'); + const disableLinterRules = 'no-implied-eval, no-unsanitized/property'; + + await execProgram(['lint', '--config', configFile], { + commands: fakeCommands, + runOptions: { + loadJSConfigFile: makeConfigLoader({ + configObjects: { + [configFile]: { lint: { disableLinterRules } }, + }, + }), + }, + }); + + assert.equal( + fakeCommands.lint.firstCall.args[0].disableLinterRules, + disableLinterRules, + ); + }); + + it('passes disabled linter rules from the CLI', async () => { + const fakeCommands = fake(commands, { + lint: () => Promise.resolve(), + }); + const disableLinterRules = 'no-implied-eval,no-unsanitized/property'; + + await execProgram(['lint', '--disable-linter-rules', disableLinterRules], { + commands: fakeCommands, + }); + + assert.equal( + fakeCommands.lint.firstCall.args[0].disableLinterRules, + disableLinterRules, + ); + }); + it('discovers config files', async () => { const fakeCommands = fake(commands, { lint: () => Promise.resolve(),