From e0038863efb6c39d069523f95c341f63c5bb9714 Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Wed, 1 Mar 2023 10:37:38 +0900 Subject: [PATCH 1/2] fix: false positive for element in `svelte/no-unused-svelte-ignore` --- src/shared/svelte-compile-warns/index.ts | 34 ++++++++++++++----- .../valid/element-ignore01-input.svelte | 4 +++ ...ore-input.svelte => ignore01-input.svelte} | 0 .../valid-compile/valid/ignore02-input.svelte | 4 +++ 4 files changed, 33 insertions(+), 9 deletions(-) create mode 100644 tests/fixtures/rules/no-unused-svelte-ignore/valid/element-ignore01-input.svelte rename tests/fixtures/rules/valid-compile/valid/{ignore-input.svelte => ignore01-input.svelte} (100%) create mode 100644 tests/fixtures/rules/valid-compile/valid/ignore02-input.svelte 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 @@ + + + + From eed25ede0fa363dcdc7cf13e8cb5f536242049ef Mon Sep 17 00:00:00 2001 From: Yosuke Ota Date: Wed, 1 Mar 2023 10:40:07 +0900 Subject: [PATCH 2/2] Create .changeset/lovely-hotels-breathe.md --- .changeset/lovely-hotels-breathe.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/lovely-hotels-breathe.md 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`