{ "name": "F*", "scopeName": "source.fstar", "patterns": [ { "include": "#comments" }, { "include": "#modules" }, { "include": "#options" }, { "include": "#expr" } ], "repository": { "commentblock": { "patterns": [ { "name": "comment.block.fstar", "begin": "\\(\\*", "end": "\\*\\)", "patterns": [ { "include": "#commentblock" } ], "beginCaptures": { "0": { "name": "punctuation.definition.comment.begin.fstar" } }, "endCaptures": { "0": { "name": "punctuation.definition.comment.end.fstar" } } } ] }, "comments": { "patterns": [ { "name": "comment.line.fstar", "match": "//.*" }, { "include": "#commentblock" } ] }, "expr": { "patterns": [ { "include": "#comments" }, { "name": "variable.other.generic-type.fstar", "match": "'[a-zA-Z0-9_]+\\b" }, { "include": "#strings" }, { "name": "support.class.base.fstar", "match": "\\b(int|nat|pos|bool|unit|string|Type|Type0|eqtype)\\b" }, { "name": "support.class.base.fstar", "match": "(/\\\\|\\\\/|\u003c:|\u003c@|[(][|]|[|][)]|u#|~\u003e|-\u003e|\u003c--|\u003c-|\u003c==\u003e|==\u003e|[?][.]|[.]\\[|[.]\\(|[{][:]pattern|::|:=|;;|[!][{]|\\[[|]|[|]\u003e|[|]\\]|[~+^\u0026?$|#,.:;=\\[\\](){}-])" }, { "name": "constant.language.monad.fstar", "match": "\\b(Pure|PURE|Tot|STATE|ST|St|Stack|StackInline|HST|ALL|All|EXN|Exn|Ex|DIV|Div|GHOST|Ghost|GTot|Lemma)\\b" }, { "name": "constant.language.fstar", "match": "\\b(_|[(]\\s*[)]|\\[\\s*\\])\\b" }, { "name": "keyword.other.fstar", "match": "\\b(let|in|type|kind|val|rec|and|if|then|else|assume|admit|assert|assert_norm|squash|failwith|SMTPat|SMTPatOr|hasEq|fun|function|forall|exists|exception|by|new_effect|reify|try|synth|with|when)\\b" }, { "name": "storage.modifier.fstar", "match": "\\b(abstract|attributes|noeq|unopteq|inline|inline_for_extraction|irreducible|logic|mutable|new|noextract|private|reifiable|reflectable|total|unfold|unfoldable)\\b" }, { "name": "constant.language.boolean.fstar", "match": "\\b([tT]rue|[fF]alse)\\b" }, { "name": "constant.numeric.hex.js", "match": "\\b0[xX][0-9a-fA-F]+[uU]?[zyslL]?\\b" }, { "name": "constant.numeric.decimal.js", "match": "\\b[0-9]+[uU]?[zyslL]?\\b" }, { "match": "(?x)\n(?:\n (?:\\b[0-9]+(\\.)[0-9]+[eE][+-]?[0-9]+\\b)| # 1.1E+3\n (?:\\b[0-9]+(\\.)[eE][+-]?[0-9]+\\b)| # 1.E+3\n (?:\\B(\\.)[0-9]+[eE][+-]?[0-9]+\\b)| # .1E+3\n (?:\\b[0-9]+[eE][+-]?[0-9]+\\b)| # 1E+3\n (?:\\b[0-9]+(\\.)[0-9]+\\b)| # 1.1\n (?:\\b[0-9]+(\\.)\\B)| # 1.\n (?:\\B(\\.)[0-9]+\\b)| # .1\n (?:\\b[0-9]+\\b(?!\\.)) # 1\n)[L]?[fF]?", "captures": { "0": { "name": "constant.numeric.decimal.fstar" }, "1": { "name": "meta.delimiter.decimal.period.fstar" }, "2": { "name": "meta.delimiter.decimal.period.fstar" }, "3": { "name": "meta.delimiter.decimal.period.fstar" }, "4": { "name": "meta.delimiter.decimal.period.fstar" }, "5": { "name": "meta.delimiter.decimal.period.fstar" }, "6": { "name": "meta.delimiter.decimal.period.fstar" } } }, { "begin": "([(])\\s*(requires|ensures|decreases)?", "end": "([)])", "patterns": [ { "include": "#expr" } ], "beginCaptures": { "1": { "name": "punctuation.definition.scope.begin.bracket.round.fstar" }, "2": { "name": "keyword.other.fstar" } }, "endCaptures": { "1": { "name": "punctuation.definition.scope.end.bracket.round.fstar" } } }, { "begin": "([(])", "end": "([)])", "patterns": [ { "include": "#expr" } ], "beginCaptures": { "1": { "name": "punctuation.definition.clause.begin.bracket.round.fstar" } }, "endCaptures": { "1": { "name": "punctuation.definition.clause.end.bracket.round.fstar" } } }, { "begin": "([%]\\[)", "end": "(\\])", "patterns": [ { "include": "#expr" } ], "beginCaptures": { "1": { "name": "constant.language.termorder.begin.fstar" } }, "endCaptures": { "1": { "name": "constant.language.termorder.end.fstar" } } }, { "begin": "(\\[[@])", "end": "(\\])", "patterns": [ { "include": "#expr" } ], "beginCaptures": { "1": { "name": "storage.modifier.attributes.begin.fstar" } }, "endCaptures": { "1": { "name": "storage.modifier.attributes.end.fstar" } } }, { "begin": "\\b(match)\\b", "end": "\\b(with)\\b", "patterns": [ { "include": "#expr" } ], "beginCaptures": { "1": { "name": "keyword.control.match.fstar" } }, "endCaptures": { "1": { "name": "keyword.control.with.fstar" } } }, { "begin": "\\b(begin)\\b", "end": "\\b(end)\\b", "patterns": [ { "include": "#expr" } ], "beginCaptures": { "1": { "name": "keyword.control.begin.fstar" } }, "endCaptures": { "1": { "name": "keyword.control.end.fstar" } } }, { "match": "\\b([\\p{Lu}\\p{Lt}][\\p{Lu}\\p{Lt}\\p{Ll}\\p{Lo}\\p{Lm}\\d'_]*)\\b(?!\\s*[.])", "captures": { "1": { "name": "support.function.constructor.fstar" } } }, { "match": "\\b((?:[\\p{Lu}\\p{Lt}][\\p{Lu}\\p{Lt}\\p{Ll}\\p{Lo}\\p{Lm}\\d'_]*[.])+)", "captures": { "1": { "name": "variable.other.module.fstar" } } }, { "match": "\\b([\\p{Ll}_][\\p{Lu}\\p{Lt}\\p{Ll}\\p{Lo}\\p{Lm}\\d'_]*)", "captures": { "1": { "name": "entity.name.function.fstar" } } } ] }, "modules": { "patterns": [ { "begin": "\\b(module)\\s+([\\p{Lu}\\p{Lt}][\\p{Lu}\\p{Lt}\\p{Ll}\\p{Lo}\\p{Lm}\\d'_]*)\\s*(=)", "end": "\\b((?\u003cname\u003e[\\p{Lu}\\p{Lt}][\\p{Lu}\\p{Lt}\\p{Ll}\\p{Lo}\\p{Lm}\\d'_]*)(?:[.]\\g\u003cname\u003e)*)\\b", "beginCaptures": { "1": { "name": "keyword.control.module.fstar" }, "2": { "name": "variable.other.module-alias.fstar" }, "3": { "name": "keyword.operator.assignment.fstar" } }, "endCaptures": { "1": { "name": "variable.other.module.fstar" } } }, { "begin": "\\b(module|open|include)\\b", "end": "\\b((?\u003cname\u003e[\\p{Lu}\\p{Lt}][\\p{Lu}\\p{Lt}\\p{Ll}\\p{Lo}\\p{Lm}\\d'_]*)(?:[.]\\g\u003cname\u003e)*)\\b", "beginCaptures": { "1": { "name": "keyword.control.module.fstar" } }, "endCaptures": { "1": { "name": "variable.other.module.fstar" } } } ] }, "op_names": { "patterns": [ { "name": "entity.name.tag.fstar", "match": "\\bop(?:_(?:Multiply|Star|Slash|Percent|Plus|Substraction|Equals|Less|Greater|Bang|Dollar|Amp|Dot|Hat|Colon|Pipe|Question))+\\b" } ] }, "options": { "patterns": [ { "match": "(#(?:re)?set-options)\\s*([\"])((?:[^\"]|\\\\\")*)([\"])", "captures": { "1": { "name": "keyword.control.setoption.fstar" }, "2": { "name": "punctuation.definition.options.begin.fstar" }, "3": { "name": "string.quoted.double.fstar" }, "4": { "name": "punctuation.definition.options.end.fstar" } } } ] }, "string_escapes": { "patterns": [ { "name": "invalid.illegal.unicode-escape.fstar", "match": "\\\\u(?![A-Fa-f0-9]{4}|{[A-Fa-f0-9]+})[^'\"]*" }, { "name": "constant.character.escape.js", "match": "\\\\u(?:[A-Fa-f0-9]{4}|({)([A-Fa-f0-9]+)(}))", "captures": { "1": { "name": "punctuation.definition.unicode-escape.begin.bracket.curly.fstar" }, "2": { "patterns": [ { "name": "invalid.illegal.unicode-escape.fstar", "match": "[A-Fa-f\\d]{7,}|(?!10)[A-Fa-f\\d]{6}" } ] }, "3": { "name": "punctuation.definition.unicode-escape.end.bracket.curly.fstar" } } }, { "name": "constant.character.escape.fstar", "match": "\\\\(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)" } ] }, "strings": { "patterns": [ { "name": "string.quoted.double.fstar", "begin": "\"", "end": "\"", "patterns": [ { "include": "#string_escapes" } ], "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.fstar" } }, "endCaptures": { "0": { "name": "punctuation.definition.string.end.fstar" } } }, { "name": "string.quoted.single.fstar", "begin": "'", "end": "'", "patterns": [ { "include": "#string_escapes" }, { "name": "invalid.illegal.string.js", "match": ".{2,}" } ], "beginCaptures": { "0": { "name": "punctuation.definition.char.begin.fstar" } }, "endCaptures": { "0": { "name": "punctuation.definition.char.end.fstar" } } }, { "name": "string.quoted.template.fstar", "begin": "`", "end": "`", "patterns": [ { "include": "#op_names" } ], "beginCaptures": { "0": { "name": "punctuation.definition.operator.begin.fstar" } }, "endCaptures": { "0": { "name": "punctuation.definition.operator.end.fstar" } } } ] } } }