Skip to content

Commit be64d36

Browse files
authored
fix: broken indentation of if condition in svelte/indent rule (#802)
Previously it was indented like this: ```js if ( a === b || c === d || e === f ) { } ``` This PR will fix it so that it is indented like this: ```js if ( a === b || c === d || e === f ) { } ```
1 parent 50f4f4f commit be64d36

File tree

8 files changed

+536
-7
lines changed

8 files changed

+536
-7
lines changed

Diff for: .changeset/silent-pugs-speak.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'eslint-plugin-svelte': minor
3+
---
4+
5+
fix: broken indentation of if condition in `svelte/indent` rule

Diff for: packages/eslint-plugin-svelte/src/rules/indent-helpers/es.ts

+19-7
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ export function defineVisitor(context: IndentContext): NodeListener {
3030
const { sourceCode, offsets, options } = context;
3131

3232
/**
33-
* Find the root of left node.
33+
* Find the head of chaining nodes.
3434
*/
35-
function getRootLeft(
35+
function getChainHeadNode(
3636
node:
3737
| TSESTree.AssignmentExpression
3838
| TSESTree.AssignmentPattern
@@ -49,13 +49,20 @@ export function defineVisitor(context: IndentContext): NodeListener {
4949
parent.type === 'LogicalExpression')
5050
) {
5151
const prevToken = sourceCode.getTokenBefore(target);
52-
if (prevToken && isOpeningParenToken(prevToken)) {
52+
const nextToken = sourceCode.getTokenAfter(target);
53+
if (
54+
prevToken &&
55+
isOpeningParenToken(prevToken) &&
56+
nextToken &&
57+
isClosingParenToken(nextToken)
58+
) {
59+
// The chain is broken because it is enclosed in parentheses.
5360
break;
5461
}
5562
target = parent;
5663
parent = getParent(target);
5764
}
58-
return target.left;
65+
return target;
5966
}
6067

6168
const visitor = {
@@ -116,17 +123,22 @@ export function defineVisitor(context: IndentContext): NodeListener {
116123
| TSESTree.BinaryExpression
117124
| TSESTree.LogicalExpression
118125
) {
119-
const leftNode = getRootLeft(node);
126+
const baseNode = getChainHeadNode(node);
120127
const opToken = sourceCode.getTokenAfter(node.left, {
121128
filter: isNotClosingParenToken,
122129
includeComments: false
123130
})!;
131+
const baseToken =
132+
baseNode.type === 'AssignmentExpression' || baseNode.type === 'AssignmentPattern'
133+
? sourceCode.getFirstToken(baseNode)
134+
: getFirstAndLastTokens(sourceCode, baseNode).firstToken;
135+
const leftToken = getFirstAndLastTokens(sourceCode, node.left).firstToken;
124136
const rightToken = getFirstAndLastTokens(sourceCode, node.right).firstToken;
125137

126138
offsets.setOffsetToken(
127-
[opToken, rightToken],
139+
[leftToken === baseToken ? null : leftToken, opToken, rightToken],
128140
1,
129-
getFirstAndLastTokens(sourceCode, leftNode).firstToken
141+
baseToken
130142
);
131143
},
132144
AssignmentPattern(node: TSESTree.AssignmentPattern) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,304 @@
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 4 spaces but found 0 spaces.
22+
line: 8
23+
column: 1
24+
suggestions: null
25+
- message: Expected indentation of 2 spaces but found 0 spaces.
26+
line: 9
27+
column: 1
28+
suggestions: null
29+
- message: Expected indentation of 2 spaces but found 0 spaces.
30+
line: 10
31+
column: 1
32+
suggestions: null
33+
- message: Expected indentation of 2 spaces but found 0 spaces.
34+
line: 11
35+
column: 1
36+
suggestions: null
37+
- message: Expected indentation of 4 spaces but found 0 spaces.
38+
line: 12
39+
column: 1
40+
suggestions: null
41+
- message: Expected indentation of 6 spaces but found 0 spaces.
42+
line: 13
43+
column: 1
44+
suggestions: null
45+
- message: Expected indentation of 8 spaces but found 0 spaces.
46+
line: 14
47+
column: 1
48+
suggestions: null
49+
- message: Expected indentation of 8 spaces but found 0 spaces.
50+
line: 15
51+
column: 1
52+
suggestions: null
53+
- message: Expected indentation of 8 spaces but found 0 spaces.
54+
line: 16
55+
column: 1
56+
suggestions: null
57+
- message: Expected indentation of 8 spaces but found 0 spaces.
58+
line: 17
59+
column: 1
60+
suggestions: null
61+
- message: Expected indentation of 4 spaces but found 0 spaces.
62+
line: 18
63+
column: 1
64+
suggestions: null
65+
- message: Expected indentation of 2 spaces but found 0 spaces.
66+
line: 19
67+
column: 1
68+
suggestions: null
69+
- message: Expected indentation of 2 spaces but found 0 spaces.
70+
line: 20
71+
column: 1
72+
suggestions: null
73+
- message: Expected indentation of 2 spaces but found 0 spaces.
74+
line: 21
75+
column: 1
76+
suggestions: null
77+
- message: Expected indentation of 4 spaces but found 0 spaces.
78+
line: 22
79+
column: 1
80+
suggestions: null
81+
- message: Expected indentation of 6 spaces but found 0 spaces.
82+
line: 23
83+
column: 1
84+
suggestions: null
85+
- message: Expected indentation of 6 spaces but found 0 spaces.
86+
line: 24
87+
column: 1
88+
suggestions: null
89+
- message: Expected indentation of 6 spaces but found 0 spaces.
90+
line: 25
91+
column: 1
92+
suggestions: null
93+
- message: Expected indentation of 6 spaces but found 0 spaces.
94+
line: 26
95+
column: 1
96+
suggestions: null
97+
- message: Expected indentation of 6 spaces but found 0 spaces.
98+
line: 27
99+
column: 1
100+
suggestions: null
101+
- message: Expected indentation of 4 spaces but found 0 spaces.
102+
line: 28
103+
column: 1
104+
suggestions: null
105+
- message: Expected indentation of 2 spaces but found 0 spaces.
106+
line: 29
107+
column: 1
108+
suggestions: null
109+
- message: Expected indentation of 2 spaces but found 0 spaces.
110+
line: 30
111+
column: 1
112+
suggestions: null
113+
- message: Expected indentation of 2 spaces but found 0 spaces.
114+
line: 31
115+
column: 1
116+
suggestions: null
117+
- message: Expected indentation of 4 spaces but found 0 spaces.
118+
line: 32
119+
column: 1
120+
suggestions: null
121+
- message: Expected indentation of 6 spaces but found 0 spaces.
122+
line: 33
123+
column: 1
124+
suggestions: null
125+
- message: Expected indentation of 6 spaces but found 0 spaces.
126+
line: 34
127+
column: 1
128+
suggestions: null
129+
- message: Expected indentation of 6 spaces but found 0 spaces.
130+
line: 35
131+
column: 1
132+
suggestions: null
133+
- message: Expected indentation of 4 spaces but found 0 spaces.
134+
line: 36
135+
column: 1
136+
suggestions: null
137+
- message: Expected indentation of 2 spaces but found 0 spaces.
138+
line: 37
139+
column: 1
140+
suggestions: null
141+
- message: Expected indentation of 2 spaces but found 0 spaces.
142+
line: 38
143+
column: 1
144+
suggestions: null
145+
- message: Expected indentation of 2 spaces but found 0 spaces.
146+
line: 39
147+
column: 1
148+
suggestions: null
149+
- message: Expected indentation of 4 spaces but found 0 spaces.
150+
line: 40
151+
column: 1
152+
suggestions: null
153+
- message: Expected indentation of 6 spaces but found 0 spaces.
154+
line: 41
155+
column: 1
156+
suggestions: null
157+
- message: Expected indentation of 6 spaces but found 0 spaces.
158+
line: 42
159+
column: 1
160+
suggestions: null
161+
- message: Expected indentation of 6 spaces but found 0 spaces.
162+
line: 43
163+
column: 1
164+
suggestions: null
165+
- message: Expected indentation of 6 spaces but found 0 spaces.
166+
line: 44
167+
column: 1
168+
suggestions: null
169+
- message: Expected indentation of 6 spaces but found 0 spaces.
170+
line: 45
171+
column: 1
172+
suggestions: null
173+
- message: Expected indentation of 4 spaces but found 0 spaces.
174+
line: 46
175+
column: 1
176+
suggestions: null
177+
- message: Expected indentation of 2 spaces but found 0 spaces.
178+
line: 47
179+
column: 1
180+
suggestions: null
181+
- message: Expected indentation of 2 spaces but found 0 spaces.
182+
line: 48
183+
column: 1
184+
suggestions: null
185+
- message: Expected indentation of 2 spaces but found 0 spaces.
186+
line: 49
187+
column: 1
188+
suggestions: null
189+
- message: Expected indentation of 4 spaces but found 0 spaces.
190+
line: 50
191+
column: 1
192+
suggestions: null
193+
- message: Expected indentation of 6 spaces but found 0 spaces.
194+
line: 51
195+
column: 1
196+
suggestions: null
197+
- message: Expected indentation of 8 spaces but found 0 spaces.
198+
line: 52
199+
column: 1
200+
suggestions: null
201+
- message: Expected indentation of 8 spaces but found 0 spaces.
202+
line: 53
203+
column: 1
204+
suggestions: null
205+
- message: Expected indentation of 8 spaces but found 0 spaces.
206+
line: 54
207+
column: 1
208+
suggestions: null
209+
- message: Expected indentation of 8 spaces but found 0 spaces.
210+
line: 55
211+
column: 1
212+
suggestions: null
213+
- message: Expected indentation of 8 spaces but found 0 spaces.
214+
line: 56
215+
column: 1
216+
suggestions: null
217+
- message: Expected indentation of 8 spaces but found 0 spaces.
218+
line: 57
219+
column: 1
220+
suggestions: null
221+
- message: Expected indentation of 8 spaces but found 0 spaces.
222+
line: 58
223+
column: 1
224+
suggestions: null
225+
- message: Expected indentation of 8 spaces but found 0 spaces.
226+
line: 59
227+
column: 1
228+
suggestions: null
229+
- message: Expected indentation of 4 spaces but found 0 spaces.
230+
line: 60
231+
column: 1
232+
suggestions: null
233+
- message: Expected indentation of 2 spaces but found 0 spaces.
234+
line: 61
235+
column: 1
236+
suggestions: null
237+
- message: Expected indentation of 2 spaces but found 0 spaces.
238+
line: 62
239+
column: 1
240+
suggestions: null
241+
- message: Expected indentation of 2 spaces but found 0 spaces.
242+
line: 63
243+
column: 1
244+
suggestions: null
245+
- message: Expected indentation of 4 spaces but found 0 spaces.
246+
line: 64
247+
column: 1
248+
suggestions: null
249+
- message: Expected indentation of 6 spaces but found 0 spaces.
250+
line: 65
251+
column: 1
252+
suggestions: null
253+
- message: Expected indentation of 8 spaces but found 0 spaces.
254+
line: 66
255+
column: 1
256+
suggestions: null
257+
- message: Expected indentation of 10 spaces but found 0 spaces.
258+
line: 67
259+
column: 1
260+
suggestions: null
261+
- message: Expected indentation of 10 spaces but found 0 spaces.
262+
line: 68
263+
column: 1
264+
suggestions: null
265+
- message: Expected indentation of 10 spaces but found 0 spaces.
266+
line: 69
267+
column: 1
268+
suggestions: null
269+
- message: Expected indentation of 10 spaces but found 0 spaces.
270+
line: 70
271+
column: 1
272+
suggestions: null
273+
- message: Expected indentation of 10 spaces but found 0 spaces.
274+
line: 71
275+
column: 1
276+
suggestions: null
277+
- message: Expected indentation of 10 spaces but found 0 spaces.
278+
line: 72
279+
column: 1
280+
suggestions: null
281+
- message: Expected indentation of 6 spaces but found 0 spaces.
282+
line: 73
283+
column: 1
284+
suggestions: null
285+
- message: Expected indentation of 8 spaces but found 0 spaces.
286+
line: 74
287+
column: 1
288+
suggestions: null
289+
- message: Expected indentation of 8 spaces but found 0 spaces.
290+
line: 75
291+
column: 1
292+
suggestions: null
293+
- message: Expected indentation of 4 spaces but found 0 spaces.
294+
line: 76
295+
column: 1
296+
suggestions: null
297+
- message: Expected indentation of 2 spaces but found 0 spaces.
298+
line: 77
299+
column: 1
300+
suggestions: null
301+
- message: Expected indentation of 2 spaces but found 0 spaces.
302+
line: 78
303+
column: 1
304+
suggestions: null

0 commit comments

Comments
 (0)