Update grammars

This commit is contained in:
Alex Ross
2018-10-23 16:13:27 +02:00
parent 83baef51fd
commit fd8d4b09e1
14 changed files with 750 additions and 259 deletions

View File

@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
"version": "https://github.com/ionide/ionide-fsgrammar/commit/eb210da2bfea65a7dff46d22c97a0e9e410a9469",
"version": "https://github.com/ionide/ionide-fsgrammar/commit/a20d836fa67d6daf81fd63e8baa97aa5e1516006",
"name": "fsharp",
"scopeName": "source.fsharp",
"patterns": [
@@ -48,10 +48,13 @@
"include": "#record_declaration"
},
{
"include": "#keywords"
"include": "#records"
},
{
"include": "#records"
"include": "#strp_inlined"
},
{
"include": "#keywords"
},
{
"include": "#cexprs"
@@ -61,10 +64,173 @@
}
],
"repository": {
"strp_inlined_body": {
"patterns": [
{
"include": "#comments"
},
{
"include": "#anonymous_functions"
},
{
"match": "(\\^[[:alpha:]0-9'._]+)",
"captures": {
"1": {
"name": "entity.name.type.fsharp"
}
}
},
{
"name": "keyword.fsharp",
"match": "\\b(and|when|or)\\b"
},
{
"begin": "(\\()",
"beginCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"end": "(\\))",
"endCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"patterns": [
{
"include": "#strp_inlined_body"
}
]
},
{
"match": "(static member|member)\\s*([[:alpha:]0-9'`<>^._]+|``[[:alpha:]0-9' <>^._]+``)\\s*(:)",
"captures": {
"1": {
"name": "keyword.fsharp"
},
"2": {
"name": "variable.fsharp"
},
"3": {
"name": "keyword.symbol.fsharp"
}
}
},
{
"include": "#constants"
},
{
"include": "#strings"
},
{
"include": "#chars"
},
{
"include": "#double_tick"
},
{
"include": "#keywords"
},
{
"include": "#text"
}
]
},
"strp_inlined": {
"patterns": [
{
"begin": "(\\()",
"beginCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"end": "(\\))",
"endCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"patterns": [
{
"include": "#strp_inlined_body"
}
]
}
]
},
"generic_declaration": {
"patterns": [
{
"match": "([^<>,*()-])",
"comments": "SRTP syntax support",
"begin": "(:)\\s*(\\()\\s*(static member|member)",
"beginCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "keyword.symbol.fsharp"
},
"3": {
"name": "keyword.fsharp"
}
},
"end": "(\\))",
"endCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"patterns": [
{
"begin": "(\\()",
"beginCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"end": "(\\))",
"endCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"patterns": [
{
"include": "#member_declaration"
}
]
},
{
"match": "(('|\\^)[[:alpha:]0-9'._]+)",
"captures": {
"1": {
"name": "entity.name.type.fsharp"
}
}
},
{
"include": "#variables"
},
{
"include": "#keywords"
}
]
},
{
"name": "keyword.fsharp",
"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|property|union|enum|member|try|finally|and|when|use|use\\!|struct|while|mutable)(?!')\\b"
},
{
"name": "keyword.fsharp",
"match": ":"
},
{
"include": "#constants"
},
{
"match": "(('|\\^)[[:alpha:]0-9'._]+)",
"captures": {
"1": {
"name": "entity.name.type.fsharp"
@@ -86,7 +252,7 @@
},
"patterns": [
{
"match": "([^<>,*()-])",
"match": "(('|\\^)[[:alpha:]0-9'._]+)",
"captures": {
"1": {
"name": "entity.name.type.fsharp"
@@ -101,6 +267,15 @@
}
]
},
{
"match": "(?!when|and|or\\b)\\b([\\w0-9'`^._]+)",
"comments": "Here we need the \\w modifier in order to check that the words isn't blacklisted",
"captures": {
"1": {
"name": "entity.name.type.fsharp"
}
}
},
{
"include": "#keywords"
}
@@ -217,18 +392,23 @@
"include": "#comments"
},
{
"include": "#member_declaration"
},
{
"match": "(:)(\\s*([?[:alpha:]0-9'`<>^._ ]+))*",
"captures": {
"begin": "(\\()",
"end": "\\s*(?=(->))",
"beginCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "entity.name.type.fsharp"
}
}
},
"endCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"patterns": [
{
"include": "#member_declaration"
}
]
},
{
"include": "#variables"
@@ -364,15 +544,18 @@
"include": "#common_declaration"
},
{
"match": "\\?{0,1}([[:alpha:]0-9'`^._ ]+)\\s*(:)(\\s*([?[:alpha:]0-9'`^._ ]+)){0,1}",
"match": "(\\?{0,1})([[:alpha:]0-9'`^._ ]+)\\s*(:)(\\s*([[:alpha:]0-9'`^._ ]+)){0,1}",
"captures": {
"1": {
"name": "variable.parameter.fsharp"
},
"2": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "variable.parameter.fsharp"
},
"3": {
"name": "keyword.symbol.fsharp"
},
"4": {
"name": "entity.name.type.fsharp"
}
}
@@ -391,11 +574,232 @@
}
]
},
"common_binding_definition": {
"patterns": [
{
"include": "#comments"
},
{
"include": "#attributes"
},
{
"comments": "SRTP syntax support",
"begin": "(:)\\s*(\\()\\s*(static member|member)",
"beginCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "keyword.symbol.fsharp"
},
"3": {
"name": "keyword.fsharp"
}
},
"end": "(\\))\\s*((?=,)|(?=\\=))",
"endCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"patterns": [
{
"match": "(\\^[[:alpha:]0-9'._]+)",
"captures": {
"1": {
"name": "entity.name.type.fsharp"
}
}
},
{
"include": "#variables"
},
{
"include": "#keywords"
}
]
},
{
"begin": "(:)\\s*(\\()",
"beginCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "keyword.symbol.fsharp"
}
},
"end": "(\\)\\s*(([?[:alpha:]0-9'`^._ ]*)))",
"endCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "entity.name.type.fsharp"
}
},
"patterns": [
{
"include": "#tuple_signature"
}
]
},
{
"begin": "(:)\\s*(\\^[[:alpha:]0-9'._]+)\\s*(when)",
"beginCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "entity.name.type.fsharp"
},
"3": {
"name": "keyword.fsharp"
}
},
"end": "(?=:)",
"endCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"patterns": [
{
"name": "keyword.fsharp",
"match": "\\b(and|when|or)\\b"
},
{
"comment": "Because we first capture the keywords, we can capture what looks like a word and assume it's an entity definition",
"match": "([[:alpha:]0-9'^._]+)",
"captures": {
"1": {
"name": "entity.name.type.fsharp"
}
}
},
{
"name": "keyword.symbol.fsharp",
"match": "(\\(|\\))"
}
]
},
{
"match": "(:)\\s*([?[:alpha:]0-9'`^._ ]+)",
"captures": {
"1": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "entity.name.type.fsharp"
}
}
},
{
"match": "(->)\\s*(\\()?\\s*([?[:alpha:]0-9'`^._ ]+)*",
"captures": {
"1": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "keyword.symbol.fsharp"
},
"3": {
"name": "entity.name.type.fsharp"
}
}
},
{
"begin": "(\\*)\\s*(\\()",
"beginCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "keyword.symbol.fsharp"
}
},
"end": "(\\)\\s*(([?[:alpha:]0-9'`^._ ]+))+)",
"endCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "entity.name.type.fsharp"
}
},
"patterns": [
{
"include": "#tuple_signature"
}
]
},
{
"match": "(\\*)(\\s*([?[:alpha:]0-9'`^._ ]+))*",
"captures": {
"1": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "entity.name.type.fsharp"
}
}
},
{
"begin": "(<(?![[:space:]]*\\)))",
"beginComment": "The group (?![[:space:]]*\\) is for protection against overload operator. static member (<)",
"end": "((?<!:)>)",
"endComment": "The group (?<!:) prevent us from stopping on :> when using SRTP synthax",
"beginCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"endCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"patterns": [
{
"include": "#generic_declaration"
}
]
},
{
"begin": "({)",
"end": "(})",
"beginCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"endCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"patterns": [
{
"include": "#record_signature"
}
]
},
{
"include": "#definition"
},
{
"include": "#variables"
},
{
"include": "#keywords"
}
]
},
"definition": {
"patterns": [
{
"name": "binding.fsharp",
"begin": "\\b(val mutable|val|let mutable|let inline|let|member val|member|static member|override|let!)(\\s+rec|mutable)?(\\s+\\[\\<.*\\>\\])?\\s*(private|internal|public)?\\s+(\\[[^-=]*\\]|[_[:alpha:]]([_[:alpha:]0-9,\\._]+)*|``[_[:alpha:]]([_[:alpha:]0-9,\\._`\\s]+|(?<=,)\\s)*)?",
"begin": "\\b(let mutable|let inline|let|member val|static member inline|static member|member|override|let!)(\\s+rec|mutable)?(\\s+\\[\\<.*\\>\\])?\\s*(private|internal|public)?\\s+(\\[[^-=]*\\]|[_[:alpha:]]([_[:alpha:]0-9,\\._]+)*|``[_[:alpha:]]([_[:alpha:]0-9,\\._`\\s]+|(?<=,)\\s)*)?",
"end": "\\s*(with\\b|=|\\n+=|(?<=\\=))",
"beginCaptures": {
"1": {
@@ -421,140 +825,34 @@
},
"patterns": [
{
"include": "#comments"
"include": "#common_binding_definition"
}
]
},
{
"name": "binding.fsharp",
"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)*)?",
"end": "\\n$",
"beginCaptures": {
"1": {
"name": "keyword.fsharp"
},
{
"include": "#attributes"
"2": {
"name": "keyword.fsharp"
},
{
"begin": "(:)\\s*(\\()",
"beginCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "keyword.symbol.fsharp"
}
},
"end": "(\\)\\s*(([?[:alpha:]0-9'`^._ ]+))+)",
"endCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "entity.name.type.fsharp"
}
},
"patterns": [
{
"include": "#tuple_signature"
}
]
"3": {
"name": "support.function.attribute.fsharp"
},
{
"match": "(:)\\s*([?[:alpha:]0-9'`^._ ]+)*",
"captures": {
"1": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "entity.name.type.fsharp"
}
}
"4": {
"name": "keyword.fsharp"
},
"5": {
"name": "variable.fsharp"
}
},
"patterns": [
{
"match": "(->)\\s*(\\()?\\s*([?[:alpha:]0-9'`^._ ]+)*",
"captures": {
"1": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "keyword.symbol.fsharp"
},
"3": {
"name": "entity.name.type.fsharp"
}
}
},
{
"begin": "(\\*)\\s*(\\()",
"beginCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "keyword.symbol.fsharp"
}
},
"end": "(\\)\\s*(([?[:alpha:]0-9'`^._ ]+))+)",
"endCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "entity.name.type.fsharp"
}
},
"patterns": [
{
"include": "#tuple_signature"
}
]
},
{
"match": "(\\*)(\\s*([?[:alpha:]0-9'`^._ ]+))*",
"captures": {
"1": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "entity.name.type.fsharp"
}
}
},
{
"begin": "(<(?![[:space:]]*\\)))",
"end": "(>)",
"beginCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"endCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"patterns": [
{
"include": "#generic_declaration"
}
]
},
{
"begin": "({)",
"end": "(})",
"beginCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"endCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"patterns": [
{
"include": "#record_signature"
}
]
},
{
"include": "#variables"
},
{
"include": "#keywords"
"include": "#common_binding_definition"
}
]
}
@@ -613,7 +911,7 @@
"patterns": [
{
"name": "keyword.fsharp",
"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|property|union|enum|member|try|finally|and|when|use|use\\!|struct|while|mutable)(?!')\\b"
"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|property|union|enum|member|try|finally|and|when|or|use|use\\!|struct|while|mutable)(?!')\\b"
},
{
"name": "keyword.symbol.fsharp",
@@ -817,8 +1115,15 @@
"match": "\\(\\)"
},
{
"name": "variable.parameter.fsharp",
"match": "``[[:alpha:]0-9'`^:,._ ]+``|[[:alpha:]0-9'`<>^._ ]\\w*"
"match": "(\\?{0,1})(``[[:alpha:]0-9'`^:,._ ]+``|[[:alpha:]0-9'`<>^._ ]\\w*)",
"captures": {
"1": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "variable.parameter.fsharp"
}
}
}
]
},
@@ -869,19 +1174,22 @@
}
},
{
"begin": "\\?{0,1}([[:alpha:]0-9'`^._ ]+)\\s*(:)(\\s*([?[:alpha:]0-9'`^._ ]+)(<))",
"begin": "(\\?{0,1})([[:alpha:]0-9'`^._ ]+)\\s*(:)(\\s*([?[:alpha:]0-9'`^._ ]+)(<))",
"end": "(>)",
"beginCaptures": {
"1": {
"name": "variable.parameter.fsharp"
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "keyword.symbol.fsharp"
"name": "variable.parameter.fsharp"
},
"3": {
"name": "keyword.symbol.fsharp"
},
"4": {
"name": "keyword.symbol.fsharp"
},
"5": {
"name": "entity.name.type.fsharp"
}
},
@@ -909,13 +1217,26 @@
"member_declaration": {
"patterns": [
{
"begin": "(\\()",
"end": "(\\))",
"include": "#comments"
},
{
"include": "#common_declaration"
},
{
"comments": "SRTP syntax support",
"begin": "(:)\\s*(\\()\\s*(static member|member)",
"beginCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "keyword.symbol.fsharp"
},
"3": {
"name": "keyword.fsharp"
}
},
"end": "(\\))\\s*((?=,)|(?=\\=))",
"endCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
@@ -923,29 +1244,75 @@
},
"patterns": [
{
"include": "#comments"
"begin": "(\\()",
"beginCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"end": "(\\))",
"endCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"patterns": [
{
"include": "#member_declaration"
}
]
},
{
"include": "#common_declaration"
},
{
"match": "\\?{0,1}([[:alpha:]0-9'`^._ ]+)\\s*(:{0,1})(\\s*([?[:alpha:]0-9'`<>^._ ]+)){0,1}",
"match": "(\\^[[:alpha:]0-9'._]+)",
"captures": {
"1": {
"name": "variable.parameter.fsharp"
},
"2": {
"name": "keyword.symbol.fsharp"
},
"3": {
"name": "entity.name.type.fsharp"
}
}
},
{
"include": "#variables"
},
{
"include": "#keywords"
}
]
},
{
"match": "(\\^[[:alpha:]0-9'._]+)",
"captures": {
"1": {
"name": "entity.name.type.fsharp"
}
}
},
{
"name": "keyword.fsharp",
"match": "\\b(and|when|or)\\b"
},
{
"name": "keyword.symbol.fsharp",
"match": "(\\(|\\))"
},
{
"match": "(\\?{0,1})([[:alpha:]0-9'`^._]+|``[[:alpha:]0-9'`^:,._ ]+``)\\s*(:{0,1})(\\s*([?[:alpha:]0-9'`<>._ ]+)){0,1}",
"captures": {
"1": {
"name": "keyword.symbol.fsharp"
},
"2": {
"name": "variable.parameter.fsharp"
},
"3": {
"name": "keyword.symbol.fsharp"
},
"4": {
"name": "entity.name.type.fsharp"
}
}
},
{
"include": "#keywords"
}
]
},
@@ -973,16 +1340,13 @@
{
"name": "record.fsharp",
"begin": "\\b(type)[\\s]+(private|internal|public)?\\s*",
"end": "\\s*((with)|((as)\\s*([[:alpha:]0-9']+))|(=)|[\\n=]|(\\(\\)))",
"end": "\\s*((with)|((as)\\s+([[:alpha:]0-9']+))|(=)|[\\n=]|(\\(\\)))",
"beginCaptures": {
"1": {
"name": "keyword.fsharp"
},
"2": {
"name": "keyword.fsharp"
},
"3": {
"name": "support.function.attribute.fsharp"
}
},
"endCaptures": {
@@ -1013,18 +1377,82 @@
"include": "#attributes"
},
{
"match": "([[:alpha:]0-9'`^:,._]+|``[[:alpha:]0-9'`^:,._ ]+``)(<)",
"match": "([[:alpha:]0-9'^._]+|``[[:alpha:]0-9'`^:,._ ]+``)",
"captures": {
"1": {
"name": "entity.name.type.fsharp"
},
"2": {
"name": "keyword.symbol.fsharp"
}
}
},
{
"match": "\\s*(>)\\s*(private|internal|public)?",
"begin": "(<)",
"end": "((?<!:)>)",
"beginCaptures": {
"1": {
"name": "keyword.fsharp"
}
},
"endCaptures": {
"1": {
"name": "keyword.fsharp"
}
},
"patterns": [
{
"match": "(('|\\^)``[[:alpha:]0-9`^:,._ ]+``|('|\\^)[[:alpha:]0-9`^:._]+)",
"captures": {
"1": {
"name": "entity.name.type.fsharp"
}
}
},
{
"name": "keyword.fsharp",
"match": "\\b(interface|with|abstract|and|when|or|not|struct|equality|comparison|unmanaged|delegate|enum)\\b"
},
{
"begin": "(\\()",
"end": "(\\))",
"beginCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"endCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"patterns": [
{
"match": "(static member|member|new)",
"captures": {
"1": {
"name": "keyword.fsharp"
}
}
},
{
"include": "#common_binding_definition"
}
]
},
{
"match": "([\\w0-9'`^._]+)",
"comments": "Here we need the \\w modifier in order to check that the words isn't blacklisted",
"captures": {
"1": {
"name": "entity.name.type.fsharp"
}
}
},
{
"include": "#keywords"
}
]
},
{
"match": "\\s*(private|internal|public)",
"captures": {
"1": {
"name": "keyword.symbol.fsharp"
@@ -1035,15 +1463,23 @@
}
},
{
"match": "([[:alpha:]0-9'`^._ ]+)",
"captures": {
"begin": "(\\()",
"end": "\\s*(?=(=)|[\\n=]|(\\(\\))|(as))",
"beginCaptures": {
"1": {
"name": "entity.name.type.fsharp"
"name": "keyword.symbol.fsharp"
}
}
},
{
"include": "#member_declaration"
},
"endCaptures": {
"1": {
"name": "keyword.symbol.fsharp"
}
},
"patterns": [
{
"include": "#member_declaration"
}
]
},
{
"include": "#keywords"
@@ -1099,9 +1535,6 @@
}
]
},
{
"include": "#chars"
},
{
"include": "#compiler_directives"
},