From 438d1d85c60a0150bc6e154165c11625ecdbdf5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Sun, 8 Jun 2025 09:40:08 +0200 Subject: [PATCH 1/2] test: added support for .svelte.js test files --- .changeset/pink-doors-rhyme.md | 5 +++ .../eslint-plugin-svelte/tests/utils/utils.ts | 33 ++++++++++++------- 2 files changed, 26 insertions(+), 12 deletions(-) create mode 100644 .changeset/pink-doors-rhyme.md diff --git a/.changeset/pink-doors-rhyme.md b/.changeset/pink-doors-rhyme.md new file mode 100644 index 000000000..950450dd3 --- /dev/null +++ b/.changeset/pink-doors-rhyme.md @@ -0,0 +1,5 @@ +--- +'eslint-plugin-svelte': patch +--- + +test: added support for .svelte.js test files diff --git a/packages/eslint-plugin-svelte/tests/utils/utils.ts b/packages/eslint-plugin-svelte/tests/utils/utils.ts index cfd4d81a9..0b97e61b8 100644 --- a/packages/eslint-plugin-svelte/tests/utils/utils.ts +++ b/packages/eslint-plugin-svelte/tests/utils/utils.ts @@ -68,6 +68,14 @@ export function getRuleFixturesRoot(ruleName: string): string { return path.resolve(FIXTURES_ROOT, `./rules/${ruleName}`); } +function fileNameSuffix(fileName: string): string { + return fileName.match(/\.svelte\.(?:j|t)s$/u) ? fileName.slice(fileName.length - 10) : path.extname(fileName); +} + +function isSvelteFile(fileName): boolean { + return fileName.match(/\.svelte(?:\.(?:j|t)s)?$/u); +} + /** * Load test cases */ @@ -118,11 +126,11 @@ export function loadTestCases( .filter(filter) .map((inputFile) => { const config = getConfig(ruleName, inputFile); - const errorFile = inputFile.replace(/(input|\+.+)\.[a-z]+$/u, 'errors.yaml'); - const outputExt = path.extname(inputFile); + const errorFile = inputFile.replace(/(input|\+.+)(?:\.[a-z]+)+$/u, 'errors.yaml'); + const outputSuffix = fileNameSuffix(inputFile); const outputFile = inputFile.replace( - /(input|\+.+)\.[a-z]+$/u, - `output.${outputExt.slice(1)}` + /(input|\+.+)(?:\.[a-z]+)+$/u, + `output.${outputSuffix.slice(1)}` ); if (!fs.existsSync(errorFile)) { @@ -193,7 +201,8 @@ function* itrListupInput(rootDir: string): IterableIterator { continue; } const abs = path.join(rootDir, filename); - const baseFileName = path.basename(filename, path.extname(filename)); + const baseName = path.basename(filename); + const baseFileName = baseName.slice(0, baseName.length - fileNameSuffix(baseName).length); if (baseFileName.endsWith('input') || baseFileName.startsWith('+')) { yield abs; } else if (fs.statSync(abs).isDirectory()) { @@ -217,12 +226,12 @@ function writeFixtures( { force }: { force?: boolean } = {} ) { const linter = new Linter(); - const errorFile = inputFile.replace(/(input|\+.+)\.[a-z]+$/u, 'errors.yaml'); + const errorFile = inputFile.replace(/(input|\+.+)(?:\.[a-z]+)+$/u, 'errors.yaml'); const config = getConfig(ruleName, inputFile); const parser = - path.extname(inputFile) === '.svelte' + isSvelteFile(inputFile) ? svelteParser : path.extname(inputFile) === '.ts' ? typescriptParser @@ -298,11 +307,11 @@ function getConfig(ruleName: string, inputFile: string) { const code = fs.readFileSync(inputFile, 'utf8'); let config; let configFile = [ - inputFile.replace(/(input|\+.+)\.[a-z]+$/u, 'config.json'), + inputFile.replace(/(input|\+.+)(?:\.[a-z]+)+$/u, 'config.json'), path.join(path.dirname(inputFile), '_config.json'), - inputFile.replace(/(input|\+.+)\.[a-z]+$/u, 'config.js'), + inputFile.replace(/(input|\+.+)(?:\.[a-z]+)+$/u, 'config.js'), path.join(path.dirname(inputFile), '_config.js'), - inputFile.replace(/(input|\+.+)\.[a-z]+$/u, 'config.cjs'), + inputFile.replace(/(input|\+.+)(?:\.[a-z]+)+$/u, 'config.cjs'), path.join(path.dirname(inputFile), '_config.cjs') ].find((f) => fs.existsSync(f)); if (configFile) { @@ -312,7 +321,7 @@ function getConfig(ruleName: string, inputFile: string) { : JSON.parse(fs.readFileSync(configFile, 'utf8')); } const parser = - path.extname(filename) === '.svelte' + isSvelteFile(filename) ? svelteParser : path.extname(inputFile) === '.ts' ? typescriptParser @@ -350,7 +359,7 @@ function getConfig(ruleName: string, inputFile: string) { } function getRequirements(inputFile: string): Record { - let requirementsFile: string = inputFile.replace(/(input|\+.+)\.[a-z]+$/u, 'requirements.json'); + let requirementsFile: string = inputFile.replace(/(input|\+.+)(?:\.[a-z]+)+$/u, 'requirements.json'); if (!fs.existsSync(requirementsFile)) { requirementsFile = path.join(path.dirname(inputFile), '_requirements.json'); } From c7feace7009f801cfd7801d0ddc1eb3db6af5057 Mon Sep 17 00:00:00 2001 From: Yosuke Ota Date: Tue, 10 Jun 2025 07:36:20 +0900 Subject: [PATCH 2/2] Delete .changeset/pink-doors-rhyme.md --- .changeset/pink-doors-rhyme.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .changeset/pink-doors-rhyme.md diff --git a/.changeset/pink-doors-rhyme.md b/.changeset/pink-doors-rhyme.md deleted file mode 100644 index 950450dd3..000000000 --- a/.changeset/pink-doors-rhyme.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'eslint-plugin-svelte': patch ---- - -test: added support for .svelte.js test files