Skip to content

Commit ebd7353

Browse files
authoredFeb 20, 2024··
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

File tree

3 files changed

+28
-15
lines changed

3 files changed

+28
-15
lines changed
 

‎.changeset/ninety-snakes-scream.md

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

+20-12
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

+3-3
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)
Please sign in to comment.