diff --git a/.changeset/lovely-hotels-breathe.md b/.changeset/lovely-hotels-breathe.md new file mode 100644 index 000000000..01c75f87f --- /dev/null +++ b/.changeset/lovely-hotels-breathe.md @@ -0,0 +1,5 @@ +--- +"eslint-plugin-svelte": patch +--- + +fix: false positive for element in `svelte/no-unused-svelte-ignore` diff --git a/src/shared/svelte-compile-warns/index.ts b/src/shared/svelte-compile-warns/index.ts index 9c8e053a5..85c8dbe53 100644 --- a/src/shared/svelte-compile-warns/index.ts +++ b/src/shared/svelte-compile-warns/index.ts @@ -511,10 +511,30 @@ function processIgnore( /** Get warning node */ function getWarningNode(warning: Warning) { - const index = getWarningIndex(warning) - if (index == null) { - return null + const indexes = getWarningIndexes(warning) + if (indexes.start != null) { + const node = getWarningTargetNodeFromIndex(indexes.start) + if (node) { + return node + } + if (indexes.end != null) { + const center = Math.floor( + indexes.start + (indexes.end - indexes.start) / 2, + ) + return getWarningTargetNodeFromIndex(center) + } + } + if (indexes.end != null) { + return getWarningTargetNodeFromIndex(indexes.end) } + + return null + } + + /** + * Get warning target node from the given index + */ + function getWarningTargetNodeFromIndex(index: number) { let targetNode = sourceCode.getNodeByRangeIndex(index) while (targetNode) { if ( @@ -535,18 +555,14 @@ function processIgnore( } targetNode = targetNode.parent || null } - return null } /** Get warning index */ - function getWarningIndex(warning: Warning) { + function getWarningIndexes(warning: Warning) { const start = warning.start && sourceCode.getIndexFromLoc(warning.start) const end = warning.end && sourceCode.getIndexFromLoc(warning.end) - if (start != null && end != null) { - return Math.floor(start + (end - start) / 2) - } - return start ?? end + return { start, end } } } diff --git a/tests/fixtures/rules/no-unused-svelte-ignore/valid/element-ignore01-input.svelte b/tests/fixtures/rules/no-unused-svelte-ignore/valid/element-ignore01-input.svelte new file mode 100644 index 000000000..6f28adfe5 --- /dev/null +++ b/tests/fixtures/rules/no-unused-svelte-ignore/valid/element-ignore01-input.svelte @@ -0,0 +1,4 @@ + + + + diff --git a/tests/fixtures/rules/valid-compile/valid/ignore-input.svelte b/tests/fixtures/rules/valid-compile/valid/ignore01-input.svelte similarity index 100% rename from tests/fixtures/rules/valid-compile/valid/ignore-input.svelte rename to tests/fixtures/rules/valid-compile/valid/ignore01-input.svelte diff --git a/tests/fixtures/rules/valid-compile/valid/ignore02-input.svelte b/tests/fixtures/rules/valid-compile/valid/ignore02-input.svelte new file mode 100644 index 000000000..6f28adfe5 --- /dev/null +++ b/tests/fixtures/rules/valid-compile/valid/ignore02-input.svelte @@ -0,0 +1,4 @@ + + + +