Skip to content

Commit c89ce8e

Browse files
authored
Upgrade parser & deprecate dollar-prefixed-store-uses-vars rule that are no longer needed. (#108)
* Upgrade parser & deprecate `dollar-prefixed-store-uses-vars` rule that are no longer needed. * update
1 parent d2931f8 commit c89ce8e

13 files changed

+80
-37
lines changed

README.md

+9-1
Original file line numberDiff line numberDiff line change
@@ -304,9 +304,17 @@ These rules relate to this plugin works:
304304
| Rule ID | Description | |
305305
|:--------|:------------|:---|
306306
| [@ota-meshi/svelte/comment-directive](https://ota-meshi.github.io/eslint-plugin-svelte/rules/comment-directive/) | support comment-directives in HTML template | :star: |
307-
| [@ota-meshi/svelte/dollar-prefixed-store-uses-vars](https://ota-meshi.github.io/eslint-plugin-svelte/rules/dollar-prefixed-store-uses-vars/) | prevent $-prefixed variables to be marked as unused | :star: |
308307
| [@ota-meshi/svelte/system](https://ota-meshi.github.io/eslint-plugin-svelte/rules/system/) | system rule for working this plugin | :star: |
309308

309+
## Deprecated
310+
311+
- :warning: We're going to remove deprecated rules in the next major release. Please migrate to successor/new rules.
312+
- :innocent: We don't fix bugs which are in deprecated rules since we don't have enough resources.
313+
314+
| Rule ID | Replaced by |
315+
|:--------|:------------|
316+
| [@ota-meshi/svelte/dollar-prefixed-store-uses-vars](https://ota-meshi.github.io/eslint-plugin-svelte/rules/dollar-prefixed-store-uses-vars/) | (no replacement) |
317+
310318
<!--RULES_TABLE_END-->
311319
<!--RULES_SECTION_END-->
312320

docs/rules.md

+9-1
Original file line numberDiff line numberDiff line change
@@ -73,5 +73,13 @@ These rules relate to this plugin works:
7373
| Rule ID | Description | |
7474
|:--------|:------------|:---|
7575
| [@ota-meshi/svelte/comment-directive](./rules/comment-directive.md) | support comment-directives in HTML template | :star: |
76-
| [@ota-meshi/svelte/dollar-prefixed-store-uses-vars](./rules/dollar-prefixed-store-uses-vars.md) | prevent $-prefixed variables to be marked as unused | :star: |
7776
| [@ota-meshi/svelte/system](./rules/system.md) | system rule for working this plugin | :star: |
77+
78+
## Deprecated
79+
80+
- :warning: We're going to remove deprecated rules in the next major release. Please migrate to successor/new rules.
81+
- :innocent: We don't fix bugs which are in deprecated rules since we don't have enough resources.
82+
83+
| Rule ID | Replaced by |
84+
|:--------|:------------|
85+
| [@ota-meshi/svelte/dollar-prefixed-store-uses-vars](./rules/dollar-prefixed-store-uses-vars.md) | (no replacement) |

docs/rules/dollar-prefixed-store-uses-vars.md

+7-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,13 @@ since: "v0.18.0"
1010

1111
> prevent $-prefixed variables to be marked as unused
1212
13-
- :gear: This rule is included in `"plugin:@ota-meshi/svelte/base"` and `"plugin:@ota-meshi/svelte/recommended"`.
13+
- :warning: This rule was **deprecated**.
14+
15+
::: tip
16+
17+
This rule is not needed when using `svelte-eslint-parser` v0.14.0 or later.
18+
19+
:::
1420

1521
ESLint `no-unused-vars` rule does not detect store variables used as $-prefixed.
1622
This rule will find imported store variables that are used as $-prefixed and marks them as used.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
"eslint-utils": "^3.0.0",
5959
"postcss": "^8.4.5",
6060
"sourcemap-codec": "^1.4.8",
61-
"svelte-eslint-parser": "^0.13.0"
61+
"svelte-eslint-parser": "^0.14.0"
6262
},
6363
"peerDependencies": {
6464
"eslint": "^7.0.0 || ^8.0.0-0",

src/configs/base.ts

-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ export = {
1111

1212
// @ota-meshi/eslint-plugin-svelte rules
1313
"@ota-meshi/svelte/comment-directive": "error",
14-
"@ota-meshi/svelte/dollar-prefixed-store-uses-vars": "error",
1514
"@ota-meshi/svelte/system": "error",
1615
},
1716
},

src/configs/recommended.ts

-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ export = {
77
rules: {
88
// @ota-meshi/eslint-plugin-svelte rules
99
"@ota-meshi/svelte/comment-directive": "error",
10-
"@ota-meshi/svelte/dollar-prefixed-store-uses-vars": "error",
1110
"@ota-meshi/svelte/no-at-debug-tags": "warn",
1211
"@ota-meshi/svelte/no-at-html-tags": "error",
1312
"@ota-meshi/svelte/no-dupe-else-if-blocks": "error",

src/rules/dollar-prefixed-store-uses-vars.ts

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export default createRule("dollar-prefixed-store-uses-vars", {
1212
schema: [],
1313
messages: {},
1414
type: "problem",
15+
deprecated: true, // This rule is not needed when using [email protected] or later.
1516
},
1617
create(context) {
1718
if (!context.parserServices.isSvelte) {

src/types.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,13 @@ export interface RuleMetaData {
6464
url: string
6565
ruleId: string
6666
ruleName: string
67-
replacedBy?: string[]
6867
default?: "error" | "warn"
6968
}
7069
messages: { [messageId: string]: string }
7170
fixable?: "code" | "whitespace"
7271
schema: JSONSchema4 | JSONSchema4[]
7372
deprecated?: boolean
73+
replacedBy?: string[]
7474
type: "problem" | "suggestion" | "layout"
7575
}
7676

@@ -85,13 +85,13 @@ export interface PartialRuleMetaData {
8585
category: RuleCategory
8686
recommended: boolean | "base"
8787
extensionRule?: string
88-
replacedBy?: string[]
8988
default?: "error" | "warn"
9089
}
9190
messages: { [messageId: string]: string }
9291
fixable?: "code" | "whitespace"
9392
schema: JSONSchema4 | JSONSchema4[]
9493
deprecated?: boolean
94+
replacedBy?: string[]
9595
type: "problem" | "suggestion" | "layout"
9696
}
9797

svelte.config.esm.mjs

-3
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,6 @@ const config = {
2929
pages: "build",
3030
assets: "build",
3131
}),
32-
33-
// hydrate the <div id="svelte"> element in src/app.html
34-
target: "#svelte",
3532
files: {
3633
routes: path.join(dirname, "./docs"),
3734
template: path.join(dirname, "./docs-svelte-kit/src/app.html"),

tests/src/rules/dollar-prefixed-store-uses-vars.ts renamed to tests/src/integration/no-unused-vars.ts

+1-12
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { RuleTester, Linter } from "eslint"
2-
import rule from "../../../src/rules/dollar-prefixed-store-uses-vars"
32

4-
describe("dollar-prefixed-store-uses-vars", () => {
3+
describe("Integration test for no-unused-vars", () => {
54
const ruleNoUnusedVars = new Linter().getRules().get("no-unused-vars")!
65
const tester = new RuleTester({
76
parser: require.resolve("svelte-eslint-parser"),
@@ -10,34 +9,28 @@ describe("dollar-prefixed-store-uses-vars", () => {
109
sourceType: "module",
1110
},
1211
})
13-
const linter = (tester as any).linter
14-
linter.defineRule("dollar-prefixed-store-uses-vars", rule)
1512
tester.run("no-unused-vars", ruleNoUnusedVars, {
1613
valid: [
1714
`
1815
<script>
19-
/* eslint dollar-prefixed-store-uses-vars: 2 */
2016
import { a } from "./stores"
2117
$a = 42
2218
</script>
2319
`,
2420
`
2521
<script>
26-
/* eslint dollar-prefixed-store-uses-vars: 2 */
2722
import { a as b } from "./stores"
2823
$b = 42
2924
</script>
3025
`,
3126
`
3227
<script>
33-
/* eslint dollar-prefixed-store-uses-vars: 2 */
3428
import a from "./stores"
3529
$a = 42
3630
</script>
3731
`,
3832
`
3933
<script>
40-
/* eslint dollar-prefixed-store-uses-vars: 2 */
4134
import * as a from "./stores"
4235
$a = 42
4336
</script>
@@ -47,7 +40,6 @@ describe("dollar-prefixed-store-uses-vars", () => {
4740
{
4841
code: `
4942
<script>
50-
/* eslint dollar-prefixed-store-uses-vars: 2 */
5143
import { a } from "./stores"
5244
$b = 42
5345
</script>
@@ -57,7 +49,6 @@ describe("dollar-prefixed-store-uses-vars", () => {
5749
{
5850
code: `
5951
<script>
60-
/* eslint dollar-prefixed-store-uses-vars: 2 */
6152
import { a as b } from "./stores"
6253
$a = 42
6354
</script>
@@ -67,7 +58,6 @@ describe("dollar-prefixed-store-uses-vars", () => {
6758
{
6859
code: `
6960
<script>
70-
/* eslint dollar-prefixed-store-uses-vars: 2 */
7161
import a from "./stores"
7262
$b = 42
7363
</script>
@@ -77,7 +67,6 @@ describe("dollar-prefixed-store-uses-vars", () => {
7767
{
7868
code: `
7969
<script>
80-
/* eslint dollar-prefixed-store-uses-vars: 2 */
8170
import * as a from "./stores"
8271
$b = 42
8372
</script>

tools/render-rules.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ export default function renderRulesTableContent(
6565
const link = `[${rule.meta.docs.ruleId}](${buildRulePath(
6666
rule.meta.docs.ruleName || "",
6767
)})`
68-
const replacedRules = rule.meta.docs.replacedBy || []
68+
const replacedRules = rule.meta.replacedBy || []
6969
const replacedBy = replacedRules
7070
.map((name) => `[@ota-meshi/svelte/${name}](${buildRulePath(name)}.md)`)
7171
.join(", ")

tools/update-docs.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ class DocFile {
6565
meta: {
6666
fixable,
6767
deprecated,
68-
docs: { ruleId, description, recommended, replacedBy },
68+
replacedBy,
69+
docs: { ruleId, description, recommended },
6970
},
7071
} = this.rule
7172
const title = `# ${ruleId}\n\n> ${description}`

tools/update-rulesets.ts

+47-12
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,65 @@ import path from "path"
22
import fs from "fs"
33
import { rules } from "./lib/load-rules"
44

5-
const content = `
6-
import path from "path"
7-
const base = require.resolve("./base")
8-
const baseExtend =
9-
path.extname(\`\${base}\`) === ".ts" ? "plugin:@ota-meshi/svelte/base" : base
10-
export = {
11-
extends: [baseExtend],
12-
rules: {
5+
const baseContent = `export = {
6+
plugins: ["@ota-meshi/svelte"],
7+
overrides: [
8+
{
9+
files: ["*.svelte"],
10+
parser: require.resolve("svelte-eslint-parser"),
11+
rules: {
12+
// ESLint core rules known to cause problems with \`.svelte\`.
13+
"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\`.
14+
// "no-irregular-whitespace": "off",
15+
1316
// @ota-meshi/eslint-plugin-svelte rules
1417
${rules
15-
.filter((rule) => rule.meta.docs.recommended && !rule.meta.deprecated)
18+
.filter(
19+
(rule) =>
20+
rule.meta.docs.recommended === "base" && !rule.meta.deprecated,
21+
)
1622
.map((rule) => {
1723
const conf = rule.meta.docs.default || "error"
1824
return `"${rule.meta.docs.ruleId}": "${conf}"`
1925
})
20-
.join(",\n")}
26+
.join(",\n ")},
27+
},
2128
},
29+
],
30+
}
31+
`
32+
33+
const baseFilePath = path.resolve(__dirname, "../src/configs/base.ts")
34+
35+
// Update file.
36+
fs.writeFileSync(baseFilePath, baseContent)
37+
38+
const recommendedContent = `import path from "path"
39+
const base = require.resolve("./base")
40+
const baseExtend =
41+
path.extname(\`\${base}\`) === ".ts" ? "plugin:@ota-meshi/svelte/base" : base
42+
export = {
43+
extends: [baseExtend],
44+
rules: {
45+
// @ota-meshi/eslint-plugin-svelte rules
46+
${rules
47+
.filter((rule) => rule.meta.docs.recommended && !rule.meta.deprecated)
48+
.map((rule) => {
49+
const conf = rule.meta.docs.default || "error"
50+
return `"${rule.meta.docs.ruleId}": "${conf}"`
51+
})
52+
.join(",\n ")},
53+
},
2254
}
2355
`
2456

25-
const filePath = path.resolve(__dirname, "../src/configs/recommended.ts")
57+
const recommendedFilePath = path.resolve(
58+
__dirname,
59+
"../src/configs/recommended.ts",
60+
)
2661

2762
// Update file.
28-
fs.writeFileSync(filePath, content)
63+
fs.writeFileSync(recommendedFilePath, recommendedContent)
2964

3065
// Format files.
3166
// const linter = new eslint.CLIEngine({ fix: true })

0 commit comments

Comments
 (0)