@@ -950,6 +950,19 @@ export default function (babel) {
950950 return test ;
951951 }
952952
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+
953966 function transformMatchCases ( argRef , cases ) {
954967 return cases . reduce ( ( rootIf , path ) => {
955968
@@ -1547,9 +1560,9 @@ export default function (babel) {
15471560 } ,
15481561
15491562 MatchExpression ( path ) {
1550- const { discriminant } = path . node ;
1563+ const { discriminant, alias = null } = path . node ;
15511564
1552- const argRef = path . scope . generateUidIdentifier ( "it" ) ;
1565+ const argRef = alias || t . identifier ( "it" ) ;
15531566 const matchBody = transformMatchCases ( argRef , path . get ( "cases" ) ) ;
15541567
15551568 const iife = t . callExpression (
@@ -1561,12 +1574,13 @@ export default function (babel) {
15611574
15621575 MatchStatement ( path ) {
15631576 const { discriminant } = path . node ;
1577+ const alias = path . node . alias || t . identifier ( "it" ) ;
15641578
15651579 let argRef ;
1566- if ( t . isIdentifier ( discriminant ) ) {
1580+ if ( t . isIdentifier ( discriminant ) && ! containsAliasReference ( path , alias ) ) {
15671581 argRef = discriminant ;
15681582 } else {
1569- argRef = path . scope . generateUidIdentifier ( "it" ) ;
1583+ argRef = alias ;
15701584 path . insertBefore ( t . variableDeclaration ( "const" , [
15711585 t . variableDeclarator ( argRef , discriminant )
15721586 ] ) ) ;
0 commit comments