Skip to content

Commit bab0d03

Browse files
committed
wip: rename rule
Also tightened up matching based on feedback
1 parent 97bc980 commit bab0d03

14 files changed

+61
-21
lines changed

docs/rules/no-unnecessary-reactive-curlies.md renamed to docs/rules/no-extra-reactive-curlies.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
---
22
pageClass: "rule-details"
33
sidebarDepth: 0
4-
title: "svelte/no-unnecessary-reactive-curlies"
4+
title: "svelte/no-extra-reactive-curlies"
55
description: "disallow unnecessary curly braces around reactive statements"
66
---
77

8-
# svelte/no-unnecessary-reactive-curlies
8+
# svelte/no-extra-reactive-curlies
99

1010
> disallow unnecessary curly braces around reactive statements
1111
@@ -19,14 +19,14 @@ This rule reports if curly brackets (`{` and `}`) are used unnecessarily around
1919

2020
```svelte
2121
<script>
22-
/* eslint svelte/no-unnecessary-reactive-curlies: "error" */
23-
22+
/* eslint svelte/no-extra-reactive-curlies: "error" */
23+
2424
/* ✓ GOOD */
25-
$: foo = "red";
25+
$: foo = "red"
2626
2727
/* ✗ BAD */
2828
$: {
29-
foo = "red";
29+
foo = "red"
3030
}
3131
</script>
3232
```
@@ -50,5 +50,5 @@ This rule was introduced in eslint-plugin-svelte v2.4.0
5050

5151
## :mag: Implementation
5252

53-
- [Rule source](https://github.com/ota-meshi/eslint-plugin-svelte/blob/main/src/rules/no-unnecessary-reactive-curlies.ts)
54-
- [Test source](https://github.com/ota-meshi/eslint-plugin-svelte/blob/main/tests/src/rules/no-unnecessary-reactive-curlies.ts)
53+
- [Rule source](https://github.com/ota-meshi/eslint-plugin-svelte/blob/main/src/rules/no-extra-reactive-curlies.ts)
54+
- [Test source](https://github.com/ota-meshi/eslint-plugin-svelte/blob/main/tests/src/rules/no-extra-reactive-curlies.ts)

src/rules/no-unnecessary-reactive-curlies.ts renamed to src/rules/no-extra-reactive-curlies.ts

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,43 @@
1-
import type { AST } from "svelte-eslint-parser"
1+
import type { TSESTree } from "@typescript-eslint/types"
22
import { createRule } from "../utils"
33

4-
export default createRule("no-unnecessary-reactive-curlies", {
4+
export default createRule("no-extra-reactive-curlies", {
55
meta: {
66
docs: {
77
description:
88
"disallow wrapping single reactive statements in curly braces",
99
category: "Stylistic Issues",
1010
recommended: false,
11+
conflictWithPrettier: false,
1112
},
1213
fixable: "code",
1314
schema: [],
1415
messages: {
15-
unnecessaryCurlies: `Do not wrap reactive statements in curly braces unless necessary.`,
16+
extraCurlies: `Do not wrap reactive statements in curly braces unless necessary.`,
1617
},
1718
type: "suggestion",
1819
},
1920
create(context) {
2021
return {
2122
[`SvelteReactiveStatement > BlockStatement[body.length=1]`]: (
22-
node: AST.SvelteReactiveStatement,
23+
node: TSESTree.BlockStatement,
2324
) => {
25+
// $: { foo = "bar"; }
26+
// Only want to transform if the contents of the block is a single assignment
27+
// Anything else gets us into potentially weird territory and probably isn't worth handling
28+
if (
29+
node.body[0].type !== "ExpressionStatement" ||
30+
node.body[0].expression.type !== "AssignmentExpression"
31+
) {
32+
return false
33+
}
34+
2435
const source = context.getSourceCode()
2536

2637
return context.report({
2738
node,
2839
loc: node.loc,
29-
messageId: "unnecessaryCurlies",
40+
messageId: "extraCurlies",
3041

3142
fix(fixer) {
3243
const tokens = source.getTokens(node, { includeComments: true })

src/utils/rules.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import noShorthandStylePropertyOverrides from "../rules/no-shorthand-style-prope
2020
import noSpacesAroundEqualSignsInAttribute from "../rules/no-spaces-around-equal-signs-in-attribute"
2121
import noTargetBlank from "../rules/no-target-blank"
2222
import noUnknownStyleDirectiveProperty from "../rules/no-unknown-style-directive-property"
23-
import noUnnecessaryReactiveCurlies from "../rules/no-unnecessary-reactive-curlies"
23+
import noExtraReactiveCurlies from "../rules/no-extra-reactive-curlies"
2424
import noUnusedSvelteIgnore from "../rules/no-unused-svelte-ignore"
2525
import noUselessMustaches from "../rules/no-useless-mustaches"
2626
import preferClassDirective from "../rules/prefer-class-directive"
@@ -54,7 +54,7 @@ export const rules = [
5454
noSpacesAroundEqualSignsInAttribute,
5555
noTargetBlank,
5656
noUnknownStyleDirectiveProperty,
57-
noUnnecessaryReactiveCurlies,
57+
noExtraReactiveCurlies,
5858
noUnusedSvelteIgnore,
5959
noUselessMustaches,
6060
preferClassDirective,
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"message": "Do not wrap reactive statements in curly braces unless necessary.",
4+
"line": 3,
5+
"column": 6
6+
}
7+
]
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<!-- prettier-ignore -->
2+
<script>
3+
$: { foo = info; }
4+
</script>
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<!-- prettier-ignore -->
2+
<script>
3+
$: foo = info;
4+
</script>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<!-- prettier-ignore -->
2+
<script>
3+
$: foo1 = "bar"
4+
$: foo2 = "bar";
5+
</script>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<script>
2+
$: {
3+
let foo = "bar"
4+
}
5+
6+
$: {
7+
function fn() {}
8+
}
9+
$: {
10+
class Klass {}
11+
}
12+
</script>

tests/fixtures/rules/no-unnecessary-reactive-curlies/valid/test01-input.svelte

Lines changed: 0 additions & 3 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { RuleTester } from "eslint"
2-
import rule from "../../../src/rules/no-unnecessary-reactive-curlies"
2+
import rule from "../../../src/rules/no-extra-reactive-curlies"
33
import { loadTestCases } from "../../utils/utils"
44

55
const tester = new RuleTester({
@@ -10,7 +10,7 @@ const tester = new RuleTester({
1010
})
1111

1212
tester.run(
13-
"no-unnecessary-reactive-curlies",
13+
"no-extra-reactive-curlies",
1414
rule as any,
15-
loadTestCases("no-unnecessary-reactive-curlies"),
15+
loadTestCases("no-extra-reactive-curlies"),
1616
)

0 commit comments

Comments
 (0)