Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/go/syntaxes/go.tmLanguage.json
5238 views
1
{
2
"information_for_contributors": [
3
"This file has been converted from https://github.com/worlpaker/go-syntax/blob/master/syntaxes/go.tmLanguage.json",
4
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
5
"Once accepted there, we are happy to receive an update request."
6
],
7
"version": "https://github.com/worlpaker/go-syntax/commit/6e8421faf8f1445512825f63925e54a62106bcf1",
8
"name": "Go",
9
"scopeName": "source.go",
10
"patterns": [
11
{
12
"include": "#statements"
13
}
14
],
15
"repository": {
16
"statements": {
17
"patterns": [
18
{
19
"include": "#package_name"
20
},
21
{
22
"include": "#import"
23
},
24
{
25
"include": "#syntax_errors"
26
},
27
{
28
"include": "#group-functions"
29
},
30
{
31
"include": "#group-types"
32
},
33
{
34
"include": "#group-variables"
35
},
36
{
37
"include": "#hover"
38
}
39
]
40
},
41
"group-functions": {
42
"comment": "all statements related to functions",
43
"patterns": [
44
{
45
"include": "#function_declaration"
46
},
47
{
48
"include": "#functions_inline"
49
},
50
{
51
"include": "#functions"
52
},
53
{
54
"include": "#built_in_functions"
55
},
56
{
57
"include": "#support_functions"
58
}
59
]
60
},
61
"group-types": {
62
"comment": "all statements related to types",
63
"patterns": [
64
{
65
"include": "#other_struct_interface_expressions"
66
},
67
{
68
"include": "#type_assertion_inline"
69
},
70
{
71
"include": "#struct_variables_types"
72
},
73
{
74
"include": "#interface_variables_types"
75
},
76
{
77
"include": "#single_type"
78
},
79
{
80
"include": "#multi_types"
81
},
82
{
83
"include": "#struct_interface_declaration"
84
},
85
{
86
"include": "#double_parentheses_types"
87
},
88
{
89
"include": "#switch_types"
90
},
91
{
92
"include": "#type-declarations"
93
}
94
]
95
},
96
"group-variables": {
97
"comment": "all statements related to variables",
98
"patterns": [
99
{
100
"include": "#const_assignment"
101
},
102
{
103
"include": "#var_assignment"
104
},
105
{
106
"include": "#variable_assignment"
107
},
108
{
109
"include": "#label_loop_variables"
110
},
111
{
112
"include": "#slice_index_variables"
113
},
114
{
115
"include": "#property_variables"
116
},
117
{
118
"include": "#switch_variables"
119
},
120
{
121
"include": "#other_variables"
122
}
123
]
124
},
125
"type-declarations": {
126
"comment": "includes all type declarations",
127
"patterns": [
128
{
129
"include": "#language_constants"
130
},
131
{
132
"include": "#comments"
133
},
134
{
135
"include": "#map_types"
136
},
137
{
138
"include": "#brackets"
139
},
140
{
141
"include": "#delimiters"
142
},
143
{
144
"include": "#keywords"
145
},
146
{
147
"include": "#operators"
148
},
149
{
150
"include": "#runes"
151
},
152
{
153
"include": "#storage_types"
154
},
155
{
156
"include": "#raw_string_literals"
157
},
158
{
159
"include": "#string_literals"
160
},
161
{
162
"include": "#numeric_literals"
163
},
164
{
165
"include": "#terminators"
166
}
167
]
168
},
169
"type-declarations-without-brackets": {
170
"comment": "includes all type declarations without brackets (in some cases, brackets need to be captured manually)",
171
"patterns": [
172
{
173
"include": "#language_constants"
174
},
175
{
176
"include": "#comments"
177
},
178
{
179
"include": "#map_types"
180
},
181
{
182
"include": "#delimiters"
183
},
184
{
185
"include": "#keywords"
186
},
187
{
188
"include": "#operators"
189
},
190
{
191
"include": "#runes"
192
},
193
{
194
"include": "#storage_types"
195
},
196
{
197
"include": "#raw_string_literals"
198
},
199
{
200
"include": "#string_literals"
201
},
202
{
203
"include": "#numeric_literals"
204
},
205
{
206
"include": "#terminators"
207
}
208
]
209
},
210
"parameter-variable-types": {
211
"comment": "function and generic parameter types",
212
"patterns": [
213
{
214
"match": "\\{",
215
"name": "punctuation.definition.begin.bracket.curly.go"
216
},
217
{
218
"match": "\\}",
219
"name": "punctuation.definition.end.bracket.curly.go"
220
},
221
{
222
"begin": "([\\w\\.\\*]+)?(\\[)",
223
"beginCaptures": {
224
"1": {
225
"patterns": [
226
{
227
"include": "#type-declarations"
228
},
229
{
230
"match": "\\w+",
231
"name": "entity.name.type.go"
232
}
233
]
234
},
235
"2": {
236
"name": "punctuation.definition.begin.bracket.square.go"
237
}
238
},
239
"end": "\\]",
240
"endCaptures": {
241
"0": {
242
"name": "punctuation.definition.end.bracket.square.go"
243
}
244
},
245
"patterns": [
246
{
247
"include": "#generic_param_types"
248
}
249
]
250
},
251
{
252
"begin": "\\(",
253
"beginCaptures": {
254
"0": {
255
"name": "punctuation.definition.begin.bracket.round.go"
256
}
257
},
258
"end": "\\)",
259
"endCaptures": {
260
"0": {
261
"name": "punctuation.definition.end.bracket.round.go"
262
}
263
},
264
"patterns": [
265
{
266
"include": "#function_param_types"
267
}
268
]
269
}
270
]
271
},
272
"language_constants": {
273
"comment": "Language constants",
274
"match": "\\b(?:(true|false)|(nil)|(iota))\\b",
275
"captures": {
276
"1": {
277
"name": "constant.language.boolean.go"
278
},
279
"2": {
280
"name": "constant.language.null.go"
281
},
282
"3": {
283
"name": "constant.language.iota.go"
284
}
285
}
286
},
287
"comments": {
288
"patterns": [
289
{
290
"name": "comment.block.go",
291
"begin": "(\\/\\*)",
292
"beginCaptures": {
293
"1": {
294
"name": "punctuation.definition.comment.go"
295
}
296
},
297
"end": "(\\*\\/)",
298
"endCaptures": {
299
"1": {
300
"name": "punctuation.definition.comment.go"
301
}
302
}
303
},
304
{
305
"name": "comment.line.double-slash.go",
306
"begin": "(\\/\\/)",
307
"beginCaptures": {
308
"1": {
309
"name": "punctuation.definition.comment.go"
310
}
311
},
312
"end": "(?:\\n|$)"
313
}
314
]
315
},
316
"map_types": {
317
"comment": "map types",
318
"begin": "(\\bmap\\b)(\\[)",
319
"beginCaptures": {
320
"1": {
321
"name": "keyword.map.go"
322
},
323
"2": {
324
"name": "punctuation.definition.begin.bracket.square.go"
325
}
326
},
327
"end": "(?:(\\])((?:(?:(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?!(?:[\\[\\]\\*]+)?\\b(?:func|struct|map)\\b)(?:[\\*\\[\\]]+)?(?:[\\w\\.]+)(?:\\[(?:(?:[\\w\\.\\*\\[\\]\\{\\}]+)(?:(?:\\,\\s*(?:[\\w\\.\\*\\[\\]\\{\\}]+))*))?\\])?)?)",
328
"endCaptures": {
329
"1": {
330
"name": "punctuation.definition.end.bracket.square.go"
331
},
332
"2": {
333
"patterns": [
334
{
335
"include": "#type-declarations-without-brackets"
336
},
337
{
338
"match": "\\[",
339
"name": "punctuation.definition.begin.bracket.square.go"
340
},
341
{
342
"match": "\\]",
343
"name": "punctuation.definition.end.bracket.square.go"
344
},
345
{
346
"match": "\\w+",
347
"name": "entity.name.type.go"
348
}
349
]
350
}
351
},
352
"patterns": [
353
{
354
"include": "#type-declarations-without-brackets"
355
},
356
{
357
"include": "#parameter-variable-types"
358
},
359
{
360
"include": "#functions"
361
},
362
{
363
"match": "\\[",
364
"name": "punctuation.definition.begin.bracket.square.go"
365
},
366
{
367
"match": "\\]",
368
"name": "punctuation.definition.end.bracket.square.go"
369
},
370
{
371
"match": "\\{",
372
"name": "punctuation.definition.begin.bracket.curly.go"
373
},
374
{
375
"match": "\\}",
376
"name": "punctuation.definition.end.bracket.curly.go"
377
},
378
{
379
"match": "\\(",
380
"name": "punctuation.definition.begin.bracket.round.go"
381
},
382
{
383
"match": "\\)",
384
"name": "punctuation.definition.end.bracket.round.go"
385
},
386
{
387
"match": "\\w+",
388
"name": "entity.name.type.go"
389
}
390
]
391
},
392
"brackets": {
393
"patterns": [
394
{
395
"begin": "\\{",
396
"beginCaptures": {
397
"0": {
398
"name": "punctuation.definition.begin.bracket.curly.go"
399
}
400
},
401
"end": "\\}",
402
"endCaptures": {
403
"0": {
404
"name": "punctuation.definition.end.bracket.curly.go"
405
}
406
},
407
"patterns": [
408
{
409
"include": "$self"
410
}
411
]
412
},
413
{
414
"begin": "\\(",
415
"beginCaptures": {
416
"0": {
417
"name": "punctuation.definition.begin.bracket.round.go"
418
}
419
},
420
"end": "\\)",
421
"endCaptures": {
422
"0": {
423
"name": "punctuation.definition.end.bracket.round.go"
424
}
425
},
426
"patterns": [
427
{
428
"include": "$self"
429
}
430
]
431
},
432
{
433
"begin": "\\[",
434
"beginCaptures": {
435
"0": {
436
"name": "punctuation.definition.begin.bracket.square.go"
437
}
438
},
439
"end": "\\]",
440
"endCaptures": {
441
"0": {
442
"name": "punctuation.definition.end.bracket.square.go"
443
}
444
},
445
"patterns": [
446
{
447
"include": "$self"
448
}
449
]
450
}
451
]
452
},
453
"delimiters": {
454
"patterns": [
455
{
456
"match": "\\,",
457
"name": "punctuation.other.comma.go"
458
},
459
{
460
"match": "\\.(?!\\.\\.)",
461
"name": "punctuation.other.period.go"
462
},
463
{
464
"match": ":(?!=)",
465
"name": "punctuation.other.colon.go"
466
}
467
]
468
},
469
"keywords": {
470
"patterns": [
471
{
472
"comment": "Flow control keywords",
473
"match": "\\b(break|case|continue|default|defer|else|fallthrough|for|go|goto|if|range|return|select|switch)\\b",
474
"name": "keyword.control.go"
475
},
476
{
477
"match": "\\bchan\\b",
478
"name": "keyword.channel.go"
479
},
480
{
481
"match": "\\bconst\\b",
482
"name": "keyword.const.go"
483
},
484
{
485
"match": "\\bvar\\b",
486
"name": "keyword.var.go"
487
},
488
{
489
"match": "\\bfunc\\b",
490
"name": "keyword.function.go"
491
},
492
{
493
"match": "\\binterface\\b",
494
"name": "keyword.interface.go"
495
},
496
{
497
"match": "\\bmap\\b",
498
"name": "keyword.map.go"
499
},
500
{
501
"match": "\\bstruct\\b",
502
"name": "keyword.struct.go"
503
},
504
{
505
"match": "\\bimport\\b",
506
"name": "keyword.control.import.go"
507
},
508
{
509
"match": "\\btype\\b",
510
"name": "keyword.type.go"
511
}
512
]
513
},
514
"operators": {
515
"comment": "Note that the order here is very important!",
516
"patterns": [
517
{
518
"match": "(?<!\\w)(?:\\*|\\&)+(?:(?!\\d)(?=(?:[\\w\\[\\]])|(?:\\<\\-)))",
519
"name": "keyword.operator.address.go"
520
},
521
{
522
"match": "<\\-",
523
"name": "keyword.operator.channel.go"
524
},
525
{
526
"match": "\\-\\-",
527
"name": "keyword.operator.decrement.go"
528
},
529
{
530
"match": "\\+\\+",
531
"name": "keyword.operator.increment.go"
532
},
533
{
534
"match": "(==|!=|<=|>=|<(?!<)|>(?!>))",
535
"name": "keyword.operator.comparison.go"
536
},
537
{
538
"match": "(&&|\\|\\||!)",
539
"name": "keyword.operator.logical.go"
540
},
541
{
542
"match": "(=|\\+=|\\-=|\\|=|\\^=|\\*=|/=|:=|%=|<<=|>>=|&\\^=|&=)",
543
"name": "keyword.operator.assignment.go"
544
},
545
{
546
"match": "(\\+|\\-|\\*|/|%)",
547
"name": "keyword.operator.arithmetic.go"
548
},
549
{
550
"match": "(&(?!\\^)|\\||\\^|&\\^|<<|>>|\\~)",
551
"name": "keyword.operator.arithmetic.bitwise.go"
552
},
553
{
554
"match": "\\.\\.\\.",
555
"name": "keyword.operator.ellipsis.go"
556
}
557
]
558
},
559
"runes": {
560
"patterns": [
561
{
562
"begin": "'",
563
"beginCaptures": {
564
"0": {
565
"name": "punctuation.definition.string.begin.go"
566
}
567
},
568
"end": "'",
569
"endCaptures": {
570
"0": {
571
"name": "punctuation.definition.string.end.go"
572
}
573
},
574
"name": "string.quoted.rune.go",
575
"patterns": [
576
{
577
"match": "\\G(\\\\([0-7]{3}|[abfnrtv\\\\'\"]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})|.)(?=')",
578
"name": "constant.other.rune.go"
579
},
580
{
581
"match": "[^']+",
582
"name": "invalid.illegal.unknown-rune.go"
583
}
584
]
585
}
586
]
587
},
588
"storage_types": {
589
"patterns": [
590
{
591
"match": "\\bbool\\b",
592
"name": "storage.type.boolean.go"
593
},
594
{
595
"match": "\\bbyte\\b",
596
"name": "storage.type.byte.go"
597
},
598
{
599
"match": "\\berror\\b",
600
"name": "storage.type.error.go"
601
},
602
{
603
"match": "\\b(complex(64|128)|float(32|64)|u?int(8|16|32|64)?)\\b",
604
"name": "storage.type.numeric.go"
605
},
606
{
607
"match": "\\brune\\b",
608
"name": "storage.type.rune.go"
609
},
610
{
611
"match": "\\bstring\\b",
612
"name": "storage.type.string.go"
613
},
614
{
615
"match": "\\buintptr\\b",
616
"name": "storage.type.uintptr.go"
617
},
618
{
619
"match": "\\bany\\b",
620
"name": "entity.name.type.any.go"
621
},
622
{
623
"match": "\\bcomparable\\b",
624
"name": "entity.name.type.comparable.go"
625
}
626
]
627
},
628
"raw_string_literals": {
629
"comment": "Raw string literals",
630
"begin": "`",
631
"beginCaptures": {
632
"0": {
633
"name": "punctuation.definition.string.begin.go"
634
}
635
},
636
"end": "`",
637
"endCaptures": {
638
"0": {
639
"name": "punctuation.definition.string.end.go"
640
}
641
},
642
"name": "string.quoted.raw.go",
643
"patterns": [
644
{
645
"include": "#string_placeholder"
646
}
647
]
648
},
649
"string_literals": {
650
"patterns": [
651
{
652
"comment": "Interpreted string literals",
653
"begin": "\"",
654
"beginCaptures": {
655
"0": {
656
"name": "punctuation.definition.string.begin.go"
657
}
658
},
659
"end": "\"",
660
"endCaptures": {
661
"0": {
662
"name": "punctuation.definition.string.end.go"
663
}
664
},
665
"name": "string.quoted.double.go",
666
"patterns": [
667
{
668
"include": "#string_escaped_char"
669
},
670
{
671
"include": "#string_placeholder"
672
}
673
]
674
}
675
]
676
},
677
"string_escaped_char": {
678
"patterns": [
679
{
680
"match": "\\\\([0-7]{3}|[abfnrtv\\\\'\"]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})",
681
"name": "constant.character.escape.go"
682
},
683
{
684
"match": "\\\\[^0-7xuUabfnrtv\\'\"]",
685
"name": "invalid.illegal.unknown-escape.go"
686
}
687
]
688
},
689
"string_placeholder": {
690
"patterns": [
691
{
692
"match": "%(\\[\\d+\\])?([\\+#\\-0\\x20]{,2}((\\d+|\\*)?(\\.?(\\d+|\\*|(\\[\\d+\\])\\*?)?(\\[\\d+\\])?)?))?[vT%tbcdoqxXUbeEfFgGspw]",
693
"name": "constant.other.placeholder.go"
694
}
695
]
696
},
697
"numeric_literals": {
698
"match": "(?<!\\w)\\.?\\d(?:(?:[0-9a-zA-Z_\\.])|(?<=[eEpP])[+-])*",
699
"captures": {
700
"0": {
701
"patterns": [
702
{
703
"begin": "(?=.)",
704
"end": "(?:\\n|$)",
705
"patterns": [
706
{
707
"match": "(?:(?:(?:(?:(?:\\G(?=[0-9.])(?!0[xXbBoO])([0-9](?:[0-9]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)((?:(?<=[0-9])\\.|\\.(?=[0-9])))([0-9](?:[0-9]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)?(?:(?<!_)([eE])(\\+?)(\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)))?(i(?!\\w))?(?:\\n|$)|\\G(?=[0-9.])(?!0[xXbBoO])([0-9](?:[0-9]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)(?<!_)([eE])(\\+?)(\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*))(i(?!\\w))?(?:\\n|$))|\\G((?:(?<=[0-9])\\.|\\.(?=[0-9])))([0-9](?:[0-9]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)(?:(?<!_)([eE])(\\+?)(\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)))?(i(?!\\w))?(?:\\n|$))|(\\G0[xX])_?([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)((?:(?<=[0-9a-fA-F])\\.|\\.(?=[0-9a-fA-F])))([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)?(?<!_)([pP])(\\+?)(\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*))(i(?!\\w))?(?:\\n|$))|(\\G0[xX])_?([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)(?<!_)([pP])(\\+?)(\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*))(i(?!\\w))?(?:\\n|$))|(\\G0[xX])((?:(?<=[0-9a-fA-F])\\.|\\.(?=[0-9a-fA-F])))([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)(?<!_)([pP])(\\+?)(\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*))(i(?!\\w))?(?:\\n|$))",
708
"captures": {
709
"1": {
710
"name": "constant.numeric.decimal.go",
711
"patterns": [
712
{
713
"match": "(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])",
714
"name": "punctuation.separator.constant.numeric.go"
715
}
716
]
717
},
718
"2": {
719
"name": "punctuation.separator.constant.numeric.go"
720
},
721
"3": {
722
"name": "constant.numeric.decimal.point.go"
723
},
724
"4": {
725
"name": "constant.numeric.decimal.go",
726
"patterns": [
727
{
728
"match": "(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])",
729
"name": "punctuation.separator.constant.numeric.go"
730
}
731
]
732
},
733
"5": {
734
"name": "punctuation.separator.constant.numeric.go"
735
},
736
"6": {
737
"name": "keyword.other.unit.exponent.decimal.go"
738
},
739
"7": {
740
"name": "keyword.operator.plus.exponent.decimal.go"
741
},
742
"8": {
743
"name": "keyword.operator.minus.exponent.decimal.go"
744
},
745
"9": {
746
"name": "constant.numeric.exponent.decimal.go",
747
"patterns": [
748
{
749
"match": "(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])",
750
"name": "punctuation.separator.constant.numeric.go"
751
}
752
]
753
},
754
"10": {
755
"name": "keyword.other.unit.imaginary.go"
756
},
757
"11": {
758
"name": "constant.numeric.decimal.go",
759
"patterns": [
760
{
761
"match": "(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])",
762
"name": "punctuation.separator.constant.numeric.go"
763
}
764
]
765
},
766
"12": {
767
"name": "punctuation.separator.constant.numeric.go"
768
},
769
"13": {
770
"name": "keyword.other.unit.exponent.decimal.go"
771
},
772
"14": {
773
"name": "keyword.operator.plus.exponent.decimal.go"
774
},
775
"15": {
776
"name": "keyword.operator.minus.exponent.decimal.go"
777
},
778
"16": {
779
"name": "constant.numeric.exponent.decimal.go",
780
"patterns": [
781
{
782
"match": "(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])",
783
"name": "punctuation.separator.constant.numeric.go"
784
}
785
]
786
},
787
"17": {
788
"name": "keyword.other.unit.imaginary.go"
789
},
790
"18": {
791
"name": "constant.numeric.decimal.point.go"
792
},
793
"19": {
794
"name": "constant.numeric.decimal.go",
795
"patterns": [
796
{
797
"match": "(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])",
798
"name": "punctuation.separator.constant.numeric.go"
799
}
800
]
801
},
802
"20": {
803
"name": "punctuation.separator.constant.numeric.go"
804
},
805
"21": {
806
"name": "keyword.other.unit.exponent.decimal.go"
807
},
808
"22": {
809
"name": "keyword.operator.plus.exponent.decimal.go"
810
},
811
"23": {
812
"name": "keyword.operator.minus.exponent.decimal.go"
813
},
814
"24": {
815
"name": "constant.numeric.exponent.decimal.go",
816
"patterns": [
817
{
818
"match": "(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])",
819
"name": "punctuation.separator.constant.numeric.go"
820
}
821
]
822
},
823
"25": {
824
"name": "keyword.other.unit.imaginary.go"
825
},
826
"26": {
827
"name": "keyword.other.unit.hexadecimal.go"
828
},
829
"27": {
830
"name": "constant.numeric.hexadecimal.go",
831
"patterns": [
832
{
833
"match": "(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])",
834
"name": "punctuation.separator.constant.numeric.go"
835
}
836
]
837
},
838
"28": {
839
"name": "punctuation.separator.constant.numeric.go"
840
},
841
"29": {
842
"name": "constant.numeric.hexadecimal.go"
843
},
844
"30": {
845
"name": "constant.numeric.hexadecimal.go",
846
"patterns": [
847
{
848
"match": "(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])",
849
"name": "punctuation.separator.constant.numeric.go"
850
}
851
]
852
},
853
"31": {
854
"name": "punctuation.separator.constant.numeric.go"
855
},
856
"32": {
857
"name": "keyword.other.unit.exponent.hexadecimal.go"
858
},
859
"33": {
860
"name": "keyword.operator.plus.exponent.hexadecimal.go"
861
},
862
"34": {
863
"name": "keyword.operator.minus.exponent.hexadecimal.go"
864
},
865
"35": {
866
"name": "constant.numeric.exponent.hexadecimal.go",
867
"patterns": [
868
{
869
"match": "(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])",
870
"name": "punctuation.separator.constant.numeric.go"
871
}
872
]
873
},
874
"36": {
875
"name": "keyword.other.unit.imaginary.go"
876
},
877
"37": {
878
"name": "keyword.other.unit.hexadecimal.go"
879
},
880
"38": {
881
"name": "constant.numeric.hexadecimal.go",
882
"patterns": [
883
{
884
"match": "(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])",
885
"name": "punctuation.separator.constant.numeric.go"
886
}
887
]
888
},
889
"39": {
890
"name": "punctuation.separator.constant.numeric.go"
891
},
892
"40": {
893
"name": "keyword.other.unit.exponent.hexadecimal.go"
894
},
895
"41": {
896
"name": "keyword.operator.plus.exponent.hexadecimal.go"
897
},
898
"42": {
899
"name": "keyword.operator.minus.exponent.hexadecimal.go"
900
},
901
"43": {
902
"name": "constant.numeric.exponent.hexadecimal.go",
903
"patterns": [
904
{
905
"match": "(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])",
906
"name": "punctuation.separator.constant.numeric.go"
907
}
908
]
909
},
910
"44": {
911
"name": "keyword.other.unit.imaginary.go"
912
},
913
"45": {
914
"name": "keyword.other.unit.hexadecimal.go"
915
},
916
"46": {
917
"name": "constant.numeric.hexadecimal.go"
918
},
919
"47": {
920
"name": "constant.numeric.hexadecimal.go",
921
"patterns": [
922
{
923
"match": "(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])",
924
"name": "punctuation.separator.constant.numeric.go"
925
}
926
]
927
},
928
"48": {
929
"name": "punctuation.separator.constant.numeric.go"
930
},
931
"49": {
932
"name": "keyword.other.unit.exponent.hexadecimal.go"
933
},
934
"50": {
935
"name": "keyword.operator.plus.exponent.hexadecimal.go"
936
},
937
"51": {
938
"name": "keyword.operator.minus.exponent.hexadecimal.go"
939
},
940
"52": {
941
"name": "constant.numeric.exponent.hexadecimal.go",
942
"patterns": [
943
{
944
"match": "(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])",
945
"name": "punctuation.separator.constant.numeric.go"
946
}
947
]
948
},
949
"53": {
950
"name": "keyword.other.unit.imaginary.go"
951
}
952
}
953
},
954
{
955
"match": "(?:(?:(?:\\G(?=[0-9.])(?!0[xXbBoO])([0-9](?:[0-9]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)(i(?!\\w))?(?:\\n|$)|(\\G0[bB])_?([01](?:[01]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)(i(?!\\w))?(?:\\n|$))|(\\G0[oO]?)_?((?:[0-7]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))+)(i(?!\\w))?(?:\\n|$))|(\\G0[xX])_?([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)(i(?!\\w))?(?:\\n|$))",
956
"captures": {
957
"1": {
958
"name": "constant.numeric.decimal.go",
959
"patterns": [
960
{
961
"match": "(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])",
962
"name": "punctuation.separator.constant.numeric.go"
963
}
964
]
965
},
966
"2": {
967
"name": "punctuation.separator.constant.numeric.go"
968
},
969
"3": {
970
"name": "keyword.other.unit.imaginary.go"
971
},
972
"4": {
973
"name": "keyword.other.unit.binary.go"
974
},
975
"5": {
976
"name": "constant.numeric.binary.go",
977
"patterns": [
978
{
979
"match": "(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])",
980
"name": "punctuation.separator.constant.numeric.go"
981
}
982
]
983
},
984
"6": {
985
"name": "punctuation.separator.constant.numeric.go"
986
},
987
"7": {
988
"name": "keyword.other.unit.imaginary.go"
989
},
990
"8": {
991
"name": "keyword.other.unit.octal.go"
992
},
993
"9": {
994
"name": "constant.numeric.octal.go",
995
"patterns": [
996
{
997
"match": "(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])",
998
"name": "punctuation.separator.constant.numeric.go"
999
}
1000
]
1001
},
1002
"10": {
1003
"name": "punctuation.separator.constant.numeric.go"
1004
},
1005
"11": {
1006
"name": "keyword.other.unit.imaginary.go"
1007
},
1008
"12": {
1009
"name": "keyword.other.unit.hexadecimal.go"
1010
},
1011
"13": {
1012
"name": "constant.numeric.hexadecimal.go",
1013
"patterns": [
1014
{
1015
"match": "(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])",
1016
"name": "punctuation.separator.constant.numeric.go"
1017
}
1018
]
1019
},
1020
"14": {
1021
"name": "punctuation.separator.constant.numeric.go"
1022
},
1023
"15": {
1024
"name": "keyword.other.unit.imaginary.go"
1025
}
1026
}
1027
},
1028
{
1029
"match": "(?:(?:[0-9a-zA-Z_\\.])|(?<=[eEpP])[+-])+",
1030
"name": "invalid.illegal.constant.numeric.go"
1031
}
1032
]
1033
}
1034
]
1035
}
1036
}
1037
},
1038
"terminators": {
1039
"comment": "Terminators",
1040
"match": ";",
1041
"name": "punctuation.terminator.go"
1042
},
1043
"package_name": {
1044
"patterns": [
1045
{
1046
"comment": "package name",
1047
"begin": "\\b(package)\\s+",
1048
"beginCaptures": {
1049
"1": {
1050
"name": "keyword.package.go"
1051
}
1052
},
1053
"end": "(?!\\G)",
1054
"patterns": [
1055
{
1056
"match": "\\d\\w*",
1057
"name": "invalid.illegal.identifier.go"
1058
},
1059
{
1060
"match": "\\w+",
1061
"name": "entity.name.type.package.go"
1062
}
1063
]
1064
}
1065
]
1066
},
1067
"import": {
1068
"comment": "import",
1069
"patterns": [
1070
{
1071
"comment": "import",
1072
"begin": "\\b(import)\\s+",
1073
"beginCaptures": {
1074
"1": {
1075
"name": "keyword.control.import.go"
1076
}
1077
},
1078
"end": "(?!\\G)",
1079
"patterns": [
1080
{
1081
"include": "#imports"
1082
}
1083
]
1084
}
1085
]
1086
},
1087
"imports": {
1088
"comment": "import package(s)",
1089
"patterns": [
1090
{
1091
"match": "(\\s*[\\w\\.]+)?\\s*((\")([^\"]*)(\"))",
1092
"captures": {
1093
"1": {
1094
"patterns": [
1095
{
1096
"include": "#delimiters"
1097
},
1098
{
1099
"match": "\\w+",
1100
"name": "variable.other.import.go"
1101
}
1102
]
1103
},
1104
"2": {
1105
"name": "string.quoted.double.go"
1106
},
1107
"3": {
1108
"name": "punctuation.definition.string.begin.go"
1109
},
1110
"4": {
1111
"name": "entity.name.import.go"
1112
},
1113
"5": {
1114
"name": "punctuation.definition.string.end.go"
1115
}
1116
}
1117
},
1118
{
1119
"begin": "\\(",
1120
"beginCaptures": {
1121
"0": {
1122
"name": "punctuation.definition.imports.begin.bracket.round.go"
1123
}
1124
},
1125
"end": "\\)",
1126
"endCaptures": {
1127
"0": {
1128
"name": "punctuation.definition.imports.end.bracket.round.go"
1129
}
1130
},
1131
"patterns": [
1132
{
1133
"include": "#comments"
1134
},
1135
{
1136
"include": "#imports"
1137
}
1138
]
1139
},
1140
{
1141
"include": "$self"
1142
}
1143
]
1144
},
1145
"function_declaration": {
1146
"comment": "Function declarations",
1147
"begin": "(?:^(\\bfunc\\b)(?:\\s*(\\([^\\)]+\\)\\s*)?(?:(\\w+)(?=\\(|\\[))?))",
1148
"beginCaptures": {
1149
"1": {
1150
"name": "keyword.function.go"
1151
},
1152
"2": {
1153
"patterns": [
1154
{
1155
"begin": "\\(",
1156
"beginCaptures": {
1157
"0": {
1158
"name": "punctuation.definition.begin.bracket.round.go"
1159
}
1160
},
1161
"end": "\\)",
1162
"endCaptures": {
1163
"0": {
1164
"name": "punctuation.definition.end.bracket.round.go"
1165
}
1166
},
1167
"patterns": [
1168
{
1169
"match": "(?:(\\w+(?:\\s+))?((?:[\\w\\.\\*]+)(?:\\[(?:(?:(?:[\\w\\.\\*]+)(?:\\,\\s+)?)+)?\\])?))",
1170
"captures": {
1171
"1": {
1172
"name": "variable.parameter.go"
1173
},
1174
"2": {
1175
"patterns": [
1176
{
1177
"include": "#type-declarations-without-brackets"
1178
},
1179
{
1180
"include": "#parameter-variable-types"
1181
},
1182
{
1183
"match": "\\w+",
1184
"name": "entity.name.type.go"
1185
}
1186
]
1187
}
1188
}
1189
},
1190
{
1191
"include": "$self"
1192
}
1193
]
1194
}
1195
]
1196
},
1197
"3": {
1198
"patterns": [
1199
{
1200
"match": "\\d\\w*",
1201
"name": "invalid.illegal.identifier.go"
1202
},
1203
{
1204
"match": "\\w+",
1205
"name": "entity.name.function.go"
1206
}
1207
]
1208
}
1209
},
1210
"end": "(?:(?<=\\))\\s*((?:(?:(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?!(?:[\\[\\]\\*]+)?(?:\\bstruct\\b|\\binterface\\b))[\\w\\.\\-\\*\\[\\]]+)?\\s*(?=\\{))",
1211
"endCaptures": {
1212
"1": {
1213
"patterns": [
1214
{
1215
"include": "#type-declarations-without-brackets"
1216
},
1217
{
1218
"include": "#parameter-variable-types"
1219
},
1220
{
1221
"match": "\\w+",
1222
"name": "entity.name.type.go"
1223
}
1224
]
1225
}
1226
},
1227
"patterns": [
1228
{
1229
"begin": "\\(",
1230
"beginCaptures": {
1231
"0": {
1232
"name": "punctuation.definition.begin.bracket.round.go"
1233
}
1234
},
1235
"end": "\\)",
1236
"endCaptures": {
1237
"0": {
1238
"name": "punctuation.definition.end.bracket.round.go"
1239
}
1240
},
1241
"patterns": [
1242
{
1243
"include": "#function_param_types"
1244
}
1245
]
1246
},
1247
{
1248
"begin": "([\\w\\.\\*]+)?(\\[)",
1249
"beginCaptures": {
1250
"1": {
1251
"patterns": [
1252
{
1253
"include": "#type-declarations"
1254
},
1255
{
1256
"match": "\\w+",
1257
"name": "entity.name.type.go"
1258
}
1259
]
1260
},
1261
"2": {
1262
"name": "punctuation.definition.begin.bracket.square.go"
1263
}
1264
},
1265
"end": "\\]",
1266
"endCaptures": {
1267
"0": {
1268
"name": "punctuation.definition.end.bracket.square.go"
1269
}
1270
},
1271
"patterns": [
1272
{
1273
"include": "#generic_param_types"
1274
}
1275
]
1276
},
1277
{
1278
"comment": "single function as a type returned type(s) declaration",
1279
"match": "(?:(?<=\\))(?:\\s*)((?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?[\\w\\*\\.\\[\\]\\<\\>\\-]+(?:\\s*)(?:\\/(?:\\/|\\*).*)?)$)",
1280
"captures": {
1281
"1": {
1282
"patterns": [
1283
{
1284
"include": "#type-declarations-without-brackets"
1285
},
1286
{
1287
"include": "#parameter-variable-types"
1288
},
1289
{
1290
"match": "\\w+",
1291
"name": "entity.name.type.go"
1292
}
1293
]
1294
}
1295
}
1296
},
1297
{
1298
"include": "$self"
1299
}
1300
]
1301
},
1302
"function_param_types": {
1303
"comment": "function parameter variables and types",
1304
"patterns": [
1305
{
1306
"include": "#struct_variables_types"
1307
},
1308
{
1309
"include": "#interface_variables_types"
1310
},
1311
{
1312
"include": "#type-declarations-without-brackets"
1313
},
1314
{
1315
"comment": "struct/interface type declaration",
1316
"match": "((?:(?:\\b\\w+\\,\\s*)+)?\\b\\w+)\\s+(?=(?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:[\\[\\]\\*]+)?\\b(?:struct|interface)\\b\\s*\\{)",
1317
"captures": {
1318
"1": {
1319
"patterns": [
1320
{
1321
"include": "#type-declarations"
1322
},
1323
{
1324
"match": "\\w+",
1325
"name": "variable.parameter.go"
1326
}
1327
]
1328
}
1329
}
1330
},
1331
{
1332
"comment": "multiple parameters one type -with multilines",
1333
"match": "(?:(?:(?<=\\()|^\\s*)((?:(?:\\b\\w+\\,\\s*)+)(?:/(?:/|\\*).*)?)$)",
1334
"captures": {
1335
"1": {
1336
"patterns": [
1337
{
1338
"include": "#type-declarations"
1339
},
1340
{
1341
"match": "\\w+",
1342
"name": "variable.parameter.go"
1343
}
1344
]
1345
}
1346
}
1347
},
1348
{
1349
"comment": "multiple params and types | multiple params one type | one param one type",
1350
"match": "(?:((?:(?:\\b\\w+\\,\\s*)+)?\\b\\w+)(?:\\s+)((?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:(?:(?:[\\w\\[\\]\\.\\*]+)?(?:(?:\\bfunc\\b\\((?:[^\\)]+)?\\))(?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:\\s*))+(?:(?:(?:[\\w\\*\\.\\[\\]]+)|(?:\\((?:[^\\)]+)?\\))))?)|(?:(?:[\\[\\]\\*]+)?[\\w\\*\\.]+(?:\\[(?:[^\\]]+)\\])?(?:[\\w\\.\\*]+)?)+)))",
1351
"captures": {
1352
"1": {
1353
"patterns": [
1354
{
1355
"include": "#delimiters"
1356
},
1357
{
1358
"match": "\\w+",
1359
"name": "variable.parameter.go"
1360
}
1361
]
1362
},
1363
"2": {
1364
"patterns": [
1365
{
1366
"include": "#type-declarations-without-brackets"
1367
},
1368
{
1369
"include": "#parameter-variable-types"
1370
},
1371
{
1372
"match": "\\w+",
1373
"name": "entity.name.type.go"
1374
}
1375
]
1376
}
1377
}
1378
},
1379
{
1380
"begin": "([\\w\\.\\*]+)?(\\[)",
1381
"beginCaptures": {
1382
"1": {
1383
"patterns": [
1384
{
1385
"include": "#type-declarations"
1386
},
1387
{
1388
"match": "\\w+",
1389
"name": "entity.name.type.go"
1390
}
1391
]
1392
},
1393
"2": {
1394
"name": "punctuation.definition.begin.bracket.square.go"
1395
}
1396
},
1397
"end": "\\]",
1398
"endCaptures": {
1399
"0": {
1400
"name": "punctuation.definition.end.bracket.square.go"
1401
}
1402
},
1403
"patterns": [
1404
{
1405
"include": "#generic_param_types"
1406
}
1407
]
1408
},
1409
{
1410
"begin": "\\(",
1411
"beginCaptures": {
1412
"0": {
1413
"name": "punctuation.definition.begin.bracket.round.go"
1414
}
1415
},
1416
"end": "\\)",
1417
"endCaptures": {
1418
"0": {
1419
"name": "punctuation.definition.end.bracket.round.go"
1420
}
1421
},
1422
"patterns": [
1423
{
1424
"include": "#function_param_types"
1425
}
1426
]
1427
},
1428
{
1429
"comment": "other types",
1430
"match": "([\\w\\.]+)",
1431
"captures": {
1432
"1": {
1433
"patterns": [
1434
{
1435
"include": "#type-declarations"
1436
},
1437
{
1438
"match": "\\w+",
1439
"name": "entity.name.type.go"
1440
}
1441
]
1442
}
1443
}
1444
},
1445
{
1446
"include": "$self"
1447
}
1448
]
1449
},
1450
"generic_param_types": {
1451
"comment": "generic parameter variables and types",
1452
"patterns": [
1453
{
1454
"include": "#struct_variables_types"
1455
},
1456
{
1457
"include": "#interface_variables_types"
1458
},
1459
{
1460
"include": "#type-declarations-without-brackets"
1461
},
1462
{
1463
"comment": "struct/interface type declaration",
1464
"match": "((?:(?:\\b\\w+\\,\\s*)+)?\\b\\w+)\\s+(?=(?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:[\\[\\]\\*]+)?\\b(?:struct|interface)\\b\\s*\\{)",
1465
"captures": {
1466
"1": {
1467
"patterns": [
1468
{
1469
"include": "#type-declarations"
1470
},
1471
{
1472
"match": "\\w+",
1473
"name": "variable.parameter.go"
1474
}
1475
]
1476
}
1477
}
1478
},
1479
{
1480
"comment": "multiple parameters one type -with multilines",
1481
"match": "(?:(?:(?<=\\()|^\\s*)((?:(?:\\b\\w+\\,\\s*)+)(?:/(?:/|\\*).*)?)$)",
1482
"captures": {
1483
"1": {
1484
"patterns": [
1485
{
1486
"include": "#type-declarations"
1487
},
1488
{
1489
"match": "\\w+",
1490
"name": "variable.parameter.go"
1491
}
1492
]
1493
}
1494
}
1495
},
1496
{
1497
"comment": "multiple params and types | multiple types one param",
1498
"match": "(?:((?:(?:\\b\\w+\\,\\s*)+)?\\b\\w+)(?:\\s+)((?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:(?:(?:[\\w\\[\\]\\.\\*]+)?(?:(?:\\bfunc\\b\\((?:[^\\)]+)?\\))(?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:\\s*))+(?:(?:(?:[\\w\\*\\.]+)|(?:\\((?:[^\\)]+)?\\))))?)|(?:(?:(?:[\\w\\*\\.\\~]+)|(?:\\[(?:(?:[\\w\\.\\*]+)?(?:\\[(?:[^\\]]+)?\\])?(?:\\,\\s+)?)+\\]))(?:[\\w\\.\\*]+)?)+)))",
1499
"captures": {
1500
"1": {
1501
"patterns": [
1502
{
1503
"include": "#delimiters"
1504
},
1505
{
1506
"match": "\\w+",
1507
"name": "variable.parameter.go"
1508
}
1509
]
1510
},
1511
"2": {
1512
"patterns": [
1513
{
1514
"include": "#type-declarations-without-brackets"
1515
},
1516
{
1517
"include": "#parameter-variable-types"
1518
},
1519
{
1520
"match": "\\w+",
1521
"name": "entity.name.type.go"
1522
}
1523
]
1524
},
1525
"3": {
1526
"patterns": [
1527
{
1528
"include": "#type-declarations"
1529
},
1530
{
1531
"match": "\\w+",
1532
"name": "entity.name.type.go"
1533
}
1534
]
1535
}
1536
}
1537
},
1538
{
1539
"begin": "([\\w\\.\\*]+)?(\\[)",
1540
"beginCaptures": {
1541
"1": {
1542
"patterns": [
1543
{
1544
"include": "#type-declarations"
1545
},
1546
{
1547
"match": "\\w+",
1548
"name": "entity.name.type.go"
1549
}
1550
]
1551
},
1552
"2": {
1553
"name": "punctuation.definition.begin.bracket.square.go"
1554
}
1555
},
1556
"end": "\\]",
1557
"endCaptures": {
1558
"0": {
1559
"name": "punctuation.definition.end.bracket.square.go"
1560
}
1561
},
1562
"patterns": [
1563
{
1564
"include": "#generic_param_types"
1565
}
1566
]
1567
},
1568
{
1569
"begin": "\\(",
1570
"beginCaptures": {
1571
"0": {
1572
"name": "punctuation.definition.begin.bracket.round.go"
1573
}
1574
},
1575
"end": "\\)",
1576
"endCaptures": {
1577
"0": {
1578
"name": "punctuation.definition.end.bracket.round.go"
1579
}
1580
},
1581
"patterns": [
1582
{
1583
"include": "#function_param_types"
1584
}
1585
]
1586
},
1587
{
1588
"comment": "other types",
1589
"match": "\\b([\\w\\.]+)",
1590
"captures": {
1591
"1": {
1592
"patterns": [
1593
{
1594
"include": "#type-declarations"
1595
},
1596
{
1597
"match": "\\w+",
1598
"name": "entity.name.type.go"
1599
}
1600
]
1601
}
1602
}
1603
},
1604
{
1605
"include": "$self"
1606
}
1607
]
1608
},
1609
"functions": {
1610
"comment": "Functions",
1611
"begin": "(\\bfunc\\b)(?=\\()",
1612
"beginCaptures": {
1613
"1": {
1614
"name": "keyword.function.go"
1615
}
1616
},
1617
"end": "(?:(?<=\\))(\\s*(?:(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?((?:(?:\\s*(?:(?:[\\[\\]\\*]+)?[\\w\\.\\*]+)?(?:(?:\\[(?:(?:[\\w\\.\\*]+)?(?:\\[(?:[^\\]]+)?\\])?(?:\\,\\s+)?)+\\])|(?:\\((?:[^\\)]+)?\\)))?(?:[\\w\\.\\*]+)?)(?:\\s*)(?=\\{))|(?:\\s*(?:(?:(?:[\\[\\]\\*]+)?(?!\\bfunc\\b)(?:[\\w\\.\\*]+)(?:\\[(?:(?:[\\w\\.\\*]+)?(?:\\[(?:[^\\]]+)?\\])?(?:\\,\\s+)?)+\\])?(?:[\\w\\.\\*]+)?)|(?:\\((?:[^\\)]+)?\\)))))?)",
1618
"endCaptures": {
1619
"1": {
1620
"patterns": [
1621
{
1622
"include": "#type-declarations"
1623
}
1624
]
1625
},
1626
"2": {
1627
"patterns": [
1628
{
1629
"include": "#type-declarations-without-brackets"
1630
},
1631
{
1632
"include": "#parameter-variable-types"
1633
},
1634
{
1635
"match": "\\w+",
1636
"name": "entity.name.type.go"
1637
}
1638
]
1639
}
1640
},
1641
"patterns": [
1642
{
1643
"include": "#parameter-variable-types"
1644
}
1645
]
1646
},
1647
"functions_inline": {
1648
"comment": "functions in-line with multi return types",
1649
"match": "(?:(\\bfunc\\b)((?:\\((?:[^/]*?)\\))(?:\\s+)(?:\\((?:[^/]*?)\\)))(?:\\s+)(?=\\{))",
1650
"captures": {
1651
"1": {
1652
"name": "keyword.function.go"
1653
},
1654
"2": {
1655
"patterns": [
1656
{
1657
"include": "#type-declarations-without-brackets"
1658
},
1659
{
1660
"begin": "\\(",
1661
"beginCaptures": {
1662
"0": {
1663
"name": "punctuation.definition.begin.bracket.round.go"
1664
}
1665
},
1666
"end": "\\)",
1667
"endCaptures": {
1668
"0": {
1669
"name": "punctuation.definition.end.bracket.round.go"
1670
}
1671
},
1672
"patterns": [
1673
{
1674
"include": "#function_param_types"
1675
},
1676
{
1677
"include": "$self"
1678
}
1679
]
1680
},
1681
{
1682
"match": "\\[",
1683
"name": "punctuation.definition.begin.bracket.square.go"
1684
},
1685
{
1686
"match": "\\]",
1687
"name": "punctuation.definition.end.bracket.square.go"
1688
},
1689
{
1690
"match": "\\{",
1691
"name": "punctuation.definition.begin.bracket.curly.go"
1692
},
1693
{
1694
"match": "\\}",
1695
"name": "punctuation.definition.end.bracket.curly.go"
1696
},
1697
{
1698
"match": "\\w+",
1699
"name": "entity.name.type.go"
1700
}
1701
]
1702
}
1703
}
1704
},
1705
"support_functions": {
1706
"comment": "Support Functions",
1707
"match": "(?:(?:((?<=\\.)\\b\\w+)|(\\b\\w+))(?<brackets>\\[(?:[^\\[\\]]|\\g<brackets>)*\\])?(?=\\())",
1708
"captures": {
1709
"1": {
1710
"name": "entity.name.function.support.go"
1711
},
1712
"2": {
1713
"patterns": [
1714
{
1715
"include": "#type-declarations"
1716
},
1717
{
1718
"match": "\\d\\w*",
1719
"name": "invalid.illegal.identifier.go"
1720
},
1721
{
1722
"match": "\\w+",
1723
"name": "entity.name.function.support.go"
1724
}
1725
]
1726
},
1727
"3": {
1728
"patterns": [
1729
{
1730
"include": "#type-declarations-without-brackets"
1731
},
1732
{
1733
"match": "\\[",
1734
"name": "punctuation.definition.begin.bracket.square.go"
1735
},
1736
{
1737
"match": "\\]",
1738
"name": "punctuation.definition.end.bracket.square.go"
1739
},
1740
{
1741
"match": "\\{",
1742
"name": "punctuation.definition.begin.bracket.curly.go"
1743
},
1744
{
1745
"match": "\\}",
1746
"name": "punctuation.definition.end.bracket.curly.go"
1747
},
1748
{
1749
"match": "\\w+",
1750
"name": "entity.name.type.go"
1751
}
1752
]
1753
}
1754
}
1755
},
1756
"other_struct_interface_expressions": {
1757
"comment": "struct and interface expression in-line (before curly bracket)",
1758
"patterns": [
1759
{
1760
"comment": "after control variables must be added exactly here, do not move it! (changing may not affect tests, so be careful!)",
1761
"include": "#after_control_variables"
1762
},
1763
{
1764
"comment": "uses a named group to recursively match generic type with nested brackets, like 'Foo[A[B, C]]{}'",
1765
"match": "\\b(?!struct\\b|interface\\b)([\\w\\.]+)(?<brackets>\\[(?:[^\\[\\]]|\\g<brackets>)*\\])?(?=\\{)",
1766
"captures": {
1767
"1": {
1768
"patterns": [
1769
{
1770
"include": "#type-declarations"
1771
},
1772
{
1773
"match": "\\w+",
1774
"name": "entity.name.type.go"
1775
}
1776
]
1777
},
1778
"2": {
1779
"patterns": [
1780
{
1781
"include": "#type-declarations-without-brackets"
1782
},
1783
{
1784
"match": "\\[",
1785
"name": "punctuation.definition.begin.bracket.square.go"
1786
},
1787
{
1788
"match": "\\]",
1789
"name": "punctuation.definition.end.bracket.square.go"
1790
},
1791
{
1792
"match": "\\{",
1793
"name": "punctuation.definition.begin.bracket.curly.go"
1794
},
1795
{
1796
"match": "\\}",
1797
"name": "punctuation.definition.end.bracket.curly.go"
1798
},
1799
{
1800
"match": "\\w+",
1801
"name": "entity.name.type.go"
1802
}
1803
]
1804
}
1805
}
1806
}
1807
]
1808
},
1809
"type_assertion_inline": {
1810
"comment": "struct/interface types in-line (type assertion) | switch type keyword",
1811
"match": "(?:(?<=\\.\\()(?:(\\btype\\b)|((?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:[\\[\\]\\*]+)?(?:[\\w\\.]+)(?:\\[(?:(?:[\\w\\.\\*\\[\\]\\{\\}]+)(?:(?:\\,\\s*(?:[\\w\\.\\*\\[\\]\\{\\}]+))*))?\\])?))(?=\\)))",
1812
"captures": {
1813
"1": {
1814
"name": "keyword.type.go"
1815
},
1816
"2": {
1817
"patterns": [
1818
{
1819
"include": "#type-declarations-without-brackets"
1820
},
1821
{
1822
"match": "\\(",
1823
"name": "punctuation.definition.begin.bracket.round.go"
1824
},
1825
{
1826
"match": "\\)",
1827
"name": "punctuation.definition.end.bracket.round.go"
1828
},
1829
{
1830
"match": "\\[",
1831
"name": "punctuation.definition.begin.bracket.square.go"
1832
},
1833
{
1834
"match": "\\]",
1835
"name": "punctuation.definition.end.bracket.square.go"
1836
},
1837
{
1838
"match": "\\{",
1839
"name": "punctuation.definition.begin.bracket.curly.go"
1840
},
1841
{
1842
"match": "\\}",
1843
"name": "punctuation.definition.end.bracket.curly.go"
1844
},
1845
{
1846
"match": "\\w+",
1847
"name": "entity.name.type.go"
1848
}
1849
]
1850
}
1851
}
1852
},
1853
"struct_variables_types": {
1854
"comment": "Struct variable type",
1855
"begin": "(\\bstruct\\b)\\s*(\\{)",
1856
"beginCaptures": {
1857
"1": {
1858
"name": "keyword.struct.go"
1859
},
1860
"2": {
1861
"name": "punctuation.definition.begin.bracket.curly.go"
1862
}
1863
},
1864
"patterns": [
1865
{
1866
"include": "#struct_variables_types_fields"
1867
},
1868
{
1869
"include": "$self"
1870
}
1871
],
1872
"end": "\\}",
1873
"endCaptures": {
1874
"0": {
1875
"name": "punctuation.definition.end.bracket.curly.go"
1876
}
1877
}
1878
},
1879
"struct_variables_types_fields": {
1880
"comment": "Struct variable type fields",
1881
"patterns": [
1882
{
1883
"include": "#struct_variable_types_fields_multi"
1884
},
1885
{
1886
"comment": "one line - single type",
1887
"match": "(?:(?<=\\{)\\s*((?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:[\\w\\.\\*\\[\\]]+))\\s*(?=\\}))",
1888
"captures": {
1889
"1": {
1890
"patterns": [
1891
{
1892
"include": "#type-declarations"
1893
},
1894
{
1895
"match": "\\w+",
1896
"name": "entity.name.type.go"
1897
}
1898
]
1899
}
1900
}
1901
},
1902
{
1903
"comment": "one line - property variables and types",
1904
"match": "(?:(?<=\\{)\\s*((?:(?:\\w+\\,\\s*)+)?(?:\\w+\\s+))((?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:[\\w\\.\\*\\[\\]]+))\\s*(?=\\}))",
1905
"captures": {
1906
"1": {
1907
"patterns": [
1908
{
1909
"include": "#type-declarations"
1910
},
1911
{
1912
"match": "\\w+",
1913
"name": "variable.other.property.go"
1914
}
1915
]
1916
},
1917
"2": {
1918
"patterns": [
1919
{
1920
"include": "#type-declarations"
1921
},
1922
{
1923
"match": "\\w+",
1924
"name": "entity.name.type.go"
1925
}
1926
]
1927
}
1928
}
1929
},
1930
{
1931
"comment": "one line with semicolon(;) without formatting gofmt - single type | property variables and types",
1932
"match": "(?:(?<=\\{)((?:\\s*(?:(?:(?:\\w+\\,\\s*)+)?(?:\\w+\\s+))?(?:(?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:[^\\s/]+)(?:\\;)?))+)\\s*(?=\\}))",
1933
"captures": {
1934
"1": {
1935
"patterns": [
1936
{
1937
"match": "(?:((?:(?:\\w+\\,\\s*)+)?(?:\\w+\\s+))?((?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:[^\\s/]+)(?:\\;)?))",
1938
"captures": {
1939
"1": {
1940
"patterns": [
1941
{
1942
"include": "#type-declarations"
1943
},
1944
{
1945
"match": "\\w+",
1946
"name": "variable.other.property.go"
1947
}
1948
]
1949
},
1950
"2": {
1951
"patterns": [
1952
{
1953
"include": "#type-declarations"
1954
},
1955
{
1956
"match": "\\w+",
1957
"name": "entity.name.type.go"
1958
}
1959
]
1960
}
1961
}
1962
}
1963
]
1964
}
1965
}
1966
},
1967
{
1968
"comment": "one type only",
1969
"match": "(?:((?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:[\\w\\.\\*]+)\\s*)(?:(?=\\`|\\/|\")|$))",
1970
"captures": {
1971
"1": {
1972
"patterns": [
1973
{
1974
"include": "#type-declarations"
1975
},
1976
{
1977
"match": "\\w+",
1978
"name": "entity.name.type.go"
1979
}
1980
]
1981
}
1982
}
1983
},
1984
{
1985
"comment": "property variables and types",
1986
"match": "(\\b\\w+(?:\\s*\\,\\s*\\b\\w+)*)\\s*([^\\`\"\\/]+)",
1987
"captures": {
1988
"1": {
1989
"patterns": [
1990
{
1991
"include": "#type-declarations"
1992
},
1993
{
1994
"match": "\\w+",
1995
"name": "variable.other.property.go"
1996
}
1997
]
1998
},
1999
"2": {
2000
"patterns": [
2001
{
2002
"include": "#type-declarations-without-brackets"
2003
},
2004
{
2005
"include": "#parameter-variable-types"
2006
},
2007
{
2008
"match": "\\w+",
2009
"name": "entity.name.type.go"
2010
}
2011
]
2012
}
2013
}
2014
}
2015
]
2016
},
2017
"struct_variable_types_fields_multi": {
2018
"comment": "struct variable and type fields with multi lines",
2019
"patterns": [
2020
{
2021
"comment": "struct in struct types",
2022
"begin": "(?:((?:\\b\\w+(?:\\,\\s*\\b\\w+)*)(?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:\\s*)(?:[\\[\\]\\*]+)?)(\\bstruct\\b)(?:\\s*)(\\{))",
2023
"beginCaptures": {
2024
"1": {
2025
"patterns": [
2026
{
2027
"include": "#type-declarations"
2028
},
2029
{
2030
"match": "\\w+",
2031
"name": "variable.other.property.go"
2032
}
2033
]
2034
},
2035
"2": {
2036
"name": "keyword.struct.go"
2037
},
2038
"3": {
2039
"name": "punctuation.definition.begin.bracket.curly.go"
2040
}
2041
},
2042
"end": "\\}",
2043
"endCaptures": {
2044
"0": {
2045
"name": "punctuation.definition.end.bracket.curly.go"
2046
}
2047
},
2048
"patterns": [
2049
{
2050
"include": "#struct_variables_types_fields"
2051
},
2052
{
2053
"include": "$self"
2054
}
2055
]
2056
},
2057
{
2058
"comment": "interface in struct types",
2059
"begin": "(?:((?:\\b\\w+(?:\\,\\s*\\b\\w+)*)(?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:\\s*)(?:[\\[\\]\\*]+)?)(\\binterface\\b)(?:\\s*)(\\{))",
2060
"beginCaptures": {
2061
"1": {
2062
"patterns": [
2063
{
2064
"include": "#type-declarations"
2065
},
2066
{
2067
"match": "\\w+",
2068
"name": "variable.other.property.go"
2069
}
2070
]
2071
},
2072
"2": {
2073
"name": "keyword.interface.go"
2074
},
2075
"3": {
2076
"name": "punctuation.definition.begin.bracket.curly.go"
2077
}
2078
},
2079
"end": "\\}",
2080
"endCaptures": {
2081
"0": {
2082
"name": "punctuation.definition.end.bracket.curly.go"
2083
}
2084
},
2085
"patterns": [
2086
{
2087
"include": "#interface_variables_types_field"
2088
},
2089
{
2090
"include": "$self"
2091
}
2092
]
2093
},
2094
{
2095
"comment": "function in struct types",
2096
"begin": "(?:((?:\\b\\w+(?:\\,\\s*\\b\\w+)*)(?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:\\s*)(?:[\\[\\]\\*]+)?)(\\bfunc\\b)(?:\\s*)(\\())",
2097
"beginCaptures": {
2098
"1": {
2099
"patterns": [
2100
{
2101
"include": "#type-declarations"
2102
},
2103
{
2104
"match": "\\w+",
2105
"name": "variable.other.property.go"
2106
}
2107
]
2108
},
2109
"2": {
2110
"name": "keyword.function.go"
2111
},
2112
"3": {
2113
"name": "punctuation.definition.begin.bracket.round.go"
2114
}
2115
},
2116
"end": "\\)",
2117
"endCaptures": {
2118
"0": {
2119
"name": "punctuation.definition.end.bracket.round.go"
2120
}
2121
},
2122
"patterns": [
2123
{
2124
"include": "#function_param_types"
2125
},
2126
{
2127
"include": "$self"
2128
}
2129
]
2130
},
2131
{
2132
"include": "#parameter-variable-types"
2133
}
2134
]
2135
},
2136
"interface_variables_types": {
2137
"comment": "interface variable types",
2138
"begin": "(\\binterface\\b)\\s*(\\{)",
2139
"beginCaptures": {
2140
"1": {
2141
"name": "keyword.interface.go"
2142
},
2143
"2": {
2144
"name": "punctuation.definition.begin.bracket.curly.go"
2145
}
2146
},
2147
"patterns": [
2148
{
2149
"include": "#interface_variables_types_field"
2150
},
2151
{
2152
"include": "$self"
2153
}
2154
],
2155
"end": "\\}",
2156
"endCaptures": {
2157
"0": {
2158
"name": "punctuation.definition.end.bracket.curly.go"
2159
}
2160
}
2161
},
2162
"interface_variables_types_field": {
2163
"comment": "interface variable type fields",
2164
"patterns": [
2165
{
2166
"include": "#support_functions"
2167
},
2168
{
2169
"include": "#type-declarations-without-brackets"
2170
},
2171
{
2172
"begin": "([\\w\\.\\*]+)?(\\[)",
2173
"beginCaptures": {
2174
"1": {
2175
"patterns": [
2176
{
2177
"include": "#type-declarations"
2178
},
2179
{
2180
"match": "\\w+",
2181
"name": "entity.name.type.go"
2182
}
2183
]
2184
},
2185
"2": {
2186
"name": "punctuation.definition.begin.bracket.square.go"
2187
}
2188
},
2189
"end": "\\]",
2190
"endCaptures": {
2191
"0": {
2192
"name": "punctuation.definition.end.bracket.square.go"
2193
}
2194
},
2195
"patterns": [
2196
{
2197
"include": "#generic_param_types"
2198
}
2199
]
2200
},
2201
{
2202
"begin": "\\(",
2203
"beginCaptures": {
2204
"0": {
2205
"name": "punctuation.definition.begin.bracket.round.go"
2206
}
2207
},
2208
"end": "\\)",
2209
"endCaptures": {
2210
"0": {
2211
"name": "punctuation.definition.end.bracket.round.go"
2212
}
2213
},
2214
"patterns": [
2215
{
2216
"include": "#function_param_types"
2217
}
2218
]
2219
},
2220
{
2221
"comment": "other types",
2222
"match": "([\\w\\.]+)",
2223
"captures": {
2224
"1": {
2225
"patterns": [
2226
{
2227
"include": "#type-declarations"
2228
},
2229
{
2230
"match": "\\w+",
2231
"name": "entity.name.type.go"
2232
}
2233
]
2234
}
2235
}
2236
}
2237
]
2238
},
2239
"single_type": {
2240
"patterns": [
2241
{
2242
"comment": "single type declaration",
2243
"match": "(?:(?:^\\s*)(\\btype\\b)(?:\\s*)([\\w\\.\\*]+)(?:\\s+)(?!(?:\\=\\s*)?(?:[\\[\\]\\*]+)?\\b(?:struct|interface)\\b)([\\s\\S]+))",
2244
"captures": {
2245
"1": {
2246
"name": "keyword.type.go"
2247
},
2248
"2": {
2249
"patterns": [
2250
{
2251
"include": "#type-declarations"
2252
},
2253
{
2254
"match": "\\w+",
2255
"name": "entity.name.type.go"
2256
}
2257
]
2258
},
2259
"3": {
2260
"patterns": [
2261
{
2262
"begin": "\\(",
2263
"beginCaptures": {
2264
"0": {
2265
"name": "punctuation.definition.begin.bracket.round.go"
2266
}
2267
},
2268
"end": "\\)",
2269
"endCaptures": {
2270
"0": {
2271
"name": "punctuation.definition.end.bracket.round.go"
2272
}
2273
},
2274
"patterns": [
2275
{
2276
"include": "#function_param_types"
2277
},
2278
{
2279
"include": "$self"
2280
}
2281
]
2282
},
2283
{
2284
"include": "#type-declarations"
2285
},
2286
{
2287
"include": "#generic_types"
2288
},
2289
{
2290
"match": "\\w+",
2291
"name": "entity.name.type.go"
2292
}
2293
]
2294
}
2295
}
2296
},
2297
{
2298
"comment": "single type declaration with generics",
2299
"begin": "(?:(?:^|\\s+)(\\btype\\b)(?:\\s*)([\\w\\.\\*]+)(?=\\[))",
2300
"beginCaptures": {
2301
"1": {
2302
"name": "keyword.type.go"
2303
},
2304
"2": {
2305
"patterns": [
2306
{
2307
"include": "#type-declarations-without-brackets"
2308
},
2309
{
2310
"match": "\\w+",
2311
"name": "entity.name.type.go"
2312
}
2313
]
2314
}
2315
},
2316
"end": "(?:(?<=\\])((?:\\s+)(?:\\=\\s*)?(?:(?:(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:(?!(?:[\\[\\]\\*]+)?(?:\\bstruct\\b|\\binterface\\b|\\bfunc\\b))[\\w\\.\\-\\*\\[\\]]+(?:\\,\\s*[\\w\\.\\[\\]\\*]+)*))?)",
2317
"endCaptures": {
2318
"1": {
2319
"patterns": [
2320
{
2321
"include": "#type-declarations-without-brackets"
2322
},
2323
{
2324
"match": "\\[",
2325
"name": "punctuation.definition.begin.bracket.square.go"
2326
},
2327
{
2328
"match": "\\]",
2329
"name": "punctuation.definition.end.bracket.square.go"
2330
},
2331
{
2332
"match": "\\w+",
2333
"name": "entity.name.type.go"
2334
}
2335
]
2336
}
2337
},
2338
"patterns": [
2339
{
2340
"include": "#struct_variables_types"
2341
},
2342
{
2343
"include": "#type-declarations-without-brackets"
2344
},
2345
{
2346
"include": "#parameter-variable-types"
2347
},
2348
{
2349
"match": "\\[",
2350
"name": "punctuation.definition.begin.bracket.square.go"
2351
},
2352
{
2353
"match": "\\]",
2354
"name": "punctuation.definition.end.bracket.square.go"
2355
},
2356
{
2357
"match": "\\{",
2358
"name": "punctuation.definition.begin.bracket.curly.go"
2359
},
2360
{
2361
"match": "\\}",
2362
"name": "punctuation.definition.end.bracket.curly.go"
2363
},
2364
{
2365
"match": "\\(",
2366
"name": "punctuation.definition.begin.bracket.round.go"
2367
},
2368
{
2369
"match": "\\)",
2370
"name": "punctuation.definition.end.bracket.round.go"
2371
},
2372
{
2373
"match": "\\w+",
2374
"name": "entity.name.type.go"
2375
}
2376
]
2377
}
2378
]
2379
},
2380
"multi_types": {
2381
"comment": "multi type declaration",
2382
"begin": "(\\btype\\b)\\s*(\\()",
2383
"beginCaptures": {
2384
"1": {
2385
"name": "keyword.type.go"
2386
},
2387
"2": {
2388
"name": "punctuation.definition.begin.bracket.round.go"
2389
}
2390
},
2391
"patterns": [
2392
{
2393
"include": "#struct_variables_types"
2394
},
2395
{
2396
"include": "#interface_variables_types"
2397
},
2398
{
2399
"include": "#type-declarations-without-brackets"
2400
},
2401
{
2402
"include": "#parameter-variable-types"
2403
},
2404
{
2405
"match": "\\w+",
2406
"name": "entity.name.type.go"
2407
}
2408
],
2409
"end": "\\)",
2410
"endCaptures": {
2411
"0": {
2412
"name": "punctuation.definition.end.bracket.round.go"
2413
}
2414
}
2415
},
2416
"after_control_variables": {
2417
"comment": "After control variables, to not highlight as a struct/interface (before formatting with gofmt)",
2418
"match": "(?:(?<=\\brange\\b|\\;|\\bif\\b|\\bfor\\b|\\<|\\>|\\<\\=|\\>\\=|\\=\\=|\\!\\=|\\w(?:\\+|/|\\-|\\*|\\%)|\\w(?:\\+|/|\\-|\\*|\\%)\\=|\\|\\||\\&\\&)(?:\\s*)((?![\\[\\]]+)[[:alnum:]\\-\\_\\!\\.\\[\\]\\<\\>\\=\\*/\\+\\%\\:]+)(?:\\s*)(?=\\{))",
2419
"captures": {
2420
"1": {
2421
"patterns": [
2422
{
2423
"include": "#type-declarations-without-brackets"
2424
},
2425
{
2426
"match": "\\[",
2427
"name": "punctuation.definition.begin.bracket.square.go"
2428
},
2429
{
2430
"match": "\\]",
2431
"name": "punctuation.definition.end.bracket.square.go"
2432
},
2433
{
2434
"match": "\\w+",
2435
"name": "variable.other.go"
2436
}
2437
]
2438
}
2439
}
2440
},
2441
"syntax_errors": {
2442
"patterns": [
2443
{
2444
"comment": "Syntax error using slices",
2445
"match": "\\[\\](\\s+)",
2446
"captures": {
2447
"1": {
2448
"name": "invalid.illegal.slice.go"
2449
}
2450
}
2451
},
2452
{
2453
"comment": "Syntax error numeric literals",
2454
"match": "\\b0[0-7]*[89]\\d*\\b",
2455
"name": "invalid.illegal.numeric.go"
2456
}
2457
]
2458
},
2459
"built_in_functions": {
2460
"comment": "Built-in functions",
2461
"patterns": [
2462
{
2463
"match": "\\b(append|cap|close|complex|copy|delete|imag|len|panic|print|println|real|recover|min|max|clear)\\b(?=\\()",
2464
"name": "entity.name.function.support.builtin.go"
2465
},
2466
{
2467
"comment": "new keyword",
2468
"begin": "(\\bnew\\b)(\\()",
2469
"beginCaptures": {
2470
"1": {
2471
"name": "entity.name.function.support.builtin.go"
2472
},
2473
"2": {
2474
"name": "punctuation.definition.begin.bracket.round.go"
2475
}
2476
},
2477
"end": "\\)",
2478
"endCaptures": {
2479
"0": {
2480
"name": "punctuation.definition.end.bracket.round.go"
2481
}
2482
},
2483
"patterns": [
2484
{
2485
"include": "#functions"
2486
},
2487
{
2488
"include": "#struct_variables_types"
2489
},
2490
{
2491
"include": "#support_functions"
2492
},
2493
{
2494
"include": "#type-declarations"
2495
},
2496
{
2497
"include": "#generic_types"
2498
},
2499
{
2500
"match": "\\w+",
2501
"name": "entity.name.type.go"
2502
},
2503
{
2504
"include": "$self"
2505
}
2506
]
2507
},
2508
{
2509
"comment": "make keyword",
2510
"begin": "(?:(\\bmake\\b)(?:(\\()((?:(?:(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+(?:\\([^\\)]+\\))?)?(?:[\\[\\]\\*]+)?(?:(?!\\bmap\\b)(?:[\\w\\.]+))?(\\[(?:(?:[\\S]+)(?:(?:\\,\\s*(?:[\\S]+))*))?\\])?(?:\\,)?)?))",
2511
"beginCaptures": {
2512
"1": {
2513
"name": "entity.name.function.support.builtin.go"
2514
},
2515
"2": {
2516
"name": "punctuation.definition.begin.bracket.round.go"
2517
},
2518
"3": {
2519
"patterns": [
2520
{
2521
"include": "#type-declarations-without-brackets"
2522
},
2523
{
2524
"include": "#parameter-variable-types"
2525
},
2526
{
2527
"match": "\\w+",
2528
"name": "entity.name.type.go"
2529
}
2530
]
2531
}
2532
},
2533
"end": "\\)",
2534
"endCaptures": {
2535
"0": {
2536
"name": "punctuation.definition.end.bracket.round.go"
2537
}
2538
},
2539
"patterns": [
2540
{
2541
"include": "$self"
2542
}
2543
]
2544
}
2545
]
2546
},
2547
"struct_interface_declaration": {
2548
"comment": "struct, interface type declarations (related to: struct_variables_types, interface_variables_types)",
2549
"match": "(?:(?:^\\s*)(\\btype\\b)(?:\\s*)([\\w\\.]+))",
2550
"captures": {
2551
"1": {
2552
"name": "keyword.type.go"
2553
},
2554
"2": {
2555
"patterns": [
2556
{
2557
"include": "#type-declarations"
2558
},
2559
{
2560
"match": "\\w+",
2561
"name": "entity.name.type.go"
2562
}
2563
]
2564
}
2565
}
2566
},
2567
"switch_types": {
2568
"comment": "switch type assertions, only highlights types after case keyword",
2569
"begin": "(?<=\\bswitch\\b)(?:\\s*)(?:(\\w+\\s*\\:\\=)?\\s*([\\w\\.\\*\\(\\)\\[\\]\\+/\\-\\%\\<\\>\\|\\&]+))(\\.\\(\\btype\\b\\)\\s*)(\\{)",
2570
"beginCaptures": {
2571
"1": {
2572
"patterns": [
2573
{
2574
"include": "#operators"
2575
},
2576
{
2577
"match": "\\w+",
2578
"name": "variable.other.assignment.go"
2579
}
2580
]
2581
},
2582
"2": {
2583
"patterns": [
2584
{
2585
"include": "#support_functions"
2586
},
2587
{
2588
"include": "#type-declarations"
2589
},
2590
{
2591
"match": "\\w+",
2592
"name": "variable.other.go"
2593
}
2594
]
2595
},
2596
"3": {
2597
"patterns": [
2598
{
2599
"include": "#delimiters"
2600
},
2601
{
2602
"include": "#brackets"
2603
},
2604
{
2605
"match": "\\btype\\b",
2606
"name": "keyword.type.go"
2607
}
2608
]
2609
},
2610
"4": {
2611
"name": "punctuation.definition.begin.bracket.curly.go"
2612
}
2613
},
2614
"end": "\\}",
2615
"endCaptures": {
2616
"0": {
2617
"name": "punctuation.definition.end.bracket.curly.go"
2618
}
2619
},
2620
"patterns": [
2621
{
2622
"comment": "types after case keyword with single line",
2623
"match": "(?:^\\s*(\\bcase\\b))(?:\\s+)([\\w\\.\\,\\*\\=\\<\\>\\!\\s]+)(:)(\\s*/(?:/|\\*)\\s*.*)?$",
2624
"captures": {
2625
"1": {
2626
"name": "keyword.control.go"
2627
},
2628
"2": {
2629
"patterns": [
2630
{
2631
"include": "#type-declarations"
2632
},
2633
{
2634
"match": "\\w+",
2635
"name": "entity.name.type.go"
2636
}
2637
]
2638
},
2639
"3": {
2640
"name": "punctuation.other.colon.go"
2641
},
2642
"4": {
2643
"patterns": [
2644
{
2645
"include": "#comments"
2646
}
2647
]
2648
}
2649
}
2650
},
2651
{
2652
"comment": "types after case keyword with multi lines",
2653
"begin": "\\bcase\\b",
2654
"beginCaptures": {
2655
"0": {
2656
"name": "keyword.control.go"
2657
}
2658
},
2659
"end": "\\:",
2660
"endCaptures": {
2661
"0": {
2662
"name": "punctuation.other.colon.go"
2663
}
2664
},
2665
"patterns": [
2666
{
2667
"include": "#type-declarations"
2668
},
2669
{
2670
"match": "\\w+",
2671
"name": "entity.name.type.go"
2672
}
2673
]
2674
},
2675
{
2676
"include": "$self"
2677
}
2678
]
2679
},
2680
"switch_variables": {
2681
"comment": "variables after case control keyword in switch/select expression, to not scope them as property variables",
2682
"patterns": [
2683
{
2684
"comment": "single line",
2685
"match": "(?:(?:^\\s*(\\bcase\\b))(?:\\s+)([\\s\\S]+(?:\\:)\\s*(?:/(?:/|\\*).*)?)$)",
2686
"captures": {
2687
"1": {
2688
"name": "keyword.control.go"
2689
},
2690
"2": {
2691
"patterns": [
2692
{
2693
"include": "#type-declarations"
2694
},
2695
{
2696
"include": "#support_functions"
2697
},
2698
{
2699
"include": "#variable_assignment"
2700
},
2701
{
2702
"match": "\\w+",
2703
"name": "variable.other.go"
2704
}
2705
]
2706
}
2707
}
2708
},
2709
{
2710
"comment": "multi lines",
2711
"begin": "(?<=\\bswitch\\b)(?:\\s*)((?:[\\w\\.]+(?:\\s*(?:[\\:\\=\\!\\,\\+/\\-\\%\\<\\>\\|\\&]+)\\s*[\\w\\.]+)*\\s*(?:[\\:\\=\\!\\,\\+/\\-\\%\\<\\>\\|\\&]+))?(?:\\s*(?:[\\w\\.\\*\\(\\)\\[\\]\\+/\\-\\%\\<\\>\\|\\&]+)?\\s*(?:\\;\\s*(?:[\\w\\.\\*\\(\\)\\[\\]\\+/\\-\\%\\<\\>\\|\\&]+)\\s*)?))(\\{)",
2712
"beginCaptures": {
2713
"1": {
2714
"patterns": [
2715
{
2716
"include": "#support_functions"
2717
},
2718
{
2719
"include": "#type-declarations"
2720
},
2721
{
2722
"include": "#variable_assignment"
2723
},
2724
{
2725
"match": "\\w+",
2726
"name": "variable.other.go"
2727
}
2728
]
2729
},
2730
"2": {
2731
"name": "punctuation.definition.begin.bracket.curly.go"
2732
}
2733
},
2734
"end": "\\}",
2735
"endCaptures": {
2736
"0": {
2737
"name": "punctuation.definition.end.bracket.curly.go"
2738
}
2739
},
2740
"patterns": [
2741
{
2742
"begin": "\\bcase\\b",
2743
"beginCaptures": {
2744
"0": {
2745
"name": "keyword.control.go"
2746
}
2747
},
2748
"end": "\\:",
2749
"endCaptures": {
2750
"0": {
2751
"name": "punctuation.other.colon.go"
2752
}
2753
},
2754
"patterns": [
2755
{
2756
"include": "#support_functions"
2757
},
2758
{
2759
"include": "#type-declarations"
2760
},
2761
{
2762
"include": "#variable_assignment"
2763
},
2764
{
2765
"match": "\\w+",
2766
"name": "variable.other.go"
2767
}
2768
]
2769
},
2770
{
2771
"include": "$self"
2772
}
2773
]
2774
}
2775
]
2776
},
2777
"var_assignment": {
2778
"comment": "variable assignment with var keyword",
2779
"patterns": [
2780
{
2781
"comment": "single assignment",
2782
"match": "(?:(?<=\\bvar\\b)(?:\\s*)(\\b[\\w\\.]+(?:\\,\\s*[\\w\\.]+)*)(?:\\s*)((?:(?:(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+(?:\\([^\\)]+\\))?)?(?!(?:[\\[\\]\\*]+)?\\b(?:struct|func|map)\\b)(?:[\\w\\.\\[\\]\\*]+(?:\\,\\s*[\\w\\.\\[\\]\\*]+)*)?(?:\\s*)(?:\\=)?)?)",
2783
"captures": {
2784
"1": {
2785
"patterns": [
2786
{
2787
"include": "#delimiters"
2788
},
2789
{
2790
"match": "\\w+",
2791
"name": "variable.other.assignment.go"
2792
}
2793
]
2794
},
2795
"2": {
2796
"patterns": [
2797
{
2798
"include": "#type-declarations-without-brackets"
2799
},
2800
{
2801
"include": "#generic_types"
2802
},
2803
{
2804
"match": "\\(",
2805
"name": "punctuation.definition.begin.bracket.round.go"
2806
},
2807
{
2808
"match": "\\)",
2809
"name": "punctuation.definition.end.bracket.round.go"
2810
},
2811
{
2812
"match": "\\[",
2813
"name": "punctuation.definition.begin.bracket.square.go"
2814
},
2815
{
2816
"match": "\\]",
2817
"name": "punctuation.definition.end.bracket.square.go"
2818
},
2819
{
2820
"match": "\\w+",
2821
"name": "entity.name.type.go"
2822
}
2823
]
2824
}
2825
}
2826
},
2827
{
2828
"comment": "multi assignment",
2829
"begin": "(?:(?<=\\bvar\\b)(?:\\s*)(\\())",
2830
"beginCaptures": {
2831
"1": {
2832
"name": "punctuation.definition.begin.bracket.round.go"
2833
}
2834
},
2835
"end": "\\)",
2836
"endCaptures": {
2837
"0": {
2838
"name": "punctuation.definition.end.bracket.round.go"
2839
}
2840
},
2841
"patterns": [
2842
{
2843
"match": "(?:(?:^\\s*)(\\b[\\w\\.]+(?:\\,\\s*[\\w\\.]+)*)(?:\\s*)((?:(?:(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+(?:\\([^\\)]+\\))?)?(?!(?:[\\[\\]\\*]+)?\\b(?:struct|func|map)\\b)(?:[\\w\\.\\[\\]\\*]+(?:\\,\\s*[\\w\\.\\[\\]\\*]+)*)?(?:\\s*)(?:\\=)?)?)",
2844
"captures": {
2845
"1": {
2846
"patterns": [
2847
{
2848
"include": "#delimiters"
2849
},
2850
{
2851
"match": "\\w+",
2852
"name": "variable.other.assignment.go"
2853
}
2854
]
2855
},
2856
"2": {
2857
"patterns": [
2858
{
2859
"include": "#type-declarations-without-brackets"
2860
},
2861
{
2862
"include": "#generic_types"
2863
},
2864
{
2865
"match": "\\(",
2866
"name": "punctuation.definition.begin.bracket.round.go"
2867
},
2868
{
2869
"match": "\\)",
2870
"name": "punctuation.definition.end.bracket.round.go"
2871
},
2872
{
2873
"match": "\\[",
2874
"name": "punctuation.definition.begin.bracket.square.go"
2875
},
2876
{
2877
"match": "\\]",
2878
"name": "punctuation.definition.end.bracket.square.go"
2879
},
2880
{
2881
"match": "\\w+",
2882
"name": "entity.name.type.go"
2883
}
2884
]
2885
}
2886
}
2887
},
2888
{
2889
"include": "$self"
2890
}
2891
]
2892
}
2893
]
2894
},
2895
"const_assignment": {
2896
"comment": "constant assignment with const keyword",
2897
"patterns": [
2898
{
2899
"comment": "single assignment",
2900
"match": "(?:(?<=\\bconst\\b)(?:\\s*)(\\b[\\w\\.]+(?:\\,\\s*[\\w\\.]+)*)(?:\\s*)((?:(?:(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+(?:\\([^\\)]+\\))?)?(?!(?:[\\[\\]\\*]+)?\\b(?:struct|func|map)\\b)(?:[\\w\\.\\[\\]\\*]+(?:\\,\\s*[\\w\\.\\[\\]\\*]+)*)?(?:\\s*)(?:\\=)?)?)",
2901
"captures": {
2902
"1": {
2903
"patterns": [
2904
{
2905
"include": "#delimiters"
2906
},
2907
{
2908
"match": "\\w+",
2909
"name": "variable.other.constant.go"
2910
}
2911
]
2912
},
2913
"2": {
2914
"patterns": [
2915
{
2916
"include": "#type-declarations-without-brackets"
2917
},
2918
{
2919
"include": "#generic_types"
2920
},
2921
{
2922
"match": "\\(",
2923
"name": "punctuation.definition.begin.bracket.round.go"
2924
},
2925
{
2926
"match": "\\)",
2927
"name": "punctuation.definition.end.bracket.round.go"
2928
},
2929
{
2930
"match": "\\[",
2931
"name": "punctuation.definition.begin.bracket.square.go"
2932
},
2933
{
2934
"match": "\\]",
2935
"name": "punctuation.definition.end.bracket.square.go"
2936
},
2937
{
2938
"match": "\\w+",
2939
"name": "entity.name.type.go"
2940
}
2941
]
2942
}
2943
}
2944
},
2945
{
2946
"comment": "multi assignment",
2947
"begin": "(?:(?<=\\bconst\\b)(?:\\s*)(\\())",
2948
"beginCaptures": {
2949
"1": {
2950
"name": "punctuation.definition.begin.bracket.round.go"
2951
}
2952
},
2953
"end": "\\)",
2954
"endCaptures": {
2955
"0": {
2956
"name": "punctuation.definition.end.bracket.round.go"
2957
}
2958
},
2959
"patterns": [
2960
{
2961
"match": "(?:(?:^\\s*)(\\b[\\w\\.]+(?:\\,\\s*[\\w\\.]+)*)(?:\\s*)((?:(?:(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+(?:\\([^\\)]+\\))?)?(?!(?:[\\[\\]\\*]+)?\\b(?:struct|func|map)\\b)(?:[\\w\\.\\[\\]\\*]+(?:\\,\\s*[\\w\\.\\[\\]\\*]+)*)?(?:\\s*)(?:\\=)?)?)",
2962
"captures": {
2963
"1": {
2964
"patterns": [
2965
{
2966
"include": "#delimiters"
2967
},
2968
{
2969
"match": "\\w+",
2970
"name": "variable.other.constant.go"
2971
}
2972
]
2973
},
2974
"2": {
2975
"patterns": [
2976
{
2977
"include": "#type-declarations-without-brackets"
2978
},
2979
{
2980
"include": "#generic_types"
2981
},
2982
{
2983
"match": "\\(",
2984
"name": "punctuation.definition.begin.bracket.round.go"
2985
},
2986
{
2987
"match": "\\)",
2988
"name": "punctuation.definition.end.bracket.round.go"
2989
},
2990
{
2991
"match": "\\[",
2992
"name": "punctuation.definition.begin.bracket.square.go"
2993
},
2994
{
2995
"match": "\\]",
2996
"name": "punctuation.definition.end.bracket.square.go"
2997
},
2998
{
2999
"match": "\\w+",
3000
"name": "entity.name.type.go"
3001
}
3002
]
3003
}
3004
}
3005
},
3006
{
3007
"include": "$self"
3008
}
3009
]
3010
}
3011
]
3012
},
3013
"variable_assignment": {
3014
"comment": "variable assignment",
3015
"patterns": [
3016
{
3017
"comment": "variable assignment with :=",
3018
"match": "\\b\\w+(?:\\,\\s*\\w+)*(?=\\s*:=)",
3019
"captures": {
3020
"0": {
3021
"patterns": [
3022
{
3023
"include": "#delimiters"
3024
},
3025
{
3026
"match": "\\d\\w*",
3027
"name": "invalid.illegal.identifier.go"
3028
},
3029
{
3030
"match": "\\w+",
3031
"name": "variable.other.assignment.go"
3032
}
3033
]
3034
}
3035
}
3036
},
3037
{
3038
"comment": "variable assignment with =",
3039
"match": "\\b[\\w\\.\\*]+(?:\\,\\s*[\\w\\.\\*]+)*(?=\\s*=(?!=))",
3040
"captures": {
3041
"0": {
3042
"patterns": [
3043
{
3044
"include": "#delimiters"
3045
},
3046
{
3047
"include": "#operators"
3048
},
3049
{
3050
"match": "\\d\\w*",
3051
"name": "invalid.illegal.identifier.go"
3052
},
3053
{
3054
"match": "\\w+",
3055
"name": "variable.other.assignment.go"
3056
}
3057
]
3058
}
3059
}
3060
}
3061
]
3062
},
3063
"generic_types": {
3064
"comment": "Generic support for all types",
3065
"match": "(?:([\\w\\.\\*]+)(\\[(?:[^\\]]+)?\\]))",
3066
"captures": {
3067
"1": {
3068
"patterns": [
3069
{
3070
"include": "#type-declarations"
3071
},
3072
{
3073
"match": "\\w+",
3074
"name": "entity.name.type.go"
3075
}
3076
]
3077
},
3078
"2": {
3079
"patterns": [
3080
{
3081
"include": "#parameter-variable-types"
3082
}
3083
]
3084
}
3085
}
3086
},
3087
"slice_index_variables": {
3088
"comment": "slice index and capacity variables, to not scope them as property variables",
3089
"match": "(?<=\\w\\[)((?:(?:\\b[\\w\\.\\*\\+/\\-\\%\\<\\>\\|\\&]+\\:)|(?:\\:\\b[\\w\\.\\*\\+/\\-\\%\\<\\>\\|\\&]+))(?:\\b[\\w\\.\\*\\+/\\-\\%\\<\\>\\|\\&]+)?(?:\\:\\b[\\w\\.\\*\\+/\\-\\%\\<\\>\\|\\&]+)?)(?=\\])",
3090
"captures": {
3091
"1": {
3092
"patterns": [
3093
{
3094
"include": "#type-declarations"
3095
},
3096
{
3097
"match": "\\w+",
3098
"name": "variable.other.go"
3099
}
3100
]
3101
}
3102
}
3103
},
3104
"property_variables": {
3105
"comment": "Property variables in struct",
3106
"match": "((?:\\b[\\w\\.]+)(?:\\:(?!\\=)))",
3107
"captures": {
3108
"1": {
3109
"patterns": [
3110
{
3111
"include": "#type-declarations"
3112
},
3113
{
3114
"match": "\\w+",
3115
"name": "variable.other.property.go"
3116
}
3117
]
3118
}
3119
}
3120
},
3121
"label_loop_variables": {
3122
"comment": "labeled loop variable name",
3123
"match": "((?:^\\s*\\w+:\\s*$)|(?:^\\s*(?:\\bbreak\\b|\\bgoto\\b|\\bcontinue\\b)\\s+\\w+(?:\\s*/(?:/|\\*)\\s*.*)?$))",
3124
"captures": {
3125
"1": {
3126
"patterns": [
3127
{
3128
"include": "#type-declarations"
3129
},
3130
{
3131
"match": "\\w+",
3132
"name": "variable.other.label.go"
3133
}
3134
]
3135
}
3136
}
3137
},
3138
"double_parentheses_types": {
3139
"comment": "double parentheses types",
3140
"match": "(?:(?<!\\w)(\\((?:[\\[\\]\\*]+)?(?:[\\w\\.]+)(?:\\[(?:(?:[\\w\\.\\*\\[\\]\\{\\}]+)(?:(?:\\,\\s*(?:[\\w\\.\\*\\[\\]\\{\\}]+))*))?\\])?\\))(?=\\())",
3141
"captures": {
3142
"1": {
3143
"patterns": [
3144
{
3145
"include": "#type-declarations-without-brackets"
3146
},
3147
{
3148
"match": "\\(",
3149
"name": "punctuation.definition.begin.bracket.round.go"
3150
},
3151
{
3152
"match": "\\)",
3153
"name": "punctuation.definition.end.bracket.round.go"
3154
},
3155
{
3156
"match": "\\[",
3157
"name": "punctuation.definition.begin.bracket.square.go"
3158
},
3159
{
3160
"match": "\\]",
3161
"name": "punctuation.definition.end.bracket.square.go"
3162
},
3163
{
3164
"match": "\\{",
3165
"name": "punctuation.definition.begin.bracket.curly.go"
3166
},
3167
{
3168
"match": "\\}",
3169
"name": "punctuation.definition.end.bracket.curly.go"
3170
},
3171
{
3172
"match": "\\w+",
3173
"name": "entity.name.type.go"
3174
}
3175
]
3176
}
3177
}
3178
},
3179
"hover": {
3180
"comment": "hovering with the mouse",
3181
"patterns": [
3182
{
3183
"comment": "struct field property and types when hovering with the mouse",
3184
"match": "(?:(?<=^\\bfield\\b)\\s+([\\w\\*\\.]+)\\s+([\\s\\S]+))",
3185
"captures": {
3186
"1": {
3187
"patterns": [
3188
{
3189
"include": "#type-declarations"
3190
},
3191
{
3192
"match": "\\w+",
3193
"name": "variable.other.property.go"
3194
}
3195
]
3196
},
3197
"2": {
3198
"patterns": [
3199
{
3200
"match": "\\binvalid\\b\\s+\\btype\\b",
3201
"name": "invalid.field.go"
3202
},
3203
{
3204
"include": "#type-declarations-without-brackets"
3205
},
3206
{
3207
"include": "#parameter-variable-types"
3208
},
3209
{
3210
"match": "\\w+",
3211
"name": "entity.name.type.go"
3212
}
3213
]
3214
}
3215
}
3216
},
3217
{
3218
"comment": "return types when hovering with the mouse",
3219
"match": "(?:(?<=^\\breturns\\b)\\s+([\\s\\S]+))",
3220
"captures": {
3221
"1": {
3222
"patterns": [
3223
{
3224
"include": "#type-declarations-without-brackets"
3225
},
3226
{
3227
"include": "#parameter-variable-types"
3228
},
3229
{
3230
"match": "\\w+",
3231
"name": "entity.name.type.go"
3232
}
3233
]
3234
}
3235
}
3236
}
3237
]
3238
},
3239
"other_variables": {
3240
"comment": "all other variables",
3241
"match": "\\w+",
3242
"name": "variable.other.go"
3243
}
3244
}
3245
}
3246