diff --git a/.changeset/wise-fireants-obey.md b/.changeset/wise-fireants-obey.md new file mode 100644 index 000000000..8f37980cb --- /dev/null +++ b/.changeset/wise-fireants-obey.md @@ -0,0 +1,5 @@ +--- +"eslint-plugin-svelte": patch +--- + +fix(no-useless-mustaches): Wrong auto-fix for quoted mustaches diff --git a/packages/eslint-plugin-svelte/src/rules/no-useless-mustaches.ts b/packages/eslint-plugin-svelte/src/rules/no-useless-mustaches.ts index 05d3af28e..d8da0cc11 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-useless-mustaches.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-useless-mustaches.ts @@ -142,14 +142,21 @@ export default createRule('no-useless-mustaches', { node.parent.key.range[1], node.parent.value[0].range[0] ); - if (!div.endsWith('"') && !div.endsWith("'")) { + const quote = div.endsWith('"') ? 'quot' : div.endsWith("'") ? 'apos' : null; + if (!quote) { return [ fixer.insertTextBefore(node.parent.value[0], '"'), fixer.replaceText(node, unescaped.replace(/"/gu, '"')), fixer.insertTextAfter(node.parent.value[node.parent.value.length - 1], '"') ]; } - return fixer.replaceText(node, unescaped); + + return fixer.replaceText( + node, + quote === 'quot' + ? unescaped.replace(/"/gu, '"') + : unescaped.replace(/'/gu, ''') + ); } return fixer.replaceText(node, unescaped.replace(//gu, '>')); } diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/quote-test02-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/quote-test02-errors.yaml new file mode 100644 index 000000000..ee6ce5e3e --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/quote-test02-errors.yaml @@ -0,0 +1,16 @@ +- message: Unexpected mustache interpolation with a string literal value. + line: 2 + column: 17 + suggestions: null +- message: Unexpected mustache interpolation with a string literal value. + line: 4 + column: 17 + suggestions: null +- message: Unexpected mustache interpolation with a string literal value. + line: 6 + column: 17 + suggestions: null +- message: Unexpected mustache interpolation with a string literal value. + line: 8 + column: 17 + suggestions: null diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/quote-test02-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/quote-test02-input.svelte new file mode 100644 index 000000000..43dbb27d9 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/quote-test02-input.svelte @@ -0,0 +1,8 @@ + +
+ + + + + + diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/quote-test02-output.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/quote-test02-output.svelte new file mode 100644 index 000000000..fd9b14743 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-useless-mustaches/invalid/quote-test02-output.svelte @@ -0,0 +1,8 @@ + + + + + + + +