@@ -219,14 +219,15 @@ struct SemanticTokenParser {
219
219
let start: Position = snapshot. positionOf ( utf8Offset: offset) ,
220
220
let length: Int = response [ keys. length] ,
221
221
let skKind: sourcekitd_uid_t = response [ keys. kind] ,
222
- let kind = parseKind ( skKind) else {
222
+ let ( kind, modifiers ) = parseKindAndModifiers ( skKind) else {
223
223
return [ ]
224
224
}
225
225
226
226
let token = SemanticToken (
227
227
start: start,
228
228
length: length,
229
- kind: kind
229
+ kind: kind,
230
+ modifiers: modifiers
230
231
)
231
232
232
233
let children : [ SemanticToken ]
@@ -248,81 +249,88 @@ struct SemanticTokenParser {
248
249
return result
249
250
}
250
251
251
- private func parseKind ( _ uid: sourcekitd_uid_t ) -> SemanticToken . Kind ? {
252
+ private func parseKindAndModifiers ( _ uid: sourcekitd_uid_t ) -> ( SemanticToken . Kind , SemanticToken . Modifiers ) ? {
252
253
let values = sourcekitd. values
253
254
switch uid {
254
255
case values. kind_keyword,
255
256
values. syntaxtype_keyword:
256
- return . keyword
257
+ return ( . keyword, [ ] )
257
258
case values. syntaxtype_attribute_builtin:
258
- return . modifier
259
+ return ( . modifier, [ ] )
259
260
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, [ ] )
273
278
case values. decl_associatedtype,
274
279
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,
277
283
values. ref_typealias,
278
284
values. ref_generic_type_param:
279
- return . typeParameter
285
+ return ( . typeParameter, [ ] )
280
286
case values. decl_function_constructor,
281
287
values. decl_function_subscript,
282
288
values. decl_function_free,
283
289
values. decl_function_method_static,
284
290
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,
287
294
values. ref_function_destructor,
288
295
values. ref_function_free,
289
296
values. ref_function_subscript,
290
297
values. ref_function_method_static,
291
298
values. ref_function_method_instance,
292
299
values. ref_function_method_class:
293
- return . function
300
+ return ( . function, [ ] )
294
301
case values. decl_function_operator_prefix,
295
302
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,
298
306
values. ref_function_operator_postfix,
299
307
values. ref_function_operator_infix:
300
- return . operator
308
+ return ( . operator, [ ] )
301
309
case values. decl_var_static,
302
310
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,
305
314
values. ref_var_class,
306
315
values. ref_var_instance:
307
- return . property
316
+ return ( . property, [ ] )
308
317
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,
311
321
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, [ ] )
315
323
case values. decl_var_parameter:
316
- return . parameter
324
+ return ( . parameter, [ . declaration ] )
317
325
case values. syntaxtype_comment,
318
326
values. syntaxtype_doccomment:
319
- return . comment
327
+ return ( . comment, [ ] )
320
328
case values. syntaxtype_type_identifier:
321
- return . type
329
+ return ( . type, [ ] )
322
330
case values. syntaxtype_number:
323
- return . number
331
+ return ( . number, [ ] )
324
332
case values. syntaxtype_string:
325
- return . string
333
+ return ( . string, [ ] )
326
334
default :
327
335
return nil
328
336
}
0 commit comments