From 5dad0b1d80c9cf380c49f46266c35d461d3cecad Mon Sep 17 00:00:00 2001 From: Mykola Bilochub Date: Sat, 18 May 2019 10:49:52 +0300 Subject: [PATCH] Fix: Unignoring directories in .eslintignore (fixes #11684) (#11685) --- lib/cli-engine/file-enumerator.js | 2 +- lib/util/ignored-paths.js | 7 +++++- .../glob-util/unignored/.eslintignore | 3 +++ tests/fixtures/glob-util/unignored/dir/foo.js | 0 tests/lib/cli-engine/file-enumerator.js | 24 +++++++++++++++++++ 5 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 tests/fixtures/glob-util/unignored/.eslintignore create mode 100644 tests/fixtures/glob-util/unignored/dir/foo.js diff --git a/lib/cli-engine/file-enumerator.js b/lib/cli-engine/file-enumerator.js index d796a6755b9..2cb0fc6ea45 100644 --- a/lib/cli-engine/file-enumerator.js +++ b/lib/cli-engine/file-enumerator.js @@ -380,7 +380,7 @@ class FileEnumerator { * @private */ *_iterateFilesRecursive(directoryPath, options) { - if (this._isIgnoredFile(directoryPath, options)) { + if (this._isIgnoredFile(directoryPath + path.sep, options)) { return; } debug(`Enter the directory: ${directoryPath}`); diff --git a/lib/util/ignored-paths.js b/lib/util/ignored-paths.js index 3f9e02a82a8..137d156e9c0 100644 --- a/lib/util/ignored-paths.js +++ b/lib/util/ignored-paths.js @@ -328,12 +328,17 @@ class IgnoredPaths { * @returns {boolean} true if the file path matches one or more patterns, false otherwise */ contains(filepath, category) { + const isDir = filepath.endsWith(path.sep) || + (path.sep === "\\" && filepath.endsWith("/")); let result = false; const basePath = this.getBaseDir(); const absolutePath = path.resolve(this.options.cwd, filepath); - const relativePath = path.relative(basePath, absolutePath); + let relativePath = path.relative(basePath, absolutePath); if (relativePath) { + if (isDir) { + relativePath += path.sep; + } if (typeof category === "undefined") { result = (this.ig.default.filter([relativePath]).length === 0) || diff --git a/tests/fixtures/glob-util/unignored/.eslintignore b/tests/fixtures/glob-util/unignored/.eslintignore new file mode 100644 index 00000000000..d1c26dcc88c --- /dev/null +++ b/tests/fixtures/glob-util/unignored/.eslintignore @@ -0,0 +1,3 @@ +* +!/dir/ +!*.js diff --git a/tests/fixtures/glob-util/unignored/dir/foo.js b/tests/fixtures/glob-util/unignored/dir/foo.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/lib/cli-engine/file-enumerator.js b/tests/lib/cli-engine/file-enumerator.js index 4af721fb752..23a21c0b744 100644 --- a/tests/lib/cli-engine/file-enumerator.js +++ b/tests/lib/cli-engine/file-enumerator.js @@ -448,6 +448,30 @@ describe("FileEnumerator", () => { assert.includeDeepMembers(result, [{ filename: unignoredFilename, ignored: false }]); }); + + it("should return unignored files from folders unignored in .eslintignore", () => { + const options = { cwd: getFixturePath("glob-util", "unignored"), ignore: true }; + const glob = getFixturePath("glob-util", "unignored", "**/*.js"); + const patterns = [glob]; + const result = listFiles(patterns, options); + + const filename = getFixturePath("glob-util", "unignored", "dir", "foo.js"); + + assert.strictEqual(result.length, 1); + assert.deepStrictEqual(result, [{ filename, ignored: false }]); + }); + + it("should return unignored files from folders unignored in .eslintignore for explicitly specified folder", () => { + const options = { cwd: getFixturePath("glob-util", "unignored"), ignore: true }; + const dir = getFixturePath("glob-util", "unignored", "dir"); + const patterns = [dir]; + const result = listFiles(patterns, options); + + const filename = getFixturePath("glob-util", "unignored", "dir", "foo.js"); + + assert.strictEqual(result.length, 1); + assert.deepStrictEqual(result, [{ filename, ignored: false }]); + }); }); }); });