@@ -31,13 +31,13 @@ export default class OmnisharpDocumentSymbolProvider extends AbstractSupport imp
31
31
}
32
32
}
33
33
34
- function createSymbols ( elements : Structure . CodeElement [ ] ) : vscode . DocumentSymbol [ ] {
34
+ function createSymbols ( elements : Structure . CodeElement [ ] , parentElement ?: Structure . CodeElement ) : vscode . DocumentSymbol [ ] {
35
35
let results : vscode . DocumentSymbol [ ] = [ ] ;
36
36
37
37
elements . forEach ( element => {
38
- let symbol = createSymbolForElement ( element ) ;
38
+ let symbol = createSymbolForElement ( element , parentElement ) ;
39
39
if ( element . Children ) {
40
- symbol . children = createSymbols ( element . Children ) ;
40
+ symbol . children = createSymbols ( element . Children , element ) ;
41
41
}
42
42
43
43
results . push ( symbol ) ;
@@ -46,11 +46,43 @@ function createSymbols(elements: Structure.CodeElement[]): vscode.DocumentSymbol
46
46
return results ;
47
47
}
48
48
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 {
50
80
const fullRange = element . Ranges [ SymbolRangeNames . Full ] ;
51
81
const nameRange = element . Ranges [ SymbolRangeNames . Name ] ;
82
+ const name = getNameForElement ( element , parentElement ) ;
83
+ const details = name === element . DisplayName ? '' : element . DisplayName ;
52
84
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 ) ) ;
54
86
}
55
87
56
88
const kinds : { [ kind : string ] : vscode . SymbolKind ; } = { } ;
0 commit comments