Skip to content

Commit f0391f6

Browse files
refactor symbolKind(sourcekitSymbolKind:) to sourcekitd_uid_t extension
1 parent 9e1e493 commit f0391f6

File tree

2 files changed

+62
-63
lines changed

2 files changed

+62
-63
lines changed

Sources/LanguageServerProtocol/DocumentSymbol.swift

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,14 @@ public struct DocumentSymbol: Hashable, Codable, ResponseType {
7373
deprecated: Bool?,
7474
range: PositionRange,
7575
selectionRange: PositionRange,
76-
children: [DocumentSymbol]?) {
77-
self.name = name
78-
self.detail = detail
79-
self.kind = kind
80-
self.deprecated = deprecated
81-
self.range = range
82-
self.selectionRange = selectionRange
83-
self.children = children
84-
}
85-
}
76+
children: [DocumentSymbol]?)
77+
{
78+
self.name = name
79+
self.detail = detail
80+
self.kind = kind
81+
self.deprecated = deprecated
82+
self.range = range
83+
self.selectionRange = selectionRange
84+
self.children = children
85+
}
86+
}

Sources/SourceKit/sourcekitd/SwiftLanguageServer.swift

Lines changed: 51 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -496,58 +496,23 @@ extension SwiftLanguageServer {
496496
return req.reply([])
497497
}
498498

499-
/// Translate sourcekit symbol kinds into LSP kinds.
500-
func symbolKind(sourcekitSymbolKind: sourcekitd_uid_t) -> SymbolKind? {
501-
switch sourcekitSymbolKind {
502-
case self.values.decl_class:
503-
return .class
504-
case self.values.decl_function_method_instance,
505-
self.values.decl_function_method_static,
506-
self.values.decl_function_method_class:
507-
return .method
508-
case self.values.decl_var_instance,
509-
self.values.decl_var_class,
510-
self.values.decl_var_static:
511-
return .property
512-
case self.values.decl_enum:
513-
return .enum
514-
case self.values.decl_enumelement:
515-
return .enumMember
516-
case self.values.decl_protocol:
517-
return .interface
518-
case self.values.decl_function_free:
519-
return .function
520-
case self.values.decl_var_global,
521-
self.values.decl_var_local:
522-
return .variable
523-
case self.values.decl_struct:
524-
return .struct
525-
case self.values.decl_generic_type_param:
526-
return .typeParameter
527-
case self.values.decl_extension:
528-
// There are no extensions in LSP, so I return something vaguely similar
529-
return .namespace
530-
default:
531-
return nil
532-
}
533-
}
534-
535499
func documentSymbol(value: SKResponseDictionary) -> DocumentSymbol? {
536500
guard let name: String = value[self.keys.name],
537-
let kind: SymbolKind = value[self.keys.kind].flatMap(symbolKind(sourcekitSymbolKind:)),
538-
let offset: Int = value[self.keys.offset],
539-
let start: Position = snapshot.positionOf(utf8Offset: offset),
540-
let length: Int = value[self.keys.length],
541-
let end: Position = snapshot.positionOf(utf8Offset: offset + length) else {
501+
let uid: sourcekitd_uid_t = value[self.keys.kind],
502+
let kind: SymbolKind = uid.asSymbolKind(self.values),
503+
let offset: Int = value[self.keys.offset],
504+
let start: Position = snapshot.positionOf(utf8Offset: offset),
505+
let length: Int = value[self.keys.length],
506+
let end: Position = snapshot.positionOf(utf8Offset: offset + length) else {
542507
return nil
543508
}
544509

545510
let range = PositionRange(start..<end)
546511
let selectionRange: PositionRange
547512
if let nameOffset: Int = value[self.keys.nameoffset],
548-
let nameStart: Position = snapshot.positionOf(utf8Offset: nameOffset),
549-
let nameLength: Int = value[self.keys.namelength],
550-
let nameEnd: Position = snapshot.positionOf(utf8Offset: nameOffset + nameLength) {
513+
let nameStart: Position = snapshot.positionOf(utf8Offset: nameOffset),
514+
let nameLength: Int = value[self.keys.namelength],
515+
let nameEnd: Position = snapshot.positionOf(utf8Offset: nameOffset + nameLength) {
551516
selectionRange = PositionRange(nameStart..<nameEnd)
552517
} else {
553518
selectionRange = range
@@ -559,15 +524,13 @@ extension SwiftLanguageServer {
559524
} else {
560525
children = nil
561526
}
562-
return DocumentSymbol(
563-
name: name,
564-
detail: nil,
565-
kind: kind,
566-
deprecated: nil,
567-
range: range,
568-
selectionRange: selectionRange,
569-
children: children
570-
)
527+
return DocumentSymbol(name: name,
528+
detail: nil,
529+
kind: kind,
530+
deprecated: nil,
531+
range: range,
532+
selectionRange: selectionRange,
533+
children: children)
571534
}
572535

573536
func documentSymbols(array: SKResponseArray) -> [DocumentSymbol] {
@@ -877,4 +840,39 @@ extension sourcekitd_uid_t {
877840
return nil
878841
}
879842
}
843+
844+
func asSymbolKind(_ vals: sourcekitd_values) -> SymbolKind? {
845+
switch self {
846+
case vals.decl_class:
847+
return .class
848+
case vals.decl_function_method_instance,
849+
vals.decl_function_method_static,
850+
vals.decl_function_method_class:
851+
return .method
852+
case vals.decl_var_instance,
853+
vals.decl_var_static,
854+
vals.decl_var_class:
855+
return .property
856+
case vals.decl_enum:
857+
return .enum
858+
case vals.decl_enumelement:
859+
return .enumMember
860+
case vals.decl_protocol:
861+
return .interface
862+
case vals.decl_function_free:
863+
return .function
864+
case vals.decl_var_global,
865+
vals.decl_var_local:
866+
return .variable
867+
case vals.decl_struct:
868+
return .struct
869+
case vals.decl_generic_type_param:
870+
return .typeParameter
871+
case vals.decl_extension:
872+
// There are no extensions in LSP, so I return something vaguely similar
873+
return .namespace
874+
default:
875+
return nil
876+
}
877+
}
880878
}

0 commit comments

Comments
 (0)