Skip to content

Commit 7ec9e4b

Browse files
authored
fix: prevent erroneous state_referenced_locally warnings on prop fallbacks (#17329)
* failing test * fix: prevent erroneous `state_referenced_locally` warnings on prop fallbacks
1 parent ebf7d94 commit 7ec9e4b

File tree

4 files changed

+24
-8
lines changed

4 files changed

+24
-8
lines changed

.changeset/rude-points-attend.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: prevent erroneous `state_referenced_locally` warnings on prop fallbacks

packages/svelte/src/compiler/phases/2-analyze/visitors/VariableDeclarator.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,5 +146,15 @@ export function VariableDeclarator(node, context) {
146146
}
147147
}
148148

149-
context.next();
149+
if (node.init && get_rune(node.init, context.state.scope) === '$props') {
150+
// prevent erroneous `state_referenced_locally` warnings on prop fallbacks
151+
context.visit(node.id, {
152+
...context.state,
153+
function_depth: context.state.function_depth + 1
154+
});
155+
156+
context.visit(node.init);
157+
} else {
158+
context.next();
159+
}
150160
}

packages/svelte/tests/validator/samples/static-state-reference/input.svelte

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
console.log(doubled);
1010
1111
let {
12-
prop
12+
prop,
13+
other_prop = prop
1314
} = $props();
1415
let prop_state = $state(prop);
1516
let prop_derived = $derived(prop);

packages/svelte/tests/validator/samples/static-state-reference/warnings.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,36 +39,36 @@
3939
"code": "state_referenced_locally",
4040
"end": {
4141
"column": 29,
42-
"line": 14
42+
"line": 15
4343
},
4444
"message": "This reference only captures the initial value of `prop`. Did you mean to reference it inside a closure instead?",
4545
"start": {
4646
"column": 25,
47-
"line": 14
47+
"line": 15
4848
}
4949
},
5050
{
5151
"code": "state_referenced_locally",
5252
"end": {
5353
"column": 17,
54-
"line": 16
54+
"line": 17
5555
},
5656
"message": "This reference only captures the initial value of `prop`. Did you mean to reference it inside a closure instead?",
5757
"start": {
5858
"column": 13,
59-
"line": 16
59+
"line": 17
6060
}
6161
},
6262
{
6363
"code": "state_referenced_locally",
6464
"end": {
6565
"column": 25,
66-
"line": 17
66+
"line": 18
6767
},
6868
"message": "This reference only captures the initial value of `prop_derived`. Did you mean to reference it inside a closure instead?",
6969
"start": {
7070
"column": 13,
71-
"line": 17
71+
"line": 18
7272
}
7373
}
7474
]

0 commit comments

Comments
 (0)