Skip to content

Commit 778427e

Browse files
authored
feat: add *.svelte.{js,ts} config to base config (#1043)
1 parent ff739aa commit 778427e

File tree

3 files changed

+81
-43
lines changed

3 files changed

+81
-43
lines changed

.changeset/hot-oranges-own.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"eslint-plugin-svelte": major
3+
---
4+
5+
feat: add `*.svelte.{js,ts}` config to base config

packages/eslint-plugin-svelte/src/configs/flat/base.ts

+10
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,16 @@ const config: Linter.Config[] = [
3434
'svelte/system': 'error'
3535
},
3636
processor: 'svelte/svelte'
37+
},
38+
{
39+
name: 'svelte:base:setup-for-svelte-script',
40+
files: ['*.svelte.js', '*.svelte.ts', '**/*.svelte.js', '**/*.svelte.ts'],
41+
languageOptions: {
42+
parser
43+
},
44+
rules: {
45+
// eslint-plugin-svelte rules
46+
}
3747
}
3848
];
3949
export default config;

packages/eslint-plugin-svelte/tools/update-rulesets.ts

+66-43
Original file line numberDiff line numberDiff line change
@@ -20,38 +20,61 @@ export function setPluginObject(plugin: ESLint.Plugin): void {
2020
pluginObject = plugin;
2121
}
2222
const config: Linter.Config[] = [
23-
{
24-
name: 'svelte:base:setup-plugin',
25-
plugins: {
26-
get svelte(): ESLint.Plugin {
27-
return pluginObject!;
28-
}
29-
},
30-
},
31-
{
32-
name: 'svelte:base:setup-for-svelte',
33-
files: ["*.svelte", "**/*.svelte"],
34-
languageOptions: {
35-
parser: parser,
36-
},
37-
rules: {
38-
// ESLint core rules known to cause problems with \`.svelte\`.
39-
"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\`.
40-
// "no-irregular-whitespace": "off",
41-
// Self assign is one of way to update reactive value in Svelte.
42-
"no-self-assign": "off",
23+
{
24+
name: 'svelte:base:setup-plugin',
25+
plugins: {
26+
get svelte(): ESLint.Plugin {
27+
return pluginObject!;
28+
}
29+
},
30+
},
31+
{
32+
name: 'svelte:base:setup-for-svelte',
33+
files: ["*.svelte", "**/*.svelte"],
34+
languageOptions: {
35+
parser: parser,
36+
},
37+
rules: {
38+
// ESLint core rules known to cause problems with \`.svelte\`.
39+
"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\`.
40+
// "no-irregular-whitespace": "off",
41+
// Self assign is one of way to update reactive value in Svelte.
42+
"no-self-assign": "off",
4343
44-
// eslint-plugin-svelte rules
45-
${rules
44+
// eslint-plugin-svelte rules
45+
${rules
4646
.filter((rule) => rule.meta.docs.recommended === 'base' && !rule.meta.deprecated)
4747
.map((rule) => {
4848
const conf = rule.meta.docs.default || 'error';
4949
return `"${rule.meta.docs.ruleId}": "${conf}"`;
5050
})
51-
.join(',\n ')},
52-
},
51+
.join(',\n ')}
52+
},
5353
processor: 'svelte/svelte'
54-
},
54+
},
55+
{
56+
name: 'svelte:base:setup-for-svelte-script',
57+
files: ['*.svelte.js', '*.svelte.ts', '**/*.svelte.js', '**/*.svelte.ts'],
58+
languageOptions: {
59+
parser: parser,
60+
},
61+
rules: {
62+
// eslint-plugin-svelte rules
63+
${rules
64+
.filter((rule) => rule.meta.docs.recommended === 'base' && !rule.meta.deprecated)
65+
.filter(
66+
// Exclude rules that are not applicable to JavaScript files
67+
(rule) =>
68+
rule.meta.docs.ruleId !== 'svelte/comment-directive' &&
69+
rule.meta.docs.ruleId !== 'svelte/system'
70+
)
71+
.map((rule) => {
72+
const conf = rule.meta.docs.default || 'error';
73+
return `"${rule.meta.docs.ruleId}": "${conf}"`;
74+
})
75+
.join(',\n ')}
76+
},
77+
}
5578
]
5679
export default config
5780
`;
@@ -69,20 +92,20 @@ const recommendedContent = `/*
6992
import type { Linter } from 'eslint';
7093
import base from "./base.js"
7194
const config: Linter.Config[] = [
72-
...base,
73-
{
74-
name: 'svelte:recommended:rules',
75-
rules: {
76-
// eslint-plugin-svelte rules
77-
${rules
95+
...base,
96+
{
97+
name: 'svelte:recommended:rules',
98+
rules: {
99+
// eslint-plugin-svelte rules
100+
${rules
78101
.filter((rule) => rule.meta.docs.recommended && !rule.meta.deprecated)
79102
.map((rule) => {
80103
const conf = rule.meta.docs.default || 'error';
81104
return `"${rule.meta.docs.ruleId}": "${conf}"`;
82105
})
83-
.join(',\n ')},
84-
},
85-
}
106+
.join(',\n ')},
107+
},
108+
}
86109
]
87110
export default config
88111
`;
@@ -100,17 +123,17 @@ const prettierContent = `/*
100123
import type { Linter } from 'eslint';
101124
import base from "./base.js"
102125
const config: Linter.Config[] = [
103-
...base,
104-
{
105-
name: 'svelte:prettier:turn-off-rules',
106-
rules: {
107-
// eslint-plugin-svelte rules
108-
${rules
126+
...base,
127+
{
128+
name: 'svelte:prettier:turn-off-rules',
129+
rules: {
130+
// eslint-plugin-svelte rules
131+
${rules
109132
.filter((rule) => rule.meta.docs.conflictWithPrettier)
110133
.map((rule) => `"${rule.meta.docs.ruleId}": "off"`)
111-
.join(',\n ')},
112-
},
113-
}
134+
.join(',\n ')},
135+
},
136+
}
114137
]
115138
export default config
116139
`;

0 commit comments

Comments
 (0)