@@ -9,9 +9,9 @@ package server
9
9
10
10
import " core:fmt"
11
11
import " core:log"
12
- import " core:unicode/utf8"
13
12
import " core:odin/ast"
14
13
import " core:odin/tokenizer"
14
+ import " core:unicode/utf8"
15
15
16
16
import " src:common"
17
17
@@ -68,7 +68,7 @@ semantic_token_modifier_names: []string = {
68
68
" deprecated" ,
69
69
" readonly" ,
70
70
}
71
- SemanticTokenModifiers :: bit_set [SemanticTokenModifier; u32 ]
71
+ SemanticTokenModifiers :: bit_set [SemanticTokenModifier;u32 ]
72
72
73
73
SemanticTokensClientCapabilities :: struct {
74
74
requests: struct {
@@ -179,13 +179,7 @@ write_semantic_node :: proc(
179
179
180
180
name := common.get_ast_node_string (node, builder.src)
181
181
182
- write_semantic_at_pos (
183
- builder,
184
- node.pos.offset,
185
- len (name),
186
- type,
187
- modifiers,
188
- )
182
+ write_semantic_at_pos (builder, node.pos.offset, len (name), type, modifiers)
189
183
}
190
184
191
185
write_semantic_token :: proc (
@@ -295,11 +289,7 @@ visit_node :: proc(node: ^ast.Node, builder: ^SemanticTokenBuilder) {
295
289
visit_node (n.expr, builder)
296
290
visit_nodes (n.args, builder)
297
291
case ^Implicit_Selector_Expr:
298
- write_semantic_node (
299
- builder,
300
- n.field,
301
- .EnumMember,
302
- )
292
+ write_semantic_node (builder, n.field, .EnumMember)
303
293
case ^Array_Type:
304
294
visit_node (n.len, builder)
305
295
visit_node (n.elem, builder)
@@ -360,6 +350,9 @@ visit_node :: proc(node: ^ast.Node, builder: ^SemanticTokenBuilder) {
360
350
case ^Or_Else_Expr:
361
351
visit_node (n.x, builder)
362
352
visit_node (n.y, builder)
353
+ case ^ast.Or_Branch_Expr:
354
+ visit_node (n.expr, builder)
355
+ visit_node (n.label, builder)
363
356
case ^Ternary_If_Expr:
364
357
if n.op1.text == " if" {
365
358
visit_node (n.x, builder)
@@ -394,11 +387,15 @@ visit_node :: proc(node: ^ast.Node, builder: ^SemanticTokenBuilder) {
394
387
}
395
388
}
396
389
397
- visit_value_decl :: proc (value_decl: ast.Value_Decl, builder: ^SemanticTokenBuilder) {
390
+ visit_value_decl :: proc (
391
+ value_decl: ast.Value_Decl,
392
+ builder: ^SemanticTokenBuilder,
393
+ ) {
398
394
using ast
399
395
400
- modifiers: SemanticTokenModifiers = value_decl.is_mutable ? {} : {.ReadOnly}
401
-
396
+ modifiers: SemanticTokenModifiers =
397
+ value_decl.is_mutable ? {} : {.ReadOnly}
398
+
402
399
for name in value_decl.names {
403
400
ident := name.derived.(^Ident) or_continue
404
401
visit_ident (ident, ident, modifiers, builder)
@@ -438,7 +435,10 @@ visit_proc_type :: proc(node: ^ast.Proc_Type, builder: ^SemanticTokenBuilder) {
438
435
}
439
436
}
440
437
441
- visit_enum_fields :: proc (node: ast.Enum_Type, builder: ^SemanticTokenBuilder) {
438
+ visit_enum_fields :: proc (
439
+ node: ast.Enum_Type,
440
+ builder: ^SemanticTokenBuilder,
441
+ ) {
442
442
using ast
443
443
444
444
if node.fields == nil {
@@ -457,7 +457,10 @@ visit_enum_fields :: proc(node: ast.Enum_Type, builder: ^SemanticTokenBuilder) {
457
457
}
458
458
}
459
459
460
- visit_struct_fields :: proc (node: ast.Struct_Type, builder: ^SemanticTokenBuilder) {
460
+ visit_struct_fields :: proc (
461
+ node: ast.Struct_Type,
462
+ builder: ^SemanticTokenBuilder,
463
+ ) {
461
464
if node.fields == nil {
462
465
return
463
466
}
@@ -473,7 +476,10 @@ visit_struct_fields :: proc(node: ast.Struct_Type, builder: ^SemanticTokenBuilde
473
476
}
474
477
}
475
478
476
- visit_bit_field_fields :: proc (node: ast.Bit_Field_Type, builder: ^SemanticTokenBuilder) {
479
+ visit_bit_field_fields :: proc (
480
+ node: ast.Bit_Field_Type,
481
+ builder: ^SemanticTokenBuilder,
482
+ ) {
477
483
if node.fields == nil {
478
484
return
479
485
}
@@ -488,7 +494,10 @@ visit_bit_field_fields :: proc(node: ast.Bit_Field_Type, builder: ^SemanticToken
488
494
}
489
495
}
490
496
491
- visit_selector :: proc (selector: ^ast.Selector_Expr, builder: ^SemanticTokenBuilder) {
497
+ visit_selector :: proc (
498
+ selector: ^ast.Selector_Expr,
499
+ builder: ^SemanticTokenBuilder,
500
+ ) {
492
501
if v, ok := selector.expr.derived.(^ast.Selector_Expr); ok {
493
502
visit_selector (v, builder)
494
503
} else {
@@ -499,7 +508,10 @@ visit_selector :: proc(selector: ^ast.Selector_Expr, builder: ^SemanticTokenBuil
499
508
visit_ident (selector.field, selector, {}, builder)
500
509
}
501
510
502
- visit_import_decl :: proc (decl: ^ast.Import_Decl, builder: ^SemanticTokenBuilder) {
511
+ visit_import_decl :: proc (
512
+ decl: ^ast.Import_Decl,
513
+ builder: ^SemanticTokenBuilder,
514
+ ) {
503
515
/*
504
516
hightlight the namespace in the import declaration
505
517
@@ -515,16 +527,17 @@ visit_import_decl :: proc(decl: ^ast.Import_Decl, builder: ^SemanticTokenBuilder
515
527
516
528
if decl.name.text != " " {
517
529
write_semantic_token (builder, decl.name, .Namespace)
518
- }
519
- else if len (decl.relpath.text) > 2 {
530
+ } else if len (decl.relpath.text) > 2 {
520
531
521
532
end := len (decl.relpath.text) - 1
522
533
pos := end
523
534
524
535
for {
525
536
if pos > 1 {
526
- ch, w := utf8.decode_last_rune_in_string (decl.relpath.text[:pos])
527
-
537
+ ch, w := utf8.decode_last_rune_in_string (
538
+ decl.relpath.text[:pos],
539
+ )
540
+
528
541
switch ch {
529
542
case ' :' , ' /' : // break
530
543
case :
@@ -538,8 +551,8 @@ visit_import_decl :: proc(decl: ^ast.Import_Decl, builder: ^SemanticTokenBuilder
538
551
539
552
write_semantic_at_pos (
540
553
builder,
541
- decl.relpath.pos.offset+ pos,
542
- end- pos,
554
+ decl.relpath.pos.offset + pos,
555
+ end - pos,
543
556
.Namespace,
544
557
)
545
558
}
@@ -584,15 +597,11 @@ visit_ident :: proc(
584
597
switch v in symbol.value {
585
598
case SymbolPackageValue:
586
599
write_semantic_node (builder, ident, .Namespace, modifiers)
587
- case SymbolStructValue,
588
- SymbolBitFieldValue:
600
+ case SymbolStructValue, SymbolBitFieldValue:
589
601
write_semantic_node (builder, ident, .Struct, modifiers)
590
- case SymbolEnumValue,
591
- SymbolUnionValue:
602
+ case SymbolEnumValue, SymbolUnionValue:
592
603
write_semantic_node (builder, ident, .Enum, modifiers)
593
- case SymbolProcedureValue,
594
- SymbolProcedureGroupValue,
595
- SymbolAggregateValue:
604
+ case SymbolProcedureValue, SymbolProcedureGroupValue, SymbolAggregateValue:
596
605
write_semantic_node (builder, ident, .Function, modifiers)
597
606
case SymbolMatrixValue,
598
607
SymbolBitSetValue,
@@ -603,11 +612,11 @@ visit_ident :: proc(
603
612
SymbolMultiPointer:
604
613
write_semantic_node (builder, ident, .Type, modifiers)
605
614
case SymbolBasicValue, SymbolUntypedValue:
606
- // handled by static syntax analysis
615
+ // handled by static syntax analysis
607
616
case SymbolGenericValue:
608
- // unused
617
+ // unused
609
618
case :
610
- // log.errorf("Unexpected symbol value: %v", symbol.value);
611
- // panic(fmt.tprintf("Unexpected symbol value: %v", symbol.value));
619
+ // log.errorf("Unexpected symbol value: %v", symbol.value);
620
+ // panic(fmt.tprintf("Unexpected symbol value: %v", symbol.value));
612
621
}
613
622
}
0 commit comments