diff --git a/Syntaxes/Zig.YAML-tmLanguage b/Syntaxes/Zig.YAML-tmLanguage
index dab69ef..fd6a6a0 100644
--- a/Syntaxes/Zig.YAML-tmLanguage
+++ b/Syntaxes/Zig.YAML-tmLanguage
@@ -59,7 +59,7 @@ repository:
'2':
name: punctuation.separator.zig
- end: '([a-zA-Z_][a-zA-Z0-9_.]*|@\".+\")(?:(,)|\s*(=)\s*|(?=\n|\r))'
+ end: '([a-zA-Z_][a-zA-Z0-9_.]*|@\".+\")\s*(?:(,)|(=)|(?=\n|\r))'
endCaptures:
'1':
name: storage.type.zig
diff --git a/Syntaxes/Zig.tmLanguage b/Syntaxes/Zig.tmLanguage
index 7a79ade..0c36fd1 100644
--- a/Syntaxes/Zig.tmLanguage
+++ b/Syntaxes/Zig.tmLanguage
@@ -261,7 +261,7 @@
end
- ([a-zA-Z_][a-zA-Z0-9_.]*|@\".+\")(?:(,)|\s*(=)\s*|(?=\n|\r))
+ ([a-zA-Z_][a-zA-Z0-9_.]*|@\".+\")\s*(?:(,)|(=)|(?=\n|\r))
endCaptures
1
diff --git a/Syntaxes/Zig.tmLanguage.json b/Syntaxes/Zig.tmLanguage.json
index 2ae7a8e..2ba8e3e 100644
--- a/Syntaxes/Zig.tmLanguage.json
+++ b/Syntaxes/Zig.tmLanguage.json
@@ -1,93 +1,77 @@
{
+ "scopeName": "source.zig",
+ "fileTypes": [
+ "zig"
+ ],
+ "name": "Zig",
"repository": {
- "operators": {
+ "keywords": {
"patterns": [
{
- "match": "\\b!\\b",
- "name": "keyword.operator.zig"
- },
- {
- "match": "(==|(?:!|>|<)=?)",
- "name": "keyword.operator.logical.zig"
- },
- {
- "match": "\\b(and|or)\\b",
- "name": "keyword.operator.word.zig"
- },
- {
- "match": "((?:(?:\\+|-|\\*)\\%?|/|%|<<|>>|&|\\|(?=[^\\|])|\\^)?=)",
- "name": "keyword.operator.assignment.zig"
- },
- {
- "match": "((?:\\+|-|\\*)\\%?|/(?!/)|%)",
- "name": "keyword.operator.arithmetic.zig"
+ "name": "keyword.control.zig",
+ "match": "\\b(while|for|break|return|continue|asm|defer|errdefer|unreachable)\\b"
},
{
- "match": "(<<|>>|&(?=[a-zA-Z_]|@\\\")|\\|(?=[^\\|])|\\^|~)",
- "name": "keyword.operator.bitwise.zig"
+ "name": "keyword.control.async.zig",
+ "match": "\\b(noasync|async|await|suspend|resume|cancel)\\b"
},
{
- "match": "(\\+\\+|\\*\\*|->|\\.\\?|\\.\\*|&(?=[a-zA-Z_]|@\\\")|\\?|\\|\\||\\.{2,3})",
- "name": "keyword.operator.other.zig"
- }
- ]
- },
- "punctuation": {
- "patterns": [
- {
- "match": ",",
- "name": "punctuation.separator.zig"
- },
- {
- "match": ";",
- "name": "punctuation.terminator.zig"
+ "name": "keyword.control.conditional.zig",
+ "match": "\\b(if|else|switch|try|catch|orelse)\\b"
},
{
- "match": "(\\()",
- "name": "punctuation.section.parens.begin.zig"
+ "name": "keyword.control.import.zig",
+ "match": "(?)?\\s*(?:([a-zA-Z_][a-zA-Z0-9_.]*|@\\\".+\\\")\\b(?!\\s*\\())?"
},
{
- "match": "\\\\\\\"",
- "name": "constant.character.escape.double-quote.zig"
+ "name": "storage.type.function.zig",
+ "match": "\\bfn\\b"
},
{
- "match": "\\\\x[a-fA-F0-9]{2}",
- "name": "constant.character.escape.hexidecimal.zig"
+ "name": "storage.type.test.zig",
+ "match": "\\btest\\b"
},
{
- "match": "\\\\u\\{[a-fA-F0-9]{1,6}\\}",
- "name": "constant.character.escape.hexidecimal.zig"
- }
- ]
- },
- "param_list": {
- "end": "([a-zA-Z_][a-zA-Z0-9_.]*|@\\\".+\\\")?\\s*(?:(,)|(\\)))",
- "begin": "([a-zA-Z_][a-zA-Z0-9_]*|@\\\".+\\\")\\s*(:)\\s*",
- "beginCaptures": {
- "1": {
- "name": "variable.parameter.zig"
- },
- "2": {
- "name": "punctuation.separator.zig"
- }
- },
- "endCaptures": {
- "1": {
- "name": "storage.type.zig"
+ "name": "storage.type.struct.zig",
+ "match": "\\bstruct\\b"
},
- "3": {
- "name": "punctuation.section.parens.end.zig"
+ {
+ "name": "storage.type.enum.zig",
+ "match": "\\benum\\b"
},
- "2": {
- "name": "punctuation.separator.zig"
- }
- },
- "patterns": [
{
- "include": "#main"
+ "name": "storage.type.union.zig",
+ "match": "\\bunion\\b"
},
{
- "match": "([a-zA-Z_][a-zA-Z0-9_.]*|@\\\".+\\\")",
- "name": "storage.type.zig"
+ "name": "storage.type.error.zig",
+ "match": "\\berror\\b"
}
]
},
- "support": {
- "match": "(?|<)=?)"
},
{
- "match": "\\b(?>|&|\\|(?=[^\\|])|\\^)?=)"
},
{
- "match": "\\b(?>|&(?=[a-zA-Z_]|@\\\")|\\|(?=[^\\|])|\\^|~)"
},
{
- "match": "(?|\\.\\?|\\.\\*|&(?=[a-zA-Z_]|@\\\")|\\?|\\|\\||\\.{2,3})"
}
]
},
- "storage_modifier": {
- "match": "\\b(const|var|extern|packed|export|pub|noalias|inline|comptime|nakedcc|stdcallcc|volatile|align|linksection|threadlocal|allowzero)\\b",
- "name": "storage.modifier.zig"
- },
- "function_type": {
- "endCaptures": {
- "1": {
- "name": "storage.type.zig"
+ "comments": {
+ "patterns": [
+ {
+ "begin": "///",
+ "end": "$\\n?",
+ "name": "comment.line.documentation.zig"
},
- "3": {
- "name": "storage.type.zig"
+ {
+ "begin": "//[^/]\\s*TODO",
+ "end": "$\\n?",
+ "name": "comment.line.todo.zig"
},
- "2": {
- "name": "keyword.operator.zig"
+ {
+ "begin": "//[^/]*",
+ "end": "$\\n?",
+ "name": "comment.line.zig"
}
- },
+ ]
+ },
+ "function_type": {
"patterns": [
{
"include": "#label"
@@ -363,15 +300,27 @@
"include": "#param_list"
},
{
- "match": "([a-zA-Z_][a-zA-Z0-9_.]*|@\\\".+\\\")",
- "name": "storage.type.zig"
+ "name": "storage.type.zig",
+ "match": "([a-zA-Z_][a-zA-Z0-9_.]*|@\\\".+\\\")"
},
{
"include": "#main"
}
],
- "end": "(?<=\\)|\\})\\s*([a-zA-Z_][a-zA-Z0-9_.]*|@\\\".+\\\")?\\s*(!)?\\s*([a-zA-Z_][a-zA-Z0-9_.]*|@\\\".+\\\")",
"begin": "\\b(fn)\\s*(\\()",
+ "end": "(?<=\\)|\\})\\s*([a-zA-Z_][a-zA-Z0-9_.]*|@\\\".+\\\")?\\s*(!)?\\s*([a-zA-Z_][a-zA-Z0-9_.]*|@\\\".+\\\")",
+ "endCaptures": {
+ "1": {
+ "name": "storage.type.zig"
+ },
+ "3": {
+ "name": "storage.type.zig"
+ },
+ "2": {
+ "name": "keyword.operator.zig"
+ }
+ },
+ "contentName": "meta.function.parameters.zig",
"beginCaptures": {
"1": {
"name": "storage.type.function.zig"
@@ -379,201 +328,252 @@
"2": {
"name": "punctuation.section.parens.begin.zig"
}
- },
- "contentName": "meta.function.parameters.zig"
+ }
},
- "storage": {
+ "main": {
"patterns": [
{
- "match": "\\b(bool|void|noreturn|type|anyerror)\\b",
- "name": "storage.type.zig"
+ "include": "#label"
},
{
- "match": "\\b(?)?\\s*(?:([a-zA-Z_][a-zA-Z0-9_.]*|@\\\".+\\\")\\b(?!\\s*\\())?",
- "captures": {
- "1": {
- "name": "storage.type.zig"
- },
- "3": {
- "name": "storage.type.zig"
- },
- "2": {
- "name": "keyword.operator.zig"
- }
- }
+ "include": "#storage_modifier"
},
{
- "match": "\\bfn\\b",
- "name": "storage.type.function.zig"
+ "include": "#container_decl"
},
{
- "match": "\\btest\\b",
- "name": "storage.type.test.zig"
+ "include": "#constants"
},
{
- "match": "\\bstruct\\b",
- "name": "storage.type.struct.zig"
+ "include": "#comments"
},
{
- "match": "\\benum\\b",
- "name": "storage.type.enum.zig"
+ "include": "#strings"
},
{
- "match": "\\bunion\\b",
- "name": "storage.type.union.zig"
+ "include": "#storage"
},
{
- "match": "\\berror\\b",
- "name": "storage.type.error.zig"
- }
- ]
- },
- "field_decl": {
- "end": "([a-zA-Z_][a-zA-Z0-9_.]*|@\\\".+\\\")(?:(,)|\\s*(=)\\s*|(?=\\n|\\r))",
- "begin": "([a-zA-Z_][a-zA-Z0-9_]*|@\\\".+\\\")\\s*(:)\\s*",
- "beginCaptures": {
- "1": {
- "name": "variable.other.member.zig"
+ "include": "#keywords"
},
- "2": {
- "name": "punctuation.separator.zig"
- }
- },
- "endCaptures": {
- "1": {
- "name": "storage.type.zig"
+ {
+ "include": "#operators"
},
- "3": {
- "name": "keyword.operator.assignment.zig"
+ {
+ "include": "#support"
},
- "2": {
- "name": "punctuation.separator.zig"
- }
- },
- "patterns": [
{
- "include": "#main"
+ "include": "#field_decl"
+ },
+ {
+ "include": "#block"
+ },
+ {
+ "include": "#function_def"
+ },
+ {
+ "include": "#function_call"
+ },
+ {
+ "include": "#enum_literal"
}
]
},
- "function_def": {
- "end": "(?<=\\)[^\\)])\\s*([a-zA-Z_][a-zA-Z0-9_.]*|@\\\".+\\\")?(!)?\\s*(?:([a-zA-Z_][a-zA-Z0-9_.]*|@\\\".+\\\")\\b(?!\\s*\\())?",
- "begin": "(?<=fn)\\s+([a-zA-Z_][a-zA-Z0-9_]*|@\\\".+\\\")(\\()",
- "beginCaptures": {
- "1": {
- "name": "entity.name.function"
+ "storage_modifier": {
+ "name": "storage.modifier.zig",
+ "match": "\\b(const|var|extern|packed|export|pub|noalias|inline|comptime|nakedcc|stdcallcc|volatile|align|linksection|threadlocal|allowzero)\\b"
+ },
+ "constants": {
+ "patterns": [
+ {
+ "name": "constant.language.zig",
+ "match": "\\b(null|undefined|true|false)\\b"
},
- "2": {
- "name": "punctuation.section.parens.begin.zig"
- }
- },
- "endCaptures": {
- "1": {
- "name": "storage.type.zig"
+ {
+ "name": "constant.numeric.integer.zig",
+ "match": "\\b(?