MCPcopy Create free account
hub / github.com/microsoft/typescript-go / isNarrowingExpression

Function isNarrowingExpression

internal/binder/binder.go:2602–2618  ·  view source on GitHub ↗
(expr *ast.Node)

Source from the content-addressed store, hash-verified

2600}
2601
2602func isNarrowingExpression(expr *ast.Node) bool {
2603 switch expr.Kind {
2604 case ast.KindIdentifier, ast.KindThisKeyword:
2605 return true
2606 case ast.KindPropertyAccessExpression, ast.KindElementAccessExpression:
2607 return containsNarrowableReference(expr)
2608 case ast.KindCallExpression:
2609 return hasNarrowableArgument(expr)
2610 case ast.KindParenthesizedExpression, ast.KindNonNullExpression, ast.KindTypeOfExpression:
2611 return isNarrowingExpression(expr.Expression())
2612 case ast.KindBinaryExpression:
2613 return isNarrowingBinaryExpression(expr.AsBinaryExpression())
2614 case ast.KindPrefixUnaryExpression:
2615 return expr.AsPrefixUnaryExpression().Operator == ast.KindExclamationToken && isNarrowingExpression(expr.AsPrefixUnaryExpression().Operand)
2616 }
2617 return false
2618}
2619
2620func containsNarrowableReference(expr *ast.Node) bool {
2621 if isNarrowableReference(expr) {

Callers 3

createFlowConditionMethod · 0.85
bindCaseBlockMethod · 0.85

Calls 6

hasNarrowableArgumentFunction · 0.85
ExpressionMethod · 0.80
AsBinaryExpressionMethod · 0.80

Tested by

no test coverage detected