Skip to content

Commit ec5ec05

Browse files
committed
feat: improve svelte/indent rule to support more ts syntax
1 parent fa57768 commit ec5ec05

14 files changed

+246
-13
lines changed

src/rules/indent-helpers/es.ts

+26-10
Original file line numberDiff line numberDiff line change
@@ -187,14 +187,25 @@ export function defineVisitor(context: IndentContext): NodeListener {
187187
},
188188
CallExpression(node: TSESTree.CallExpression) {
189189
const firstToken = sourceCode.getFirstToken(node)
190-
const leftParenToken = sourceCode.getTokenAfter(node.callee, {
191-
filter: isOpeningParenToken,
192-
includeComments: false,
193-
})!
190+
const leftParenToken = sourceCode.getTokenAfter(
191+
node.typeParameters || node.callee,
192+
{
193+
filter: isOpeningParenToken,
194+
includeComments: false,
195+
},
196+
)!
194197
const rightParenToken = sourceCode.getLastToken(node)
195198

199+
if (node.typeParameters) {
200+
offsets.setOffsetToken(
201+
sourceCode.getFirstToken(node.typeParameters),
202+
1,
203+
firstToken,
204+
)
205+
}
206+
196207
for (const optionalToken of sourceCode.getTokensBetween(
197-
sourceCode.getLastToken(node.callee),
208+
sourceCode.getLastToken(node.typeParameters || node.callee),
198209
leftParenToken,
199210
{ filter: isOptionalToken, includeComments: false },
200211
)) {
@@ -817,12 +828,17 @@ export function defineVisitor(context: IndentContext): NodeListener {
817828
const calleeTokens = getFirstAndLastTokens(sourceCode, node.callee)
818829
offsets.setOffsetToken(calleeTokens.firstToken, 1, newToken)
819830

820-
if (
821-
node.arguments.length ||
822-
calleeTokens.lastToken.range[1] < node.range[1]
823-
) {
831+
if (node.typeParameters) {
832+
offsets.setOffsetToken(
833+
sourceCode.getFirstToken(node.typeParameters),
834+
1,
835+
calleeTokens.firstToken,
836+
)
837+
}
838+
const leftParenBefore = node.typeParameters || calleeTokens.lastToken
839+
if (node.arguments.length || leftParenBefore.range[1] < node.range[1]) {
824840
const rightParenToken = sourceCode.getLastToken(node)
825-
const leftParenToken = sourceCode.getTokenAfter(calleeTokens.lastToken)!
841+
const leftParenToken = sourceCode.getTokenAfter(leftParenBefore)!
826842

827843
offsets.setOffsetToken(leftParenToken, 1, calleeTokens.firstToken)
828844
offsets.setOffsetElementList(

src/rules/indent-helpers/ts.ts

+22-3
Original file line numberDiff line numberDiff line change
@@ -41,22 +41,31 @@ export function defineVisitor(context: IndentContext): NodeListener {
4141
offsets.setOffsetToken(before, 1, baseToken)
4242
}
4343
},
44-
TSAsExpression(node: TSESTree.TSAsExpression) {
44+
TSAsExpression(
45+
node: TSESTree.TSAsExpression | TSESTree.TSSatisfiesExpression,
46+
) {
4547
// foo as T
48+
// foo satisfies T
4649
const expressionTokens = getFirstAndLastTokens(
4750
sourceCode,
4851
node.expression,
4952
)
50-
const asToken = sourceCode.getTokenAfter(expressionTokens.lastToken)!
53+
const asOrSatisfiesToken = sourceCode.getTokenAfter(
54+
expressionTokens.lastToken,
55+
)!
5156
offsets.setOffsetToken(
5257
[
53-
asToken,
58+
asOrSatisfiesToken,
5459
getFirstAndLastTokens(sourceCode, node.typeAnnotation).firstToken,
5560
],
5661
1,
5762
expressionTokens.firstToken,
5863
)
5964
},
65+
TSSatisfiesExpression(node: TSESTree.TSSatisfiesExpression) {
66+
// foo satisfies T
67+
visitor.TSAsExpression(node)
68+
},
6069
TSTypeReference(node: TSESTree.TSTypeReference) {
6170
// T<U>
6271
if (node.typeParameters) {
@@ -68,6 +77,16 @@ export function defineVisitor(context: IndentContext): NodeListener {
6877
)
6978
}
7079
},
80+
TSInstantiationExpression(node: TSESTree.TSInstantiationExpression) {
81+
// const ErrorMap = Map<string, Error>
82+
// ^^^^^^^^^^^^^^^^^^
83+
const firstToken = sourceCode.getFirstToken(node)
84+
offsets.setOffsetToken(
85+
sourceCode.getFirstToken(node.typeParameters),
86+
1,
87+
firstToken,
88+
)
89+
},
7190
TSTypeParameterInstantiation(
7291
node:
7392
| TSESTree.TSTypeParameterInstantiation
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
- message: Expected indentation of 2 spaces but found 0 spaces.
2+
line: 3
3+
column: 1
4+
suggestions: null
5+
- message: Expected indentation of 4 spaces but found 0 spaces.
6+
line: 4
7+
column: 1
8+
suggestions: null
9+
- message: Expected indentation of 6 spaces but found 0 spaces.
10+
line: 5
11+
column: 1
12+
suggestions: null
13+
- message: Expected indentation of 6 spaces but found 0 spaces.
14+
line: 6
15+
column: 1
16+
suggestions: null
17+
- message: Expected indentation of 4 spaces but found 0 spaces.
18+
line: 7
19+
column: 1
20+
suggestions: null
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<!-- prettier-ignore -->
2+
<script lang="ts">
3+
const ErrorMap = Map
4+
<
5+
string,
6+
Error
7+
>;
8+
</script>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<!-- prettier-ignore -->
2+
<script lang="ts">
3+
const ErrorMap = Map
4+
<
5+
string,
6+
Error
7+
>;
8+
</script>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
- message: Expected indentation of 2 spaces but found 0 spaces.
2+
line: 3
3+
column: 1
4+
suggestions: null
5+
- message: Expected indentation of 4 spaces but found 0 spaces.
6+
line: 4
7+
column: 1
8+
suggestions: null
9+
- message: Expected indentation of 6 spaces but found 0 spaces.
10+
line: 5
11+
column: 1
12+
suggestions: null
13+
- message: Expected indentation of 2 spaces but found 0 spaces.
14+
line: 6
15+
column: 1
16+
suggestions: null
17+
- message: Expected indentation of 4 spaces but found 0 spaces.
18+
line: 7
19+
column: 1
20+
suggestions: null
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<!-- prettier-ignore -->
2+
<script lang="ts">
3+
var a =
4+
{} satisfies
5+
Foo
6+
var b =
7+
{} satisfies Bar
8+
</script>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<!-- prettier-ignore -->
2+
<script lang="ts">
3+
var a =
4+
{} satisfies
5+
Foo
6+
var b =
7+
{} satisfies Bar
8+
</script>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
- message: Expected indentation of 2 spaces but found 0 spaces.
2+
line: 3
3+
column: 1
4+
suggestions: null
5+
- message: Expected indentation of 4 spaces but found 0 spaces.
6+
line: 4
7+
column: 1
8+
suggestions: null
9+
- message: Expected indentation of 6 spaces but found 0 spaces.
10+
line: 5
11+
column: 1
12+
suggestions: null
13+
- message: Expected indentation of 6 spaces but found 0 spaces.
14+
line: 6
15+
column: 1
16+
suggestions: null
17+
- message: Expected indentation of 6 spaces but found 0 spaces.
18+
line: 7
19+
column: 1
20+
suggestions: null
21+
- message: Expected indentation of 4 spaces but found 0 spaces.
22+
line: 8
23+
column: 1
24+
suggestions: null
25+
- message: Expected indentation of 4 spaces but found 0 spaces.
26+
line: 9
27+
column: 1
28+
suggestions: null
29+
- message: Expected indentation of 6 spaces but found 0 spaces.
30+
line: 10
31+
column: 1
32+
suggestions: null
33+
- message: Expected indentation of 4 spaces but found 0 spaces.
34+
line: 11
35+
column: 1
36+
suggestions: null
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!-- prettier-ignore -->
2+
<script lang="ts">
3+
foo
4+
<
5+
T
6+
,
7+
U
8+
>
9+
(
10+
arg
11+
)
12+
</script>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!-- prettier-ignore -->
2+
<script lang="ts">
3+
foo
4+
<
5+
T
6+
,
7+
U
8+
>
9+
(
10+
arg
11+
)
12+
</script>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
- message: Expected indentation of 2 spaces but found 0 spaces.
2+
line: 3
3+
column: 1
4+
suggestions: null
5+
- message: Expected indentation of 4 spaces but found 0 spaces.
6+
line: 4
7+
column: 1
8+
suggestions: null
9+
- message: Expected indentation of 6 spaces but found 0 spaces.
10+
line: 5
11+
column: 1
12+
suggestions: null
13+
- message: Expected indentation of 8 spaces but found 0 spaces.
14+
line: 6
15+
column: 1
16+
suggestions: null
17+
- message: Expected indentation of 8 spaces but found 0 spaces.
18+
line: 7
19+
column: 1
20+
suggestions: null
21+
- message: Expected indentation of 8 spaces but found 0 spaces.
22+
line: 8
23+
column: 1
24+
suggestions: null
25+
- message: Expected indentation of 6 spaces but found 0 spaces.
26+
line: 9
27+
column: 1
28+
suggestions: null
29+
- message: Expected indentation of 6 spaces but found 0 spaces.
30+
line: 10
31+
column: 1
32+
suggestions: null
33+
- message: Expected indentation of 8 spaces but found 0 spaces.
34+
line: 11
35+
column: 1
36+
suggestions: null
37+
- message: Expected indentation of 6 spaces but found 0 spaces.
38+
line: 12
39+
column: 1
40+
suggestions: null
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<!-- prettier-ignore -->
2+
<script lang="ts">
3+
const foo = new
4+
Foo
5+
<
6+
T
7+
,
8+
U
9+
>
10+
(
11+
arg
12+
)
13+
</script>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<!-- prettier-ignore -->
2+
<script lang="ts">
3+
const foo = new
4+
Foo
5+
<
6+
T
7+
,
8+
U
9+
>
10+
(
11+
arg
12+
)
13+
</script>

0 commit comments

Comments
 (0)