Don't treat an instantiation expression as an assertion in skipOuterExpressions (#59538)

This commit is contained in:
Jake Bailey
2024-08-06 15:01:46 -07:00
committed by GitHub
parent a745d1b205
commit 99878128f0
10 changed files with 166 additions and 6 deletions
+2
View File
@@ -6553,6 +6553,8 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
return updateSatisfiesExpression(outerExpression, expression, outerExpression.type);
case SyntaxKind.NonNullExpression:
return updateNonNullExpression(outerExpression, expression);
case SyntaxKind.ExpressionWithTypeArguments:
return updateExpressionWithTypeArguments(outerExpression, expression, outerExpression.typeArguments);
case SyntaxKind.PartiallyEmittedExpression:
return updatePartiallyEmittedExpression(outerExpression, expression);
}
+2 -1
View File
@@ -630,9 +630,10 @@ export function isOuterExpression(node: Node, kinds = OuterExpressionKinds.All):
return (kinds & OuterExpressionKinds.Parentheses) !== 0;
case SyntaxKind.TypeAssertionExpression:
case SyntaxKind.AsExpression:
case SyntaxKind.ExpressionWithTypeArguments:
case SyntaxKind.SatisfiesExpression:
return (kinds & OuterExpressionKinds.TypeAssertions) !== 0;
case SyntaxKind.ExpressionWithTypeArguments:
return (kinds & OuterExpressionKinds.ExpressionsWithTypeArguments) !== 0;
case SyntaxKind.NonNullExpression:
return (kinds & OuterExpressionKinds.NonNullAssertions) !== 0;
case SyntaxKind.PartiallyEmittedExpression:
+1 -1
View File
@@ -1689,7 +1689,7 @@ export function transformTypeScript(context: TransformationContext) {
}
function visitParenthesizedExpression(node: ParenthesizedExpression): Expression {
const innerExpression = skipOuterExpressions(node.expression, ~OuterExpressionKinds.Assertions);
const innerExpression = skipOuterExpressions(node.expression, ~(OuterExpressionKinds.Assertions | OuterExpressionKinds.ExpressionsWithTypeArguments));
if (isAssertionExpression(innerExpression) || isSatisfiesExpression(innerExpression)) {
// Make sure we consider all nested cast expressions, e.g.:
// (<any><number><any>-A).x;
+4 -2
View File
@@ -8476,11 +8476,12 @@ export const enum OuterExpressionKinds {
TypeAssertions = 1 << 1,
NonNullAssertions = 1 << 2,
PartiallyEmittedExpressions = 1 << 3,
ExpressionsWithTypeArguments = 1 << 4,
Assertions = TypeAssertions | NonNullAssertions,
All = Parentheses | Assertions | PartiallyEmittedExpressions,
All = Parentheses | Assertions | PartiallyEmittedExpressions | ExpressionsWithTypeArguments,
ExcludeJSDocTypeAssertion = 1 << 4,
ExcludeJSDocTypeAssertion = 1 << 31,
}
/** @internal */
@@ -8490,6 +8491,7 @@ export type OuterExpression =
| SatisfiesExpression
| AsExpression
| NonNullExpression
| ExpressionWithTypeArguments
| PartiallyEmittedExpression;
/** @internal */