{ "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", "name": "ReScript", "scopeName": "source.rescript", "repository": { "RE_KEYWORD_CONTROL": { "name": "keyword.control", "match": "\\b(and|as|assert|async|await|catch|constraint|downto|else|exception|external|for|if|in|lazy|mutable|rec|switch|to|try|when|while|with|private)\\b" }, "RE_TO_DOWNTO_AS_LABELS": { "patterns": [ { "match": "(to|downto)\\s*(=)", "captures": { "1": { "name": "variable" }, "2": { "name": "keyword.operator keyword" } } }, { "match": "(to|downto)\\s*(as)", "captures": { "1": { "name": "variable" }, "2": { "name": "keyword.control" } } } ] }, "RE_CONSTANTS_BOOL": { "name": "constant.language.boolean", "match": "\\b(false|true)\\b" }, "RE_KEYWORD": { "name": "storage.type", "match": "\\b(include|let|module|of|open|type)\\b" }, "commentLine": { "match": "//.*", "name": "comment.line" }, "commentBlock": { "name": "comment.block", "begin": "/\\*", "end": "\\*/", "patterns": [ { "include": "#commentBlock" } ] }, "punctuation": { "patterns": [ { "match": "~", "name": "punctuation.definition.keyword" }, { "match": ";", "name": "punctuation.terminator" }, { "match": "\\.", "name": "punctuation.accessor" }, { "match": "\\,", "name": "punctuation.separator" }, { "match": "\\?|:", "name": "punctuation.separator" }, { "match": "\\|(?!\\|)", "name": "punctuation.separator" }, { "match": "\\{", "name": "punctuation.section.braces.begin" }, { "match": "\\}", "name": "punctuation.section.braces.end" }, { "match": "\\[", "name": "punctuation.section.brackets.begin" }, { "match": "\\]", "name": "punctuation.section.brackets.end" }, { "match": "\\(", "name": "punctuation.section.parens.begin" }, { "match": "\\)", "name": "punctuation.section.parens.end" } ] }, "keyword": { "patterns": [ { "include": "#RE_TO_DOWNTO_AS_LABELS" }, { "include": "#RE_KEYWORD_CONTROL" }, { "include": "#RE_KEYWORD" } ] }, "constant": { "patterns": [ { "include": "#RE_CONSTANTS_BOOL" } ] }, "string-character-escape": { "name": "constant.character.escape", "match": "\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u{[0-9A-Fa-f]+}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)" }, "string": { "patterns": [ { "name": "string.quoted.double", "begin": "\"", "end": "\"", "beginCaptures": { "1": { "name": "punctuation.definition.string.begin" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end" } }, "patterns": [ { "include": "#string-character-escape" } ] }, { "name": "string.template", "begin": "([a-z_][0-9a-zA-Z_]*)?(`)", "end": "(?", "name": "storage.type.function keyword.declaration.function" } ] }, "character": { "patterns": [ { "match": "'[\\x00-\\x7F]'", "name": "string.quoted.single" } ] }, "typeParameter": { "patterns": [ { "match": "'[A-Za-z][A-Za-z0-9_]*", "name": "support.type" } ] }, "defaultIdIsVariable": { "patterns": [ { "match": "[A-Za-z_][A-Za-z0-9_]*", "name": "variable" } ] }, "number": { "patterns": [ { "match": "\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]+)?([eE][-+]?[0-9_]+)?)?)\\b", "name": "constant.numeric" } ] }, "operator": { "patterns": [ { "match": "->|\\|\\||&&|\\+\\+|\\*\\*|\\+\\.|\\+|-\\.|-|\\*\\.|\\*|/\\.|/|\\.\\.\\.|\\.\\.|===|==|\\^|:=|!|>=(?! *\\?)|<=|=", "name": "keyword.operator" }, { "match": "\\|>", "name": "invalid.deprecated" } ] }, "constructor": { "patterns": [ { "match": "\\b[A-Z][0-9a-zA-Z_]*\\b", "name": "variable.other.enummember" }, { "match": "(#)\\s*([a-zA-Z][0-9a-zA-Z_]*)\\b", "captures": { "1": { "name": "variable.other.enummember" }, "2": { "name": "variable.other.enummember" } } }, { "match": "(#)\\s*(\\.\\.\\.)\\b", "captures": { "1": { "name": "variable.other.enummember" }, "2": { "name": "variable.other.enummember" } } }, { "match": "(#)", "captures": { "1": { "name": "variable.other.enummember" } } } ] }, "list": { "patterns": [ { "match": "\\b(list)(\\{)", "captures": { "1": { "name": "keyword" }, "2": { "name": "punctuation.section.braces.begin" } } }, { "match": "\\}", "name": "punctuation.section.braces.end" } ] }, "attribute": { "patterns": [ { "match": "(%%?|@@?)([A-Za-z_][A-Za-z0-9_\\.]*)", "captures": { "1": { "name": "punctuation.decorator" }, "2": { "patterns": [ { "match": "bs\\.send\\.pipe", "name": "invalid.deprecated" }, { "match": "splice", "name": "invalid.illegal" }, { "match": "(bs\\.)?([A-Za-z_][A-Za-z0-9_\\.]*)", "captures": { "1": { "name": "invalid.deprecated" }, "2": { "name": "entity.name.function" } } }, { "match": "[A-Za-z_][A-Za-z0-9_\\.]*", "name": "entity.name.function" } ] } } } ] }, "jsx": { "patterns": [ { "match": "<>||", "name": "punctuation.definition.tag" }, { "match": "