diff --git a/package.json b/package.json index 18f5eb1..472c8c9 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "languages": [{ "id": "mist", "aliases": ["Mist", "mist"], - "extensions": [".ms"], + "extensions": [".mist"], "configuration": "./language-configuration.json" }], "grammars": [{ diff --git a/syntaxes/mist.tmLanguage.json b/syntaxes/mist.tmLanguage.json index 8880e5e..978d1d8 100644 --- a/syntaxes/mist.tmLanguage.json +++ b/syntaxes/mist.tmLanguage.json @@ -1,87 +1,194 @@ { - "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", - "name": "Mist", - "scopeName": "source.mist", - "patterns": [ - { "include": "#comments" }, - { "include": "#keywords" }, - { "include": "#strings" }, - { "include": "#numbers" }, - { "include": "#types" }, - { "include": "#operators" } - ], - "repository": { - "comments": { - "patterns": [ - { - "name": "comment.line.double-slash.mist", - "match": "//.*$" - } - ] - }, - - "keywords": { - "patterns": [ - { - "name": "keyword.control.flow.mist", - "match": "\\b(if|else|for|return|function|class|struct|import|let|const)\\b" - }, - { - "name": "constant.language.null.mist", - "match": "\\b(null)\\b" - }, - { - "name": "constant.language.this.mist", - "match": "\\b(this)\\b" - }, - { - "name": "constant.language.boolean.mist", - "match": "\\b(true|false)\\b" - } - ] - }, - - "strings": { - "name": "string.quoted.double.mist", - "begin": "\"", - "end": "\"", - "patterns": [ - { - "name": "constant.character.escape.mist", - "match": "\\\\." - } - ] - }, - - "numbers": { - "patterns": [ - { - "name": "constant.numeric.float.mist", - "match": "\\b\\d+\\.\\d+\\b" - }, - { - "name": "constant.numeric.integer.mist", - "match": "\\b\\d+\\b" - } - ] - }, - - "types": { - "patterns": [ - { - "name": "entity.name.type.mist", - "match": "\\b[A-Z][a-zA-Z0-9_]*\\b" - } - ] - }, - - "operators": { - "patterns": [ - { - "name": "keyword.operator.mist", - "match": "(==|!=|<=|>=|&&|\\|\\||[+\\-*/<>=])" - } - ] - } - } - } \ No newline at end of file + "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", + "name": "Mist", + "scopeName": "source.mist", + "patterns": [ + { + "include": "#comments" + }, + { + "include": "#attributes" + }, + { + "include": "#strings" + }, + { + "include": "#macros" + }, + { + "include": "#type_declarations" + }, + { + "include": "#keywords" + }, + { + "include": "#constants" + }, + { + "include": "#lifetimes" + }, + { + "include": "#types" + }, + { + "include": "#namespaces" + }, + { + "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" + } + ] + }, + "strings": { + "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" + } + ] + }, + "macros": { + "match": "\\b([a-zA-Z_][a-zA-Z0-9_]*)(!)", + "captures": { + "1": { + "name": "entity.name.function.macro.mist" + }, + "2": { + "name": "keyword.operator.macro.mist" + } + } + }, + "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" + } + } + }, + "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)\\b", + "name": "keyword.other.mist" + }, + { + "match": "\\bself\\b", + "name": "variable.language.self.mist" + } + ] + }, + "constants": { + "match": "\\b(true|false)\\b", + "name": "constant.language.boolean.mist" + }, + "lifetimes": { + "match": "'[a-zA-Z_][a-zA-Z0-9_]*\\b", + "name": "storage.modifier.lifetime.rust" + }, + "types": { + "patterns": [ + { + "name": "entity.name.type.primitive.mist", + "match": "\\b(bool|char|str)\\b" + }, + { + "match": "\\b[A-Z][a-zA-Z0-9_]*\\b", + "name": "entity.name.type.mist" + } + ] + }, + "namespaces": { + "match": "\\b([a-zA-Z_][a-zA-Z0-9_]*)(?=\\s*::)", + "captures": { + "1": { + "name": "entity.name.namespace.mist" + } + } + }, + "functions": { + "match": "\\b([a-zA-Z_][a-zA-Z0-9_]*)\\s*(?=\\()", + "name": "entity.name.function.mist" + }, + "numbers": { + "patterns": [ + { + "match": "\\b\\d+\\.\\d+\\b", + "name": "constant.numeric.float.mist" + }, + { + "match": "\\b\\d+\\b", + "name": "constant.numeric.integer.mist" + } + ] + }, + "operators": { + "match": "(<=|>=|==|!=|&&|\\|\\||\\+|-|\\*|/|%|<|>|=|=>|!)", + "name": "keyword.operator.mist" + }, + "punctuation": { + "match": "::|:|;|,|\\.|\\{|\\}|\\(|\\)|\\[|\\]", + "name": "punctuation.mist" + } + } +} \ No newline at end of file