@@ -496,58 +496,23 @@ extension SwiftLanguageServer {
496
496
return req. reply ( [ ] )
497
497
}
498
498
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
-
535
499
func documentSymbol( value: SKResponseDictionary ) -> DocumentSymbol ? {
536
500
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 {
542
507
return nil
543
508
}
544
509
545
510
let range = PositionRange ( start..< end)
546
511
let selectionRange : PositionRange
547
512
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) {
551
516
selectionRange = PositionRange ( nameStart..< nameEnd)
552
517
} else {
553
518
selectionRange = range
@@ -559,15 +524,13 @@ extension SwiftLanguageServer {
559
524
} else {
560
525
children = nil
561
526
}
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)
571
534
}
572
535
573
536
func documentSymbols( array: SKResponseArray ) -> [ DocumentSymbol ] {
@@ -877,4 +840,39 @@ extension sourcekitd_uid_t {
877
840
return nil
878
841
}
879
842
}
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
+ }
880
878
}
0 commit comments