Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Ensure that dot files are found with globs. #16550

Merged
merged 1 commit into from Nov 15, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 3 additions & 2 deletions lib/eslint/eslint-helpers.js
Expand Up @@ -26,6 +26,7 @@ const isPathInside = require("is-path-inside");

const doFsWalk = util.promisify(fswalk.walk);
const Minimatch = minimatch.Minimatch;
const MINIMATCH_OPTIONS = { dot: true };

//-----------------------------------------------------------------------------
// Types
Expand Down Expand Up @@ -158,7 +159,7 @@ function globMatch({ basePath, pattern }) {
? normalizeToPosix(path.relative(basePath, pattern))
: pattern;

const matcher = new Minimatch(patternToUse);
const matcher = new Minimatch(patternToUse, MINIMATCH_OPTIONS);

const fsWalkSettings = {

Expand Down Expand Up @@ -257,7 +258,7 @@ async function globSearch({

relativeToPatterns.set(patternToUse, patterns[i]);

return new minimatch.Minimatch(patternToUse);
return new Minimatch(patternToUse, MINIMATCH_OPTIONS);
});

/*
Expand Down
Empty file.
1 change: 1 addition & 0 deletions tests/fixtures/dot-files/.a.js
@@ -0,0 +1 @@
console.log("Running");
1 change: 1 addition & 0 deletions tests/fixtures/dot-files/.c.js
@@ -0,0 +1 @@
console.log("Running");
1 change: 1 addition & 0 deletions tests/fixtures/dot-files/b.js
@@ -0,0 +1 @@
console.log("Running");
8 changes: 8 additions & 0 deletions tests/fixtures/dot-files/eslint.config.js
@@ -0,0 +1,8 @@
module.exports = [
{
files: ["*.js"]
},
{
ignores: ["eslint.config.js"]
}
];
88 changes: 83 additions & 5 deletions tests/lib/eslint/flat-eslint.js
Expand Up @@ -24,6 +24,23 @@ const hash = require("../../../lib/cli-engine/hash");
const { unIndent, createCustomTeardown } = require("../../_utils");
const coreRules = require("../../../lib/rules");

//------------------------------------------------------------------------------
// Helpers
//------------------------------------------------------------------------------

/**
* Creates a directory if it doesn't already exist.
* @param {string} dirPath The path to the directory that should exist.
* @returns {void}
*/
function ensureDirectoryExists(dirPath) {
try {
fs.statSync(dirPath);
} catch {
fs.mkdirSync(dirPath);
}
}

//------------------------------------------------------------------------------
// Tests
//------------------------------------------------------------------------------
Expand Down Expand Up @@ -773,7 +790,7 @@ describe("FlatESLint", () => {
});
const results = await eslint.lintFiles(["fixtures/files/"]);

assert.strictEqual(results.length, 2);
assert.strictEqual(results.length, 3);
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixtures/files actually has a dot file in it. Because this directory is also used for cli-engine tests, I didn't want to change the directory itself. So I just updated the results.

The same is true for a few other tests as well.

assert.strictEqual(results[0].messages.length, 0);
assert.strictEqual(results[1].messages.length, 0);
assert.strictEqual(results[0].suppressedMessages.length, 0);
Expand Down Expand Up @@ -823,6 +840,58 @@ describe("FlatESLint", () => {
assert.strictEqual(results[0].suppressedMessages.length, 0);
});

// https://github.com/eslint/eslint/issues/16265
describe("Dot files in searches", () => {

it("should find dot files in current directory when a . pattern is used", async () => {
eslint = new FlatESLint({
cwd: getFixturePath("dot-files")
});
const results = await eslint.lintFiles(["."]);

assert.strictEqual(results.length, 3);
assert.strictEqual(results[0].messages.length, 0);
assert.strictEqual(results[0].filePath, getFixturePath("dot-files/.a.js"));
assert.strictEqual(results[0].suppressedMessages.length, 0);
assert.strictEqual(results[1].messages.length, 0);
assert.strictEqual(results[1].filePath, getFixturePath("dot-files/.c.js"));
assert.strictEqual(results[1].suppressedMessages.length, 0);
assert.strictEqual(results[2].messages.length, 0);
assert.strictEqual(results[2].filePath, getFixturePath("dot-files/b.js"));
assert.strictEqual(results[2].suppressedMessages.length, 0);
});

it("should find dot files in current directory when a *.js pattern is used", async () => {
eslint = new FlatESLint({
cwd: getFixturePath("dot-files")
});
const results = await eslint.lintFiles(["*.js"]);

assert.strictEqual(results.length, 3);
assert.strictEqual(results[0].messages.length, 0);
assert.strictEqual(results[0].filePath, getFixturePath("dot-files/.a.js"));
assert.strictEqual(results[0].suppressedMessages.length, 0);
assert.strictEqual(results[1].messages.length, 0);
assert.strictEqual(results[1].filePath, getFixturePath("dot-files/.c.js"));
assert.strictEqual(results[1].suppressedMessages.length, 0);
assert.strictEqual(results[2].messages.length, 0);
assert.strictEqual(results[2].filePath, getFixturePath("dot-files/b.js"));
assert.strictEqual(results[2].suppressedMessages.length, 0);
});

it("should find dot files in current directory when a .a.js pattern is used", async () => {
eslint = new FlatESLint({
cwd: getFixturePath("dot-files")
});
const results = await eslint.lintFiles([".a.js"]);

assert.strictEqual(results.length, 1);
assert.strictEqual(results[0].messages.length, 0);
assert.strictEqual(results[0].filePath, getFixturePath("dot-files/.a.js"));
assert.strictEqual(results[0].suppressedMessages.length, 0);
});
});

// https://github.com/eslint/eslint/issues/16275
describe("Glob patterns without matches", () => {

Expand Down Expand Up @@ -992,11 +1061,13 @@ describe("FlatESLint", () => {
});
const results = await eslint.lintFiles(["fixtures/files/*"]);

assert.strictEqual(results.length, 2);
assert.strictEqual(results.length, 3);
assert.strictEqual(results[0].messages.length, 0);
assert.strictEqual(results[1].messages.length, 0);
assert.strictEqual(results[2].messages.length, 0);
assert.strictEqual(results[0].suppressedMessages.length, 0);
assert.strictEqual(results[1].suppressedMessages.length, 0);
assert.strictEqual(results[2].suppressedMessages.length, 0);
});

it("should resolve globs when 'globInputPaths' option is true", async () => {
Expand All @@ -1009,11 +1080,13 @@ describe("FlatESLint", () => {
});
const results = await eslint.lintFiles(["fixtures/files/*"]);

assert.strictEqual(results.length, 2);
assert.strictEqual(results.length, 3);
assert.strictEqual(results[0].messages.length, 0);
assert.strictEqual(results[1].messages.length, 0);
assert.strictEqual(results[2].messages.length, 0);
assert.strictEqual(results[0].suppressedMessages.length, 0);
assert.strictEqual(results[1].suppressedMessages.length, 0);
assert.strictEqual(results[2].suppressedMessages.length, 0);
});

// only works on a Windows machine
Expand All @@ -1029,11 +1102,13 @@ describe("FlatESLint", () => {
});
const results = await eslint.lintFiles(["fixtures\\files\\*"]);

assert.strictEqual(results.length, 2);
assert.strictEqual(results.length, 3);
assert.strictEqual(results[0].messages.length, 0);
assert.strictEqual(results[1].messages.length, 0);
assert.strictEqual(results[2].messages.length, 0);
assert.strictEqual(results[0].suppressedMessages.length, 0);
assert.strictEqual(results[1].suppressedMessages.length, 0);
assert.strictEqual(results[2].suppressedMessages.length, 0);
});

}
Expand Down Expand Up @@ -1358,11 +1433,13 @@ describe("FlatESLint", () => {
});
const results = await eslint.lintFiles(["fixtures/files/*.?s*"]);

assert.strictEqual(results.length, 2);
assert.strictEqual(results.length, 3);
assert.strictEqual(results[0].messages.length, 0);
assert.strictEqual(results[0].suppressedMessages.length, 0);
assert.strictEqual(results[1].messages.length, 0);
assert.strictEqual(results[1].suppressedMessages.length, 0);
assert.strictEqual(results[2].messages.length, 0);
assert.strictEqual(results[2].suppressedMessages.length, 0);
});

it("should return one error message when given a config with rules with options and severity level set to error", async () => {
Expand Down Expand Up @@ -2785,6 +2862,7 @@ describe("FlatESLint", () => {
});

it("should throw if the directory exists and is empty", async () => {
ensureDirectoryExists(getFixturePath("cli-engine/empty"));
await assert.rejects(async () => {
await eslint.lintFiles(["empty"]);
}, /No files matching 'empty' were found\./u);
Expand Down