From 6843e9b7147693d9b6ab265c0c49e20aa3218254 Mon Sep 17 00:00:00 2001 From: Miquel de Domingo Date: Thu, 26 Sep 2024 11:18:48 +0200 Subject: [PATCH 1/3] fix(svelte/indent): ensure proper snippet indent --- .../src/rules/indent-helpers/svelte.ts | 38 +++++++++++++----- .../indent/invalid/snippets01-errors.yaml | 40 +++++++++++++++++++ .../indent/invalid/snippets01-input.svelte | 13 ++++++ .../indent/invalid/snippets01-output.svelte | 13 ++++++ 4 files changed, 93 insertions(+), 11 deletions(-) diff --git a/packages/eslint-plugin-svelte/src/rules/indent-helpers/svelte.ts b/packages/eslint-plugin-svelte/src/rules/indent-helpers/svelte.ts index f84e74df6..29f9a75a5 100644 --- a/packages/eslint-plugin-svelte/src/rules/indent-helpers/svelte.ts +++ b/packages/eslint-plugin-svelte/src/rules/indent-helpers/svelte.ts @@ -457,15 +457,12 @@ export function defineVisitor(context: IndentContext): NodeListener { offsets.setOffsetToken(token, 1, openToken); } - const [openCloseTagToken, endAwaitToken, closeCloseTagToken] = sourceCode.getLastTokens( - node, - { - count: 3, - includeComments: false - } - ); + const [openCloseTagToken, endKeyToken, closeCloseTagToken] = sourceCode.getLastTokens(node, { + count: 3, + includeComments: false + }); offsets.setOffsetToken(openCloseTagToken, 0, openToken); - offsets.setOffsetToken(endAwaitToken, 1, openCloseTagToken); + offsets.setOffsetToken(endKeyToken, 1, openCloseTagToken); offsets.setOffsetToken(closeCloseTagToken, 0, openCloseTagToken); }, SvelteSnippetBlock(node: AST.SvelteSnippetBlock) { @@ -474,8 +471,8 @@ export function defineVisitor(context: IndentContext): NodeListener { includeComments: false }); offsets.setOffsetToken(snippetToken, 1, openToken); - const id = getFirstAndLastTokens(sourceCode, node.id); - offsets.setOffsetToken(id.firstToken, 1, snippetToken); + const snippetName = sourceCode.getTokenAfter(snippetToken)!; + offsets.setOffsetToken(snippetName, 1, snippetToken); const leftParenToken = sourceCode.getTokenBefore( node.params[0] || sourceCode.getLastToken(node), @@ -492,8 +489,27 @@ export function defineVisitor(context: IndentContext): NodeListener { includeComments: false } )!; - offsets.setOffsetToken(leftParenToken, 1, id.firstToken); + offsets.setOffsetToken(leftParenToken, 1, snippetName); offsets.setOffsetElementList(node.params, leftParenToken, rightParenToken, 1); + + const closeOpenTagToken = sourceCode.getTokenAfter(rightParenToken)!; + offsets.setOffsetToken(closeOpenTagToken, 0, openToken); + + for (const child of node.children) { + const token = sourceCode.getFirstToken(child, { + includeComments: false, + filter: isNotWhitespace + }); + offsets.setOffsetToken(token, 1, openToken); + } + + const [openCloseTagToken, endSnippetToken, closeCloseTagToken] = sourceCode.getLastTokens( + node, + { count: 3, includeComments: false } + ); + offsets.setOffsetToken(openCloseTagToken, 0, openToken); + offsets.setOffsetToken(endSnippetToken, 1, openCloseTagToken); + offsets.setOffsetToken(closeCloseTagToken, 0, openCloseTagToken); }, // ---------------------------------------------------------------------- // COMMENTS diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-errors.yaml index 0e010e0be..6319b239c 100644 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-errors.yaml +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-errors.yaml @@ -38,3 +38,43 @@ line: 15 column: 1 suggestions: null +- message: Expected indentation of 2 spaces but found 0 spaces. + line: 18 + column: 1 + suggestions: null +- message: Expected indentation of 4 spaces but found 0 spaces. + line: 19 + column: 1 + suggestions: null +- message: Expected indentation of 2 spaces but found 0 spaces. + line: 20 + column: 1 + suggestions: null +- message: Expected indentation of 2 spaces but found 0 spaces. + line: 22 + column: 1 + suggestions: null +- message: Expected indentation of 4 spaces but found 2 spaces. + line: 23 + column: 1 + suggestions: null +- message: Expected indentation of 2 spaces but found 0 spaces. + line: 24 + column: 1 + suggestions: null +- message: Expected indentation of 4 spaces but found 0 spaces. + line: 25 + column: 1 + suggestions: null +- message: Expected indentation of 2 spaces but found 0 spaces. + line: 26 + column: 1 + suggestions: null +- message: Expected indentation of 4 spaces but found 0 spaces. + line: 27 + column: 1 + suggestions: null +- message: Expected indentation of 2 spaces but found 0 spaces. + line: 28 + column: 1 + suggestions: null diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-input.svelte index e86807d17..f1500a4bc 100644 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-input.svelte +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-input.svelte @@ -14,3 +14,16 @@ a } ) } +
+{#snippet example()} +
+{/snippet} + +{ + #snippet example_2() +} +
+{ +/snippet +} +
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-output.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-output.svelte index e07895e54..167f54992 100644 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-output.svelte +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-output.svelte @@ -14,3 +14,16 @@ } ) } +
+ {#snippet example()} +
+ {/snippet} + + { + #snippet example_2() + } +
+ { + /snippet + } +
From 60d6d7ae887fda67782997cc39d00ac22a1c20cb Mon Sep 17 00:00:00 2001 From: Miquel de Domingo Date: Thu, 26 Sep 2024 11:28:21 +0200 Subject: [PATCH 2/3] test(svelte/indent): add extra test case --- .../indent/invalid/snippets01-errors.yaml | 20 +++++++++++++++++++ .../indent/invalid/snippets01-input.svelte | 10 ++++++++++ .../indent/invalid/snippets01-output.svelte | 10 ++++++++++ 3 files changed, 40 insertions(+) diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-errors.yaml index 6319b239c..ac83cef9d 100644 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-errors.yaml +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-errors.yaml @@ -78,3 +78,23 @@ line: 28 column: 1 suggestions: null +- message: Expected indentation of 2 spaces but found 0 spaces. + line: 31 + column: 1 + suggestions: null +- message: Expected indentation of 4 spaces but found 0 spaces. + line: 32 + column: 1 + suggestions: null +- message: Expected indentation of 4 spaces but found 0 spaces. + line: 34 + column: 1 + suggestions: null +- message: Expected indentation of 2 spaces but found 0 spaces. + line: 36 + column: 1 + suggestions: null +- message: Expected indentation of 2 spaces but found 0 spaces. + line: 38 + column: 1 + suggestions: null diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-input.svelte index f1500a4bc..6bec73e88 100644 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-input.svelte +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-input.svelte @@ -27,3 +27,13 @@ a /snippet } +{ +#snippet example_3 +( + +) +} +
+{ +/snippet +} diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-output.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-output.svelte index 167f54992..221a81d42 100644 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-output.svelte +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/indent/invalid/snippets01-output.svelte @@ -27,3 +27,13 @@ /snippet } +{ + #snippet example_3 + ( + + ) +} +
+{ + /snippet +} From 659ad599afa14490a307e5591c8a717fc90860e4 Mon Sep 17 00:00:00 2001 From: Yosuke Ota Date: Fri, 27 Sep 2024 08:09:39 +0900 Subject: [PATCH 3/3] Create nervous-rings-applaud.md --- .changeset/nervous-rings-applaud.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/nervous-rings-applaud.md diff --git a/.changeset/nervous-rings-applaud.md b/.changeset/nervous-rings-applaud.md new file mode 100644 index 000000000..81db8c4c4 --- /dev/null +++ b/.changeset/nervous-rings-applaud.md @@ -0,0 +1,5 @@ +--- +"eslint-plugin-svelte": patch +--- + +fix(svelte/indent): ensure proper snippet indent