Skip to content

Commit 7771960

Browse files
committed
Add IndexSymbolKind and indexstoredb_symbol_kind_t
Move forEachRelation into SymbolOccurrence.
1 parent 1b97ba6 commit 7771960

File tree

3 files changed

+124
-16
lines changed

3 files changed

+124
-16
lines changed

Sources/IndexStoreDB/IndexStoreDB.swift

Lines changed: 89 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -107,15 +107,6 @@ public final class IndexStoreDB {
107107
}
108108
}
109109

110-
@discardableResult public func forEachRelation(
111-
of occurrence: SymbolOccurrence,
112-
body: @escaping (SymbolRelation) -> Bool
113-
) -> Bool {
114-
return indexstoredb_symbol_occurrence_relations(occurrence.value){ relation in
115-
body(SymbolRelation(relation))
116-
}
117-
}
118-
119110
}
120111

121112
public final class SymbolRelation {
@@ -168,13 +159,91 @@ public struct SymbolRole: OptionSet {
168159
}
169160
}
170161

162+
public enum IndexSymbolKindEnum: Int {
163+
case unknown = 0,
164+
module,
165+
namespace,
166+
namespaceAlias,
167+
macro,
168+
`enum`,
169+
`struct`,
170+
`class`,
171+
`protocol`,
172+
`extension`,
173+
union,
174+
`typealias`,
175+
function,
176+
variable,
177+
field,
178+
enumConstant,
179+
instanceMethod,
180+
classMethod,
181+
staticMethod,
182+
instanceProperty,
183+
classProperty,
184+
staticProperty,
185+
constructor,
186+
destructor,
187+
conversionFunction,
188+
parameter,
189+
using
190+
191+
case commentTag = 1000
192+
193+
public init?(cValue: indexstoredb_symbol_kind_t) {
194+
self.init(rawValue: Int(cValue.rawValue))
195+
}
196+
}
197+
198+
public struct IndexSymbolKind: RawRepresentable {
199+
public var rawValue: Int
200+
201+
public static let unknown: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_UNKNOWN)
202+
public static let module: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_MODULE)
203+
public static let namespace: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_NAMESPACE)
204+
public static let namespaceAlias: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_NAMESPACEALIAS)
205+
public static let macro: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_MACRO)
206+
public static let `enum`: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_ENUM)
207+
public static let `struct`: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_STRUCT)
208+
public static let `class`: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_CLASS)
209+
public static let `protocol`: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_PROTOCOL)
210+
public static let `extension`: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_EXTENSION)
211+
public static let union: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_UNION)
212+
public static let `typealias`: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_TYPEALIAS)
213+
public static let function: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_FUNCTION)
214+
public static let variable: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_VARIABLE)
215+
public static let field: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_FIELD)
216+
public static let enumConstant: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_ENUMCONSTANT)
217+
public static let instancMmethod: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_INSTANCEMETHOD)
218+
public static let classmMethod: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_CLASSMETHOD)
219+
public static let staticMethod: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_STATICMETHOD)
220+
public static let instanceProperty: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_INSTANCEPROPERTY)
221+
public static let classProperty: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_CLASSPROPERTY)
222+
public static let staticProperty: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_STATICPROPERTY)
223+
public static let constructor: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_CONSTRUCTOR)
224+
public static let destructor: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_DESTRUCTOR)
225+
public static let conversionFunction: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_CONVERSIONFUNCTION)
226+
public static let parameter: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_PARAMETER)
227+
public static let using: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_USING)
228+
229+
public static let commentTag: IndexSymbolKind = IndexSymbolKind(rawValue: INDEXSTOREDB_SYMBOL_KIND_COMMENTTAG)
230+
231+
public init(rawValue: Int) {
232+
self.rawValue = rawValue
233+
}
234+
235+
public init(rawValue: indexstoredb_symbol_kind_t) {
236+
self.rawValue = Int(rawValue.rawValue)
237+
}
238+
}
239+
171240
public final class Symbol {
172241

173242
let value: indexstoredb_symbol_t
174243

175244
public lazy var usr: String = String(cString: indexstoredb_symbol_usr(value))
176245
public lazy var name: String = String(cString: indexstoredb_symbol_name(value))
177-
public lazy var kind = indexstoredb_symbol_kind(value)
246+
public lazy var kind = IndexSymbolKind(rawValue: indexstoredb_symbol_kind(value))
178247

179248
init(_ value: indexstoredb_symbol_t) {
180249
self.value = value
@@ -225,12 +294,20 @@ public final class SymbolOccurrence {
225294

226295
private func getRelations() -> [SymbolRelation] {
227296
var relations: [SymbolRelation] = []
228-
indexstoredb_symbol_occurrence_relations(value){ relation in
229-
relations.append(SymbolRelation(relation))
297+
forEachRelation{relation in
298+
relations.append(relation)
230299
return true
231300
}
232301
return relations
233302
}
303+
304+
@discardableResult public func forEachRelation(
305+
body: @escaping (SymbolRelation) -> Bool
306+
) -> Bool {
307+
return indexstoredb_symbol_occurrence_relations(value){ relation in
308+
body(SymbolRelation(relation))
309+
}
310+
}
234311
}
235312

236313
public protocol IndexStoreLibraryProvider {

include/CIndexStoreDB/CIndexStoreDB.h

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ typedef indexstoredb_object_t indexstoredb_symbol_occurrence_t;
5353
typedef void *indexstoredb_error_t;
5454
typedef void *indexstoredb_symbol_location_t;
5555
typedef void *indexstoredb_symbol_relation_t;
56-
typedef void *indexstoredb_symbol_kind_t;
5756

5857
typedef enum {
5958
INDEXSTOREDB_SYMBOL_ROLE_DECLARATION = 1 << 0,
@@ -81,6 +80,38 @@ typedef enum {
8180
INDEXSTOREDB_SYMBOL_ROLE_CANONICAL = 1 << 63,
8281
} indexstoredb_symbol_role_t;
8382

83+
typedef enum {
84+
INDEXSTOREDB_SYMBOL_KIND_UNKNOWN = 0,
85+
INDEXSTOREDB_SYMBOL_KIND_MODULE = 1,
86+
INDEXSTOREDB_SYMBOL_KIND_NAMESPACE = 2,
87+
INDEXSTOREDB_SYMBOL_KIND_NAMESPACEALIAS = 3,
88+
INDEXSTOREDB_SYMBOL_KIND_MACRO = 4,
89+
INDEXSTOREDB_SYMBOL_KIND_ENUM = 5,
90+
INDEXSTOREDB_SYMBOL_KIND_STRUCT = 6,
91+
INDEXSTOREDB_SYMBOL_KIND_CLASS = 7,
92+
INDEXSTOREDB_SYMBOL_KIND_PROTOCOL = 8,
93+
INDEXSTOREDB_SYMBOL_KIND_EXTENSION = 9,
94+
INDEXSTOREDB_SYMBOL_KIND_UNION = 10,
95+
INDEXSTOREDB_SYMBOL_KIND_TYPEALIAS = 11,
96+
INDEXSTOREDB_SYMBOL_KIND_FUNCTION = 12,
97+
INDEXSTOREDB_SYMBOL_KIND_VARIABLE = 13,
98+
INDEXSTOREDB_SYMBOL_KIND_FIELD = 14,
99+
INDEXSTOREDB_SYMBOL_KIND_ENUMCONSTANT = 15,
100+
INDEXSTOREDB_SYMBOL_KIND_INSTANCEMETHOD = 16,
101+
INDEXSTOREDB_SYMBOL_KIND_CLASSMETHOD = 17,
102+
INDEXSTOREDB_SYMBOL_KIND_STATICMETHOD = 18,
103+
INDEXSTOREDB_SYMBOL_KIND_INSTANCEPROPERTY = 19,
104+
INDEXSTOREDB_SYMBOL_KIND_CLASSPROPERTY = 20,
105+
INDEXSTOREDB_SYMBOL_KIND_STATICPROPERTY = 21,
106+
INDEXSTOREDB_SYMBOL_KIND_CONSTRUCTOR = 22,
107+
INDEXSTOREDB_SYMBOL_KIND_DESTRUCTOR = 23,
108+
INDEXSTOREDB_SYMBOL_KIND_CONVERSIONFUNCTION = 24,
109+
INDEXSTOREDB_SYMBOL_KIND_PARAMETER = 25,
110+
INDEXSTOREDB_SYMBOL_KIND_USING = 26,
111+
112+
INDEXSTOREDB_SYMBOL_KIND_COMMENTTAG = 1000,
113+
} indexstoredb_symbol_kind_t;
114+
84115
/// Returns true on success.
85116
typedef _Nullable indexstoredb_indexstore_library_t(^indexstore_library_provider_t)(const char * _Nonnull);
86117

@@ -224,7 +255,7 @@ indexstoredb_symbol_occurrence_relations(_Nonnull indexstoredb_symbol_occurrence
224255

225256
/// Get the SymbolKind of a Symbol
226257
/// @param symbol The symbol whose kind should be found.
227-
INDEXSTOREDB_PUBLIC uint8_t
258+
INDEXSTOREDB_PUBLIC indexstoredb_symbol_kind_t
228259
indexstoredb_symbol_kind(_Nonnull indexstoredb_symbol_t);
229260

230261
INDEXSTOREDB_END_DECLS

lib/CIndexStoreDB/CIndexStoreDB.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,10 +144,10 @@ indexstoredb_symbol_name(indexstoredb_symbol_t symbol) {
144144
return obj->value->getName().c_str();
145145
}
146146

147-
uint8_t
147+
indexstoredb_symbol_kind_t
148148
indexstoredb_symbol_kind(indexstoredb_symbol_t symbol) {
149149
auto symbolObj = (IndexStoreDBObject<std::shared_ptr<Symbol>> *)symbol;
150-
return (uint8_t) symbolObj->value->getSymbolKind();
150+
return (indexstoredb_symbol_kind_t) symbolObj->value->getSymbolKind();
151151
}
152152

153153
bool

0 commit comments

Comments
 (0)