Skip to content

Commit 168f920

Browse files
authored
feat: add support for $inspect and $effect.root (#446)
1 parent 50dd335 commit 168f920

File tree

81 files changed

+14785
-3
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

81 files changed

+14785
-3
lines changed

.changeset/twenty-cats-shave.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"svelte-eslint-parser": minor
3+
---
4+
5+
feat: add support for `$inspect` and `$effect.root`

explorer-v2/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"eslint-scope": "^7.2.2",
1919
"esquery": "^1.5.0",
2020
"pako": "^2.1.0",
21-
"svelte": "^5.0.0-next.10",
21+
"svelte": "^5.0.0-next.17",
2222
"svelte-eslint-parser": "link:..",
2323
"tslib": "^2.6.2"
2424
},

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
"version:ci": "env-cmd -e version-ci pnpm run build:meta && changeset version"
4747
},
4848
"peerDependencies": {
49-
"svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.10"
49+
"svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.17"
5050
},
5151
"peerDependenciesMeta": {
5252
"svelte": {
@@ -104,7 +104,7 @@
104104
"prettier-plugin-svelte": "^3.0.0",
105105
"rimraf": "^5.0.1",
106106
"semver": "^7.5.1",
107-
"svelte": "^5.0.0-next.10",
107+
"svelte": "^5.0.0-next.17",
108108
"svelte2tsx": "^0.6.25",
109109
"typescript": "~5.1.3",
110110
"typescript-eslint-parser-for-extra-files": "^0.5.0"

src/parser/globals.ts

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export const globalsForRunes = [
66
"$derived",
77
"$effect",
88
"$props",
9+
"$inspect",
910
] as const;
1011
const globalsForSvelte5 = [...globalsForSvelte4, ...globalsForRunes];
1112
export const globals = svelteVersion.gte(5)

src/parser/typescript/analyze/index.ts

+8
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ function analyzeDollarDollarVariables(
256256
case "$derived":
257257
case "$effect":
258258
case "$props":
259+
case "$inspect":
259260
// Processed by `analyzeRuneVariables`.
260261
break;
261262
default: {
@@ -332,13 +333,20 @@ function analyzeRuneVariables(
332333
appendDeclareNamespaceVirtualScripts(globalName, [
333334
"export function pre(fn: () => void | (() => void)): void;",
334335
"export function active(): boolean;",
336+
"export function root(fn: () => void | (() => void)): () => void;",
335337
]);
336338
break;
337339
}
338340
case "$props": {
339341
appendDeclareFunctionVirtualScripts(globalName, ["<T>(): T"]);
340342
break;
341343
}
344+
case "$inspect": {
345+
appendDeclareFunctionVirtualScripts(globalName, [
346+
`<T>(value: T, callback?: (value: T, type: 'init' | 'update') => void): void`,
347+
]);
348+
break;
349+
}
342350
default: {
343351
const _: never = globalName;
344352
throw Error(`Unknown global: ${_}`);

tests/fixtures/parser/ast/$$slots-scope-output-svelte5.json

+6
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,12 @@
6565
"identifiers": [],
6666
"defs": [],
6767
"references": []
68+
},
69+
{
70+
"name": "$inspect",
71+
"identifiers": [],
72+
"defs": [],
73+
"references": []
6874
}
6975
]
7076
}

tests/fixtures/parser/ast/docs/template-syntax/02-attributes-and-props/10-scope-output-svelte5.json

+6
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,12 @@
6565
"identifiers": [],
6666
"defs": [],
6767
"references": []
68+
},
69+
{
70+
"name": "$inspect",
71+
"identifiers": [],
72+
"defs": [],
73+
"references": []
6874
}
6975
]
7076
}

tests/fixtures/parser/ast/docs/template-syntax/02-attributes-and-props/11-scope-output-svelte5.json

+6
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,12 @@
6565
"identifiers": [],
6666
"defs": [],
6767
"references": []
68+
},
69+
{
70+
"name": "$inspect",
71+
"identifiers": [],
72+
"defs": [],
73+
"references": []
6874
}
6975
]
7076
}

tests/fixtures/parser/ast/docs/template-syntax/13-slot/02-$$slots/01-scope-output-svelte5.json

+6
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,12 @@
6565
"identifiers": [],
6666
"defs": [],
6767
"references": []
68+
},
69+
{
70+
"name": "$inspect",
71+
"identifiers": [],
72+
"defs": [],
73+
"references": []
6874
}
6975
]
7076
}

tests/fixtures/parser/ast/svelte5/docs/fine-grained-reactivity/example01-scope-output.json

+6
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,12 @@
112112
"identifiers": [],
113113
"defs": [],
114114
"references": []
115+
},
116+
{
117+
"name": "$inspect",
118+
"identifiers": [],
119+
"defs": [],
120+
"references": []
115121
}
116122
],
117123
"references": [],

tests/fixtures/parser/ast/svelte5/docs/functions/01-untrack-scope-output.json

+6
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,12 @@
9090
"resolved": null
9191
}
9292
]
93+
},
94+
{
95+
"name": "$inspect",
96+
"identifiers": [],
97+
"defs": [],
98+
"references": []
9399
}
94100
],
95101
"references": [],

tests/fixtures/parser/ast/svelte5/docs/old-vs-new/01-counter-scope-output.json

+6
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,12 @@
114114
"identifiers": [],
115115
"defs": [],
116116
"references": []
117+
},
118+
{
119+
"name": "$inspect",
120+
"identifiers": [],
121+
"defs": [],
122+
"references": []
117123
}
118124
],
119125
"references": [],

tests/fixtures/parser/ast/svelte5/docs/old-vs-new/02-tracking-dependencies-scope-output.json

+6
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,12 @@
113113
"identifiers": [],
114114
"defs": [],
115115
"references": []
116+
},
117+
{
118+
"name": "$inspect",
119+
"identifiers": [],
120+
"defs": [],
121+
"references": []
116122
}
117123
],
118124
"references": [],

tests/fixtures/parser/ast/svelte5/docs/old-vs-new/03-untracking-dependencies-scope-output.json

+6
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,12 @@
113113
"identifiers": [],
114114
"defs": [],
115115
"references": []
116+
},
117+
{
118+
"name": "$inspect",
119+
"identifiers": [],
120+
"defs": [],
121+
"references": []
116122
}
117123
],
118124
"references": [],

tests/fixtures/parser/ast/svelte5/docs/old-vs-new/04-simple-component-props-scope-output.json

+6
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,12 @@
6666
"resolved": null
6767
}
6868
]
69+
},
70+
{
71+
"name": "$inspect",
72+
"identifiers": [],
73+
"defs": [],
74+
"references": []
6975
}
7076
],
7177
"references": [],

tests/fixtures/parser/ast/svelte5/docs/old-vs-new/05-advanced-component-props-scope-output.json

+6
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,12 @@
6666
"resolved": null
6767
}
6868
]
69+
},
70+
{
71+
"name": "$inspect",
72+
"identifiers": [],
73+
"defs": [],
74+
"references": []
6975
}
7076
],
7177
"references": [],

tests/fixtures/parser/ast/svelte5/docs/old-vs-new/06-autoscroll-scope-output.json

+6
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,12 @@
113113
"identifiers": [],
114114
"defs": [],
115115
"references": []
116+
},
117+
{
118+
"name": "$inspect",
119+
"identifiers": [],
120+
"defs": [],
121+
"references": []
116122
}
117123
],
118124
"references": [],

tests/fixtures/parser/ast/svelte5/docs/runes/01-$state-scope-output.json

+6
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,12 @@
6666
"identifiers": [],
6767
"defs": [],
6868
"references": []
69+
},
70+
{
71+
"name": "$inspect",
72+
"identifiers": [],
73+
"defs": [],
74+
"references": []
6975
}
7076
],
7177
"references": [],

tests/fixtures/parser/ast/svelte5/docs/runes/02-$derived-scope-output.json

+6
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,12 @@
9090
"identifiers": [],
9191
"defs": [],
9292
"references": []
93+
},
94+
{
95+
"name": "$inspect",
96+
"identifiers": [],
97+
"defs": [],
98+
"references": []
9399
}
94100
],
95101
"references": [],

tests/fixtures/parser/ast/svelte5/docs/runes/03-$effect-scope-output.json

+6
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,12 @@
114114
"identifiers": [],
115115
"defs": [],
116116
"references": []
117+
},
118+
{
119+
"name": "$inspect",
120+
"identifiers": [],
121+
"defs": [],
122+
"references": []
117123
}
118124
],
119125
"references": [],

tests/fixtures/parser/ast/svelte5/docs/runes/04-$effect-pre-scope-output.json

+6
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,12 @@
6666
"identifiers": [],
6767
"defs": [],
6868
"references": []
69+
},
70+
{
71+
"name": "$inspect",
72+
"identifiers": [],
73+
"defs": [],
74+
"references": []
6975
}
7076
],
7177
"references": [],

tests/fixtures/parser/ast/svelte5/docs/runes/05-$props-scope-output.json

+6
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,12 @@
6666
"resolved": null
6767
}
6868
]
69+
},
70+
{
71+
"name": "$inspect",
72+
"identifiers": [],
73+
"defs": [],
74+
"references": []
6975
}
7076
],
7177
"references": [],

tests/fixtures/parser/ast/svelte5/docs/runes/06-$props-scope-output.json

+6
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,12 @@
6666
"resolved": null
6767
}
6868
]
69+
},
70+
{
71+
"name": "$inspect",
72+
"identifiers": [],
73+
"defs": [],
74+
"references": []
6975
}
7076
],
7177
"references": [],

tests/fixtures/parser/ast/svelte5/docs/runes/07-$props-scope-output.json

+6
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,12 @@
6666
"resolved": null
6767
}
6868
]
69+
},
70+
{
71+
"name": "$inspect",
72+
"identifiers": [],
73+
"defs": [],
74+
"references": []
6975
}
7076
],
7177
"references": [],

tests/fixtures/parser/ast/svelte5/docs/runes/08-$props-ts-scope-output.json

+6
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,12 @@
6666
"resolved": null
6767
}
6868
]
69+
},
70+
{
71+
"name": "$inspect",
72+
"identifiers": [],
73+
"defs": [],
74+
"references": []
6975
}
7076
],
7177
"references": [],

tests/fixtures/parser/ast/svelte5/docs/runes/09-how-to-opt-in-scope-output.json

+6
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@
4242
"identifiers": [],
4343
"defs": [],
4444
"references": []
45+
},
46+
{
47+
"name": "$inspect",
48+
"identifiers": [],
49+
"defs": [],
50+
"references": []
4551
}
4652
],
4753
"references": [],
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<script>
2+
let count = $state(0);
3+
4+
const cleanup = $effect.root(() => {
5+
$effect(() => {
6+
console.log(count);
7+
});
8+
9+
return () => {
10+
console.log('effect root cleanup');
11+
};
12+
});
13+
</script>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[
2+
{
3+
"ruleId": "no-unused-vars",
4+
"code": "cleanup",
5+
"line": 4,
6+
"column": 8
7+
}
8+
]

0 commit comments

Comments
 (0)