@@ -208,36 +208,44 @@ function create(context: RuleContext): RuleListener {
208
208
}
209
209
210
210
function * fixAllRemoveKeys ( fixer : RuleFixer , nodes : JSONAST . JSONNode [ ] ) {
211
- const ranges = nodes . map ( node => fixRemoveRange ( node ) )
212
-
211
+ const removed = new Set < JSONAST . JSONNode > ( )
213
212
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 ] ] )
216
217
preLast = range [ 1 ]
217
218
}
218
219
}
219
220
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 {
224
225
const parent = node . parent !
225
226
let removeNode
226
227
let isFirst = false
227
228
let isLast = false
228
229
if ( parent . type === 'JSONProperty' ) {
229
230
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 )
231
235
isFirst = index === 0
232
- isLast = index === parent . parent . properties . length - 1
236
+ isLast = index === properties . length - 1
233
237
} else {
234
238
removeNode = node
235
239
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 )
237
244
isFirst = index === 0
238
- isLast = index === parent . elements . length - 1
245
+ isLast = index === elements . length - 1
239
246
}
240
247
}
248
+ removedNodes . add ( removeNode )
241
249
const range : Range = [ ...removeNode . range ]
242
250
243
251
if ( isLast || isFirst ) {
0 commit comments