diff --git a/docs/src/use/configure/configuration-files-new.md b/docs/src/use/configure/configuration-files-new.md index ac9a54c374a..bf854f08eca 100644 --- a/docs/src/use/configure/configuration-files-new.md +++ b/docs/src/use/configure/configuration-files-new.md @@ -143,7 +143,21 @@ export default [ ]; ``` -This configuration specifies that all of the files in the `.config` directory should be ignored. This pattern is added after the default patterns, which are `["**/node_modules/**", ".git/**"]`. +This configuration specifies that all of the files in the `.config` directory should be ignored. This pattern is added after the default patterns, which are `["**/node_modules/", ".git/"]`. + +You can also unignore files and directories that are ignored by the default patterns. For example, this config unignores `node_modules/mylibrary`: + +```js +export default [ + { + ignores: [ + "!node_modules/", // unignore `node_modules/` directory + "node_modules/*", // ignore its content + "!node_modules/mylibrary/" // unignore `node_modules/mylibrary` directory + ] + } +]; +``` #### Cascading configuration objects diff --git a/lib/config/default-config.js b/lib/config/default-config.js index 99ea7b9f84e..8a6ff820057 100644 --- a/lib/config/default-config.js +++ b/lib/config/default-config.js @@ -48,7 +48,7 @@ exports.defaultConfig = [ // default ignores are listed here { ignores: [ - "**/node_modules/*", + "**/node_modules/", ".git/" ] }, diff --git a/lib/eslint/eslint-helpers.js b/lib/eslint/eslint-helpers.js index 8fa0caececa..bf08ec00feb 100644 --- a/lib/eslint/eslint-helpers.js +++ b/lib/eslint/eslint-helpers.js @@ -598,7 +598,7 @@ function createIgnoreResult(filePath, baseDir) { if (isHidden) { message = "File ignored by default. Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override."; } else if (isInNodeModules) { - message = "File ignored by default. Use \"--ignore-pattern '!node_modules/*'\" to override."; + message = "File ignored by default because it is located under the node_modules directory. Use ignore pattern \"!**/node_modules/\" to override."; } else { message = "File ignored because of a matching ignore pattern. Use \"--no-ignore\" to override."; } diff --git a/tests/lib/eslint/flat-eslint.js b/tests/lib/eslint/flat-eslint.js index 6cfb64a1d72..aec6ba43791 100644 --- a/tests/lib/eslint/flat-eslint.js +++ b/tests/lib/eslint/flat-eslint.js @@ -661,7 +661,7 @@ describe("FlatESLint", () => { ignore: false }); const results = await eslint.lintText("var bar = foo;", { filePath: "node_modules/passing.js", warnIgnored: true }); - const expectedMsg = "File ignored by default. Use \"--ignore-pattern '!node_modules/*'\" to override."; + 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].filePath, getFixturePath("node_modules/passing.js")); @@ -1196,7 +1196,7 @@ describe("FlatESLint", () => { cwd: getFixturePath("cli-engine") }); const results = await eslint.lintFiles(["node_modules/foo.js"]); - const expectedMsg = "File ignored by default. Use \"--ignore-pattern '!node_modules/*'\" to override."; + 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); @@ -3578,12 +3578,12 @@ describe("FlatESLint", () => { assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "subdir/node_modules/package/file.js"))); }); - it("should allow subfolders of defaultPatterns to be unignored by ignorePattern", async () => { + it("should allow subfolders of defaultPatterns to be unignored by ignorePattern constructor option", async () => { const cwd = getFixturePath("ignored-paths"); const engine = new FlatESLint({ cwd, overrideConfigFile: true, - ignorePatterns: ["!node_modules/package/**"] + ignorePatterns: ["!node_modules/", "node_modules/*", "!node_modules/package/"] }); const result = await engine.isPathIgnored(getFixturePath("ignored-paths", "node_modules", "package", "file.js")); @@ -3591,13 +3591,13 @@ describe("FlatESLint", () => { assert(!result, "File should not be ignored"); }); - it("should allow subfolders of defaultPatterns to be unignored by ignorePath", async () => { + it("should allow subfolders of defaultPatterns to be unignored by ignores in overrideConfig", async () => { const cwd = getFixturePath("ignored-paths"); const engine = new FlatESLint({ cwd, overrideConfigFile: true, overrideConfig: { - ignores: ["!node_modules/package/**"] + ignores: ["!node_modules/", "node_modules/*", "!node_modules/package/"] } }); @@ -4608,13 +4608,13 @@ describe("FlatESLint", () => { }); - describe("ignores can unignore '/node_modules/foo'.", () => { + describe("ignores can unignore '/node_modules/foo' with patterns ['!node_modules/', 'node_modules/*', '!node_modules/foo/'].", () => { const { prepare, cleanup, getPath } = createCustomTeardown({ cwd: `${root}-unignores`, files: { "eslint.config.js": `module.exports = { - ignores: ["!**/node_modules/foo"] + ignores: ["!node_modules/", "node_modules/*", "!node_modules/foo/"] };`, "node_modules/foo/index.js": "", "node_modules/foo/.dot.js": "", @@ -4659,13 +4659,13 @@ describe("FlatESLint", () => { }); }); - describe("ignores can unignore '/node_modules/foo/**'.", () => { + describe("ignores can unignore '/node_modules/foo' with patterns ['!node_modules/', 'node_modules/*', '!node_modules/foo/**'].", () => { const { prepare, cleanup, getPath } = createCustomTeardown({ cwd: `${root}-unignores`, files: { "eslint.config.js": `module.exports = { - ignores: ["!**/node_modules/foo/**"] + ignores: ["!node_modules/", "node_modules/*", "!node_modules/foo/**"] };`, "node_modules/foo/index.js": "", "node_modules/foo/.dot.js": "", @@ -5093,7 +5093,7 @@ describe("FlatESLint", () => { { ruleId: null, fatal: false, - message: "File ignored by default. Use \"--ignore-pattern '!node_modules/*'\" to override.", + message: "File ignored by default because it is located under the node_modules directory. Use ignore pattern \"!**/node_modules/\" to override.", severity: 1, nodeType: null } @@ -5194,7 +5194,7 @@ describe("FlatESLint", () => { cwd: `${root}a3`, files: { "node_modules/myconf/eslint.config.js": `module.exports = [{ - ignores: ["!node_modules/myconf", "foo/*.js"], + ignores: ["!node_modules", "node_modules/*", "!node_modules/myconf", "foo/*.js"], }, { rules: { eqeqeq: "error"