diff --git a/extensions/typescript-language-features/src/features/documentSymbolProvider.ts b/extensions/typescript-language-features/src/features/documentSymbolProvider.ts index 82a23b34cf6..b765b04d060 100644 --- a/extensions/typescript-language-features/src/features/documentSymbolProvider.ts +++ b/extensions/typescript-language-features/src/features/documentSymbolProvider.ts @@ -10,22 +10,25 @@ import * as PConst from '../protocol.const'; import { ITypeScriptServiceClient } from '../typescriptService'; import * as typeConverters from '../utils/typeConverters'; -const outlineTypeTable: { [kind: string]: SymbolKind } = Object.create(null); -outlineTypeTable[PConst.Kind.module] = SymbolKind.Module; -outlineTypeTable[PConst.Kind.class] = SymbolKind.Class; -outlineTypeTable[PConst.Kind.enum] = SymbolKind.Enum; -outlineTypeTable[PConst.Kind.interface] = SymbolKind.Interface; -outlineTypeTable[PConst.Kind.memberFunction] = SymbolKind.Method; -outlineTypeTable[PConst.Kind.memberVariable] = SymbolKind.Property; -outlineTypeTable[PConst.Kind.memberGetAccessor] = SymbolKind.Property; -outlineTypeTable[PConst.Kind.memberSetAccessor] = SymbolKind.Property; -outlineTypeTable[PConst.Kind.variable] = SymbolKind.Variable; -outlineTypeTable[PConst.Kind.const] = SymbolKind.Variable; -outlineTypeTable[PConst.Kind.localVariable] = SymbolKind.Variable; -outlineTypeTable[PConst.Kind.variable] = SymbolKind.Variable; -outlineTypeTable[PConst.Kind.function] = SymbolKind.Function; -outlineTypeTable[PConst.Kind.localFunction] = SymbolKind.Function; - +const getSymbolKind = (kind: string): SymbolKind => { + switch (kind) { + case PConst.Kind.module: return SymbolKind.Module; + case PConst.Kind.class: return SymbolKind.Class; + case PConst.Kind.enum: return SymbolKind.Enum; + case PConst.Kind.interface: return SymbolKind.Interface; + case PConst.Kind.memberFunction: return SymbolKind.Method; + case PConst.Kind.memberVariable: return SymbolKind.Property; + case PConst.Kind.memberGetAccessor: return SymbolKind.Property; + case PConst.Kind.memberSetAccessor: return SymbolKind.Property; + case PConst.Kind.variable: return SymbolKind.Variable; + case PConst.Kind.const: return SymbolKind.Variable; + case PConst.Kind.localVariable: return SymbolKind.Variable; + case PConst.Kind.variable: return SymbolKind.Variable; + case PConst.Kind.function: return SymbolKind.Function; + case PConst.Kind.localFunction: return SymbolKind.Function; + } + return SymbolKind.Variable; +}; export default class TypeScriptDocumentSymbolProvider implements DocumentSymbolProvider { public constructor( @@ -45,9 +48,9 @@ export default class TypeScriptDocumentSymbolProvider implements DocumentSymbolP const response = await this.client.execute('navtree', args, token); if (response.body) { // The root represents the file. Ignore this when showing in the UI - let tree = response.body; + const tree = response.body; if (tree.childItems) { - let result = new Array>(); + const result = new Array>(); tree.childItems.forEach(item => TypeScriptDocumentSymbolProvider.convertNavTree(resource.uri, result, item)); return result; } @@ -55,8 +58,8 @@ export default class TypeScriptDocumentSymbolProvider implements DocumentSymbolP } else { const response = await this.client.execute('navbar', args, token); if (response.body) { - let result = new Array(); - let foldingMap: ObjectMap = Object.create(null); + const result = new Array(); + const foldingMap: ObjectMap = Object.create(null); response.body.forEach(item => TypeScriptDocumentSymbolProvider.convertNavBar(resource.uri, 0, foldingMap, result as SymbolInformation[], item)); return result; } @@ -68,11 +71,11 @@ export default class TypeScriptDocumentSymbolProvider implements DocumentSymbolP } private static convertNavBar(resource: Uri, indent: number, foldingMap: ObjectMap, bucket: SymbolInformation[], item: Proto.NavigationBarItem, containerLabel?: string): void { - let realIndent = indent + item.indent; - let key = `${realIndent}|${item.text}`; + const realIndent = indent + item.indent; + const key = `${realIndent}|${item.text}`; if (realIndent !== 0 && !foldingMap[key] && TypeScriptDocumentSymbolProvider.shouldInclueEntry(item.text)) { - let result = new SymbolInformation(item.text, - outlineTypeTable[item.kind as string] || SymbolKind.Variable, + const result = new SymbolInformation(item.text, + getSymbolKind(item.kind), containerLabel ? containerLabel : '', typeConverters.Location.fromTextSpan(resource, item.spans[0])); foldingMap[key] = result; @@ -89,10 +92,11 @@ export default class TypeScriptDocumentSymbolProvider implements DocumentSymbolP if (!TypeScriptDocumentSymbolProvider.shouldInclueEntry(item.text)) { return; } + const symbolInfo = new SymbolInformation2( item.text, '', // todo@joh detail - outlineTypeTable[item.kind as string] || SymbolKind.Variable, + getSymbolKind(item.kind), typeConverters.Range.fromTextSpan(item.spans[0]), typeConverters.Location.fromTextSpan(resource, item.spans[0]), );