Skip to content

Commit d991996

Browse files
committed
Change logic
1 parent 0c301d8 commit d991996

File tree

1 file changed

+35
-12
lines changed

1 file changed

+35
-12
lines changed

src/features/documentSymbolProvider.ts

Lines changed: 35 additions & 12 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,23 +46,46 @@ function createSymbols(elements: Structure.CodeElement[]): vscode.DocumentSymbol
4646
return results;
4747
}
4848

49-
function createSymbolForElement(element: Structure.CodeElement): vscode.DocumentSymbol {
50-
const fullRange = element.Ranges[SymbolRangeNames.Full];
51-
const nameRange = element.Ranges[SymbolRangeNames.Name];
52-
53-
var name = element.DisplayName;
49+
function getNameForElement(element: Structure.CodeElement, parentElement?: Structure.CodeElement): string {
5450
switch (element.Kind) {
5551
case SymbolKinds.Class:
5652
case SymbolKinds.Delegate:
5753
case SymbolKinds.Enum:
5854
case SymbolKinds.Interface:
5955
case SymbolKinds.Struct:
60-
name = element.Name;
61-
break;
56+
case SymbolKinds.Namespace:
57+
if (typeof parentElement === 'undefined')
58+
return element.DisplayName;
59+
const prefix = `${parentElement.DisplayName}.`;
60+
return element.DisplayName.startsWith(prefix) ? element.DisplayName.slice(prefix.length) : element.DisplayName;
61+
62+
case SymbolKinds.Constant:
63+
case SymbolKinds.Constructor:
64+
case SymbolKinds.Destructor:
65+
case SymbolKinds.EnumMember:
66+
case SymbolKinds.Event:
67+
case SymbolKinds.Field:
68+
case SymbolKinds.Indexer:
69+
case SymbolKinds.Method:
70+
case SymbolKinds.Operator:
71+
case SymbolKinds.Property:
72+
case SymbolKinds.Unknown:
6273
default:
63-
break;
74+
return element.Name;
6475
}
65-
const details = name == element.DisplayName ? "" : element.DisplayName;
76+
}
77+
78+
function getNameAndDetailsForElement(element: Structure.CodeElement, parentElement?: Structure.CodeElement): { name: string, details: string } {
79+
const name = getNameForElement(element, parentElement);
80+
const details = element.DisplayName === name ? '' : element.DisplayName;
81+
82+
return { name, details };
83+
}
84+
85+
function createSymbolForElement(element: Structure.CodeElement, parentElement?: Structure.CodeElement): vscode.DocumentSymbol {
86+
const fullRange = element.Ranges[SymbolRangeNames.Full];
87+
const nameRange = element.Ranges[SymbolRangeNames.Name];
88+
const { name, details } = getNameAndDetailsForElement(element, parentElement);
6689

6790
return new vscode.DocumentSymbol(name, details, toSymbolKind(element.Kind), toRange3(fullRange), toRange3(nameRange));
6891
}

0 commit comments

Comments
 (0)