PluginProbe
Code Block Pro – Beautiful Syntax Highlighting / 1.5.0
Code Block Pro – Beautiful Syntax Highlighting v1.5.0
1.27.1 1.27.2 1.27.3 1.27.4 1.27.5 1.27.6 1.27.7 1.28.0 1.3.0 1.4.0 1.5.0 1.5.1 1.5.2 1.6.0 1.7.0 1.8.0 1.9.0 1.9.1 1.9.2 1.9.3 trunk 1.1.0 1.10.0 1.11.0 1.11.1 All 63 releases
code-block-pro / build / shiki / languages / fsharp.tmLanguage.json

fsharp.tmLanguage.json in Code Block Pro – Beautiful Syntax Highlighting 1.5.0, at build/shiki/languages/fsharp.tmLanguage.json

1,836 lines 47.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 {
2 "information_for_contributors": [
3 "This file has been converted from https://github.com/ionide/ionide-fsgrammar/blob/master/grammars/fsharp.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/ionide/ionide-fsgrammar/commit/f74f4485011a9b463f1c1367195a4309a13403d6",
8 "name": "fsharp",
9 "scopeName": "source.fsharp",
10 "patterns": [
11 {
12 "include": "#compiler_directives"
13 },
14 {
15 "include": "#comments"
16 },
17 {
18 "include": "#constants"
19 },
20 {
21 "include": "#strings"
22 },
23 {
24 "include": "#chars"
25 },
26 {
27 "include": "#double_tick"
28 },
29 {
30 "include": "#definition"
31 },
32 {
33 "include": "#abstract_definition"
34 },
35 {
36 "include": "#attributes"
37 },
38 {
39 "include": "#modules"
40 },
41 {
42 "include": "#anonymous_functions"
43 },
44 {
45 "include": "#du_declaration"
46 },
47 {
48 "include": "#record_declaration"
49 },
50 {
51 "include": "#records"
52 },
53 {
54 "include": "#strp_inlined"
55 },
56 {
57 "include": "#keywords"
58 },
59 {
60 "include": "#cexprs"
61 },
62 {
63 "include": "#text"
64 }
65 ],
66 "repository": {
67 "strp_inlined_body": {
68 "patterns": [
69 {
70 "include": "#comments"
71 },
72 {
73 "include": "#anonymous_functions"
74 },
75 {
76 "match": "(\\^[[:alpha:]0-9'._]+)",
77 "captures": {
78 "1": {
79 "name": "entity.name.type.fsharp"
80 }
81 }
82 },
83 {
84 "name": "keyword.fsharp",
85 "match": "\\b(and|when|or)\\b"
86 },
87 {
88 "begin": "(\\()",
89 "beginCaptures": {
90 "1": {
91 "name": "keyword.symbol.fsharp"
92 }
93 },
94 "end": "(\\))",
95 "endCaptures": {
96 "1": {
97 "name": "keyword.symbol.fsharp"
98 }
99 },
100 "patterns": [
101 {
102 "include": "#strp_inlined_body"
103 }
104 ]
105 },
106 {
107 "match": "(static member|member)\\s*([[:alpha:]0-9'`<>^._]+|``[[:alpha:]0-9' <>^._]+``)\\s*(:)",
108 "captures": {
109 "1": {
110 "name": "keyword.fsharp"
111 },
112 "2": {
113 "name": "variable.fsharp"
114 },
115 "3": {
116 "name": "keyword.symbol.fsharp"
117 }
118 }
119 },
120 {
121 "include": "#compiler_directives"
122 },
123 {
124 "include": "#constants"
125 },
126 {
127 "include": "#strings"
128 },
129 {
130 "include": "#chars"
131 },
132 {
133 "include": "#double_tick"
134 },
135 {
136 "include": "#keywords"
137 },
138 {
139 "include": "#text"
140 },
141 {
142 "include": "#definition"
143 },
144 {
145 "include": "#attributes"
146 },
147 {
148 "include": "#keywords"
149 },
150 {
151 "include": "#cexprs"
152 },
153 {
154 "include": "#text"
155 }
156 ]
157 },
158 "strp_inlined": {
159 "patterns": [
160 {
161 "begin": "(\\()",
162 "beginCaptures": {
163 "1": {
164 "name": "keyword.symbol.fsharp"
165 }
166 },
167 "end": "(\\))",
168 "endCaptures": {
169 "1": {
170 "name": "keyword.symbol.fsharp"
171 }
172 },
173 "patterns": [
174 {
175 "include": "#strp_inlined_body"
176 }
177 ]
178 }
179 ]
180 },
181 "generic_declaration": {
182 "patterns": [
183 {
184 "comments": "SRTP syntax support",
185 "begin": "(:)\\s*(\\()\\s*(static member|member)",
186 "beginCaptures": {
187 "1": {
188 "name": "keyword.symbol.fsharp"
189 },
190 "2": {
191 "name": "keyword.symbol.fsharp"
192 },
193 "3": {
194 "name": "keyword.fsharp"
195 }
196 },
197 "end": "(\\))",
198 "endCaptures": {
199 "1": {
200 "name": "keyword.symbol.fsharp"
201 }
202 },
203 "patterns": [
204 {
205 "begin": "(\\()",
206 "beginCaptures": {
207 "1": {
208 "name": "keyword.symbol.fsharp"
209 }
210 },
211 "end": "(\\))",
212 "endCaptures": {
213 "1": {
214 "name": "keyword.symbol.fsharp"
215 }
216 },
217 "patterns": [
218 {
219 "include": "#member_declaration"
220 }
221 ]
222 },
223 {
224 "match": "(('|\\^)[[:alpha:]0-9'._]+)",
225 "captures": {
226 "1": {
227 "name": "entity.name.type.fsharp"
228 }
229 }
230 },
231 {
232 "include": "#variables"
233 },
234 {
235 "include": "#keywords"
236 }
237 ]
238 },
239 {
240 "name": "keyword.fsharp",
241 "match": "\\b(private|to|public|internal|function|yield!|yield|class|exception|match|delegate|of|new|in|as|if|then|else|elif|for|begin|end|inherit|do|let\\!|return\\!|return|interface|with|abstract|enum|member|try|finally|and|when|or|use|use\\!|struct|while|mutable|assert|base|done|downcast|downto|extern|fixed|global|lazy|upcast|not)(?!')\\b"
242 },
243 {
244 "name": "keyword.fsharp",
245 "match": ":"
246 },
247 {
248 "include": "#constants"
249 },
250 {
251 "match": "(('|\\^)[[:alpha:]0-9'._]+)",
252 "captures": {
253 "1": {
254 "name": "entity.name.type.fsharp"
255 }
256 }
257 },
258 {
259 "begin": "(<)",
260 "end": "(>)",
261 "beginCaptures": {
262 "1": {
263 "name": "keyword.symbol.fsharp"
264 }
265 },
266 "endCaptures": {
267 "1": {
268 "name": "keyword.symbol.fsharp"
269 }
270 },
271 "patterns": [
272 {
273 "match": "(('|\\^)[[:alpha:]0-9'._]+)",
274 "captures": {
275 "1": {
276 "name": "entity.name.type.fsharp"
277 }
278 }
279 },
280 {
281 "include": "#tuple_signature"
282 },
283 {
284 "include": "#generic_declaration"
285 }
286 ]
287 },
288 {
289 "begin": "(\\()",
290 "end": "(\\))",
291 "beginCaptures": {
292 "1": {
293 "name": "keyword.symbol.fsharp"
294 }
295 },
296 "endCaptures": {
297 "1": {
298 "name": "keyword.symbol.fsharp"
299 }
300 },
301 "patterns": [
302 {
303 "match": "(([?[:alpha:]0-9'`^._ ]+))+",
304 "captures": {
305 "1": {
306 "name": "entity.name.type.fsharp"
307 }
308 }
309 },
310 {
311 "include": "#tuple_signature"
312 }
313 ]
314 },
315 {
316 "match": "(?!when|and|or\\b)\\b([\\w0-9'`^._]+)",
317 "comments": "Here we need the \\w modifier in order to check that the words isn't blacklisted",
318 "captures": {
319 "1": {
320 "name": "entity.name.type.fsharp"
321 }
322 }
323 },
324 {
325 "match": "(\\|)",
326 "comments": "Prevent captures of `|>` as a keyword when defining custom operator like `<|>`",
327 "captures": {
328 "1": {
329 "name": "keyword.symbol.fsharp"
330 }
331 }
332 },
333 {
334 "include": "#keywords"
335 }
336 ]
337 },
338 "anonymous_record_declaration": {
339 "begin": "(\\{\\|)",
340 "end": "(\\|\\})",
341 "beginCaptures": {
342 "1": {
343 "name": "keyword.symbol.fsharp"
344 }
345 },
346 "endCaptures": {
347 "1": {
348 "name": "keyword.symbol.fsharp"
349 }
350 },
351 "patterns": [
352 {
353 "match": "[[:alpha:]0-9'`^_ ]+(:)",
354 "captures": {
355 "1": {
356 "name": "keyword.symbol.fsharp"
357 }
358 }
359 },
360 {
361 "match": "([[:alpha:]0-9'`^_ ]+)",
362 "captures": {
363 "1": {
364 "name": "entity.name.type.fsharp"
365 }
366 }
367 },
368 {
369 "include": "#anonymous_record_declaration"
370 },
371 {
372 "include": "#keywords"
373 }
374 ]
375 },
376 "record_signature": {
377 "patterns": [
378 {
379 "match": "[[:alpha:]0-9'`^_ ]+(=)([[:alpha:]0-9'`^_ ]+)",
380 "captures": {
381 "1": {
382 "name": "keyword.symbol.fsharp"
383 },
384 "2": {
385 "name": "variable.parameter.fsharp"
386 }
387 }
388 },
389 {
390 "begin": "({)",
391 "end": "(})",
392 "beginCaptures": {
393 "1": {
394 "name": "keyword.symbol.fsharp"
395 }
396 },
397 "endCaptures": {
398 "1": {
399 "name": "keyword.symbol.fsharp"
400 }
401 },
402 "patterns": [
403 {
404 "match": "[[:alpha:]0-9'`^_ ]+(=)([[:alpha:]0-9'`^_ ]+)",
405 "captures": {
406 "1": {
407 "name": "keyword.symbol.fsharp"
408 },
409 "2": {
410 "name": "variable.parameter.fsharp"
411 }
412 }
413 },
414 {
415 "include": "#record_signature"
416 }
417 ]
418 },
419 {
420 "include": "#keywords"
421 }
422 ]
423 },
424 "tuple_signature": {
425 "patterns": [
426 {
427 "match": "(([?[:alpha:]0-9'`^._ ]+))+",
428 "captures": {
429 "1": {
430 "name": "entity.name.type.fsharp"
431 }
432 }
433 },
434 {
435 "begin": "(\\()",
436 "end": "(\\))",
437 "beginCaptures": {
438 "1": {
439 "name": "keyword.symbol.fsharp"
440 }
441 },
442 "endCaptures": {
443 "1": {
444 "name": "keyword.symbol.fsharp"
445 }
446 },
447 "patterns": [
448 {
449 "match": "(([?[:alpha:]0-9'`^._ ]+))+",
450 "captures": {
451 "1": {
452 "name": "entity.name.type.fsharp"
453 }
454 }
455 },
456 {
457 "include": "#tuple_signature"
458 }
459 ]
460 },
461 {
462 "include": "#keywords"
463 }
464 ]
465 },
466 "anonymous_functions": {
467 "patterns": [
468 {
469 "name": "function.anonymous",
470 "begin": "\\b(fun)\\b",
471 "end": "(->)",
472 "beginCaptures": {
473 "1": {
474 "name": "keyword.fsharp"
475 }
476 },
477 "endCaptures": {
478 "1": {
479 "name": "keyword.symbol.arrow.fsharp"
480 }
481 },
482 "patterns": [
483 {
484 "include": "#comments"
485 },
486 {
487 "begin": "(\\()",
488 "end": "\\s*(?=(->))",
489 "beginCaptures": {
490 "1": {
491 "name": "keyword.symbol.arrow.fsharp"
492 }
493 },
494 "endCaptures": {
495 "1": {
496 "name": "keyword.symbol.arrow.fsharp"
497 }
498 },
499 "patterns": [
500 {
501 "include": "#member_declaration"
502 }
503 ]
504 },
505 {
506 "include": "#variables"
507 }
508 ]
509 }
510 ]
511 },
512 "attributes": {
513 "patterns": [
514 {
515 "name": "support.function.attribute.fsharp",
516 "begin": "\\[\\<",
517 "end": "\\>\\]|\\]",
518 "patterns": [
519 {
520 "include": "$self"
521 }
522 ]
523 }
524 ]
525 },
526 "comments": {
527 "patterns": [
528 {
529 "name": "comment.literate.command.fsharp",
530 "match": "(\\(\\*{3}.*\\*{3}\\))",
531 "beginCaptures": {
532 "1": {
533 "name": "comment.block.fsharp"
534 }
535 }
536 },
537 {
538 "name": "comment.block.markdown.fsharp",
539 "begin": "^\\s*(\\(\\*\\*(?!\\)))((?!\\*\\)).)*$",
540 "while": "^(?!\\s*(\\*)+\\)\\s*$)",
541 "beginCaptures": {
542 "1": {
543 "name": "comment.block.fsharp"
544 }
545 },
546 "endCaptures": {
547 "1": {
548 "name": "comment.block.fsharp"
549 }
550 },
551 "patterns": [
552 {
553 "include": "text.html.markdown"
554 }
555 ]
556 },
557 {
558 "name": "comment.block.fsharp",
559 "begin": "(\\(\\*(?!\\)))",
560 "end": "(\\*+\\))",
561 "beginCaptures": {
562 "1": {
563 "name": "comment.block.fsharp"
564 }
565 },
566 "endCaptures": {
567 "1": {
568 "name": "comment.block.fsharp"
569 }
570 },
571 "patterns": [
572 {
573 "comments": "Capture // when inside of (* *) like that the rule which capture comments starting by // is not trigger. See https://github.com/ionide/ionide-fsgrammar/issues/155",
574 "name": "fast-capture.comment.line.double-slash.fsharp",
575 "match": "//"
576 },
577 {
578 "include": "#comments"
579 }
580 ]
581 },
582 {
583 "name": "comment.block.markdown.fsharp.end",
584 "match": "((?<!\\()(\\*)+\\))",
585 "captures": {
586 "1": {
587 "name": "comment.block.fsharp"
588 }
589 }
590 },
591 {
592 "name": "comment.line.markdown.fsharp",
593 "begin": "///",
594 "while": "///",
595 "patterns": [
596 {
597 "include": "text.html.markdown"
598 }
599 ]
600 },
601 {
602 "name": "comment.line.double-slash.fsharp",
603 "match": "//.*$"
604 }
605 ]
606 },
607 "constants": {
608 "patterns": [
609 {
610 "name": "constant.language.unit.fsharp",
611 "match": "\\(\\)"
612 },
613 {
614 "name": "constant.numeric.float.fsharp",
615 "match": "\\b-?[0-9][0-9_]*((\\.([0-9][0-9_]*([eE][+-]??[0-9][0-9_]*)?)?)|([eE][+-]??[0-9][0-9_]*))"
616 },
617 {
618 "name": "constant.numeric.integer.nativeint.fsharp",
619 "match": "\\b(-?((0(x|X)[0-9a-fA-F][0-9a-fA-F_]*)|(0(o|O)[0-7][0-7_]*)|(0(b|B)[01][01_]*)|([0-9][0-9_]*)))"
620 },
621 {
622 "name": "constant.language.boolean.fsharp",
623 "match": "\\b(true|false)\\b"
624 },
625 {
626 "name": "constant.other.fsharp",
627 "match": "\\b(null|unit|void)\\b"
628 }
629 ]
630 },
631 "abstract_definition": {
632 "name": "abstract.definition.fsharp",
633 "begin": "\\b(abstract)\\s+(member)?(\\s+\\[\\<.*\\>\\])?\\s*([_[:alpha:]0-9,\\._`\\s]+)(:)",
634 "end": "\\s*(with)\\b|=|$",
635 "beginCaptures": {
636 "1": {
637 "name": "keyword.fsharp"
638 },
639 "2": {
640 "name": "keyword.fsharp"
641 },
642 "3": {
643 "name": "support.function.attribute.fsharp"
644 },
645 "5": {
646 "name": "keyword.fsharp"
647 }
648 },
649 "endCaptures": {
650 "1": {
651 "name": "keyword.fsharp"
652 }
653 },
654 "patterns": [
655 {
656 "include": "#comments"
657 },
658 {
659 "include": "#common_declaration"
660 },
661 {
662 "match": "(\\?{0,1})([[:alpha:]0-9'`^._ ]+)\\s*(:)((?!with\\b)\\b([\\w0-9'`^._ ]+)){0,1}",
663 "captures": {
664 "1": {
665 "name": "keyword.symbol.fsharp"
666 },
667 "2": {
668 "name": "variable.parameter.fsharp"
669 },
670 "3": {
671 "name": "keyword.symbol.fsharp"
672 },
673 "4": {
674 "name": "entity.name.type.fsharp"
675 }
676 }
677 },
678 {
679 "match": "(?!with|get|set\\b)\\b([\\w0-9'`^._]+)",
680 "comments": "Here we need the \\w modifier in order to check that the words isn't blacklisted",
681 "captures": {
682 "1": {
683 "name": "entity.name.type.fsharp"
684 }
685 }
686 },
687 {
688 "include": "#keywords"
689 }
690 ]
691 },
692 "common_binding_definition": {
693 "patterns": [
694 {
695 "include": "#comments"
696 },
697 {
698 "include": "#attributes"
699 },
700 {
701 "comments": "SRTP syntax support",
702 "begin": "(:)\\s*(\\()\\s*(static member|member)",
703 "beginCaptures": {
704 "1": {
705 "name": "keyword.symbol.fsharp"
706 },
707 "2": {
708 "name": "keyword.symbol.fsharp"
709 },
710 "3": {
711 "name": "keyword.fsharp"
712 }
713 },
714 "end": "(\\))\\s*((?=,)|(?=\\=))",
715 "endCaptures": {
716 "1": {
717 "name": "keyword.symbol.fsharp"
718 }
719 },
720 "patterns": [
721 {
722 "match": "(\\^[[:alpha:]0-9'._]+)",
723 "captures": {
724 "1": {
725 "name": "entity.name.type.fsharp"
726 }
727 }
728 },
729 {
730 "include": "#variables"
731 },
732 {
733 "include": "#keywords"
734 }
735 ]
736 },
737 {
738 "begin": "(:)\\s*(\\()",
739 "beginCaptures": {
740 "1": {
741 "name": "keyword.symbol.fsharp"
742 },
743 "2": {
744 "name": "keyword.symbol.fsharp"
745 }
746 },
747 "end": "(\\)\\s*(([?[:alpha:]0-9'`^._ ]*)))",
748 "endCaptures": {
749 "1": {
750 "name": "keyword.symbol.fsharp"
751 },
752 "2": {
753 "name": "entity.name.type.fsharp"
754 }
755 },
756 "patterns": [
757 {
758 "include": "#tuple_signature"
759 }
760 ]
761 },
762 {
763 "begin": "(:)\\s*(\\^[[:alpha:]0-9'._]+)\\s*(when)",
764 "beginCaptures": {
765 "1": {
766 "name": "keyword.symbol.fsharp"
767 },
768 "2": {
769 "name": "entity.name.type.fsharp"
770 },
771 "3": {
772 "name": "keyword.fsharp"
773 }
774 },
775 "end": "(?=:)",
776 "endCaptures": {
777 "1": {
778 "name": "keyword.symbol.fsharp"
779 }
780 },
781 "patterns": [
782 {
783 "name": "keyword.fsharp",
784 "match": "\\b(and|when|or)\\b"
785 },
786 {
787 "comment": "Because we first capture the keywords, we can capture what looks like a word and assume it's an entity definition",
788 "match": "([[:alpha:]0-9'^._]+)",
789 "captures": {
790 "1": {
791 "name": "entity.name.type.fsharp"
792 }
793 }
794 },
795 {
796 "name": "keyword.symbol.fsharp",
797 "match": "(\\(|\\))"
798 }
799 ]
800 },
801 {
802 "match": "(:)\\s*([?[:alpha:]0-9'`^._ ]+)",
803 "captures": {
804 "1": {
805 "name": "keyword.symbol.fsharp"
806 },
807 "2": {
808 "name": "entity.name.type.fsharp"
809 }
810 }
811 },
812 {
813 "match": "(->)\\s*(\\()?\\s*([?[:alpha:]0-9'`^._ ]+)*",
814 "captures": {
815 "1": {
816 "name": "keyword.symbol.fsharp"
817 },
818 "2": {
819 "name": "keyword.symbol.fsharp"
820 },
821 "3": {
822 "name": "entity.name.type.fsharp"
823 }
824 }
825 },
826 {
827 "begin": "(\\*)\\s*(\\()",
828 "beginCaptures": {
829 "1": {
830 "name": "keyword.symbol.fsharp"
831 },
832 "2": {
833 "name": "keyword.symbol.fsharp"
834 }
835 },
836 "end": "(\\)\\s*(([?[:alpha:]0-9'`^._ ]+))+)",
837 "endCaptures": {
838 "1": {
839 "name": "keyword.symbol.fsharp"
840 },
841 "2": {
842 "name": "entity.name.type.fsharp"
843 }
844 },
845 "patterns": [
846 {
847 "include": "#tuple_signature"
848 }
849 ]
850 },
851 {
852 "begin": "(\\*)(\\s*([?[:alpha:]0-9'`^._ ]+))*",
853 "beginCaptures": {
854 "1": {
855 "name": "keyword.symbol.fsharp"
856 },
857 "2": {
858 "name": "entity.name.type.fsharp"
859 }
860 },
861 "end": "(?==)|(?=\\))",
862 "endCaptures": {
863 "1": {
864 "name": "keyword.symbol.fsharp"
865 }
866 },
867 "patterns": [
868 {
869 "include": "#tuple_signature"
870 }
871 ]
872 },
873 {
874 "begin": "(<+(?![[:space:]]*\\)))",
875 "beginComment": "The group (?![[:space:]]*\\) is for protection against overload operator. static member (<)",
876 "end": "((?<!:)>|\\))",
877 "endComment": "The group (?<!:) prevent us from stopping on :> when using SRTP synthax",
878 "beginCaptures": {
879 "1": {
880 "name": "keyword.symbol.fsharp"
881 }
882 },
883 "endCaptures": {
884 "1": {
885 "name": "keyword.symbol.fsharp"
886 }
887 },
888 "patterns": [
889 {
890 "include": "#generic_declaration"
891 }
892 ]
893 },
894 {
895 "include": "#anonymous_record_declaration"
896 },
897 {
898 "begin": "({)",
899 "end": "(})",
900 "beginCaptures": {
901 "1": {
902 "name": "keyword.symbol.fsharp"
903 }
904 },
905 "endCaptures": {
906 "1": {
907 "name": "keyword.symbol.fsharp"
908 }
909 },
910 "patterns": [
911 {
912 "include": "#record_signature"
913 }
914 ]
915 },
916 {
917 "include": "#definition"
918 },
919 {
920 "include": "#variables"
921 },
922 {
923 "include": "#keywords"
924 }
925 ]
926 },
927 "definition": {
928 "patterns": [
929 {
930 "name": "binding.fsharp",
931 "begin": "\\b(let mutable|static let mutable|static let|let inline|let|member val|static member inline|static member|default|member|override|let!)(\\s+rec|mutable)?(\\s+\\[\\<.*\\>\\])?\\s*(private|internal|public)?\\s+(\\[[^-=]*\\]|[_[:alpha:]]([_[:alpha:]0-9\\._]+)*|``[_[:alpha:]]([_[:alpha:]0-9\\._`\\s]+|(?<=,)\\s)*)?",
932 "end": "\\s*(with\\b|=|\\n+=|(?<=\\=))",
933 "beginCaptures": {
934 "1": {
935 "name": "keyword.fsharp"
936 },
937 "2": {
938 "name": "keyword.fsharp"
939 },
940 "3": {
941 "name": "support.function.attribute.fsharp"
942 },
943 "4": {
944 "name": "storage.modifier.fsharp"
945 },
946 "5": {
947 "name": "variable.fsharp"
948 }
949 },
950 "endCaptures": {
951 "1": {
952 "name": "keyword.fsharp"
953 }
954 },
955 "patterns": [
956 {
957 "include": "#common_binding_definition"
958 }
959 ]
960 },
961 {
962 "name": "binding.fsharp",
963 "begin": "\\b(use|use!|and|and!)\\s+(\\[[^-=]*\\]|[_[:alpha:]]([_[:alpha:]0-9\\._]+)*|``[_[:alpha:]]([_[:alpha:]0-9\\._`\\s]+|(?<=,)\\s)*)?",
964 "end": "\\s*(=)",
965 "beginCaptures": {
966 "1": {
967 "name": "keyword.fsharp"
968 }
969 },
970 "endCaptures": {
971 "1": {
972 "name": "keyword.fsharp"
973 }
974 },
975 "patterns": [
976 {
977 "include": "#common_binding_definition"
978 }
979 ]
980 },
981 {
982 "name": "binding.fsharp",
983 "begin": "(?<=with|and)\\s*\\b((get|set)\\s*(?=\\())(\\[[^-=]*\\]|[_[:alpha:]]([_[:alpha:]0-9\\._]+)*|``[_[:alpha:]]([_[:alpha:]0-9\\._`\\s]+|(?<=,)\\s)*)?",
984 "end": "\\s*(=|\\n+=|(?<=\\=))",
985 "beginCaptures": {
986 "4": {
987 "name": "variable.fsharp"
988 }
989 },
990 "endCaptures": {
991 "1": {
992 "name": "keyword.fsharp"
993 }
994 },
995 "patterns": [
996 {
997 "include": "#common_binding_definition"
998 }
999 ]
1000 },
1001 {
1002 "name": "binding.fsharp",
1003 "begin": "\\b(static val mutable|val mutable|val)(\\s+rec|mutable)?(\\s+\\[\\<.*\\>\\])?\\s*(private|internal|public)?\\s+(\\[[^-=]*\\]|[_[:alpha:]]([_[:alpha:]0-9,\\._]+)*|``[_[:alpha:]]([_[:alpha:]0-9,\\._`\\s]+|(?<=,)\\s)*)?",
1004 "end": "\\n$",
1005 "beginCaptures": {
1006 "1": {
1007 "name": "keyword.fsharp"
1008 },
1009 "2": {
1010 "name": "keyword.fsharp"
1011 },
1012 "3": {
1013 "name": "support.function.attribute.fsharp"
1014 },
1015 "4": {
1016 "name": "storage.modifier.fsharp"
1017 },
1018 "5": {
1019 "name": "variable.fsharp"
1020 }
1021 },
1022 "patterns": [
1023 {
1024 "include": "#common_binding_definition"
1025 }
1026 ]
1027 },
1028 {
1029 "name": "binding.fsharp",
1030 "begin": "\\b(new)\\b\\s+(\\()",
1031 "end": "(\\))",
1032 "beginCaptures": {
1033 "1": {
1034 "name": "keyword.fsharp"
1035 },
1036 "2": {
1037 "name": "keyword.fsharp"
1038 }
1039 },
1040 "endCaptures": {
1041 "1": {
1042 "name": "keyword.fsharp"
1043 }
1044 },
1045 "patterns": [
1046 {
1047 "include": "#common_binding_definition"
1048 }
1049 ]
1050 }
1051 ]
1052 },
1053 "du_declaration": {
1054 "patterns": [
1055 {
1056 "name": "du_declaration.fsharp",
1057 "begin": "\\b(of)\\b",
1058 "end": "$|(\\|)",
1059 "beginCaptures": {
1060 "1": {
1061 "name": "keyword.fsharp"
1062 }
1063 },
1064 "endCaptures": {
1065 "1": {
1066 "name": "keyword.symbol.fsharp"
1067 }
1068 },
1069 "patterns": [
1070 {
1071 "include": "#comments"
1072 },
1073 {
1074 "match": "([[:alpha:]0-9'`<>^._]+|``[[:alpha:]0-9' <>^._]+``)\\s*(:)\\s*([[:alpha:]0-9'`<>^._]+|``[[:alpha:]0-9' <>^._]+``)",
1075 "captures": {
1076 "1": {
1077 "name": "variable.parameter.fsharp"
1078 },
1079 "2": {
1080 "name": "keyword.symbol.fsharp"
1081 },
1082 "3": {
1083 "name": "entity.name.type.fsharp"
1084 }
1085 }
1086 },
1087 {
1088 "match": "(``([[:alpha:]0-9'^._ ]+)``|[[:alpha:]0-9'`^._]+)",
1089 "captures": {
1090 "1": {
1091 "name": "entity.name.type.fsharp"
1092 }
1093 }
1094 },
1095 {
1096 "include": "#anonymous_record_declaration"
1097 },
1098 {
1099 "include": "#keywords"
1100 }
1101 ]
1102 }
1103 ]
1104 },
1105 "keywords": {
1106 "patterns": [
1107 {
1108 "name": "storage.modifier",
1109 "match": "\\b(private|public|internal)\\b"
1110 },
1111 {
1112 "name": "keyword.fsharp",
1113 "match": "\\b(private|to|public|internal|function|class|exception|delegate|of|as|begin|end|inherit|let!|interface|abstract|enum|member|and|when|or|use|use\\!|struct|mutable|assert|base|done|downcast|downto|extern|fixed|global|lazy|upcast|not)(?!')\\b"
1114 },
1115 {
1116 "name": "keyword.control",
1117 "match": "\\b(match|yield|yield!|with|if|then|else|elif|for|in|return!|return|try|finally|while|do)(?!')\\b"
1118 },
1119 {
1120 "name": "keyword.symbol.new",
1121 "match": "\\b(new)\\b"
1122 },
1123 {
1124 "name": "keyword.symbol.fsharp",
1125 "match": "(&&&|\\|\\|\\||\\^\\^\\^|~~~|<<<|>>>|\\|>|\\->|\\<\\-|:>|:\\?>|:|\\[|\\]|\\;|<>|=|@|\\|\\||&&|{|}|\\||_|\\.\\.|\\,|\\+|\\-|\\*|\\/|\\^|\\!|\\>|\\>\\=|\\>\\>|\\<|\\<\\=|\\(|\\)|\\<\\<)"
1126 }
1127 ]
1128 },
1129 "modules": {
1130 "patterns": [
1131 {
1132 "name": "entity.name.section.fsharp",
1133 "begin": "\\b(namespace global)|\\b(namespace|module)\\s*(public|internal|private|rec)?\\s+([[:alpha:]][[:alpha:]0-9'_. ]*)",
1134 "end": "(\\s?=|\\s|$)",
1135 "beginCaptures": {
1136 "1": {
1137 "name": "keyword.fsharp"
1138 },
1139 "2": {
1140 "name": "keyword.fsharp"
1141 },
1142 "3": {
1143 "name": "storage.modifier.fsharp"
1144 },
1145 "4": {
1146 "name": "entity.name.section.fsharp"
1147 }
1148 },
1149 "endCaptures": {
1150 "1": {
1151 "name": "keyword.symbol.fsharp"
1152 }
1153 },
1154 "patterns": [
1155 {
1156 "name": "entity.name.section.fsharp",
1157 "match": "(\\.)([A-Z][[:alpha:]0-9'_]*)",
1158 "captures": {
1159 "1": {
1160 "name": "punctuation.separator.namespace-reference.fsharp"
1161 },
1162 "2": {
1163 "name": "entity.name.section.fsharp"
1164 }
1165 }
1166 }
1167 ]
1168 },
1169 {
1170 "name": "namespace.open.fsharp",
1171 "begin": "\\b(open type|open)\\s+([[:alpha:]][[:alpha:]0-9'_]*)(?=(\\.[A-Z][[:alpha:]0-9_]*)*)",
1172 "end": "(\\s|$)",
1173 "beginCaptures": {
1174 "1": {
1175 "name": "keyword.fsharp"
1176 },
1177 "2": {
1178 "name": "entity.name.section.fsharp"
1179 }
1180 },
1181 "patterns": [
1182 {
1183 "name": "entity.name.section.fsharp",
1184 "match": "(\\.)([[:alpha:]][[:alpha:]0-9'_]*)",
1185 "captures": {
1186 "1": {
1187 "name": "punctuation.separator.namespace-reference.fsharp"
1188 },
1189 "2": {
1190 "name": "entity.name.section.fsharp"
1191 }
1192 }
1193 },
1194 {
1195 "include": "#comments"
1196 }
1197 ]
1198 },
1199 {
1200 "name": "namespace.alias.fsharp",
1201 "begin": "^\\s*(module)\\s+([A-Z][[:alpha:]0-9'_]*)\\s*(=)\\s*([A-Z][[:alpha:]0-9'_]*)",
1202 "end": "(\\s|$)",
1203 "beginCaptures": {
1204 "1": {
1205 "name": "keyword.fsharp"
1206 },
1207 "2": {
1208 "name": "entity.name.type.namespace.fsharp"
1209 },
1210 "3": {
1211 "name": "punctuation.separator.namespace-definition.fsharp"
1212 },
1213 "4": {
1214 "name": "entity.name.section.fsharp"
1215 }
1216 },
1217 "patterns": [
1218 {
1219 "name": "entity.name.section.fsharp",
1220 "match": "(\\.)([A-Z][[:alpha:]0-9'_]*)",
1221 "captures": {
1222 "1": {
1223 "name": "punctuation.separator.namespace-reference.fsharp"
1224 },
1225 "2": {
1226 "name": "entity.name.section.fsharp"
1227 }
1228 }
1229 }
1230 ]
1231 }
1232 ]
1233 },
1234 "strings": {
1235 "patterns": [
1236 {
1237 "name": "string.quoted.literal.fsharp",
1238 "begin": "(?=[^\\\\])(@\")",
1239 "end": "(\")(?!\")",
1240 "beginCaptures": {
1241 "1": {
1242 "name": "punctuation.definition.string.begin.fsharp"
1243 }
1244 },
1245 "endCaptures": {
1246 "1": {
1247 "name": "punctuation.definition.string.end.fsharp"
1248 }
1249 },
1250 "patterns": [
1251 {
1252 "name": "constant.character.string.escape.fsharp",
1253 "match": "\"(\")"
1254 }
1255 ]
1256 },
1257 {
1258 "name": "string.quoted.triple.fsharp",
1259 "begin": "(?=[^\\\\])(\"\"\")",
1260 "end": "(\"\"\")",
1261 "beginCaptures": {
1262 "1": {
1263 "name": "punctuation.definition.string.begin.fsharp"
1264 }
1265 },
1266 "endCaptures": {
1267 "1": {
1268 "name": "punctuation.definition.string.end.fsharp"
1269 }
1270 },
1271 "patterns": [
1272 {
1273 "include": "#string_formatter"
1274 }
1275 ]
1276 },
1277 {
1278 "name": "string.quoted.double.fsharp",
1279 "begin": "(?=[^\\\\])(\")",
1280 "end": "(\")",
1281 "beginCaptures": {
1282 "1": {
1283 "name": "punctuation.definition.string.begin.fsharp"
1284 }
1285 },
1286 "endCaptures": {
1287 "1": {
1288 "name": "punctuation.definition.string.end.fsharp"
1289 }
1290 },
1291 "patterns": [
1292 {
1293 "name": "punctuation.separator.string.ignore-eol.fsharp",
1294 "match": "\\\\$[ \\t]*"
1295 },
1296 {
1297 "name": "constant.character.string.escape.fsharp",
1298 "match": "\\\\(['\"\\\\abfnrtv]|([01][0-9][0-9]|2[0-4][0-9]|25[0-5])|(x[0-9a-fA-F]{2})|(u[0-9a-fA-F]{4})|(U00(0[0-9a-fA-F]|10)[0-9a-fA-F]{4}))"
1299 },
1300 {
1301 "name": "invalid.illegal.character.string.fsharp",
1302 "match": "\\\\(([0-9]{1,3})|(x[^\\s]{0,2})|(u[^\\s]{0,4})|(U[^\\s]{0,8})|[^\\s])"
1303 },
1304 {
1305 "include": "#string_formatter"
1306 }
1307 ]
1308 }
1309 ]
1310 },
1311 "string_formatter": {
1312 "patterns": [
1313 {
1314 "name": "entity.name.type.format.specifier.fsharp",
1315 "match": "(%0?-?(\\d+)?((a|t)|(\\.\\d+)?(f|F|e|E|g|G|M)|(b|c|s|d|i|x|X|o|u)|(s|b|O)|(\\+?A)))",
1316 "captures": {
1317 "1": {
1318 "name": "keyword.format.specifier.fsharp"
1319 }
1320 }
1321 }
1322 ]
1323 },
1324 "variables": {
1325 "patterns": [
1326 {
1327 "name": "constant.language.unit.fsharp",
1328 "match": "\\(\\)"
1329 },
1330 {
1331 "match": "(\\?{0,1})(``[[:alpha:]0-9'`^:,._ ]+``|(?!private\\b)\\b[\\w[:alpha:]0-9'`<>^._ ]+)",
1332 "captures": {
1333 "1": {
1334 "name": "keyword.symbol.fsharp"
1335 },
1336 "2": {
1337 "name": "variable.parameter.fsharp"
1338 }
1339 }
1340 }
1341 ]
1342 },
1343 "common_declaration": {
1344 "patterns": [
1345 {
1346 "begin": "\\s*(->)\\s*([[:alpha:]0-9'`^._ ]+)(<)",
1347 "end": "(>)",
1348 "beginCaptures": {
1349 "1": {
1350 "name": "keyword.symbol.fsharp"
1351 },
1352 "2": {
1353 "name": "entity.name.type.fsharp"
1354 },
1355 "3": {
1356 "name": "keyword.symbol.fsharp"
1357 }
1358 },
1359 "endCaptures": {
1360 "1": {
1361 "name": "keyword.symbol.fsharp"
1362 }
1363 },
1364 "patterns": [
1365 {
1366 "match": "([[:alpha:]0-9'`^._ ]+)",
1367 "captures": {
1368 "1": {
1369 "name": "entity.name.type.fsharp"
1370 }
1371 }
1372 },
1373 {
1374 "include": "#keywords"
1375 }
1376 ]
1377 },
1378 {
1379 "match": "\\s*(->)\\s*(?!with|get|set\\b)\\b([\\w0-9'`^._]+)",
1380 "captures": {
1381 "1": {
1382 "name": "keyword.symbol.fsharp"
1383 },
1384 "2": {
1385 "name": "entity.name.type.fsharp"
1386 }
1387 }
1388 },
1389 {
1390 "include": "#anonymous_record_declaration"
1391 },
1392 {
1393 "begin": "(\\?{0,1})([[:alpha:]0-9'`^._ ]+)\\s*(:)(\\s*([?[:alpha:]0-9'`^._ ]+)(<))",
1394 "end": "(>)",
1395 "beginCaptures": {
1396 "1": {
1397 "name": "keyword.symbol.fsharp"
1398 },
1399 "2": {
1400 "name": "variable.parameter.fsharp"
1401 },
1402 "3": {
1403 "name": "keyword.symbol.fsharp"
1404 },
1405 "4": {
1406 "name": "keyword.symbol.fsharp"
1407 },
1408 "5": {
1409 "name": "entity.name.type.fsharp"
1410 }
1411 },
1412 "endCaptures": {
1413 "1": {
1414 "name": "keyword.symbol.fsharp"
1415 }
1416 },
1417 "patterns": [
1418 {
1419 "match": "([[:alpha:]0-9'`^._ ]+)",
1420 "captures": {
1421 "1": {
1422 "name": "entity.name.type.fsharp"
1423 }
1424 }
1425 },
1426 {
1427 "include": "#keywords"
1428 }
1429 ]
1430 }
1431 ]
1432 },
1433 "member_declaration": {
1434 "patterns": [
1435 {
1436 "include": "#comments"
1437 },
1438 {
1439 "include": "#common_declaration"
1440 },
1441 {
1442 "comments": "SRTP syntax support",
1443 "begin": "(:)\\s*(\\()\\s*(static member|member)",
1444 "beginCaptures": {
1445 "1": {
1446 "name": "keyword.symbol.fsharp"
1447 },
1448 "2": {
1449 "name": "keyword.symbol.fsharp"
1450 },
1451 "3": {
1452 "name": "keyword.fsharp"
1453 }
1454 },
1455 "end": "(\\))\\s*((?=,)|(?=\\=))",
1456 "endCaptures": {
1457 "1": {
1458 "name": "keyword.symbol.fsharp"
1459 }
1460 },
1461 "patterns": [
1462 {
1463 "begin": "(\\()",
1464 "beginCaptures": {
1465 "1": {
1466 "name": "keyword.symbol.fsharp"
1467 }
1468 },
1469 "end": "(\\))",
1470 "endCaptures": {
1471 "1": {
1472 "name": "keyword.symbol.fsharp"
1473 }
1474 },
1475 "patterns": [
1476 {
1477 "include": "#member_declaration"
1478 }
1479 ]
1480 },
1481 {
1482 "match": "(\\^[[:alpha:]0-9'._]+)",
1483 "captures": {
1484 "1": {
1485 "name": "entity.name.type.fsharp"
1486 }
1487 }
1488 },
1489 {
1490 "include": "#variables"
1491 },
1492 {
1493 "include": "#keywords"
1494 }
1495 ]
1496 },
1497 {
1498 "match": "(\\^[[:alpha:]0-9'._]+)",
1499 "captures": {
1500 "1": {
1501 "name": "entity.name.type.fsharp"
1502 }
1503 }
1504 },
1505 {
1506 "name": "keyword.fsharp",
1507 "match": "\\b(and|when|or)\\b"
1508 },
1509 {
1510 "name": "keyword.symbol.fsharp",
1511 "match": "(\\(|\\))"
1512 },
1513 {
1514 "match": "(\\?{0,1})([[:alpha:]0-9'`^._]+|``[[:alpha:]0-9'`^:,._ ]+``)\\s*(:{0,1})(\\s*([?[:alpha:]0-9'`<>._ ]+)){0,1}",
1515 "captures": {
1516 "1": {
1517 "name": "keyword.symbol.fsharp"
1518 },
1519 "2": {
1520 "name": "variable.parameter.fsharp"
1521 },
1522 "3": {
1523 "name": "keyword.symbol.fsharp"
1524 },
1525 "4": {
1526 "name": "entity.name.type.fsharp"
1527 }
1528 }
1529 },
1530 {
1531 "include": "#keywords"
1532 }
1533 ]
1534 },
1535 "double_tick": {
1536 "patterns": [
1537 {
1538 "name": "variable.other.binding.fsharp",
1539 "match": "(``)([^`]*)(``)",
1540 "captures": {
1541 "1": {
1542 "name": "string.quoted.single.fsharp"
1543 },
1544 "2": {
1545 "name": "variable.other.binding.fsharp"
1546 },
1547 "3": {
1548 "name": "string.quoted.single.fsharp"
1549 }
1550 }
1551 }
1552 ]
1553 },
1554 "records": {
1555 "patterns": [
1556 {
1557 "name": "record.fsharp",
1558 "begin": "\\b(type)[\\s]+(private|internal|public)?\\s*",
1559 "end": "\\s*((with)|((as)\\s+([[:alpha:]0-9']+))|(=)|[\\n=]|(\\(\\)))",
1560 "beginCaptures": {
1561 "1": {
1562 "name": "keyword.fsharp"
1563 },
1564 "2": {
1565 "name": "storage.modifier.fsharp"
1566 }
1567 },
1568 "endCaptures": {
1569 "2": {
1570 "name": "keyword.fsharp"
1571 },
1572 "3": {
1573 "name": "keyword.fsharp"
1574 },
1575 "4": {
1576 "name": "keyword.fsharp"
1577 },
1578 "5": {
1579 "name": "variable.parameter.fsharp"
1580 },
1581 "6": {
1582 "name": "keyword.symbol.fsharp"
1583 },
1584 "7": {
1585 "name": "constant.language.unit.fsharp"
1586 }
1587 },
1588 "patterns": [
1589 {
1590 "include": "#comments"
1591 },
1592 {
1593 "include": "#attributes"
1594 },
1595 {
1596 "match": "([[:alpha:]0-9'^._]+|``[[:alpha:]0-9'`^:,._ ]+``)",
1597 "captures": {
1598 "1": {
1599 "name": "entity.name.type.fsharp"
1600 }
1601 }
1602 },
1603 {
1604 "begin": "(<)",
1605 "end": "((?<!:)>)",
1606 "beginCaptures": {
1607 "1": {
1608 "name": "keyword.fsharp"
1609 }
1610 },
1611 "endCaptures": {
1612 "1": {
1613 "name": "keyword.fsharp"
1614 }
1615 },
1616 "patterns": [
1617 {
1618 "match": "(('|\\^)``[[:alpha:]0-9`^:,._ ]+``|('|\\^)[[:alpha:]0-9`^:._]+)",
1619 "captures": {
1620 "1": {
1621 "name": "entity.name.type.fsharp"
1622 }
1623 }
1624 },
1625 {
1626 "name": "keyword.fsharp",
1627 "match": "\\b(interface|with|abstract|and|when|or|not|struct|equality|comparison|unmanaged|delegate|enum)\\b"
1628 },
1629 {
1630 "begin": "(\\()",
1631 "end": "(\\))",
1632 "beginCaptures": {
1633 "1": {
1634 "name": "keyword.symbol.fsharp"
1635 }
1636 },
1637 "endCaptures": {
1638 "1": {
1639 "name": "keyword.symbol.fsharp"
1640 }
1641 },
1642 "patterns": [
1643 {
1644 "match": "(static member|member|new)",
1645 "captures": {
1646 "1": {
1647 "name": "keyword.fsharp"
1648 }
1649 }
1650 },
1651 {
1652 "include": "#common_binding_definition"
1653 }
1654 ]
1655 },
1656 {
1657 "match": "([\\w0-9'`^._]+)",
1658 "comments": "Here we need the \\w modifier in order to check that the words isn't blacklisted",
1659 "captures": {
1660 "1": {
1661 "name": "entity.name.type.fsharp"
1662 }
1663 }
1664 },
1665 {
1666 "include": "#keywords"
1667 }
1668 ]
1669 },
1670 {
1671 "match": "\\s*(private|internal|public)",
1672 "captures": {
1673 "1": {
1674 "name": "keyword.symbol.fsharp"
1675 },
1676 "2": {
1677 "name": "storage.modifier.fsharp"
1678 }
1679 }
1680 },
1681 {
1682 "begin": "(\\()",
1683 "end": "\\s*(?=(=)|[\\n=]|(\\(\\))|(as))",
1684 "beginCaptures": {
1685 "1": {
1686 "name": "keyword.symbol.fsharp"
1687 }
1688 },
1689 "endCaptures": {
1690 "1": {
1691 "name": "keyword.symbol.fsharp"
1692 }
1693 },
1694 "patterns": [
1695 {
1696 "include": "#member_declaration"
1697 }
1698 ]
1699 },
1700 {
1701 "include": "#keywords"
1702 }
1703 ]
1704 }
1705 ]
1706 },
1707 "record_declaration": {
1708 "patterns": [
1709 {
1710 "begin": "(\\{)",
1711 "beginCaptures": {
1712 "1": {
1713 "name": "keyword.symbol.fsharp"
1714 }
1715 },
1716 "end": "(?<=\\})",
1717 "patterns": [
1718 {
1719 "include": "#comments"
1720 },
1721 {
1722 "begin": "(((mutable)\\s[[:alpha:]]+)|[[:alpha:]0-9'`<>^._]*)\\s*((?<!:):(?!:))\\s*",
1723 "beginCaptures": {
1724 "3": {
1725 "name": "keyword.fsharp"
1726 },
1727 "4": {
1728 "name": "keyword.symbol.fsharp"
1729 }
1730 },
1731 "end": "$|(;|\\})",
1732 "endCaptures": {
1733 "1": {
1734 "name": "keyword.symbol.fsharp"
1735 }
1736 },
1737 "patterns": [
1738 {
1739 "include": "#comments"
1740 },
1741 {
1742 "match": "([[:alpha:]0-9'`^_ ]+)",
1743 "captures": {
1744 "1": {
1745 "name": "entity.name.type.fsharp"
1746 }
1747 }
1748 },
1749 {
1750 "include": "#keywords"
1751 }
1752 ]
1753 },
1754 {
1755 "include": "#compiler_directives"
1756 },
1757 {
1758 "include": "#constants"
1759 },
1760 {
1761 "include": "#strings"
1762 },
1763 {
1764 "include": "#chars"
1765 },
1766 {
1767 "include": "#double_tick"
1768 },
1769 {
1770 "include": "#definition"
1771 },
1772 {
1773 "include": "#attributes"
1774 },
1775 {
1776 "include": "#anonymous_functions"
1777 },
1778 {
1779 "include": "#keywords"
1780 },
1781 {
1782 "include": "#cexprs"
1783 },
1784 {
1785 "include": "#text"
1786 }
1787 ]
1788 }
1789 ]
1790 },
1791 "cexprs": {
1792 "patterns": [
1793 {
1794 "name": "cexpr.fsharp",
1795 "match": "\\b(async|seq|promise|task|maybe|asyncMaybe|controller|scope|application|pipeline)\\s*\\{",
1796 "captures": {
1797 "0": {
1798 "name": "keyword.fsharp"
1799 }
1800 }
1801 }
1802 ]
1803 },
1804 "chars": {
1805 "patterns": [
1806 {
1807 "name": "char.fsharp",
1808 "match": "('\\\\?.')",
1809 "captures": {
1810 "1": {
1811 "name": "string.quoted.single.fsharp"
1812 }
1813 }
1814 }
1815 ]
1816 },
1817 "text": {
1818 "patterns": [
1819 {
1820 "name": "text.fsharp",
1821 "match": "\\\\"
1822 }
1823 ]
1824 },
1825 "compiler_directives": {
1826 "patterns": [
1827 {
1828 "name": "keyword.control.directive.fsharp",
1829 "match": "\\s?(#if|#elif|#elseif|#else|#endif|#light|#nowarn)",
1830 "captures": {}
1831 }
1832 ]
1833 }
1834 }
1835 }
1836