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