From 6932306e4dcfdc4ec2d3e4f582af01500eb95d99 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Fri, 18 Sep 2020 11:06:23 -0700 Subject: [PATCH] Add (get) and (set) prefixes to JS/TS getters and setters in the outline Fixes #106935 --- .../src/languageFeatures/documentSymbol.ts | 39 ++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/extensions/typescript-language-features/src/languageFeatures/documentSymbol.ts b/extensions/typescript-language-features/src/languageFeatures/documentSymbol.ts index d0b8b9ad901..c3c3f5d93aa 100644 --- a/extensions/typescript-language-features/src/languageFeatures/documentSymbol.ts +++ b/extensions/typescript-language-features/src/languageFeatures/documentSymbol.ts @@ -73,19 +73,7 @@ class TypeScriptDocumentSymbolProvider implements vscode.DocumentSymbolProvider const children = new Set(item.childItems || []); for (const span of item.spans) { const range = typeConverters.Range.fromTextSpan(span); - const selectionRange = item.nameSpan ? typeConverters.Range.fromTextSpan(item.nameSpan) : range; - const symbolInfo = new vscode.DocumentSymbol( - item.text, - '', - getSymbolKind(item.kind), - range, - range.contains(selectionRange) ? selectionRange : range); - - - const kindModifiers = parseKindModifier(item.kindModifiers); - if (kindModifiers.has(PConst.KindModifiers.depreacted)) { - symbolInfo.tags = [vscode.SymbolTag.Deprecated]; - } + const symbolInfo = TypeScriptDocumentSymbolProvider.convertSymbol(item, range); for (const child of children) { if (child.spans.some(span => !!range.intersection(typeConverters.Range.fromTextSpan(span)))) { @@ -103,6 +91,31 @@ class TypeScriptDocumentSymbolProvider implements vscode.DocumentSymbolProvider return shouldInclude; } + private static convertSymbol(item: Proto.NavigationTree, range: vscode.Range): vscode.DocumentSymbol { + const selectionRange = item.nameSpan ? typeConverters.Range.fromTextSpan(item.nameSpan) : range; + let label = item.text; + + switch (item.kind) { + case PConst.Kind.memberGetAccessor: label = `(get) ${label}`; break; + case PConst.Kind.memberSetAccessor: label = `(set) ${label}`; break; + } + + const symbolInfo = new vscode.DocumentSymbol( + label, + '', + getSymbolKind(item.kind), + range, + range.contains(selectionRange) ? selectionRange : range); + + + const kindModifiers = parseKindModifier(item.kindModifiers); + if (kindModifiers.has(PConst.KindModifiers.depreacted)) { + symbolInfo.tags = [vscode.SymbolTag.Deprecated]; + } + + return symbolInfo; + } + private static shouldInclueEntry(item: Proto.NavigationTree | Proto.NavigationBarItem): boolean { if (item.kind === PConst.Kind.alias) { return false; -- GitLab