diff --git a/.changeset/empty-badgers-learn.md b/.changeset/empty-badgers-learn.md new file mode 100644 index 000000000..2c25b78d3 --- /dev/null +++ b/.changeset/empty-badgers-learn.md @@ -0,0 +1,5 @@ +--- +"eslint-plugin-svelte": patch +--- + +fix: false positives for builtin `$$` vars in `svelte/no-immutable-reactive-statements` diff --git a/src/rules/no-immutable-reactive-statements.ts b/src/rules/no-immutable-reactive-statements.ts index df154c54c..53ffac861 100644 --- a/src/rules/no-immutable-reactive-statements.ts +++ b/src/rules/no-immutable-reactive-statements.ts @@ -136,15 +136,19 @@ export default createRule("no-immutable-reactive-statements", { return } } - if ( - globalScope.through.some( - (reference) => - node.range[0] <= reference.identifier.range[0] && - reference.identifier.range[1] <= node.range[1], - ) - ) { - // Do not report if there are missing references. - return + for (const through of toplevelScope.through.filter( + (reference) => + node.range[0] <= reference.identifier.range[0] && + reference.identifier.range[1] <= node.range[1], + )) { + if (through.identifier.name.startsWith("$$")) { + // Builtin `$$` vars + return + } + if (through.resolved == null) { + // Do not report if there are missing references. + return + } } context.report({ diff --git a/tests/fixtures/rules/no-immutable-reactive-statements/valid/builtin-vars01-input.svelte b/tests/fixtures/rules/no-immutable-reactive-statements/valid/builtin-vars01-input.svelte new file mode 100644 index 000000000..dda35c20f --- /dev/null +++ b/tests/fixtures/rules/no-immutable-reactive-statements/valid/builtin-vars01-input.svelte @@ -0,0 +1,11 @@ + + +