{
  "displayName": "Zig",
  "fileTypes": [
    "zig",
    "zon"
  ],
  "name": "zig",
  "patterns": [
    {
      "include": "#comments"
    },
    {
      "include": "#strings"
    },
    {
      "include": "#keywords"
    },
    {
      "include": "#operators"
    },
    {
      "include": "#punctuation"
    },
    {
      "include": "#numbers"
    },
    {
      "include": "#support"
    },
    {
      "include": "#variables"
    }
  ],
  "repository": {
    "commentContents": {
      "patterns": [
        {
          "match": "\\b(TODO|FIXME|XXX|NOTE)\\b:?",
          "name": "keyword.todo.zig"
        }
      ]
    },
    "comments": {
      "patterns": [
        {
          "begin": "//[!/](?=[^/])",
          "end": "$",
          "name": "comment.line.documentation.zig",
          "patterns": [
            {
              "include": "#commentContents"
            }
          ]
        },
        {
          "begin": "//",
          "end": "$",
          "name": "comment.line.double-slash.zig",
          "patterns": [
            {
              "include": "#commentContents"
            }
          ]
        }
      ]
    },
    "keywords": {
      "patterns": [
        {
          "match": "\\binline\\b(?!\\s*\\bfn\\b)",
          "name": "keyword.control.repeat.zig"
        },
        {
          "match": "\\b(while|for)\\b",
          "name": "keyword.control.repeat.zig"
        },
        {
          "match": "\\b(extern|packed|export|pub|noalias|inline|comptime|volatile|align|linksection|threadlocal|allowzero|noinline|callconv)\\b",
          "name": "keyword.storage.zig"
        },
        {
          "match": "\\b(struct|enum|union|opaque)\\b",
          "name": "keyword.structure.zig"
        },
        {
          "match": "\\b(asm|unreachable)\\b",
          "name": "keyword.statement.zig"
        },
        {
          "match": "\\b(break|return|continue|defer|errdefer)\\b",
          "name": "keyword.control.flow.zig"
        },
        {
          "match": "\\b(resume|suspend|nosuspend)\\b",
          "name": "keyword.control.async.zig"
        },
        {
          "match": "\\b(try|catch)\\b",
          "name": "keyword.control.trycatch.zig"
        },
        {
          "match": "\\b(if|else|switch|orelse)\\b",
          "name": "keyword.control.conditional.zig"
        },
        {
          "match": "\\b(null|undefined)\\b",
          "name": "keyword.constant.default.zig"
        },
        {
          "match": "\\b(true|false)\\b",
          "name": "keyword.constant.bool.zig"
        },
        {
          "match": "\\b(test|and|or)\\b",
          "name": "keyword.default.zig"
        },
        {
          "match": "\\b(bool|void|noreturn|type|error|anyerror|anyframe|anytype|anyopaque)\\b",
          "name": "keyword.type.zig"
        },
        {
          "match": "\\b(f16|f32|f64|f80|f128|u\\d+|i\\d+|isize|usize|comptime_int|comptime_float)\\b",
          "name": "keyword.type.integer.zig"
        },
        {
          "match": "\\b(c_(?:char|short|ushort|int|uint|long|ulong|longlong|ulonglong|longdouble))\\b",
          "name": "keyword.type.c.zig"
        }
      ]
    },
    "numbers": {
      "patterns": [
        {
          "match": "\\b0x\\h[_\\h]*(\\.\\h[_\\h]*)?([Pp][-+]?[_\\h]+)?\\b",
          "name": "constant.numeric.hexfloat.zig"
        },
        {
          "match": "\\b[0-9][0-9_]*(\\.[0-9][0-9_]*)?([Ee][-+]?[0-9_]+)?\\b",
          "name": "constant.numeric.float.zig"
        },
        {
          "match": "\\b[0-9][0-9_]*\\b",
          "name": "constant.numeric.decimal.zig"
        },
        {
          "match": "\\b0x[_\\h]+\\b",
          "name": "constant.numeric.hexadecimal.zig"
        },
        {
          "match": "\\b0o[0-7_]+\\b",
          "name": "constant.numeric.octal.zig"
        },
        {
          "match": "\\b0b[01_]+\\b",
          "name": "constant.numeric.binary.zig"
        },
        {
          "match": "\\b[0-9](([EPep][-+])|[0-9A-Z_a-z])*(\\.(([EPep][-+])|[0-9A-Z_a-z])*)?([EPep][-+])?[0-9A-Z_a-z]*\\b",
          "name": "constant.numeric.invalid.zig"
        }
      ]
    },
    "operators": {
      "patterns": [
        {
          "match": "(?<=\\[)\\*c(?=])",
          "name": "keyword.operator.c-pointer.zig"
        },
        {
          "match": "\\b((and|or))\\b|(==|!=|<=|>=|[<>])",
          "name": "keyword.operator.comparison.zig"
        },
        {
          "match": "(-%?|\\+%?|\\*%?|[%/])=?",
          "name": "keyword.operator.arithmetic.zig"
        },
        {
          "match": "(<<%?|>>|[!\\&^|~])=?",
          "name": "keyword.operator.bitwise.zig"
        },
        {
          "match": "(==|\\+\\+|\\*\\*|->)",
          "name": "keyword.operator.special.zig"
        },
        {
          "match": "=",
          "name": "keyword.operator.assignment.zig"
        },
        {
          "match": "\\?",
          "name": "keyword.operator.question.zig"
        }
      ]
    },
    "punctuation": {
      "patterns": [
        {
          "match": "\\.",
          "name": "punctuation.accessor.zig"
        },
        {
          "match": ",",
          "name": "punctuation.comma.zig"
        },
        {
          "match": ":",
          "name": "punctuation.separator.key-value.zig"
        },
        {
          "match": ";",
          "name": "punctuation.terminator.statement.zig"
        }
      ]
    },
    "stringcontent": {
      "patterns": [
        {
          "match": "\\\\([\"'\\\\nrt]|(x\\h{2})|(u\\{\\h+}))",
          "name": "constant.character.escape.zig"
        },
        {
          "match": "\\\\.",
          "name": "invalid.illegal.unrecognized-string-escape.zig"
        }
      ]
    },
    "strings": {
      "patterns": [
        {
          "begin": "\"",
          "end": "\"",
          "name": "string.quoted.double.zig",
          "patterns": [
            {
              "include": "#stringcontent"
            }
          ]
        },
        {
          "begin": "\\\\\\\\",
          "end": "$",
          "name": "string.multiline.zig"
        },
        {
          "match": "'([^'\\\\]|\\\\(x\\h{2}|[012][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.))'",
          "name": "string.quoted.single.zig"
        }
      ]
    },
    "support": {
      "patterns": [
        {
          "match": "@[A-Z_a-z][0-9A-Z_a-z]*",
          "name": "support.function.builtin.zig"
        }
      ]
    },
    "variables": {
      "patterns": [
        {
          "name": "meta.function.declaration.zig",
          "patterns": [
            {
              "captures": {
                "1": {
                  "name": "storage.type.function.zig"
                },
                "2": {
                  "name": "entity.name.type.zig"
                }
              },
              "match": "\\b(fn)\\s+([A-Z][0-9A-Za-z]*)\\b"
            },
            {
              "captures": {
                "1": {
                  "name": "storage.type.function.zig"
                },
                "2": {
                  "name": "entity.name.function.zig"
                }
              },
              "match": "\\b(fn)\\s+([A-Z_a-z][0-9A-Z_a-z]*)\\b"
            },
            {
              "begin": "\\b(fn)\\s+@\"",
              "beginCaptures": {
                "1": {
                  "name": "storage.type.function.zig"
                }
              },
              "end": "\"",
              "name": "entity.name.function.string.zig",
              "patterns": [
                {
                  "include": "#stringcontent"
                }
              ]
            },
            {
              "match": "\\b(const|var|fn)\\b",
              "name": "keyword.default.zig"
            }
          ]
        },
        {
          "name": "meta.function.call.zig",
          "patterns": [
            {
              "match": "([A-Z][0-9A-Za-z]*)(?=\\s*\\()",
              "name": "entity.name.type.zig"
            },
            {
              "match": "([A-Z_a-z][0-9A-Z_a-z]*)(?=\\s*\\()",
              "name": "entity.name.function.zig"
            }
          ]
        },
        {
          "name": "meta.variable.zig",
          "patterns": [
            {
              "match": "\\b[A-Z_a-z][0-9A-Z_a-z]*\\b",
              "name": "variable.zig"
            },
            {
              "begin": "@\"",
              "end": "\"",
              "name": "variable.string.zig",
              "patterns": [
                {
                  "include": "#stringcontent"
                }
              ]
            }
          ]
        }
      ]
    }
  },
  "scopeName": "source.zig"
}
