@@ -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,23 +46,46 @@ function createSymbols(elements: Structure.CodeElement[]): vscode.DocumentSymbol
46
46
return results ;
47
47
}
48
48
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 {
54
50
switch ( element . Kind ) {
55
51
case SymbolKinds . Class :
56
52
case SymbolKinds . Delegate :
57
53
case SymbolKinds . Enum :
58
54
case SymbolKinds . Interface :
59
55
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 :
62
73
default :
63
- break ;
74
+ return element . Name ;
64
75
}
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 ) ;
66
89
67
90
return new vscode . DocumentSymbol ( name , details , toSymbolKind ( element . Kind ) , toRange3 ( fullRange ) , toRange3 ( nameRange ) ) ;
68
91
}
0 commit comments