@@ -389,13 +389,21 @@ impl TsStrip {
389
389
..
390
390
} = & self . tokens [ index - 1 ] ;
391
391
392
- let index = self . get_prev_token_index ( span. hi ) ;
392
+ let index = self . get_prev_token_index ( span. hi - BytePos ( 1 ) ) ;
393
393
if index == self . tokens . len ( ) - 1 {
394
394
// Skip if the token is the last token.
395
395
return ;
396
396
}
397
397
398
- let TokenAndSpan { token, .. } = & self . tokens [ index + 1 ] ;
398
+ let TokenAndSpan {
399
+ token,
400
+ had_line_break,
401
+ ..
402
+ } = & self . tokens [ index + 1 ] ;
403
+
404
+ if !* had_line_break {
405
+ return ;
406
+ }
399
407
400
408
// Add a semicolon if the next token is `[`, `(`, `/`, `+`, or `-`
401
409
match token {
@@ -413,6 +421,23 @@ impl TsStrip {
413
421
_ => { }
414
422
}
415
423
}
424
+
425
+ fn fix_asi_in_expr ( & mut self , span : Span ) {
426
+ let index = self . get_prev_token_index ( span. hi - BytePos ( 1 ) ) ;
427
+ if index == self . tokens . len ( ) - 1 {
428
+ return ;
429
+ }
430
+
431
+ if let TokenAndSpan {
432
+ // Only `([` affect ASI.
433
+ token : Token :: LParen | Token :: LBracket ,
434
+ had_line_break : true ,
435
+ ..
436
+ } = & self . tokens [ index + 1 ]
437
+ {
438
+ self . add_overwrite ( span. lo , b';' ) ;
439
+ }
440
+ }
416
441
}
417
442
418
443
impl Visit for TsStrip {
@@ -708,6 +733,16 @@ impl Visit for TsStrip {
708
733
709
734
fn visit_ts_as_expr ( & mut self , n : & TsAsExpr ) {
710
735
self . add_replacement ( span ( n. expr . span ( ) . hi , n. span . hi ) ) ;
736
+ let TokenAndSpan {
737
+ token,
738
+ span : as_span,
739
+ ..
740
+ } = self . get_next_token ( n. expr . span_hi ( ) ) ;
741
+ debug_assert_eq ! (
742
+ token,
743
+ & Token :: Word ( Word :: Ident ( IdentLike :: Known ( KnownIdent :: As ) ) )
744
+ ) ;
745
+ self . fix_asi_in_expr ( span ( as_span. lo , n. span . hi ) ) ;
711
746
712
747
n. expr . visit_children_with ( self ) ;
713
748
}
@@ -820,6 +855,17 @@ impl Visit for TsStrip {
820
855
fn visit_ts_satisfies_expr ( & mut self , n : & TsSatisfiesExpr ) {
821
856
self . add_replacement ( span ( n. expr . span ( ) . hi , n. span . hi ) ) ;
822
857
858
+ let TokenAndSpan {
859
+ token,
860
+ span : as_span,
861
+ ..
862
+ } = self . get_next_token ( n. expr . span_hi ( ) ) ;
863
+ debug_assert_eq ! (
864
+ token,
865
+ & Token :: Word ( Word :: Ident ( IdentLike :: Known ( KnownIdent :: Satisfies ) ) )
866
+ ) ;
867
+ self . fix_asi_in_expr ( span ( as_span. lo , n. span . hi ) ) ;
868
+
823
869
n. expr . visit_children_with ( self ) ;
824
870
}
825
871
0 commit comments