Skip to content

Commit c03a07a

Browse files
committed
Implement enum members
1 parent 325ef24 commit c03a07a

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed

Sources/SourceKit/sourcekitd/SwiftLanguageServer.swift

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,6 @@ extension SwiftLanguageServer {
496496

497497
/// Translate sourcekit symbol kinds into LSP kinds.
498498
func symbolKind(sourcekitSymbolKind: sourcekitd_uid_t) -> SymbolKind? {
499-
// TODO: Implement .enumMember
500499
switch sourcekitSymbolKind {
501500
case self.values.decl_class:
502501
return .class
@@ -507,6 +506,8 @@ extension SwiftLanguageServer {
507506
return .property
508507
case self.values.decl_enum:
509508
return .enum
509+
case self.values.decl_enumelement:
510+
return .enumMember
510511
case self.values.decl_protocol:
511512
return .interface
512513
case self.values.decl_function_free:
@@ -548,14 +549,7 @@ extension SwiftLanguageServer {
548549

549550
let children: [DocumentSymbol]?
550551
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)
559553
} else {
560554
children = nil
561555
}
@@ -570,14 +564,20 @@ extension SwiftLanguageServer {
570564
)
571565
}
572566

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
579578
}
580-
req.reply(result)
579+
580+
req.reply(documentSymbols(array: results))
581581
}
582582
// FIXME: cancellation
583583
_ = handle

0 commit comments

Comments
 (0)