Skip to content

Commit 5e9e3c3

Browse files
committed
Parse modifiers from tokens too
1 parent dc5747d commit 5e9e3c3

File tree

1 file changed

+48
-40
lines changed

1 file changed

+48
-40
lines changed

Sources/SourceKitLSP/Swift/SemanticTokenParser.swift

Lines changed: 48 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -219,14 +219,15 @@ struct SemanticTokenParser {
219219
let start: Position = snapshot.positionOf(utf8Offset: offset),
220220
let length: Int = response[keys.length],
221221
let skKind: sourcekitd_uid_t = response[keys.kind],
222-
let kind = parseKind(skKind) else {
222+
let (kind, modifiers) = parseKindAndModifiers(skKind) else {
223223
return []
224224
}
225225

226226
let token = SemanticToken(
227227
start: start,
228228
length: length,
229-
kind: kind
229+
kind: kind,
230+
modifiers: modifiers
230231
)
231232

232233
let children: [SemanticToken]
@@ -248,81 +249,88 @@ struct SemanticTokenParser {
248249
return result
249250
}
250251

251-
private func parseKind(_ uid: sourcekitd_uid_t) -> SemanticToken.Kind? {
252+
private func parseKindAndModifiers(_ uid: sourcekitd_uid_t) -> (SemanticToken.Kind, SemanticToken.Modifiers)? {
252253
let values = sourcekitd.values
253254
switch uid {
254255
case values.kind_keyword,
255256
values.syntaxtype_keyword:
256-
return .keyword
257+
return (.keyword, [])
257258
case values.syntaxtype_attribute_builtin:
258-
return .modifier
259+
return (.modifier, [])
259260
case values.decl_module:
260-
return .namespace
261-
case values.decl_class,
262-
values.ref_class:
263-
return .class
264-
case values.decl_struct,
265-
values.ref_struct:
266-
return .struct
267-
case values.decl_enum,
268-
values.ref_enum:
269-
return .enum
270-
case values.decl_protocol,
271-
values.ref_protocol:
272-
return .interface
261+
return (.namespace, [])
262+
case values.decl_class:
263+
return (.class, [.declaration])
264+
case values.ref_class:
265+
return (.class, [])
266+
case values.decl_struct:
267+
return (.struct, [.declaration])
268+
case values.ref_struct:
269+
return (.struct, [])
270+
case values.decl_enum:
271+
return (.enum, [.declaration])
272+
case values.ref_enum:
273+
return (.enum, [])
274+
case values.decl_protocol:
275+
return (.interface, [.declaration])
276+
case values.ref_protocol:
277+
return (.interface, [])
273278
case values.decl_associatedtype,
274279
values.decl_typealias,
275-
values.decl_generic_type_param,
276-
values.ref_associatedtype,
280+
values.decl_generic_type_param:
281+
return (.typeParameter, [.declaration])
282+
case values.ref_associatedtype,
277283
values.ref_typealias,
278284
values.ref_generic_type_param:
279-
return .typeParameter
285+
return (.typeParameter, [])
280286
case values.decl_function_constructor,
281287
values.decl_function_subscript,
282288
values.decl_function_free,
283289
values.decl_function_method_static,
284290
values.decl_function_method_instance,
285-
values.decl_function_method_class,
286-
values.ref_function_constructor,
291+
values.decl_function_method_class:
292+
return (.function, [.declaration])
293+
case values.ref_function_constructor,
287294
values.ref_function_destructor,
288295
values.ref_function_free,
289296
values.ref_function_subscript,
290297
values.ref_function_method_static,
291298
values.ref_function_method_instance,
292299
values.ref_function_method_class:
293-
return .function
300+
return (.function, [])
294301
case values.decl_function_operator_prefix,
295302
values.decl_function_operator_postfix,
296-
values.decl_function_operator_infix,
297-
values.ref_function_operator_prefix,
303+
values.decl_function_operator_infix:
304+
return (.operator, [.declaration])
305+
case values.ref_function_operator_prefix,
298306
values.ref_function_operator_postfix,
299307
values.ref_function_operator_infix:
300-
return .operator
308+
return (.operator, [])
301309
case values.decl_var_static,
302310
values.decl_var_class,
303-
values.decl_var_instance,
304-
values.ref_var_static,
311+
values.decl_var_instance:
312+
return (.property, [.declaration])
313+
case values.ref_var_static,
305314
values.ref_var_class,
306315
values.ref_var_instance:
307-
return .property
316+
return (.property, [])
308317
case values.decl_var_local,
309-
values.decl_var_global,
310-
values.ref_var_local,
318+
values.decl_var_global:
319+
return (.variable, [.declaration])
320+
case values.ref_var_local,
311321
values.ref_var_global:
312-
// We don't use values.syntaxtype_identifier here as it would cause
313-
// functions to get highlighted as variables too.
314-
return .variable
322+
return (.variable, [])
315323
case values.decl_var_parameter:
316-
return .parameter
324+
return (.parameter, [.declaration])
317325
case values.syntaxtype_comment,
318326
values.syntaxtype_doccomment:
319-
return .comment
327+
return (.comment, [])
320328
case values.syntaxtype_type_identifier:
321-
return .type
329+
return (.type, [])
322330
case values.syntaxtype_number:
323-
return .number
331+
return (.number, [])
324332
case values.syntaxtype_string:
325-
return .string
333+
return (.string, [])
326334
default:
327335
return nil
328336
}

0 commit comments

Comments
 (0)