Skip to content

Commit 6422ee8

Browse files
authored
fix: false positive for element in svelte/no-unused-svelte-ignore (#387)
1 parent e00d582 commit 6422ee8

File tree

5 files changed

+38
-9
lines changed

5 files changed

+38
-9
lines changed

.changeset/lovely-hotels-breathe.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 element in `svelte/no-unused-svelte-ignore`

src/shared/svelte-compile-warns/index.ts

+25-9
Original file line numberDiff line numberDiff line change
@@ -511,10 +511,30 @@ function processIgnore(
511511

512512
/** Get warning node */
513513
function getWarningNode(warning: Warning) {
514-
const index = getWarningIndex(warning)
515-
if (index == null) {
516-
return null
514+
const indexes = getWarningIndexes(warning)
515+
if (indexes.start != null) {
516+
const node = getWarningTargetNodeFromIndex(indexes.start)
517+
if (node) {
518+
return node
519+
}
520+
if (indexes.end != null) {
521+
const center = Math.floor(
522+
indexes.start + (indexes.end - indexes.start) / 2,
523+
)
524+
return getWarningTargetNodeFromIndex(center)
525+
}
526+
}
527+
if (indexes.end != null) {
528+
return getWarningTargetNodeFromIndex(indexes.end)
517529
}
530+
531+
return null
532+
}
533+
534+
/**
535+
* Get warning target node from the given index
536+
*/
537+
function getWarningTargetNodeFromIndex(index: number) {
518538
let targetNode = sourceCode.getNodeByRangeIndex(index)
519539
while (targetNode) {
520540
if (
@@ -535,18 +555,14 @@ function processIgnore(
535555
}
536556
targetNode = targetNode.parent || null
537557
}
538-
539558
return null
540559
}
541560

542561
/** Get warning index */
543-
function getWarningIndex(warning: Warning) {
562+
function getWarningIndexes(warning: Warning) {
544563
const start = warning.start && sourceCode.getIndexFromLoc(warning.start)
545564
const end = warning.end && sourceCode.getIndexFromLoc(warning.end)
546-
if (start != null && end != null) {
547-
return Math.floor(start + (end - start) / 2)
548-
}
549-
return start ?? end
565+
return { start, end }
550566
}
551567
}
552568

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" />
4+
</span>
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" />
4+
</span>

0 commit comments

Comments
 (0)