@@ -45,18 +45,33 @@ public enum IndexSymbolKind: Hashable {
45
45
case commentTag
46
46
}
47
47
48
+ public enum Language : Hashable {
49
+ case c
50
+ case cxx
51
+ case objc
52
+ case swift
53
+ }
54
+
48
55
public struct Symbol : Equatable {
49
56
50
57
public var usr : String
51
58
public var name : String
52
59
public var kind : IndexSymbolKind
53
60
public var properties : SymbolProperty
61
+ public var language : Language
54
62
55
- public init ( usr: String , name: String , kind: IndexSymbolKind , properties: SymbolProperty = SymbolProperty ( ) ) {
63
+ public init (
64
+ usr: String ,
65
+ name: String ,
66
+ kind: IndexSymbolKind ,
67
+ properties: SymbolProperty = SymbolProperty ( ) ,
68
+ language: Language
69
+ ) {
56
70
self . usr = usr
57
71
self . name = name
58
72
self . kind = kind
59
73
self . properties = properties
74
+ self . language = language
60
75
}
61
76
}
62
77
@@ -69,9 +84,9 @@ extension Symbol: Comparable {
69
84
extension Symbol : CustomStringConvertible {
70
85
public var description : String {
71
86
if properties. isEmpty {
72
- return " \( name) | \( kind) | \( usr) "
87
+ return " \( name) | \( kind) | \( usr) | \( language ) "
73
88
}
74
- return " \( name) | \( kind) ( \( properties) ) | \( usr) "
89
+ return " \( name) | \( kind) ( \( properties) ) | \( usr) | \( language ) "
75
90
}
76
91
}
77
92
@@ -82,9 +97,16 @@ extension Symbol {
82
97
name: String ? = nil ,
83
98
usr: String ? = nil ,
84
99
kind: IndexSymbolKind ? = nil ,
85
- properties: SymbolProperty ? = nil ) -> Symbol
86
- {
87
- return Symbol ( usr: usr ?? self . usr, name: name ?? self . name, kind: kind ?? self . kind, properties: properties ?? self . properties)
100
+ properties: SymbolProperty ? = nil ,
101
+ language: Language ? = nil
102
+ ) -> Symbol {
103
+ return Symbol (
104
+ usr: usr ?? self . usr,
105
+ name: name ?? self . name,
106
+ kind: kind ?? self . kind,
107
+ properties: properties ?? self . properties,
108
+ language: language ?? self . language
109
+ )
88
110
}
89
111
90
112
/// Returns a SymbolOccurrence with the given location and roles.
@@ -95,6 +117,23 @@ extension Symbol {
95
117
96
118
// MARK: CIndexStoreDB conversions
97
119
120
+ fileprivate extension Language {
121
+ init ( _ value: indexstoredb_language_t ) {
122
+ switch value {
123
+ case INDEXSTOREDB_LANGUAGE_C:
124
+ self = . c
125
+ case INDEXSTOREDB_LANGUAGE_CXX:
126
+ self = . cxx
127
+ case INDEXSTOREDB_LANGUAGE_OBJC:
128
+ self = . objc
129
+ case INDEXSTOREDB_LANGUAGE_SWIFT:
130
+ self = . swift
131
+ default :
132
+ preconditionFailure ( " Unhandled case from C enum indexstoredb_language_t " )
133
+ }
134
+ }
135
+ }
136
+
98
137
extension Symbol {
99
138
100
139
/// Note: `value` is expected to be passed +1.
@@ -103,7 +142,9 @@ extension Symbol {
103
142
usr: String ( cString: indexstoredb_symbol_usr ( value) ) ,
104
143
name: String ( cString: indexstoredb_symbol_name ( value) ) ,
105
144
kind: IndexSymbolKind ( indexstoredb_symbol_kind ( value) ) ,
106
- properties: SymbolProperty ( rawValue: indexstoredb_symbol_properties ( value) ) )
145
+ properties: SymbolProperty ( rawValue: indexstoredb_symbol_properties ( value) ) ,
146
+ language: Language ( indexstoredb_symbol_language ( value) )
147
+ )
107
148
}
108
149
}
109
150
0 commit comments