From 3d0aa5dca1add9a559efd0996d21d9ff31eea924 Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Mon, 27 Jan 2025 08:55:29 +0900 Subject: [PATCH 1/2] feat: add `*.svelte.{js,ts}` config to base config --- .../src/configs/flat/base.ts | 10 ++ .../tools/update-rulesets.ts | 109 +++++++++++------- 2 files changed, 76 insertions(+), 43 deletions(-) diff --git a/packages/eslint-plugin-svelte/src/configs/flat/base.ts b/packages/eslint-plugin-svelte/src/configs/flat/base.ts index 7c74ffb74..ee25fb2fe 100644 --- a/packages/eslint-plugin-svelte/src/configs/flat/base.ts +++ b/packages/eslint-plugin-svelte/src/configs/flat/base.ts @@ -34,6 +34,16 @@ const config: Linter.Config[] = [ 'svelte/system': 'error' }, processor: 'svelte/svelte' + }, + { + name: 'svelte:base:setup-for-svelte-script', + files: ['*.svelte.js', '*.svelte.ts', '**/*.svelte.js', '**/*.svelte.ts'], + languageOptions: { + parser + }, + rules: { + // eslint-plugin-svelte rules + } } ]; export default config; diff --git a/packages/eslint-plugin-svelte/tools/update-rulesets.ts b/packages/eslint-plugin-svelte/tools/update-rulesets.ts index 1431662af..cdbcf4bfd 100644 --- a/packages/eslint-plugin-svelte/tools/update-rulesets.ts +++ b/packages/eslint-plugin-svelte/tools/update-rulesets.ts @@ -20,38 +20,61 @@ export function setPluginObject(plugin: ESLint.Plugin): void { pluginObject = plugin; } const config: Linter.Config[] = [ - { - name: 'svelte:base:setup-plugin', - plugins: { - get svelte(): ESLint.Plugin { - return pluginObject!; - } - }, - }, - { - name: 'svelte:base:setup-for-svelte', - files: ["*.svelte", "**/*.svelte"], - languageOptions: { - parser: parser, - }, - rules: { - // ESLint core rules known to cause problems with \`.svelte\`. - "no-inner-declarations": "off", // The AST generated by svelte-eslint-parser will false positives in it rule because the root node of the script is not the \`Program\`. - // "no-irregular-whitespace": "off", - // Self assign is one of way to update reactive value in Svelte. - "no-self-assign": "off", + { + name: 'svelte:base:setup-plugin', + plugins: { + get svelte(): ESLint.Plugin { + return pluginObject!; + } + }, + }, + { + name: 'svelte:base:setup-for-svelte', + files: ["*.svelte", "**/*.svelte"], + languageOptions: { + parser: parser, + }, + rules: { + // ESLint core rules known to cause problems with \`.svelte\`. + "no-inner-declarations": "off", // The AST generated by svelte-eslint-parser will false positives in it rule because the root node of the script is not the \`Program\`. + // "no-irregular-whitespace": "off", + // Self assign is one of way to update reactive value in Svelte. + "no-self-assign": "off", - // eslint-plugin-svelte rules - ${rules + // eslint-plugin-svelte rules + ${rules .filter((rule) => rule.meta.docs.recommended === 'base' && !rule.meta.deprecated) .map((rule) => { const conf = rule.meta.docs.default || 'error'; return `"${rule.meta.docs.ruleId}": "${conf}"`; }) - .join(',\n ')}, - }, + .join(',\n ')} + }, processor: 'svelte/svelte' - }, + }, + { + name: 'svelte:base:setup-for-svelte-script', + files: ['*.svelte.js', '*.svelte.ts', '**/*.svelte.js', '**/*.svelte.ts'], + languageOptions: { + parser: parser, + }, + rules: { + // eslint-plugin-svelte rules + ${rules + .filter((rule) => rule.meta.docs.recommended === 'base' && !rule.meta.deprecated) + .filter( + // Exclude rules that are not applicable to JavaScript files + (rule) => + rule.meta.docs.ruleId !== 'svelte/comment-directive' && + rule.meta.docs.ruleId !== 'svelte/system' + ) + .map((rule) => { + const conf = rule.meta.docs.default || 'error'; + return `"${rule.meta.docs.ruleId}": "${conf}"`; + }) + .join(',\n ')} + }, + } ] export default config `; @@ -69,20 +92,20 @@ const recommendedContent = `/* import type { Linter } from 'eslint'; import base from "./base.js" const config: Linter.Config[] = [ - ...base, - { - name: 'svelte:recommended:rules', - rules: { - // eslint-plugin-svelte rules - ${rules + ...base, + { + name: 'svelte:recommended:rules', + rules: { + // eslint-plugin-svelte rules + ${rules .filter((rule) => rule.meta.docs.recommended && !rule.meta.deprecated) .map((rule) => { const conf = rule.meta.docs.default || 'error'; return `"${rule.meta.docs.ruleId}": "${conf}"`; }) - .join(',\n ')}, - }, - } + .join(',\n ')}, + }, + } ] export default config `; @@ -100,17 +123,17 @@ const prettierContent = `/* import type { Linter } from 'eslint'; import base from "./base.js" const config: Linter.Config[] = [ - ...base, - { - name: 'svelte:prettier:turn-off-rules', - rules: { - // eslint-plugin-svelte rules - ${rules + ...base, + { + name: 'svelte:prettier:turn-off-rules', + rules: { + // eslint-plugin-svelte rules + ${rules .filter((rule) => rule.meta.docs.conflictWithPrettier) .map((rule) => `"${rule.meta.docs.ruleId}": "off"`) - .join(',\n ')}, - }, - } + .join(',\n ')}, + }, + } ] export default config `; From cf6bc57ff92eda52653ede2180bc8a04cfbbb425 Mon Sep 17 00:00:00 2001 From: Yosuke Ota Date: Mon, 27 Jan 2025 08:56:27 +0900 Subject: [PATCH 2/2] Create hot-oranges-own.md --- .changeset/hot-oranges-own.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/hot-oranges-own.md diff --git a/.changeset/hot-oranges-own.md b/.changeset/hot-oranges-own.md new file mode 100644 index 000000000..49a400052 --- /dev/null +++ b/.changeset/hot-oranges-own.md @@ -0,0 +1,5 @@ +--- +"eslint-plugin-svelte": major +--- + +feat: add `*.svelte.{js,ts}` config to base config