Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit ebd7353

Browse filesBrowse files
authored
fix: wrong suggestion for remove all unused keys in vue-i18n/no-unused-keys rule (#474)
* fix: wrong suggestion for remove all unused keys in `no-unused-keys` rule * Create ninety-snakes-scream.md
1 parent 56b1761 commit ebd7353
Copy full SHA for ebd7353

File tree

Expand file treeCollapse file tree

3 files changed

+28
-15
lines changed
Filter options
Expand file treeCollapse file tree

3 files changed

+28
-15
lines changed

‎.changeset/ninety-snakes-scream.md

Copy file name to clipboard
+5Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@intlify/eslint-plugin-vue-i18n": patch
3+
---
4+
5+
fix: wrong suggestion for remove all unused keys in `vue-i18n/no-unused-keys` rule

‎lib/rules/no-unused-keys.ts

Copy file name to clipboardExpand all lines: lib/rules/no-unused-keys.ts
+20-12Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -208,36 +208,44 @@ function create(context: RuleContext): RuleListener {
208208
}
209209

210210
function* fixAllRemoveKeys(fixer: RuleFixer, nodes: JSONAST.JSONNode[]) {
211-
const ranges = nodes.map(node => fixRemoveRange(node))
212-
211+
const removed = new Set<JSONAST.JSONNode>()
213212
let preLast = 0
214-
for (const range of ranges) {
215-
yield fixer.removeRange([Math.max(preLast, range[0]), range[1]])
213+
for (const node of nodes) {
214+
const range = fixRemoveRange(node, removed)
215+
const start = Math.max(preLast, range[0])
216+
yield fixer.removeRange([start, range[1]])
216217
preLast = range[1]
217218
}
218219
}
219220

220-
/**
221-
* @param {JSONNode} node
222-
*/
223-
function fixRemoveRange(node: JSONAST.JSONNode): Range {
221+
function fixRemoveRange(
222+
node: JSONAST.JSONNode,
223+
removedNodes: Set<JSONAST.JSONNode> = new Set()
224+
): Range {
224225
const parent = node.parent!
225226
let removeNode
226227
let isFirst = false
227228
let isLast = false
228229
if (parent.type === 'JSONProperty') {
229230
removeNode = parent
230-
const index = parent.parent.properties.indexOf(parent)
231+
const properties = parent.parent.properties.filter(
232+
p => !removedNodes.has(p)
233+
)
234+
const index = properties.indexOf(parent)
231235
isFirst = index === 0
232-
isLast = index === parent.parent.properties.length - 1
236+
isLast = index === properties.length - 1
233237
} else {
234238
removeNode = node
235239
if (parent.type === 'JSONArrayExpression') {
236-
const index = parent.elements.indexOf(node as never)
240+
const elements = parent.elements.filter(
241+
e => e == null || !removedNodes.has(e)
242+
)
243+
const index = elements.indexOf(node as never)
237244
isFirst = index === 0
238-
isLast = index === parent.elements.length - 1
245+
isLast = index === elements.length - 1
239246
}
240247
}
248+
removedNodes.add(removeNode)
241249
const range: Range = [...removeNode.range]
242250

243251
if (isLast || isFirst) {

‎tests/lib/rules/no-unused-keys.ts

Copy file name to clipboardExpand all lines: tests/lib/rules/no-unused-keys.ts
+3-3Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1576,7 +1576,7 @@ ${' '.repeat(6)}
15761576
- "하이"
15771577
</i18n>
15781578
<i18n locale="ja" lang="json5">
1579-
{,
1579+
{
15801580
"array-unuse": [
15811581
]
15821582
}
@@ -1647,7 +1647,7 @@ ${' '.repeat(6)}
16471647
- "하이"
16481648
</i18n>
16491649
<i18n locale="ja" lang="json5">
1650-
{,
1650+
{
16511651
"array-unuse": [
16521652
]
16531653
}
@@ -1718,7 +1718,7 @@ ${' '.repeat(6)}
17181718
- "하이"
17191719
</i18n>
17201720
<i18n locale="ja" lang="json5">
1721-
{,
1721+
{
17221722
"array-unuse": [
17231723
]
17241724
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.