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

Method computeDeclarationMap

internal/ast/ast.go:2847–2955  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

2845}
2846
2847func (node *SourceFile) computeDeclarationMap() map[string][]*Node {
2848 result := make(map[string][]*Node)
2849
2850 addDeclaration := func(declaration *Node) {
2851 name := GetDeclarationName(declaration)
2852 if name != "" {
2853 result[name] = append(result[name], declaration)
2854 }
2855 }
2856
2857 var visit func(*Node) bool
2858 visit = func(node *Node) bool {
2859 switch node.Kind {
2860 case KindFunctionDeclaration, KindFunctionExpression, KindMethodDeclaration, KindMethodSignature:
2861 declarationName := GetDeclarationName(node)
2862 if declarationName != "" {
2863 declarations := result[declarationName]
2864 var lastDeclaration *Node
2865 if len(declarations) != 0 {
2866 lastDeclaration = declarations[len(declarations)-1]
2867 }
2868 // Check whether this declaration belongs to an "overload group".
2869 if lastDeclaration != nil && node.Parent == lastDeclaration.Parent && node.Symbol() == lastDeclaration.Symbol() {
2870 // Overwrite the last declaration if it was an overload and this one is an implementation.
2871 if node.Body() != nil && lastDeclaration.Body() == nil {
2872 declarations[len(declarations)-1] = node
2873 }
2874 } else {
2875 result[declarationName] = append(result[declarationName], node)
2876 }
2877 }
2878 node.ForEachChild(visit)
2879 case KindClassDeclaration, KindClassExpression, KindInterfaceDeclaration, KindTypeAliasDeclaration, KindEnumDeclaration, KindModuleDeclaration,
2880 KindImportEqualsDeclaration, KindImportClause, KindNamespaceImport, KindGetAccessor, KindSetAccessor, KindTypeLiteral:
2881 addDeclaration(node)
2882 node.ForEachChild(visit)
2883 case KindImportSpecifier, KindExportSpecifier:
2884 if node.PropertyName() != nil {
2885 addDeclaration(node)
2886 }
2887 case KindParameter:
2888 // Only consider parameter properties
2889 if !HasSyntacticModifier(node, ModifierFlagsParameterPropertyModifier) {
2890 break
2891 }
2892 fallthrough
2893 case KindVariableDeclaration, KindBindingElement:
2894 name := node.Name()
2895 if name != nil {
2896 if IsBindingPattern(name) {
2897 node.Name().ForEachChild(visit)
2898 } else {
2899 if node.Initializer() != nil {
2900 visit(node.Initializer())
2901 }
2902 addDeclaration(node)
2903 }
2904 }

Callers 1

GetDeclarationMapMethod · 0.95

Calls 15

SymbolMethod · 0.95
BodyMethod · 0.95
ForEachChildMethod · 0.95
GetDeclarationNameFunction · 0.85
lenFunction · 0.85
HasSyntacticModifierFunction · 0.85
IsBindingPatternFunction · 0.85
IsNamedExportsFunction · 0.85
PropertyNameMethod · 0.80
InitializerMethod · 0.80
AsExportDeclarationMethod · 0.80

Tested by

no test coverage detected