From c4fad173c7149dbcd25695c19c68663102b9ec6b Mon Sep 17 00:00:00 2001 From: Francesco Trotta Date: Wed, 24 May 2023 19:12:56 +0200 Subject: [PATCH] fix: Correct ignore message for "node_modules" subfolders (#17217) * fix: Correct ignore message for "node_modules" subfolders * Use `path.sep` as a separator Co-authored-by: Milos Djermanovic --------- Co-authored-by: Milos Djermanovic --- lib/eslint/eslint-helpers.js | 2 +- .../cli-engine/node_modules_cleaner.js | 1 + tests/lib/eslint/flat-eslint.js | 40 ++++++++++++++++++- 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 tests/fixtures/cli-engine/node_modules_cleaner.js diff --git a/lib/eslint/eslint-helpers.js b/lib/eslint/eslint-helpers.js index ff3695dc644..9bfd751cb2b 100644 --- a/lib/eslint/eslint-helpers.js +++ b/lib/eslint/eslint-helpers.js @@ -591,7 +591,7 @@ function isErrorMessage(message) { */ function createIgnoreResult(filePath, baseDir) { let message; - const isInNodeModules = baseDir && path.relative(baseDir, filePath).startsWith("node_modules"); + const isInNodeModules = baseDir && path.dirname(path.relative(baseDir, filePath)).split(path.sep).includes("node_modules"); if (isInNodeModules) { message = "File ignored by default because it is located under the node_modules directory. Use ignore pattern \"!**/node_modules/\" to override."; diff --git a/tests/fixtures/cli-engine/node_modules_cleaner.js b/tests/fixtures/cli-engine/node_modules_cleaner.js new file mode 100644 index 00000000000..ca451e212a7 --- /dev/null +++ b/tests/fixtures/cli-engine/node_modules_cleaner.js @@ -0,0 +1 @@ +// not implemented diff --git a/tests/lib/eslint/flat-eslint.js b/tests/lib/eslint/flat-eslint.js index 00a906b0fb7..2e23e4db2cd 100644 --- a/tests/lib/eslint/flat-eslint.js +++ b/tests/lib/eslint/flat-eslint.js @@ -1191,7 +1191,7 @@ describe("FlatESLint", () => { describe("Ignoring Files", () => { - it("should report on all files passed explicitly, even if ignored by default", async () => { + it("should report on a file in the node_modules folder passed explicitly, even if ignored by default", async () => { eslint = new FlatESLint({ cwd: getFixturePath("cli-engine") }); @@ -1204,6 +1204,44 @@ describe("FlatESLint", () => { assert.strictEqual(results[0].fatalErrorCount, 0); assert.strictEqual(results[0].fixableErrorCount, 0); assert.strictEqual(results[0].fixableWarningCount, 0); + assert.strictEqual(results[0].messages[0].severity, 1); + assert.strictEqual(results[0].messages[0].message, expectedMsg); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should report on a file in a node_modules subfolder passed explicitly, even if ignored by default", async () => { + eslint = new FlatESLint({ + cwd: getFixturePath("cli-engine") + }); + const results = await eslint.lintFiles(["nested_node_modules/subdir/node_modules/text.js"]); + const expectedMsg = "File ignored by default because it is located under the node_modules directory. Use ignore pattern \"!**/node_modules/\" to override."; + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].errorCount, 0); + assert.strictEqual(results[0].warningCount, 1); + assert.strictEqual(results[0].fatalErrorCount, 0); + assert.strictEqual(results[0].fixableErrorCount, 0); + assert.strictEqual(results[0].fixableWarningCount, 0); + assert.strictEqual(results[0].messages[0].severity, 1); + assert.strictEqual(results[0].messages[0].message, expectedMsg); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should report on an ignored file with \"node_modules\" in its name", async () => { + eslint = new FlatESLint({ + cwd: getFixturePath("cli-engine"), + ignorePatterns: ["*.js"] + }); + const results = await eslint.lintFiles(["node_modules_cleaner.js"]); + const expectedMsg = "File ignored because of a matching ignore pattern. Use \"--no-ignore\" to override."; + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].errorCount, 0); + assert.strictEqual(results[0].warningCount, 1); + assert.strictEqual(results[0].fatalErrorCount, 0); + assert.strictEqual(results[0].fixableErrorCount, 0); + assert.strictEqual(results[0].fixableWarningCount, 0); + assert.strictEqual(results[0].messages[0].severity, 1); assert.strictEqual(results[0].messages[0].message, expectedMsg); assert.strictEqual(results[0].suppressedMessages.length, 0); });