MCPcopy Create free account
hub / github.com/Snapchat/Valdi / isInExpressionContext

Function isInExpressionContext

compiler/companion/src/TSUtils.ts:63–120  ·  view source on GitHub ↗
(node: ts.Node)

Source from the content-addressed store, hash-verified

61}
62
63export function isInExpressionContext(node: ts.Node): boolean {
64 const { parent } = node;
65 switch (parent.kind) {
66 case ts.SyntaxKind.VariableDeclaration:
67 case ts.SyntaxKind.Parameter:
68 case ts.SyntaxKind.PropertyDeclaration:
69 case ts.SyntaxKind.PropertySignature:
70 case ts.SyntaxKind.EnumMember:
71 case ts.SyntaxKind.PropertyAssignment:
72 case ts.SyntaxKind.BindingElement:
73 return (parent as ts.HasInitializer).initializer === node;
74 case ts.SyntaxKind.ExpressionStatement:
75 case ts.SyntaxKind.IfStatement:
76 case ts.SyntaxKind.DoStatement:
77 case ts.SyntaxKind.WhileStatement:
78 case ts.SyntaxKind.ReturnStatement:
79 case ts.SyntaxKind.WithStatement:
80 case ts.SyntaxKind.SwitchStatement:
81 case ts.SyntaxKind.CaseClause:
82 case ts.SyntaxKind.ThrowStatement:
83 return (<ts.ExpressionStatement>parent).expression === node;
84 case ts.SyntaxKind.ForStatement:
85 const forStatement = <ts.ForStatement>parent;
86 return (
87 (forStatement.initializer === node &&
88 forStatement.initializer.kind !== ts.SyntaxKind.VariableDeclarationList) ||
89 forStatement.condition === node ||
90 forStatement.incrementor === node
91 );
92 case ts.SyntaxKind.ForInStatement:
93 case ts.SyntaxKind.ForOfStatement:
94 const forInStatement = <ts.ForInStatement | ts.ForOfStatement>parent;
95 return (
96 (forInStatement.initializer === node &&
97 forInStatement.initializer.kind !== ts.SyntaxKind.VariableDeclarationList) ||
98 forInStatement.expression === node
99 );
100 case ts.SyntaxKind.TypeAssertionExpression:
101 case ts.SyntaxKind.AsExpression:
102 return node === (<ts.AssertionExpression>parent).expression;
103 case ts.SyntaxKind.TemplateSpan:
104 return node === (<ts.TemplateSpan>parent).expression;
105 case ts.SyntaxKind.ComputedPropertyName:
106 return node === (<ts.ComputedPropertyName>parent).expression;
107 case ts.SyntaxKind.Decorator:
108 case ts.SyntaxKind.JsxExpression:
109 case ts.SyntaxKind.JsxAttribute:
110 case ts.SyntaxKind.JsxSpreadAttribute:
111 case ts.SyntaxKind.SpreadAssignment:
112 return true;
113 case ts.SyntaxKind.ExpressionWithTypeArguments:
114 return (<ts.ExpressionWithTypeArguments>parent).expression === node;
115 case ts.SyntaxKind.ShorthandPropertyAssignment:
116 return (<ts.ShorthandPropertyAssignment>parent).objectAssignmentInitializer === node;
117 default:
118 return isExpressionNode(parent);
119 }
120}

Callers 1

isExpressionNodeFunction · 0.85

Calls 1

isExpressionNodeFunction · 0.85

Tested by

no test coverage detected