@@ -39,20 +39,6 @@ export interface VisitContext<T> {
3939 path : ( ) => T [ ]
4040}
4141
42- function replace < T > ( nodes : T [ ] , index : number , replacements : T [ ] ) {
43- switch ( replacements . length ) {
44- case 0 :
45- nodes . splice ( index , 1 )
46- break
47- case 1 :
48- nodes [ index ] = replacements [ 0 ]
49- break
50- default :
51- nodes . splice ( index , 1 , ...replacements )
52- break
53- }
54- }
55-
5642export function walk < T extends object > (
5743 ast : T [ ] ,
5844 hooks :
@@ -137,17 +123,17 @@ function walkEnter<T extends { nodes?: T[] }>(
137123 // Replace current node, with new nodes. No need to change the offset
138124 // because we want to re-visit the current index, which now contains the
139125 // new nodes.
140- replace ( nodes , offset , result . nodes )
126+ nodes . splice ( offset , 1 , ... result . nodes )
141127 continue
142128 }
143129
144130 case WalkKind . ReplaceStop : {
145- replace ( nodes , offset , result . nodes ) // Replace current node
131+ nodes . splice ( offset , 1 , ... result . nodes ) // Replace current node
146132 return // Stop immediately
147133 }
148134
149135 case WalkKind . ReplaceSkip : {
150- replace ( nodes , offset , result . nodes ) // Replace current node
136+ nodes . splice ( offset , 1 , ... result . nodes ) // Replace current node
151137 stack [ depth ] [ 1 ] += result . nodes . length // Advance to next sibling past replacements
152138 continue
153139 }
@@ -223,13 +209,13 @@ function walkExit<T extends { nodes?: T[] }>(
223209 return // Stop immediately
224210
225211 case WalkKind . ReplaceStop : {
226- replace ( nodes , offset , result . nodes )
212+ nodes . splice ( offset , 1 , ... result . nodes )
227213 return // Stop immediately
228214 }
229215
230216 case WalkKind . Replace :
231217 case WalkKind . ReplaceSkip : {
232- replace ( nodes , offset , result . nodes )
218+ nodes . splice ( offset , 1 , ... result . nodes )
233219 stack [ depth ] [ 1 ] += result . nodes . length
234220 continue
235221 }
@@ -260,13 +246,13 @@ function walkExit<T extends { nodes?: T[] }>(
260246 return // Stop immediately
261247
262248 case WalkKind . ReplaceStop : {
263- replace ( nodes , index , result . nodes )
249+ nodes . splice ( index , 1 , ... result . nodes )
264250 return // Stop immediately
265251 }
266252
267253 case WalkKind . Replace :
268254 case WalkKind . ReplaceSkip : {
269- replace ( nodes , index , result . nodes )
255+ nodes . splice ( index , 1 , ... result . nodes )
270256 stack [ depth ] [ 1 ] = index + result . nodes . length // Advance to next sibling past replacements
271257 continue
272258 }
@@ -346,12 +332,12 @@ function walkEnterExit<T extends { nodes?: T[] }>(
346332 return // Stop immediately
347333
348334 case WalkKind . ReplaceStop :
349- replace ( nodes , offset , result . nodes )
335+ nodes . splice ( offset , 1 , ... result . nodes )
350336 return // Stop immediately
351337
352338 case WalkKind . Replace :
353339 case WalkKind . ReplaceSkip :
354- replace ( nodes , offset , result . nodes )
340+ nodes . splice ( offset , 1 , ... result . nodes )
355341 stack [ depth ] [ 1 ] += result . nodes . length // Advance to next sibling past replacements
356342 continue
357343
@@ -382,16 +368,16 @@ function walkEnterExit<T extends { nodes?: T[] }>(
382368 return // Stop immediately
383369
384370 case WalkKind . Replace :
385- replace ( nodes , offset , result . nodes )
371+ nodes . splice ( offset , 1 , ... result . nodes )
386372 stack [ depth ] [ 1 ] += result . nodes . length // don't visit replacements' exits
387373 continue
388374
389375 case WalkKind . ReplaceStop :
390- replace ( nodes , offset , result . nodes )
376+ nodes . splice ( offset , 1 , ... result . nodes )
391377 return // Stop immediately
392378
393379 case WalkKind . ReplaceSkip :
394- replace ( nodes , offset , result . nodes )
380+ nodes . splice ( offset , 1 , ... result . nodes )
395381 stack [ depth ] [ 1 ] += result . nodes . length // don't visit replacements' exits
396382 continue
397383
@@ -407,17 +393,17 @@ function walkEnterExit<T extends { nodes?: T[] }>(
407393
408394 case WalkKind . Replace : {
409395 // Replace current node; re-visit current index (enter on first replacement)
410- replace ( nodes , offset , result . nodes )
396+ nodes . splice ( offset , 1 , ... result . nodes )
411397 continue
412398 }
413399
414400 case WalkKind . ReplaceStop : {
415- replace ( nodes , offset , result . nodes )
401+ nodes . splice ( offset , 1 , ... result . nodes )
416402 return // Stop immediately
417403 }
418404
419405 case WalkKind . ReplaceSkip : {
420- replace ( nodes , offset , result . nodes )
406+ nodes . splice ( offset , 1 , ... result . nodes )
421407 stack [ depth ] [ 1 ] += result . nodes . length // Advance to next sibling past replacements
422408 continue
423409 }
@@ -448,18 +434,18 @@ function walkEnterExit<T extends { nodes?: T[] }>(
448434 return // Stop immediately
449435
450436 case WalkKind . Replace : {
451- replace ( nodes , index , result . nodes )
437+ nodes . splice ( index , 1 , ... result . nodes )
452438 stack [ depth ] [ 1 ] = index + result . nodes . length // Advance to next sibling past replacements
453439 continue
454440 }
455441
456442 case WalkKind . ReplaceStop : {
457- replace ( nodes , index , result . nodes )
443+ nodes . splice ( index , 1 , ... result . nodes )
458444 return // Stop immediately
459445 }
460446
461447 case WalkKind . ReplaceSkip : {
462- replace ( nodes , index , result . nodes )
448+ nodes . splice ( index , 1 , ... result . nodes )
463449 stack [ depth ] [ 1 ] = index + result . nodes . length // Advance to next sibling past replacements
464450 continue
465451 }
0 commit comments