(node: ts.Node)
| 61 | } |
| 62 | |
| 63 | export 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 | } |
no test coverage detected