From 012cf64ed2f70c6e59a3a81fb42321fed2aad82e Mon Sep 17 00:00:00 2001 From: dbarabashh Date: Sat, 15 Mar 2025 14:23:08 +0100 Subject: [PATCH 1/3] support arbitrary extensions in definition files --- packages/eslint-plugin/src/util/misc.ts | 5 +++++ .../eslint-plugin/tests/util/misc.test.ts | 21 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/packages/eslint-plugin/src/util/misc.ts b/packages/eslint-plugin/src/util/misc.ts index b24758fd426a..20b5152fa373 100644 --- a/packages/eslint-plugin/src/util/misc.ts +++ b/packages/eslint-plugin/src/util/misc.ts @@ -25,6 +25,11 @@ export function isDefinitionFile(fileName: string): boolean { return true; } } + + if (lowerFileName.includes('.d.') && lowerFileName.endsWith('.ts')) { + return true; + } + return false; } diff --git a/packages/eslint-plugin/tests/util/misc.test.ts b/packages/eslint-plugin/tests/util/misc.test.ts index 6eae810eb627..84625b7ce187 100644 --- a/packages/eslint-plugin/tests/util/misc.test.ts +++ b/packages/eslint-plugin/tests/util/misc.test.ts @@ -1,5 +1,26 @@ import * as misc from '../../src/util/misc'; +describe('isDefinitionFile', () => { + it('returns true for standard definition files', () => { + expect(misc.isDefinitionFile('index.d.ts')).toBe(true); + expect(misc.isDefinitionFile('module.d.cts')).toBe(true); + expect(misc.isDefinitionFile('package.d.mts')).toBe(true); + }); + + it('returns true for arbitrary extension definition files', () => { + expect(misc.isDefinitionFile('vite-env.d.ts')).toBe(true); + expect(misc.isDefinitionFile('styled-components.d.ts')).toBe(true); + expect(misc.isDefinitionFile('mdx.d.ts')).toBe(true); + }); + + it('returns false for non definition files', () => { + expect(misc.isDefinitionFile('index.ts')).toBe(false); + expect(misc.isDefinitionFile('app.tsx')).toBe(false); + expect(misc.isDefinitionFile('styles.css.ts')).toBe(false); + expect(misc.isDefinitionFile('vite.config.ts')).toBe(false); + }); +}); + describe('formatWordList', () => { it('can format with no words', () => { expect(misc.formatWordList([])).toBe(''); From cdab3a9eec0d497f15851aabbbae902f9826e3c4 Mon Sep 17 00:00:00 2001 From: dbarabashh Date: Sat, 15 Mar 2025 14:48:47 +0100 Subject: [PATCH 2/3] updated test case --- packages/eslint-plugin/tests/util/misc.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/eslint-plugin/tests/util/misc.test.ts b/packages/eslint-plugin/tests/util/misc.test.ts index 84625b7ce187..48b6ca7cf564 100644 --- a/packages/eslint-plugin/tests/util/misc.test.ts +++ b/packages/eslint-plugin/tests/util/misc.test.ts @@ -8,9 +8,9 @@ describe('isDefinitionFile', () => { }); it('returns true for arbitrary extension definition files', () => { - expect(misc.isDefinitionFile('vite-env.d.ts')).toBe(true); - expect(misc.isDefinitionFile('styled-components.d.ts')).toBe(true); - expect(misc.isDefinitionFile('mdx.d.ts')).toBe(true); + expect(misc.isDefinitionFile('styles.d.css.ts')).toBe(true); + expect(misc.isDefinitionFile('component.d.vue.ts')).toBe(true); + expect(misc.isDefinitionFile('env.d.node.ts')).toBe(true); }); it('returns false for non definition files', () => { From fce03753affdbc694b1459226902e5731e60cec8 Mon Sep 17 00:00:00 2001 From: dbarabashh Date: Mon, 17 Mar 2025 17:37:19 +0100 Subject: [PATCH 3/3] updated test and refactoring --- packages/eslint-plugin/src/util/misc.ts | 6 +-- .../eslint-plugin/tests/util/misc.test.ts | 38 ++++++++++--------- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/packages/eslint-plugin/src/util/misc.ts b/packages/eslint-plugin/src/util/misc.ts index 20b5152fa373..4355e8d83f60 100644 --- a/packages/eslint-plugin/src/util/misc.ts +++ b/packages/eslint-plugin/src/util/misc.ts @@ -26,11 +26,7 @@ export function isDefinitionFile(fileName: string): boolean { } } - if (lowerFileName.includes('.d.') && lowerFileName.endsWith('.ts')) { - return true; - } - - return false; + return /\.d\.(ts|cts|mts|.*\.ts)$/.test(lowerFileName); } /** diff --git a/packages/eslint-plugin/tests/util/misc.test.ts b/packages/eslint-plugin/tests/util/misc.test.ts index 48b6ca7cf564..d7037e7ed094 100644 --- a/packages/eslint-plugin/tests/util/misc.test.ts +++ b/packages/eslint-plugin/tests/util/misc.test.ts @@ -1,24 +1,26 @@ import * as misc from '../../src/util/misc'; describe('isDefinitionFile', () => { - it('returns true for standard definition files', () => { - expect(misc.isDefinitionFile('index.d.ts')).toBe(true); - expect(misc.isDefinitionFile('module.d.cts')).toBe(true); - expect(misc.isDefinitionFile('package.d.mts')).toBe(true); - }); - - it('returns true for arbitrary extension definition files', () => { - expect(misc.isDefinitionFile('styles.d.css.ts')).toBe(true); - expect(misc.isDefinitionFile('component.d.vue.ts')).toBe(true); - expect(misc.isDefinitionFile('env.d.node.ts')).toBe(true); - }); - - it('returns false for non definition files', () => { - expect(misc.isDefinitionFile('index.ts')).toBe(false); - expect(misc.isDefinitionFile('app.tsx')).toBe(false); - expect(misc.isDefinitionFile('styles.css.ts')).toBe(false); - expect(misc.isDefinitionFile('vite.config.ts')).toBe(false); - }); + it.each([['index.d.ts'], ['module.d.cts'], ['package.d.mts']])( + 'returns true for standard definition file: %s', + filename => { + expect(misc.isDefinitionFile(filename)).toBe(true); + }, + ); + + it.each([['styles.d.css.ts'], ['component.d.vue.ts'], ['env.d.node.ts']])( + 'returns true for arbitrary extension definition file: %s', + filename => { + expect(misc.isDefinitionFile(filename)).toBe(true); + }, + ); + + it.each([['index.ts'], ['app.tsx'], ['styles.css.ts'], ['vite.config.ts']])( + 'returns false for non definition file: %s', + filename => { + expect(misc.isDefinitionFile(filename)).toBe(false); + }, + ); }); describe('formatWordList', () => {