Updated grammar

This commit is contained in:
2026-06-06 00:09:11 +02:00
parent ff0f62d2e5
commit b7f48a25c2
+162 -50
View File
@@ -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,24 +160,76 @@
},
"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"
}
}