@@ -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
5688const kinds : { [ kind : string ] : vscode . SymbolKind ; } = { } ;
0 commit comments