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 @@
+
+
+
+