@@ -870,7 +870,11 @@ impl Pure<'_> {
870
870
}
871
871
}
872
872
873
- fn make_ignored_expr ( & mut self , exprs : impl Iterator < Item = Box < Expr > > ) -> Option < Expr > {
873
+ fn make_ignored_expr (
874
+ & mut self ,
875
+ span : Span ,
876
+ exprs : impl Iterator < Item = Box < Expr > > ,
877
+ ) -> Option < Expr > {
874
878
let mut exprs = exprs
875
879
. filter_map ( |mut e| {
876
880
self . ignore_return_value (
@@ -894,7 +898,9 @@ impl Pure<'_> {
894
898
return None ;
895
899
}
896
900
if exprs. len ( ) == 1 {
897
- return Some ( * exprs. remove ( 0 ) ) ;
901
+ let mut new = * exprs. remove ( 0 ) ;
902
+ new. set_span ( span) ;
903
+ return Some ( new) ;
898
904
}
899
905
900
906
Some (
@@ -970,32 +976,41 @@ impl Pure<'_> {
970
976
}
971
977
}
972
978
973
- Expr :: Call ( CallExpr { ctxt, args, .. } ) if ctxt. has_mark ( self . marks . pure ) => {
979
+ Expr :: Call ( CallExpr {
980
+ span, ctxt, args, ..
981
+ } ) if ctxt. has_mark ( self . marks . pure ) => {
974
982
report_change ! ( "ignore_return_value: Dropping a pure call" ) ;
975
983
self . changed = true ;
976
984
977
- let new = self . make_ignored_expr ( args. take ( ) . into_iter ( ) . map ( |arg| arg. expr ) ) ;
985
+ let new =
986
+ self . make_ignored_expr ( * span, args. take ( ) . into_iter ( ) . map ( |arg| arg. expr ) ) ;
978
987
979
988
* e = new. unwrap_or ( Invalid { span : DUMMY_SP } . into ( ) ) ;
980
989
return ;
981
990
}
982
991
983
- Expr :: TaggedTpl ( TaggedTpl { ctxt, tpl, .. } ) if ctxt. has_mark ( self . marks . pure ) => {
992
+ Expr :: TaggedTpl ( TaggedTpl {
993
+ span, ctxt, tpl, ..
994
+ } ) if ctxt. has_mark ( self . marks . pure ) => {
984
995
report_change ! ( "ignore_return_value: Dropping a pure call" ) ;
985
996
self . changed = true ;
986
997
987
- let new = self . make_ignored_expr ( tpl. exprs . take ( ) . into_iter ( ) ) ;
998
+ let new = self . make_ignored_expr ( * span , tpl. exprs . take ( ) . into_iter ( ) ) ;
988
999
989
1000
* e = new. unwrap_or ( Invalid { span : DUMMY_SP } . into ( ) ) ;
990
1001
return ;
991
1002
}
992
1003
993
- Expr :: New ( NewExpr { ctxt, args, .. } ) if ctxt. has_mark ( self . marks . pure ) => {
1004
+ Expr :: New ( NewExpr {
1005
+ span, ctxt, args, ..
1006
+ } ) if ctxt. has_mark ( self . marks . pure ) => {
994
1007
report_change ! ( "ignore_return_value: Dropping a pure call" ) ;
995
1008
self . changed = true ;
996
1009
997
- let new =
998
- self . make_ignored_expr ( args. take ( ) . into_iter ( ) . flatten ( ) . map ( |arg| arg. expr ) ) ;
1010
+ let new = self . make_ignored_expr (
1011
+ * span,
1012
+ args. take ( ) . into_iter ( ) . flatten ( ) . map ( |arg| arg. expr ) ,
1013
+ ) ;
999
1014
1000
1015
* e = new. unwrap_or ( Invalid { span : DUMMY_SP } . into ( ) ) ;
1001
1016
return ;
@@ -1006,6 +1021,7 @@ impl Pure<'_> {
1006
1021
1007
1022
match e {
1008
1023
Expr :: Call ( CallExpr {
1024
+ span,
1009
1025
callee : Callee :: Expr ( callee) ,
1010
1026
args,
1011
1027
..
@@ -1014,20 +1030,23 @@ impl Pure<'_> {
1014
1030
self . changed = true ;
1015
1031
report_change ! ( "Dropping pure call as callee is pure" ) ;
1016
1032
* e = self
1017
- . make_ignored_expr ( args. take ( ) . into_iter ( ) . map ( |arg| arg. expr ) )
1033
+ . make_ignored_expr ( * span , args. take ( ) . into_iter ( ) . map ( |arg| arg. expr ) )
1018
1034
. unwrap_or ( Invalid { span : DUMMY_SP } . into ( ) ) ;
1019
1035
return ;
1020
1036
}
1021
1037
}
1022
1038
1023
1039
Expr :: TaggedTpl ( TaggedTpl {
1024
- tag : callee, tpl, ..
1040
+ span,
1041
+ tag : callee,
1042
+ tpl,
1043
+ ..
1025
1044
} ) => {
1026
1045
if callee. is_pure_callee ( & self . expr_ctx ) {
1027
1046
self . changed = true ;
1028
1047
report_change ! ( "Dropping pure tag tpl as callee is pure" ) ;
1029
1048
* e = self
1030
- . make_ignored_expr ( tpl. exprs . take ( ) . into_iter ( ) )
1049
+ . make_ignored_expr ( * span , tpl. exprs . take ( ) . into_iter ( ) )
1031
1050
. unwrap_or ( Invalid { span : DUMMY_SP } . into ( ) ) ;
1032
1051
return ;
1033
1052
}
@@ -1357,24 +1376,29 @@ impl Pure<'_> {
1357
1376
1358
1377
if self . options . side_effects && self . options . pristine_globals {
1359
1378
match e {
1360
- Expr :: New ( NewExpr { callee, args, .. } )
1361
- if callee. is_one_of_global_ref_to (
1362
- & self . expr_ctx ,
1363
- & [
1364
- "Map" , "Set" , "Array" , "Object" , "Boolean" , "Number" , "String" ,
1365
- ] ,
1366
- ) =>
1379
+ Expr :: New ( NewExpr {
1380
+ span, callee, args, ..
1381
+ } ) if callee. is_one_of_global_ref_to (
1382
+ & self . expr_ctx ,
1383
+ & [
1384
+ "Map" , "Set" , "Array" , "Object" , "Boolean" , "Number" , "String" ,
1385
+ ] ,
1386
+ ) =>
1367
1387
{
1368
1388
report_change ! ( "Dropping a pure new expression" ) ;
1369
1389
1370
1390
self . changed = true ;
1371
1391
* e = self
1372
- . make_ignored_expr ( args. iter_mut ( ) . flatten ( ) . map ( |arg| arg. expr . take ( ) ) )
1392
+ . make_ignored_expr (
1393
+ * span,
1394
+ args. iter_mut ( ) . flatten ( ) . map ( |arg| arg. expr . take ( ) ) ,
1395
+ )
1373
1396
. unwrap_or ( Invalid { span : DUMMY_SP } . into ( ) ) ;
1374
1397
return ;
1375
1398
}
1376
1399
1377
1400
Expr :: Call ( CallExpr {
1401
+ span,
1378
1402
callee : Callee :: Expr ( callee) ,
1379
1403
args,
1380
1404
..
@@ -1387,7 +1411,7 @@ impl Pure<'_> {
1387
1411
1388
1412
self . changed = true ;
1389
1413
* e = self
1390
- . make_ignored_expr ( args. iter_mut ( ) . map ( |arg| arg. expr . take ( ) ) )
1414
+ . make_ignored_expr ( * span , args. iter_mut ( ) . map ( |arg| arg. expr . take ( ) ) )
1391
1415
. unwrap_or ( Invalid { span : DUMMY_SP } . into ( ) ) ;
1392
1416
return ;
1393
1417
}
@@ -1427,7 +1451,7 @@ impl Pure<'_> {
1427
1451
}
1428
1452
1429
1453
* e = self
1430
- . make_ignored_expr ( exprs. into_iter ( ) )
1454
+ . make_ignored_expr ( obj . span , exprs. into_iter ( ) )
1431
1455
. unwrap_or ( Invalid { span : DUMMY_SP } . into ( ) ) ;
1432
1456
report_change ! ( "Ignored an object literal" ) ;
1433
1457
self . changed = true ;
@@ -1499,7 +1523,7 @@ impl Pure<'_> {
1499
1523
}
1500
1524
1501
1525
* e = self
1502
- . make_ignored_expr ( exprs. into_iter ( ) )
1526
+ . make_ignored_expr ( arr . span , exprs. into_iter ( ) )
1503
1527
. unwrap_or ( Invalid { span : DUMMY_SP } . into ( ) ) ;
1504
1528
report_change ! ( "Ignored an array literal" ) ;
1505
1529
self . changed = true ;
@@ -1514,6 +1538,7 @@ impl Pure<'_> {
1514
1538
//
1515
1539
// foo(),basr(),foo;
1516
1540
Expr :: Member ( MemberExpr {
1541
+ span,
1517
1542
obj,
1518
1543
prop : MemberProp :: Computed ( prop) ,
1519
1544
..
@@ -1526,6 +1551,7 @@ impl Pure<'_> {
1526
1551
_ => {
1527
1552
* e = self
1528
1553
. make_ignored_expr (
1554
+ * span,
1529
1555
vec ! [ obj. take( ) , prop. expr. take( ) ] . into_iter ( ) ,
1530
1556
)
1531
1557
. unwrap_or ( Invalid { span : DUMMY_SP } . into ( ) ) ;
0 commit comments