{ "name": "ATS", "scopeName": "source.ats", "patterns": [ { "include": "#quantifier_curly" }, { "include": "#quantifier_square" }, { "include": "#block" }, { "include": "#comment_rest" }, { "include": "#comment_line" }, { "include": "#comment_block_c" }, { "include": "#comment_block_sml" }, { "include": "#embed" }, { "include": "#operators" }, { "include": "#quantifier_arrow" }, { "include": "#definition_function" }, { "include": "#definition_type" }, { "include": "#keywords" }, { "include": "#keywords_types" }, { "include": "#false_true" }, { "include": "#string" }, { "include": "#char" }, { "include": "#records" }, { "include": "#tuples" }, { "include": "#number" }, { "include": "#identifier" } ], "repository": { "block": { "name": "meta.block", "begin": "(?\u003c=where|=|^|then|else|\\$rec|\\$rec_t|\\$rec_vt)(?:\\s*)\\{", "end": "\\}", "patterns": [ { "include": "$self" } ], "applyEndPatternLast": true }, "char": { "name": "string.quoted.double", "match": "(')([^\\\\]{0,1}|\\\\(\\\\|[abefpnrtv'\"?]|[0-3]\\d{0,2}|[4-7]\\d?|x[a-fA-F0-9]{0,2}|u[a-fA-F0-9]{0,4}|U[a-fA-F0-9]{0,8}))(')" }, "comment_block_c": { "name": "comment.block", "begin": "/\\*", "end": "\\*/", "applyEndPatternLast": true }, "comment_block_sml": { "name": "comment.block", "begin": "\\(\\*", "end": "\\*\\)", "patterns": [ { "include": "#comment_block_sml" } ], "applyEndPatternLast": true }, "comment_line": { "name": "comment.line.double-slash", "match": "//.*$" }, "comment_rest": { "name": "comment.block", "begin": "////", "end": ".\\z", "patterns": [ { "match": ".*" } ], "applyEndPatternLast": true }, "definition_function": { "name": "meta.function-definition", "begin": "\\b(?:castfn|fn|fun|implement|implmnt|infixl|infixr|infix|overload|postfix|praxi|prfn|prfun|primplement|primplmnt|var)\\b", "end": "\\b[a-zA-Z][a-zA-Z0-9_']*\\b", "patterns": [ { "include": "$self" } ], "beginCaptures": { "0": { "name": "keyword" } }, "endCaptures": { "0": { "name": "entity.name.function" } } }, "definition_type": { "name": "meta.type-definition", "begin": "\\b(abstype|abst@ype|abst0pe|absvtype|absvt@ype|absvt0pe|absviewtype|absviewt@ype|absviewt0pe|absview|absprop|datatype|datavtype|dataviewtype|dataview|dataprop|datasort|sortdef|propdef|viewdef|viewtypedef|vtypedef|stadef|stacst|typedef)\\b", "end": "\\b[a-zA-Z][a-zA-Z0-9_']*\\b", "patterns": [ { "include": "$self" } ], "beginCaptures": { "0": { "name": "keyword" } }, "endCaptures": { "0": { "name": "entity.name.type storage.type" } } }, "embed": { "name": "meta", "begin": "(%{)", "end": "(%})" }, "false_true": { "name": "constant.language.boolean", "match": "\\b(?:false|true)\\b" }, "identifier": { "name": "identifier", "match": "\\b[a-zA-Z][a-zA-Z0-9_']*\\b" }, "keywords": { "name": "keyword", "match": "(\\#|\\$)(\\w+)|\\b(castfn|and|andalso|assume|as|begin|break|case(\\+|-)?|class|continue|dynload|dyn|else|end|exception|extern|fix|fn|for|fun|if|implement|implmnt|primplement|primplmnt|infixl|infixr|infix|in|lam|let|llam|local|macdef|macrodef|method|modprop|modtype|module|nonfix|object|of|op|or|orelse|overload|par|postfix|praxi|prefix|prfn|prfun|prval|rec|scase|sif|stacst|staif|staload|stavar|sta|struct|symelim|symintr|then|try|union|val(\\+|-)?|var|when|where|while|withprop|withtype|withviewtype|withview|with)\\b" }, "keywords_types": { "name": "keyword", "match": "(\\#|\\$)(\\w+)|\\b(abstype|abst@ype|abst0pe|absvtype|absvt@ype|absvt0pe|absviewtype|absviewt@ype|absviewt0pe|absview|absprop|datatype|datavtype|dataviewtype|dataview|dataprop|datasort|sortdef|propdef|viewdef|viewtypedef|vtypedef|stadef|typedef)\\b" }, "number": { "name": "constant.numeric", "match": "\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\.?[0-9]*)|(\\.[0-9]+))((e|E)(\\+|~)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b" }, "operators": { "name": "keyword.operator", "match": "!=|!|%|\u0026\u0026|\u0026|\\*|\\+|-|--\u003e|-\u003e|/|:=|\u003c=|(?\u003c=\\s)\u003c|==\u003e|=\u003e|=|\u003e=|\u003e\u003e|\u003e|\\?|\\|\\||\\||~|\\[\\]" }, "quantifier_arrow": { "name": "support.type", "begin": "(?\u003c!\\s)\u003c", "end": "\u003e" }, "quantifier_curly": { "name": "support.type.quantifier.universal", "begin": "\\{(?=[\\S])", "end": "\\}" }, "quantifier_square": { "name": "support.type.quantifier.existential", "begin": "\\[(?=[\\S])", "end": "\\]" }, "records": { "begin": "('|@)({)", "end": "(})", "patterns": [ { "include": "$self" } ] }, "string": { "name": "string.quoted.double", "begin": "(\")", "end": "(\")", "patterns": [ { "include": "#string_escaped" } ] }, "string_escaped": { "name": "constant.character.escape", "match": "\\\\(\\\\|[abefnprtv'\"?]|[0-3]\\d{0,2}|[4-7]\\d?|x[a-fA-F0-9]{0,2}|u[a-fA-F0-9]{0,4}|U[a-fA-F0-9]{0,8})" }, "tuples": { "begin": "('|@)\\(", "end": "(\\))", "patterns": [ { "include": "$self" } ] } } }