kythe.io@v0.0.68-0.20240422202219-7225dbc01741/third_party/sourcebrowser/sbutilities.ts (about) 1 import ts = require('typescript') 2 import tsu = require('./tsutilities') 3 4 export function getDeclarationForName(n : ts.Node) : ts.Declaration { 5 switch (n.kind) { 6 case ts.SyntaxKind.ConstructorKeyword: 7 return <ts.Declaration>n.parent; 8 case ts.SyntaxKind.Identifier: 9 case ts.SyntaxKind.NumericLiteral: 10 case ts.SyntaxKind.StringLiteral: 11 if (n.parent && tsu.isDeclaration(n.parent) && 12 (<ts.Declaration>n.parent).name === n) { 13 return <ts.Declaration>n.parent; 14 } 15 default: 16 return undefined; 17 } 18 } 19 20 export function getQualifiedName(decl : ts.Declaration): string { 21 // TODO: should be revised when TS have local types 22 let curr : ts.Node = decl; 23 let name = ""; 24 while (curr) { 25 switch (curr.kind) { 26 case ts.SyntaxKind.Constructor: 27 if (curr !== decl) { 28 return "constructor" 29 } 30 else { 31 name = "constructor"; 32 } 33 curr = curr.parent; 34 break; 35 case ts.SyntaxKind.Parameter: 36 case ts.SyntaxKind.TypeParameter: 37 case ts.SyntaxKind.VariableDeclaration: 38 case ts.SyntaxKind.FunctionDeclaration: 39 // take a shortcut 40 return tsu.declarationNameToString((<ts.Declaration>decl).name); 41 case ts.SyntaxKind.GetAccessor: 42 case ts.SyntaxKind.SetAccessor: 43 case ts.SyntaxKind.PropertyDeclaration: 44 case ts.SyntaxKind.PropertySignature: 45 case ts.SyntaxKind.PropertyAssignment: 46 if (curr.parent && curr.parent.kind === ts.SyntaxKind.TypeLiteral) { 47 // take a shortcut 48 return tsu.declarationNameToString((<ts.Declaration>decl).name); 49 } 50 case ts.SyntaxKind.EnumMember: 51 case ts.SyntaxKind.ClassDeclaration: 52 case ts.SyntaxKind.InterfaceDeclaration: 53 case ts.SyntaxKind.EnumDeclaration: 54 case ts.SyntaxKind.ModuleDeclaration: 55 case ts.SyntaxKind.ImportDeclaration: 56 let currName = 57 tsu.declarationNameToString((<ts.Declaration>curr).name); 58 name = name.length ? currName + "." + name : currName; 59 default: 60 curr = curr.parent; 61 } 62 } 63 return name; 64 }