@@ -950,6 +950,19 @@ export default function (babel) {
950
950
return test ;
951
951
}
952
952
953
+ function containsAliasReference ( path , alias ) {
954
+ let containsAlias = false ;
955
+ path . traverse ( {
956
+ ReferencedIdentifier ( refPath ) {
957
+ if ( refPath . node . name === alias . name ) {
958
+ containsAlias = true ;
959
+ refPath . stop ( ) ;
960
+ }
961
+ }
962
+ } ) ;
963
+ return containsAlias ;
964
+ }
965
+
953
966
function transformMatchCases ( argRef , cases ) {
954
967
return cases . reduce ( ( rootIf , path ) => {
955
968
@@ -1547,9 +1560,9 @@ export default function (babel) {
1547
1560
} ,
1548
1561
1549
1562
MatchExpression ( path ) {
1550
- const { discriminant } = path . node ;
1563
+ const { discriminant, alias = null } = path . node ;
1551
1564
1552
- const argRef = path . scope . generateUidIdentifier ( "it" ) ;
1565
+ const argRef = alias || t . identifier ( "it" ) ;
1553
1566
const matchBody = transformMatchCases ( argRef , path . get ( "cases" ) ) ;
1554
1567
1555
1568
const iife = t . callExpression (
@@ -1561,12 +1574,13 @@ export default function (babel) {
1561
1574
1562
1575
MatchStatement ( path ) {
1563
1576
const { discriminant } = path . node ;
1577
+ const alias = path . node . alias || t . identifier ( "it" ) ;
1564
1578
1565
1579
let argRef ;
1566
- if ( t . isIdentifier ( discriminant ) ) {
1580
+ if ( t . isIdentifier ( discriminant ) && ! containsAliasReference ( path , alias ) ) {
1567
1581
argRef = discriminant ;
1568
1582
} else {
1569
- argRef = path . scope . generateUidIdentifier ( "it" ) ;
1583
+ argRef = alias ;
1570
1584
path . insertBefore ( t . variableDeclaration ( "const" , [
1571
1585
t . variableDeclarator ( argRef , discriminant )
1572
1586
] ) ) ;
0 commit comments