@@ -496,7 +496,6 @@ extension SwiftLanguageServer {
496
496
497
497
/// Translate sourcekit symbol kinds into LSP kinds.
498
498
func symbolKind( sourcekitSymbolKind: sourcekitd_uid_t ) -> SymbolKind ? {
499
- // TODO: Implement .enumMember
500
499
switch sourcekitSymbolKind {
501
500
case self . values. decl_class:
502
501
return . class
@@ -507,6 +506,8 @@ extension SwiftLanguageServer {
507
506
return . property
508
507
case self . values. decl_enum:
509
508
return . enum
509
+ case self . values. decl_enumelement:
510
+ return . enumMember
510
511
case self . values. decl_protocol:
511
512
return . interface
512
513
case self . values. decl_function_free:
@@ -548,14 +549,7 @@ extension SwiftLanguageServer {
548
549
549
550
let children : [ DocumentSymbol ] ?
550
551
if let substructure: SKResponseArray = value [ self . keys. substructure] {
551
- var childrenArray : [ DocumentSymbol ] = [ ]
552
- childrenArray. reserveCapacity ( substructure. count)
553
- substructure. forEach { i, value in
554
- guard let symbol = documentSymbol ( value: value) else { return true }
555
- childrenArray. append ( symbol)
556
- return true
557
- }
558
- children = childrenArray
552
+ children = documentSymbols ( array: substructure)
559
553
} else {
560
554
children = nil
561
555
}
@@ -570,14 +564,20 @@ extension SwiftLanguageServer {
570
564
)
571
565
}
572
566
573
- var result : [ DocumentSymbol ] = [ ]
574
- results. forEach { ( i: Int , value: SKResponseDictionary ) in
575
- if let documentSymbol = documentSymbol ( value: value) {
576
- result. append ( documentSymbol)
577
- }
578
- return true
567
+ func documentSymbols( array: SKResponseArray ) -> [ DocumentSymbol ] {
568
+ var result : [ DocumentSymbol ] = [ ]
569
+ array. forEach { ( i: Int , value: SKResponseDictionary ) in
570
+ if let documentSymbol = documentSymbol ( value: value) {
571
+ result. append ( documentSymbol)
572
+ } else if let substructure: SKResponseArray = value [ self . keys. substructure] {
573
+ result += documentSymbols ( array: substructure)
574
+ }
575
+ return true
576
+ }
577
+ return result
579
578
}
580
- req. reply ( result)
579
+
580
+ req. reply ( documentSymbols ( array: results) )
581
581
}
582
582
// FIXME: cancellation
583
583
_ = handle
0 commit comments