@@ -4953,7 +4953,11 @@ namespace ts {
4953
4953
4954
4954
/* @internal */
4955
4955
export function isLeftHandSideExpression ( node : Node ) : node is LeftHandSideExpression {
4956
- switch ( node . kind ) {
4956
+ return isLeftHandSideExpressionKind ( skipPartiallyEmittedExpressions ( node ) . kind ) ;
4957
+ }
4958
+
4959
+ function isLeftHandSideExpressionKind ( kind : SyntaxKind ) : boolean {
4960
+ switch ( kind ) {
4957
4961
case SyntaxKind . PropertyAccessExpression :
4958
4962
case SyntaxKind . ElementAccessExpression :
4959
4963
case SyntaxKind . NewExpression :
@@ -4979,19 +4983,20 @@ namespace ts {
4979
4983
case SyntaxKind . SuperKeyword :
4980
4984
case SyntaxKind . NonNullExpression :
4981
4985
case SyntaxKind . MetaProperty :
4986
+ case SyntaxKind . ImportKeyword : // technically this is only an Expression if it's in a CallExpression
4982
4987
return true ;
4983
- case SyntaxKind . PartiallyEmittedExpression :
4984
- return isLeftHandSideExpression ( ( node as PartiallyEmittedExpression ) . expression ) ;
4985
- case SyntaxKind . ImportKeyword :
4986
- return node . parent . kind === SyntaxKind . CallExpression ;
4987
4988
default :
4988
4989
return false ;
4989
4990
}
4990
4991
}
4991
4992
4992
4993
/* @internal */
4993
4994
export function isUnaryExpression ( node : Node ) : node is UnaryExpression {
4994
- switch ( node . kind ) {
4995
+ return isUnaryExpressionKind ( skipPartiallyEmittedExpressions ( node ) . kind ) ;
4996
+ }
4997
+
4998
+ function isUnaryExpressionKind ( kind : SyntaxKind ) : boolean {
4999
+ switch ( kind ) {
4995
5000
case SyntaxKind . PrefixUnaryExpression :
4996
5001
case SyntaxKind . PostfixUnaryExpression :
4997
5002
case SyntaxKind . DeleteExpression :
@@ -5000,10 +5005,8 @@ namespace ts {
5000
5005
case SyntaxKind . AwaitExpression :
5001
5006
case SyntaxKind . TypeAssertionExpression :
5002
5007
return true ;
5003
- case SyntaxKind . PartiallyEmittedExpression :
5004
- return isUnaryExpression ( ( node as PartiallyEmittedExpression ) . expression ) ;
5005
5008
default :
5006
- return isLeftHandSideExpression ( node ) ;
5009
+ return isLeftHandSideExpressionKind ( kind ) ;
5007
5010
}
5008
5011
}
5009
5012
@@ -5021,8 +5024,16 @@ namespace ts {
5021
5024
}
5022
5025
5023
5026
/* @internal */
5027
+ /**
5028
+ * Determines whether a node is an expression based only on its kind.
5029
+ * Use `isPartOfExpression` if not in transforms.
5030
+ */
5024
5031
export function isExpression ( node : Node ) : node is Expression {
5025
- switch ( node . kind ) {
5032
+ return isExpressionKind ( skipPartiallyEmittedExpressions ( node ) . kind ) ;
5033
+ }
5034
+
5035
+ function isExpressionKind ( kind : SyntaxKind ) : boolean {
5036
+ switch ( kind ) {
5026
5037
case SyntaxKind . ConditionalExpression :
5027
5038
case SyntaxKind . YieldExpression :
5028
5039
case SyntaxKind . ArrowFunction :
@@ -5034,7 +5045,7 @@ namespace ts {
5034
5045
case SyntaxKind . PartiallyEmittedExpression :
5035
5046
return true ;
5036
5047
default :
5037
- return isUnaryExpression ( node ) ;
5048
+ return isUnaryExpressionKind ( kind ) ;
5038
5049
}
5039
5050
}
5040
5051
0 commit comments