diff --git a/syntaxes/mist.tmLanguage.json b/syntaxes/mist.tmLanguage.json index 6cfb754..70ad35c 100644 --- a/syntaxes/mist.tmLanguage.json +++ b/syntaxes/mist.tmLanguage.json @@ -4,82 +4,142 @@ "scopeName": "source.mist", "patterns": [ { "include": "#comments" }, - { "include": "#keywords" }, - { "include": "#attributes" }, { "include": "#strings" }, + { "include": "#attributes" }, { "include": "#macros" }, { "include": "#type_declarations" }, - { "include": "#constants" }, + { "include": "#keywords" }, + { "include": "#numbers" }, { "include": "#lifetimes" }, { "include": "#generics" }, { "include": "#types" }, { "include": "#namespaces" }, + { "include": "#imports" }, + { "include": "#modules" }, + { "include": "#struct_literals" }, + { "include": "#field_access" }, + { "include": "#arrow" }, + { "include": "#return_arrow" }, { "include": "#functions" }, - { "include": "#numbers" }, { "include": "#operators" }, { "include": "#punctuation" } ], "repository": { "comments": { - "match": "//.*", - "name": "comment.line.double-slash.mist" - }, - "attributes": { - "begin": "#!?\\[", - "beginCaptures": { "0": { "name": "punctuation.definition.attribute.begin.mist" } }, - "end": "\\]", - "endCaptures": { "0": { "name": "punctuation.definition.attribute.end.mist" } }, - "name": "meta.attribute.mist", - "patterns": [{ "include": "$self" }] + "name": "comment.line.double-slash.mist", + "match": "//.*" }, "strings": { + "name": "string.quoted.double.mist", "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.mist" } }, "end": "\"", "endCaptures": { "0": { "name": "punctuation.definition.string.end.mist" } }, - "name": "string.quoted.double.mist", - "patterns": [{ "match": "\\\\.", "name": "constant.character.escape.mist" }] + "patterns": [ + { "match": "\\\\.", "name": "constant.character.escape.mist" } + ] + }, + "attributes": { + "name": "meta.attribute.mist", + "begin": "#!?\\[", + "beginCaptures": { "0": { "name": "punctuation.definition.attribute.begin.mist" } }, + "end": "\\]", + "endCaptures": { "0": { "name": "punctuation.definition.attribute.end.mist" } }, + "patterns": [{ "include": "$self" }] }, "macros": { - "match": "\\b([a-zA-Z_][a-zA-Z0-9_]*)(!)", - "captures": { - "1": { "name": "entity.name.function.macro.mist" }, - "2": { "name": "keyword.operator.macro.mist" } - } + "patterns": [ + { + "begin": "\\b([a-zA-Z_][a-zA-Z0-9_]*)(!)(\\()", + "beginCaptures": { + "1": { "name": "entity.name.function.macro.mist" }, + "2": { "name": "keyword.operator.macro.mist" }, + "3": { "name": "punctuation.parenthesis.begin.mist" } + }, + "end": "\\)", + "endCaptures": { "0": { "name": "punctuation.parenthesis.end.mist" } }, + "patterns": [{ "include": "$self" }] + }, + { + "begin": "\\b([a-zA-Z_][a-zA-Z0-9_]*)(!)(\\[)", + "beginCaptures": { + "1": { "name": "entity.name.function.macro.mist" }, + "2": { "name": "keyword.operator.macro.mist" }, + "3": { "name": "punctuation.bracket.begin.mist" } + }, + "end": "\\]", + "endCaptures": { "0": { "name": "punctuation.bracket.end.mist" } }, + "patterns": [{ "include": "$self" }] + }, + { + "begin": "\\b([a-zA-Z_][a-zA-Z0-9_]*)(!)(\\{)", + "beginCaptures": { + "1": { "name": "entity.name.function.macro.mist" }, + "2": { "name": "keyword.operator.macro.mist" }, + "3": { "name": "punctuation.curly.brace.begin.mist" } + }, + "end": "\\}", + "endCaptures": { "0": { "name": "punctuation.curly.brace.end.mist" } }, + "patterns": [{ "include": "$self" }] + } + ] }, "type_declarations": { - "match": "\\b(struct|enum|class|trait)\\s+([a-zA-Z_][a-zA-Z0-9_]*)", - "captures": { - "1": { "name": "storage.type.mist" }, - "2": { "name": "entity.name.type.mist" } - } + "patterns": [ + { + "match": "\\b(struct|enum|class|trait)\\s+([a-zA-Z_][a-zA-Z0-9_]*)", + "captures": { + "1": { "name": "storage.type.mist" }, + "2": { "name": "entity.name.type.mist" } + } + }, + { + "match": "\\b(fn)\\s+([a-zA-Z_][a-zA-Z0-9_]*)", + "captures": { + "1": { "name": "storage.type.mist" }, + "2": { "name": "entity.name.function.mist" } + } + } + ] }, "keywords": { "patterns": [ - { "match": "\\b(if|else|while|for|in|return|break|continue|match)\\b", "name": "keyword.control.mist" }, - { "match": "\\b(struct|enum|class|trait|var)\\b", "name": "storage.type.mist" }, - { "match": "\\b(pub|mut|constructor)\\b", "name": "storage.modifier.mist" }, - { "match": "\\b(impl|use|mod|new|void|self)\\b", "name": "keyword.other.mist" } + { "match": "\\b(if|else|while|for|return|break|continue|match|loop)\\b", "name": "keyword.control.mist" }, + { "match": "\\b(struct|enum|class|trait|fn|let|impl)\\b", "name": "storage.type.mist" }, + { "match": "\\b(pub|mut)\\b", "name": "storage.modifier.mist" }, + { "match": "\\b(use|mod|as|dyn|unsafe|self|constructor)\\b", "name": "keyword.other.mist" }, + { "match": "\\b(true|false)\\b", "name": "constant.language.boolean.mist" } ] }, - "constants": { - "match": "\\b(true|false)\\b", "name": "constant.language.boolean.mist" + "numbers": { + "patterns": [ + { "match": "\\b\\d+\\.\\d+\\b", "name": "constant.numeric.float.mist" }, + { "match": "\\b\\d+\\b", "name": "constant.numeric.integer.mist" } + ] }, "lifetimes": { "match": "'[a-zA-Z_][a-zA-Z0-9_]*\\b", "name": "storage.modifier.lifetime.mist" }, "generics": { - "begin": "<", - "beginCaptures": { "0": { "name": "punctuation.brackets.angle.mist" } }, - "end": ">", - "endCaptures": { "0": { "name": "punctuation.brackets.angle.mist" } }, "patterns": [ - { "include": "#lifetimes" }, - { "match": "\\b[a-zA-Z_][a-zA-Z0-9_]*\\b", "name": "entity.name.type.mist" }, - { "match": ",", "name": "punctuation.separator.mist" }, - { "match": ":|\\+", "name": "keyword.operator.mist" }, - { "include": "#generics" } + { + "begin": "<", + "beginCaptures": { "0": { "name": "punctuation.brackets.angle.mist" } }, + "end": ">", + "endCaptures": { "0": { "name": "punctuation.brackets.angle.mist" } }, + "patterns": [ + { "include": "#comments" }, + { "include": "#strings" }, + { "include": "#lifetimes" }, + { "include": "#types" }, + { "match": "\\b[a-zA-Z_][a-zA-Z0-9_]*\\b", "name": "entity.name.type.mist" }, + { "match": ",", "name": "punctuation.separator.mist" }, + { "match": "[:+]", "name": "keyword.operator.mist" }, + { "include": "#field_access" }, + { "include": "#generics" } + ] + } ] }, "types": { @@ -100,25 +160,77 @@ }, "namespaces": { "match": "\\b([a-zA-Z_][a-zA-Z0-9_]*)(?=\\s*::)", - "captures": { "1": { "name": "entity.name.namespace.mist" } } + "captures": { + "1": { "name": "entity.name.namespace.mist" } + } + }, + "imports": { + "match": "\\buse\\s+([a-zA-Z_][a-zA-Z0-9_]*(?:\\s*::\\s*[a-zA-Z_][a-zA-Z0-9_]*)*)\\s*;", + "captures": { + "1": { "name": "entity.name.namespace.mist" } + }, + "name": "meta.import.mist" + }, + "modules": { + "match": "(?:pub\\s+)?\\bmod\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s*;", + "captures": { + "1": { "name": "entity.name.namespace.module.mist" } + } + }, + "struct_literals": { + "patterns": [ + { + "begin": "\\b([A-Z][a-zA-Z0-9_]*)\\s*(\\{)", + "beginCaptures": { + "1": { "name": "entity.name.type.mist" }, + "2": { "name": "punctuation.curly.brace.begin.mist" } + }, + "end": "\\}", + "endCaptures": { "0": { "name": "punctuation.curly.brace.end.mist" } }, + "patterns": [ + { "include": "#strings" }, + { "include": "#numbers" }, + { "include": "#keywords" }, + { "include": "#lifetimes" }, + { "include": "#types" }, + { "include": "#operators" }, + { "include": "#punctuation" }, + { "include": "#field_access" }, + { "match": "[a-zA-Z_][a-zA-Z0-9_]*\\s*(?=:)", "name": "variable.object.field.mist" }, + { "include": "$self" } + ] + } + ] + }, + "field_access": { + "match": "\\.([a-zA-Z_][a-zA-Z0-9_]*)\\b", + "captures": { + "1": { "name": "variable.other.property.mist" } + } + }, + "arrow": { + "match": "=>", + "name": "keyword.operator.arrow.mist" + }, + "return_arrow": { + "match": "->", + "name": "keyword.operator.arrow.mist" }, "functions": { "match": "\\b([a-zA-Z_][a-zA-Z0-9_]*)\\s*(?=\\()", "name": "entity.name.function.mist" }, - "numbers": { + "operators": { "patterns": [ - { "match": "\\b\\d+\\.\\d+\\b", "name": "constant.numeric.float.mist" }, - { "match": "\\b\\d+\\b", "name": "constant.numeric.integer.mist" } + { + "match": "(?:\\+=|-=|\\*=|\\/=|%=|&=|\\|=|\\^=|<<=|>>=|<<|>>|\\.\\.=|\\.\\.|<=|>=|==|!=|&&|\\|\\||[+\\-*/%<>&|^=!]|\\+\\+|--)", + "name": "keyword.operator.mist" + } ] }, - "operators": { - "match": "(<=|>=|==|!=|&&|\\|\\||\\+|-|\\*|/|%|<|>|=|=>|!)", - "name": "keyword.operator.mist" - }, "punctuation": { - "match": "::|:|;|,|\\.|\\{|\\}|\\(|\\)|\\[|\\]", + "match": "::|:|;|,|\\.|\\{|\\}|\\(|\\)|\\[|\\]|\\?", "name": "punctuation.mist" } } -} \ No newline at end of file +}