Skip to content

Commit 0ecab95

Browse files
authored
fix: false positive for kebab-case with svelte v5 in svelte/no-unused-svelte-ignore (#772)
fixes #765
1 parent 13cf65c commit 0ecab95

23 files changed

+34
-59
lines changed

.changeset/ninety-poets-divide.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"eslint-plugin-svelte": patch
3+
---
4+
5+
fix: false positive for kebab-case with svelte v5 in `svelte/no-unused-svelte-ignore`

packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/ignore-comment.ts

+18
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,22 @@ import { getSourceCode } from '../../utils/compat';
44

55
const SVELTE_IGNORE_PATTERN = /^\s*svelte-ignore/m;
66

7+
/**
8+
* Map of legacy code -> new code
9+
* See https://github.com/sveltejs/svelte/blob/c9202a889612df3c2fcb369096a5573668be99d6/packages/svelte/src/compiler/utils/extract_svelte_ignore.js#L6
10+
*/
11+
const V5_REPLACEMENTS: Record<string, string | undefined> = {
12+
'non-top-level-reactive-declaration': 'reactive_declaration_invalid_placement',
13+
'module-script-reactive-declaration': 'reactive_declaration_module_script',
14+
'empty-block': 'block_empty',
15+
'avoid-is': 'attribute_avoid_is',
16+
'invalid-html-attribute': 'attribute_invalid_property_name',
17+
'a11y-structure': 'a11y_figcaption_parent',
18+
'illegal-attribute-character': 'attribute_illegal_colon',
19+
'invalid-rest-eachblock-binding': 'bind_invalid_each_rest',
20+
'unused-export-let': 'export_let_unused'
21+
};
22+
723
export type IgnoreItemWithoutCode = {
824
range: [number, number];
925
code: null;
@@ -12,6 +28,7 @@ export type IgnoreItemWithoutCode = {
1228
export type IgnoreItem = {
1329
range: [number, number];
1430
code: string;
31+
codeForV5: string; // Code targeting Svelte v5.
1532
token: AST.Token | AST.Comment;
1633
};
1734

@@ -75,6 +92,7 @@ function extractSvelteIgnore(
7592
if (trimmed) {
7693
results.push({
7794
code: trimmed,
95+
codeForV5: V5_REPLACEMENTS[trimmed] || trimmed.replace(/-/gu, '_'),
7896
range: [start, end],
7997
token
8098
});

packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/index.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ const STYLE_TRANSFORMS: Record<string, typeof transformWithPostCSS | undefined>
4545

4646
const CSS_WARN_CODES = new Set([
4747
'css-unused-selector',
48+
'css_unused_selector',
4849
'css-invalid-global',
4950
'css-invalid-global-selector'
5051
]);
@@ -481,7 +482,9 @@ function processIgnore(
481482
while (node) {
482483
for (const comment of extractLeadingComments(context, node).reverse()) {
483484
const ignoreItem = ignoreComments.find(
484-
(item) => item.token === comment && item.code === warning.code
485+
(item) =>
486+
item.token === comment &&
487+
(item.code === warning.code || item.codeForV5 === warning.code)
485488
);
486489
if (ignoreItem) {
487490
unusedIgnores.delete(ignoreItem);
@@ -497,7 +500,9 @@ function processIgnore(
497500
for (const node of stripStyleElements) {
498501
for (const comment of extractLeadingComments(context, node).reverse()) {
499502
const ignoreItem = ignoreComments.find(
500-
(item) => item.token === comment && CSS_WARN_CODES.has(item.code)
503+
(item) =>
504+
item.token === comment &&
505+
(CSS_WARN_CODES.has(item.code) || CSS_WARN_CODES.has(item.codeForV5))
501506
);
502507
if (ignoreItem) {
503508
unusedIgnores.delete(ignoreItem);

packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/html-comment-svelte4-requirements.json

-3
This file was deleted.

packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/invalid-svelte-ignore01-svelte4-requirements.json

-3
This file was deleted.

packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/invalid-svelte-ignore02-svelte4-requirements.json

-3
This file was deleted.

packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/invalid-svelte-ignore03-svelte4-requirements.json

-3
This file was deleted.

packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/script-comment01-svelte4-requirements.json

-3
This file was deleted.

packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/script-comment02-svelte4-requirements.json

-3
This file was deleted.

packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/invalid/transform-test-svelte4-requirements.json

-3
This file was deleted.

packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/element-ignore01-svelte4-requirements.json

-3
This file was deleted.

packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/has-error-svelte4-requirements.json

-3
This file was deleted.

packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/html-comment-svelte4-requirements.json

-3
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<!-- svelte-ignore a11y-no-noninteractive-tabindex -->
2+
<span tabindex="0">
3+
<span class="element"></span>
4+
</span>

packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/script-comment-svelte4-requirements.json

-3
This file was deleted.

packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore01-svelte4-requirements.json

-3
This file was deleted.

packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore02-svelte4-requirements.json

-3
This file was deleted.

packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore03-svelte4-requirements.json

-3
This file was deleted.

packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore04-svelte4-requirements.json

-3
This file was deleted.

packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore05-svelte4-requirements.json

-3
This file was deleted.

packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore06-svelte4-requirements.json

-3
This file was deleted.

packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/svelte-ignore07-svelte4-requirements.json

-3
This file was deleted.

packages/eslint-plugin-svelte/tests/fixtures/rules/no-unused-svelte-ignore/valid/ts-lang01-svelte4-requirements.json

-3
This file was deleted.

0 commit comments

Comments
 (0)