{"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"}]}}}
