Skip to content

Commit fa0a64b

Browse files
committed
feat: add support for @snippet in indent rule
1 parent 1097107 commit fa0a64b

File tree

4 files changed

+112
-0
lines changed

4 files changed

+112
-0
lines changed

src/rules/indent-helpers/svelte.ts

+40
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import type { IndentContext } from './commons';
66
import { isBeginningOfElement } from './commons';
77
import { isBeginningOfLine } from './commons';
88
import { getFirstAndLastTokens } from './commons';
9+
import { isClosingParenToken, isOpeningParenToken } from '@eslint-community/eslint-utils';
910

1011
type NodeListener = SvelteNodeListener;
1112
const PREFORMATTED_ELEMENT_NAMES = ['pre', 'textarea', 'template'];
@@ -213,6 +214,21 @@ export function defineVisitor(context: IndentContext): NodeListener {
213214
offsets.setOffsetToken(declarationToken, 1, openToken);
214215
offsets.setOffsetToken(closeToken, 0, openToken);
215216
},
217+
SvelteRenderTag(node: AST.SvelteRenderTag) {
218+
const openToken = sourceCode.getFirstToken(node);
219+
const renderToken = sourceCode.getTokenAfter(openToken)!;
220+
offsets.setOffsetToken(renderToken, 1, openToken);
221+
const calleeToken = sourceCode.getFirstToken(node.callee);
222+
offsets.setOffsetToken(calleeToken, 1, renderToken);
223+
const leftParenToken = sourceCode.getTokenAfter(node.callee, {
224+
filter: isOpeningParenToken,
225+
includeComments: false
226+
})!;
227+
const rightParenToken = sourceCode.getTokenBefore(sourceCode.getLastToken(node));
228+
229+
offsets.setOffsetToken(leftParenToken, 1, calleeToken);
230+
offsets.setOffsetElementList([node.argument], leftParenToken, rightParenToken, 1);
231+
},
216232
// ----------------------------------------------------------------------
217233
// BLOCKS
218234
// ----------------------------------------------------------------------
@@ -462,6 +478,30 @@ export function defineVisitor(context: IndentContext): NodeListener {
462478
offsets.setOffsetToken(endAwaitToken, 1, openCloseTagToken);
463479
offsets.setOffsetToken(closeCloseTagToken, 0, openCloseTagToken);
464480
},
481+
SvelteSnippetBlock(node: AST.SvelteSnippetBlock) {
482+
const [openToken, snippetToken] = sourceCode.getFirstTokens(node, {
483+
count: 2,
484+
includeComments: false
485+
});
486+
offsets.setOffsetToken(snippetToken, 1, openToken);
487+
const id = getFirstAndLastTokens(sourceCode, node.id);
488+
offsets.setOffsetToken(id.firstToken, 1, snippetToken);
489+
490+
const leftParenToken = sourceCode.getTokenBefore(
491+
node.context || sourceCode.getLastToken(node),
492+
{
493+
filter: isOpeningParenToken,
494+
includeComments: false
495+
}
496+
)!;
497+
498+
const rightParenToken = sourceCode.getTokenAfter(node.context || leftParenToken, {
499+
filter: isClosingParenToken,
500+
includeComments: false
501+
})!;
502+
offsets.setOffsetToken(leftParenToken, 1, id.firstToken);
503+
offsets.setOffsetElementList([node.context], leftParenToken, rightParenToken, 1);
504+
},
465505
// ----------------------------------------------------------------------
466506
// COMMENTS
467507
// ----------------------------------------------------------------------
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 4 spaces but found 0 spaces.
14+
line: 6
15+
column: 1
16+
suggestions: null
17+
- message: Expected indentation of 2 spaces but found 0 spaces.
18+
line: 7
19+
column: 1
20+
suggestions: null
21+
- message: Expected indentation of 2 spaces but found 0 spaces.
22+
line: 11
23+
column: 1
24+
suggestions: null
25+
- message: Expected indentation of 4 spaces but found 0 spaces.
26+
line: 12
27+
column: 1
28+
suggestions: null
29+
- message: Expected indentation of 6 spaces but found 0 spaces.
30+
line: 13
31+
column: 1
32+
suggestions: null
33+
- message: Expected indentation of 4 spaces but found 0 spaces.
34+
line: 14
35+
column: 1
36+
suggestions: null
37+
- message: Expected indentation of 2 spaces but found 0 spaces.
38+
line: 15
39+
column: 1
40+
suggestions: null
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<!-- prettier-ignore -->
2+
{#snippet
3+
foo(
4+
{
5+
a
6+
}
7+
)
8+
}
9+
{/snippet}
10+
{@render
11+
foo(
12+
{
13+
a
14+
}
15+
)
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<!-- prettier-ignore -->
2+
{#snippet
3+
foo(
4+
{
5+
a
6+
}
7+
)
8+
}
9+
{/snippet}
10+
{@render
11+
foo(
12+
{
13+
a
14+
}
15+
)
16+
}

0 commit comments

Comments
 (0)