From a2810bc485d9f1123a86b60702fcaa51e19d71a3 Mon Sep 17 00:00:00 2001 From: "Nicholas C. Zakas" Date: Tue, 18 Oct 2022 04:56:25 -0700 Subject: [PATCH] fix: Ensure that directories can be unignored. (#16436) This fix makes sure that ignored directories can be unignored using negated patterns inside of an 'ignores' entry. Fixes #16414 --- package.json | 2 +- .../ignores-subdirectory/eslint.config.js | 3 ++ .../subdir/subsubdir/a.js | 0 tests/lib/eslint/flat-eslint.js | 30 ++++++++++++++++++- 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 tests/fixtures/ignores-subdirectory/eslint.config.js create mode 100644 tests/fixtures/ignores-subdirectory/subdir/subsubdir/a.js diff --git a/package.json b/package.json index 264df28356d..b8d324bc683 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "bugs": "https://github.com/eslint/eslint/issues/", "dependencies": { "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.3", + "@humanwhocodes/config-array": "^0.11.5", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", diff --git a/tests/fixtures/ignores-subdirectory/eslint.config.js b/tests/fixtures/ignores-subdirectory/eslint.config.js new file mode 100644 index 00000000000..2e1db61e7fe --- /dev/null +++ b/tests/fixtures/ignores-subdirectory/eslint.config.js @@ -0,0 +1,3 @@ +module.exports = { + ignores: ["subdir"] +}; diff --git a/tests/fixtures/ignores-subdirectory/subdir/subsubdir/a.js b/tests/fixtures/ignores-subdirectory/subdir/subsubdir/a.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/lib/eslint/flat-eslint.js b/tests/lib/eslint/flat-eslint.js index 150bdd584ad..ed08b36ff13 100644 --- a/tests/lib/eslint/flat-eslint.js +++ b/tests/lib/eslint/flat-eslint.js @@ -1102,7 +1102,7 @@ describe("FlatESLint", () => { }); // https://github.com/eslint/eslint/issues/16354 - it("should skip subdirectory files when ignore pattern matches subdirectory", async () => { + it("should skip subdirectory files when ignore pattern matches deep subdirectory", async () => { eslint = new FlatESLint({ cwd: getFixturePath("ignores-directory") }); @@ -1124,6 +1124,34 @@ describe("FlatESLint", () => { }); + // https://github.com/eslint/eslint/issues/16414 + it("should skip subdirectory files when ignore pattern matches subdirectory", async () => { + eslint = new FlatESLint({ + cwd: getFixturePath("ignores-subdirectory") + }); + + await assert.rejects(async () => { + await eslint.lintFiles(["subdir/**/*.js"]); + }, /All files matched by 'subdir\/\*\*\/\*\.js' are ignored\./u); + + const results = await eslint.lintFiles(["subdir/subsubdir/a.js"]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].filePath, getFixturePath("ignores-subdirectory/subdir/subsubdir/a.js")); + assert.strictEqual(results[0].warningCount, 1); + assert(results[0].messages[0].message.startsWith("File ignored"), "Should contain file ignored warning"); + + eslint = new FlatESLint({ + cwd: getFixturePath("ignores-subdirectory/subdir") + }); + + await assert.rejects(async () => { + await eslint.lintFiles(["subsubdir/**/*.js"]); + }, /All files matched by 'subsubdir\/\*\*\/\*\.js' are ignored\./u); + + + }); + // https://github.com/eslint/eslint/issues/16340 it("should lint files even when cwd directory name matches ignores pattern", async () => { eslint = new FlatESLint({