From 6dea926c4c5d754b83d88518ed2aedcdedf52809 Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Wed, 17 Jan 2024 22:40:48 +0900 Subject: [PATCH 1/3] Fix `overrides.files` negated pattern regression --- .changeset/ten-rivers-hammer.md | 5 +++++ lib/__tests__/overrides.test.mjs | 21 +++++++++++++++++++++ lib/augmentConfig.mjs | 8 ++++++-- 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 .changeset/ten-rivers-hammer.md diff --git a/.changeset/ten-rivers-hammer.md b/.changeset/ten-rivers-hammer.md new file mode 100644 index 0000000000..d37c290c9d --- /dev/null +++ b/.changeset/ten-rivers-hammer.md @@ -0,0 +1,5 @@ +--- +"stylelint": patch +--- + +Fixed: `overrides.files` negated pattern regression diff --git a/lib/__tests__/overrides.test.mjs b/lib/__tests__/overrides.test.mjs index eb72c76534..79db927db7 100644 --- a/lib/__tests__/overrides.test.mjs +++ b/lib/__tests__/overrides.test.mjs @@ -358,3 +358,24 @@ it('two files', async () => { expect(linted.results[1].warnings).toHaveLength(1); expect(linted.results[1].warnings[0].rule).toBe('property-disallowed-list'); }); + +it('negation glob pattern', async () => { + const { results } = await standalone({ + files: [path.join(fixturesPath, 'style.css'), path.join(fixturesPath, 'style.module.css')], + config: { + rules: { 'block-no-empty': null }, + overrides: [ + { + files: ['!(**/style.css)'], + rules: { 'block-no-empty': true }, + }, + ], + }, + }); + + expect(results).toHaveLength(2); + expect(results).toHaveProperty('[0].source', expect.stringContaining('style.css')); + expect(results).toHaveProperty('[0].warnings', []); + expect(results).toHaveProperty('[1].source', expect.stringContaining('style.module.css')); + expect(results).toHaveProperty('[1].warnings[0].rule', 'block-no-empty'); +}); diff --git a/lib/augmentConfig.mjs b/lib/augmentConfig.mjs index 5b77988c11..4849797de6 100644 --- a/lib/augmentConfig.mjs +++ b/lib/augmentConfig.mjs @@ -378,6 +378,9 @@ export function applyOverrides(fullConfig, rootConfigDir, filePath) { ); } + /** @type {(glob: string) => boolean} */ + const nonegateGlob = (glob) => !glob.startsWith('!'); + for (const override of overrides) { const { files, ...configOverrides } = override; @@ -387,12 +390,13 @@ export function applyOverrides(fullConfig, rootConfigDir, filePath) { ); } - const absoluteGlobs = [files].flat().map((glob) => absolutizeGlob(glob, rootConfigDir)); + const fileList = [files].flat(); + const absoluteGlobs = fileList.map((glob) => absolutizeGlob(glob, rootConfigDir)); if ( micromatch.isMatch(filePath, absoluteGlobs, { dot: true }) || // E.g. `*.css` matches any CSS files in any directories. - micromatch.isMatch(filePath, files, { dot: true, basename: true }) + micromatch.isMatch(filePath, fileList.filter(nonegateGlob), { dot: true, basename: true }) ) { config = mergeConfigs(config, configOverrides); } From 6dfb5c5c64410782452a3bee8c4fbc23a43223b7 Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Wed, 17 Jan 2024 22:43:18 +0900 Subject: [PATCH 2/3] build --- lib/augmentConfig.cjs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/augmentConfig.cjs b/lib/augmentConfig.cjs index d8fae6f306..132cac3f14 100644 --- a/lib/augmentConfig.cjs +++ b/lib/augmentConfig.cjs @@ -380,6 +380,9 @@ function applyOverrides(fullConfig, rootConfigDir, filePath) { ); } + /** @type {(glob: string) => boolean} */ + const nonegateGlob = (glob) => !glob.startsWith('!'); + for (const override of overrides) { const { files, ...configOverrides } = override; @@ -389,12 +392,13 @@ function applyOverrides(fullConfig, rootConfigDir, filePath) { ); } - const absoluteGlobs = [files].flat().map((glob) => absolutizeGlob(glob, rootConfigDir)); + const fileList = [files].flat(); + const absoluteGlobs = fileList.map((glob) => absolutizeGlob(glob, rootConfigDir)); if ( micromatch.isMatch(filePath, absoluteGlobs, { dot: true }) || // E.g. `*.css` matches any CSS files in any directories. - micromatch.isMatch(filePath, files, { dot: true, basename: true }) + micromatch.isMatch(filePath, fileList.filter(nonegateGlob), { dot: true, basename: true }) ) { config = mergeConfigs(config, configOverrides); } From 1e6a2ab64e300a67d16e25885488ed38a73375a3 Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Thu, 18 Jan 2024 09:53:50 +0900 Subject: [PATCH 3/3] Improve changelog message --- .changeset/ten-rivers-hammer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/ten-rivers-hammer.md b/.changeset/ten-rivers-hammer.md index d37c290c9d..34444b031d 100644 --- a/.changeset/ten-rivers-hammer.md +++ b/.changeset/ten-rivers-hammer.md @@ -2,4 +2,4 @@ "stylelint": patch --- -Fixed: `overrides.files` negated pattern regression +Fixed: `overrides.files` negated pattern regression introduced in 15.0.0