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  }