Skip to content

Commit ec77f8b

Browse files
committed
chore: add error for non-inline options
1 parent 7c215bf commit ec77f8b

File tree

6 files changed

+45
-2
lines changed

6 files changed

+45
-2
lines changed

documentation/docs/98-reference/.generated/compile-errors.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,12 @@ Cannot access a computed property of a rune
648648
`%name%` is not a valid rune
649649
```
650650

651+
### rune_invalid_options
652+
653+
```
654+
Options for `%rune%` needs to be declared inline
655+
```
656+
651657
### rune_invalid_usage
652658

653659
```

packages/svelte/messages/compile-errors/script.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,10 @@ This turned out to be buggy and unpredictable, particularly when working with de
158158

159159
> `%name%` is not a valid rune
160160
161+
## rune_invalid_options
162+
163+
> Options for `%rune%` needs to be declared inline
164+
161165
## rune_invalid_usage
162166

163167
> Cannot use `%rune%` rune in non-runes mode

packages/svelte/src/compiler/errors.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,16 @@ export function rune_invalid_name(node, name) {
373373
e(node, 'rune_invalid_name', `\`${name}\` is not a valid rune\nhttps://svelte.dev/e/rune_invalid_name`);
374374
}
375375

376+
/**
377+
* Options for `%rune%` needs to be declared inline
378+
* @param {null | number | NodeLike} node
379+
* @param {string} rune
380+
* @returns {never}
381+
*/
382+
export function rune_invalid_options(node, rune) {
383+
e(node, 'rune_invalid_options', `Options for \`${rune}\` needs to be declared inline\nhttps://svelte.dev/e/rune_invalid_options`);
384+
}
385+
376386
/**
377387
* Cannot use `%rune%` rune in non-runes mode
378388
* @param {null | number | NodeLike} node

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,13 @@ export function CallExpression(node, context) {
8787

8888
if ((rune === '$derived' || rune === '$derived.by') && node.arguments.length !== 1) {
8989
e.rune_invalid_arguments_length(node, rune, 'exactly one argument');
90-
} else if (rune === '$state' && node.arguments.length > 2) {
91-
e.rune_invalid_arguments_length(node, rune, 'at most two arguments');
90+
} else if (rune === '$state' || rune === '$state.raw') {
91+
if (node.arguments.length > 2) {
92+
e.rune_invalid_arguments_length(node, rune, 'at most two arguments');
93+
}
94+
if (node.arguments.length === 2 && node.arguments[1].type !== 'ObjectExpression') {
95+
e.rune_invalid_options(node.arguments[1], rune);
96+
}
9297
}
9398

9499
break;
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
[
2+
{
3+
"code": "rune_invalid_options",
4+
"end": {
5+
"column": 29,
6+
"line": 3
7+
},
8+
"start": {
9+
"column": 22,
10+
"line": 3
11+
},
12+
"message": "Options for `$state` needs to be declared inline"
13+
}
14+
]
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<script>
2+
let options = {};
3+
let test = $state(0, options);
4+
</script>

0 commit comments

Comments
 (0)