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

Function GetContainerFlags

internal/binder/binder.go:2558–2600  ·  view source on GitHub ↗

** * Declares a Symbol for the node and adds it to symbols. Reports errors for conflicting identifier names. * @param symbolTable - The symbol table which node will be added to. * @param parent - node's parent declaration. * @param node - The declaration to be added to the symbol table * @param

(node *ast.Node)

Source from the content-addressed store, hash-verified

2556 */
2557
2558func GetContainerFlags(node *ast.Node) ContainerFlags {
2559 switch node.Kind {
2560 case ast.KindClassExpression, ast.KindClassDeclaration, ast.KindEnumDeclaration, ast.KindObjectLiteralExpression, ast.KindTypeLiteral,
2561 ast.KindJsxAttributes:
2562 return ContainerFlagsIsContainer
2563 case ast.KindInterfaceDeclaration:
2564 return ContainerFlagsIsContainer | ContainerFlagsIsInterface
2565 case ast.KindModuleDeclaration, ast.KindTypeAliasDeclaration, ast.KindJSTypeAliasDeclaration, ast.KindMappedType, ast.KindIndexSignature:
2566 return ContainerFlagsIsContainer | ContainerFlagsHasLocals
2567 case ast.KindSourceFile:
2568 return ContainerFlagsIsContainer | ContainerFlagsIsControlFlowContainer | ContainerFlagsHasLocals
2569 case ast.KindGetAccessor, ast.KindSetAccessor, ast.KindMethodDeclaration:
2570 if ast.IsObjectLiteralOrClassExpressionMethodOrAccessor(node) {
2571 return ContainerFlagsIsContainer | ContainerFlagsIsControlFlowContainer | ContainerFlagsHasLocals | ContainerFlagsIsFunctionLike | ContainerFlagsIsObjectLiteralOrClassExpressionMethodOrAccessor | ContainerFlagsIsThisContainer
2572 }
2573 fallthrough
2574 case ast.KindConstructor, ast.KindFunctionDeclaration, ast.KindClassStaticBlockDeclaration:
2575 return ContainerFlagsIsContainer | ContainerFlagsIsControlFlowContainer | ContainerFlagsHasLocals | ContainerFlagsIsFunctionLike | ContainerFlagsIsThisContainer
2576 case ast.KindMethodSignature, ast.KindCallSignature, ast.KindFunctionType, ast.KindConstructSignature, ast.KindConstructorType:
2577 return ContainerFlagsIsContainer | ContainerFlagsIsControlFlowContainer | ContainerFlagsHasLocals | ContainerFlagsIsFunctionLike | ContainerFlagsPropagatesThisKeyword
2578 case ast.KindFunctionExpression:
2579 return ContainerFlagsIsContainer | ContainerFlagsIsControlFlowContainer | ContainerFlagsHasLocals | ContainerFlagsIsFunctionLike | ContainerFlagsIsFunctionExpression | ContainerFlagsIsThisContainer
2580 case ast.KindArrowFunction:
2581 return ContainerFlagsIsContainer | ContainerFlagsIsControlFlowContainer | ContainerFlagsHasLocals | ContainerFlagsIsFunctionLike | ContainerFlagsIsFunctionExpression | ContainerFlagsPropagatesThisKeyword
2582 case ast.KindModuleBlock:
2583 return ContainerFlagsIsControlFlowContainer
2584 case ast.KindPropertyDeclaration:
2585 if node.Initializer() != nil {
2586 return ContainerFlagsIsControlFlowContainer | ContainerFlagsIsThisContainer
2587 } else {
2588 return ContainerFlagsNone
2589 }
2590 case ast.KindCatchClause, ast.KindForStatement, ast.KindForInStatement, ast.KindForOfStatement, ast.KindCaseBlock:
2591 return ContainerFlagsIsBlockScopedContainer | ContainerFlagsHasLocals
2592 case ast.KindBlock:
2593 if ast.IsFunctionLike(node.Parent) || ast.IsClassStaticBlockDeclaration(node.Parent) {
2594 return ContainerFlagsNone
2595 } else {
2596 return ContainerFlagsIsBlockScopedContainer | ContainerFlagsHasLocals
2597 }
2598 }
2599 return ContainerFlagsNone
2600}
2601
2602func isNarrowingExpression(expr *ast.Node) bool {
2603 switch expr.Kind {

Callers 2

getEnclosingContainerFunction · 0.92
bindMethod · 0.85

Calls 4

IsFunctionLikeFunction · 0.92
InitializerMethod · 0.80

Tested by

no test coverage detected