Skip to content

Commit 89d030d

Browse files
authored
fix(svelte/indent): crash when using ts import type (#1437)
1 parent f887d69 commit 89d030d

File tree

11 files changed

+146
-103
lines changed

11 files changed

+146
-103
lines changed

.changeset/stale-foxes-cheat.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"eslint-plugin-svelte": patch
3+
---
4+
5+
fix(svelte/indent): crash when using ts import type

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
"@eslint-community/eslint-plugin-eslint-comments": "^4.5.0",
2525
"@ota-meshi/eslint-plugin": "^0.18.0",
2626
"@types/eslint": "^9.6.1",
27-
"@typescript-eslint/eslint-plugin": "^8.42.0",
28-
"@typescript-eslint/parser": "^8.42.0",
27+
"@typescript-eslint/eslint-plugin": "^8.48.1",
28+
"@typescript-eslint/parser": "^8.48.1",
2929
"c8": "^10.1.3",
3030
"env-cmd": "^11.0.0",
3131
"eslint": "~9.39.0",
@@ -47,7 +47,7 @@
4747
"prettier-plugin-svelte": "^3.4.0",
4848
"rimraf": "^6.0.1",
4949
"typescript": "~5.9.2",
50-
"typescript-eslint": "^8.42.0",
50+
"typescript-eslint": "^8.48.1",
5151
"undici": "^6.21.3"
5252
},
5353
"publishConfig": {

packages/eslint-plugin-svelte/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@
8686
"@types/postcss-safe-parser": "^5.0.4",
8787
"@types/semver": "^7.7.0",
8888
"@types/stylus": "^0.48.43",
89-
"@typescript-eslint/scope-manager": "^8.43.0",
90-
"@typescript-eslint/types": "^8.43.0",
89+
"@typescript-eslint/scope-manager": "^8.48.1",
90+
"@typescript-eslint/types": "^8.48.1",
9191
"acorn": "^8.15.0",
9292
"assert": "^2.1.0",
9393
"esbuild": "^0.27.0",

packages/eslint-plugin-svelte/src/rules/indent-helpers/ts.ts

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -715,15 +715,25 @@ export function defineVisitor(context: IndentContext): NodeListener {
715715
includeComments: false
716716
})!;
717717
offsets.setOffsetToken(leftParenToken, 1, firstToken);
718-
const argument =
719-
node.argument ||
720-
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- typescript-eslint<v6 node
721-
(node as any).parameter;
722-
const rightParenToken = sourceCode.getTokenAfter(argument, {
718+
const args: (TSESTree.TypeNode | TSESTree.StringLiteral | TSESTree.ObjectExpression)[] = [];
719+
if (node.source) {
720+
args.push(node.source);
721+
if (node.options) {
722+
args.push(node.options);
723+
}
724+
} else {
725+
// typescript-eslint<v8.48 node
726+
args.push(
727+
node.argument ||
728+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- typescript-eslint<v6 node
729+
(node as any).parameter
730+
);
731+
}
732+
const rightParenToken = sourceCode.getTokenAfter(args[args.length - 1], {
723733
filter: isClosingParenToken,
724734
includeComments: false
725735
})!;
726-
offsets.setOffsetElementList([argument], leftParenToken, rightParenToken, 1);
736+
offsets.setOffsetElementList(args, leftParenToken, rightParenToken, 1);
727737
if (node.qualifier) {
728738
const dotToken = sourceCode.getTokenBefore(node.qualifier)!;
729739
const propertyToken = sourceCode.getTokenAfter(dotToken);
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
- message: Expected indentation of 2 spaces but found 0 spaces.
2+
line: 7
3+
column: 1
4+
suggestions: null
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!-- prettier-ignore -->
2+
<script lang="ts">
3+
type Props = {
4+
children: import('svelte').Snippet,
5+
}
6+
7+
const { children }: Props = $props();
8+
</script>
9+
10+
{@render children()}
11+
12+
<!-- tests/fixtures/rules/indent/valid/ts/ts-import-type01-input.svelte -->
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!-- prettier-ignore -->
2+
<script lang="ts">
3+
type Props = {
4+
children: import('svelte').Snippet,
5+
}
6+
7+
const { children }: Props = $props();
8+
</script>
9+
10+
{@render children()}
11+
12+
<!-- tests/fixtures/rules/indent/valid/ts/ts-import-type01-input.svelte -->
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"svelte": ">=5"
3+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!-- prettier-ignore -->
2+
<script lang="ts">
3+
type Props = {
4+
children: import('svelte').Snippet,
5+
}
6+
7+
const { children }: Props = $props();
8+
</script>
9+
10+
{@render children()}
11+
12+
<!-- tests/fixtures/rules/indent/valid/ts/ts-import-type01-input.svelte -->
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"svelte": ">=5"
3+
}

0 commit comments

Comments
 (0)