Skip to content

Commit 8c4a7ab

Browse files
authored
Merge pull request #5536 from trolleyman/improve-outline-breadcrumbs
Improve outline
2 parents 4d31e93 + a3d8056 commit 8c4a7ab

File tree

1 file changed

+37
-5
lines changed

1 file changed

+37
-5
lines changed

src/features/documentSymbolProvider.ts

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@ export default class OmnisharpDocumentSymbolProvider extends AbstractSupport imp
3131
}
3232
}
3333

34-
function createSymbols(elements: Structure.CodeElement[]): vscode.DocumentSymbol[] {
34+
function createSymbols(elements: Structure.CodeElement[], parentElement?: Structure.CodeElement): vscode.DocumentSymbol[] {
3535
let results: vscode.DocumentSymbol[] = [];
3636

3737
elements.forEach(element => {
38-
let symbol = createSymbolForElement(element);
38+
let symbol = createSymbolForElement(element, parentElement);
3939
if (element.Children) {
40-
symbol.children = createSymbols(element.Children);
40+
symbol.children = createSymbols(element.Children, element);
4141
}
4242

4343
results.push(symbol);
@@ -46,11 +46,43 @@ function createSymbols(elements: Structure.CodeElement[]): vscode.DocumentSymbol
4646
return results;
4747
}
4848

49-
function createSymbolForElement(element: Structure.CodeElement): vscode.DocumentSymbol {
49+
function getNameForElement(element: Structure.CodeElement, parentElement?: Structure.CodeElement): string {
50+
switch (element.Kind) {
51+
case SymbolKinds.Class:
52+
case SymbolKinds.Delegate:
53+
case SymbolKinds.Enum:
54+
case SymbolKinds.Interface:
55+
case SymbolKinds.Struct:
56+
return element.Name;
57+
58+
case SymbolKinds.Namespace:
59+
return typeof parentElement !== 'undefined' && element.DisplayName.startsWith(`${parentElement.DisplayName}.`)
60+
? element.DisplayName.slice(parentElement.DisplayName.length + 1)
61+
: element.DisplayName;
62+
63+
case SymbolKinds.Constant:
64+
case SymbolKinds.Constructor:
65+
case SymbolKinds.Destructor:
66+
case SymbolKinds.EnumMember:
67+
case SymbolKinds.Event:
68+
case SymbolKinds.Field:
69+
case SymbolKinds.Indexer:
70+
case SymbolKinds.Method:
71+
case SymbolKinds.Operator:
72+
case SymbolKinds.Property:
73+
case SymbolKinds.Unknown:
74+
default:
75+
return element.DisplayName;
76+
}
77+
}
78+
79+
function createSymbolForElement(element: Structure.CodeElement, parentElement?: Structure.CodeElement): vscode.DocumentSymbol {
5080
const fullRange = element.Ranges[SymbolRangeNames.Full];
5181
const nameRange = element.Ranges[SymbolRangeNames.Name];
82+
const name = getNameForElement(element, parentElement);
83+
const details = name === element.DisplayName ? '' : element.DisplayName;
5284

53-
return new vscode.DocumentSymbol(element.DisplayName, /*detail*/ "", toSymbolKind(element.Kind), toRange3(fullRange), toRange3(nameRange));
85+
return new vscode.DocumentSymbol(name, details, toSymbolKind(element.Kind), toRange3(fullRange), toRange3(nameRange));
5486
}
5587

5688
const kinds: { [kind: string]: vscode.SymbolKind; } = {};

0 commit comments

Comments
 (0)