filetype: v detect: rules: # Conditionals and control flow - preproc: "\\b(module|import)\\b" - statement: "\\b(if|else|for|match|select|defer|or|unsafe)\\b" - statement: "\\b(break|continue|goto|return)\\b" - type.keyword: "\\b(assert|const|enum|fn|struct|interface|type)\\b" - type.keyword: "\\b(pub|mut|__global)\\b" - preproc: "\\$\\b(if|else)\\b" - identifier.os: "\\b(mac|macos|linux|windows|freebsd|openbsd|netbsd|dragonfly|android|solaris|haiku)\\b" - identifier.compiler: "\\b(gcc|tinyc|clang|mingw|msvc|cplusplus)\\b" - identifier.platform: "\\b(amd64|aarch64|x64|x32|little_endian|big_endian)\\b" - identifier.other: "\\b(debug|test|js|glibc|prealloc|no_bounds_checking)\\b" - identifier.class: "\\b([A-Z][A-Za-z0-9_]*)\\b" - identifier.function: "\\b([a-z_]+\\()" - symbol.operator: "\\b(i[ns])\\b|[-+/*<>!=~*%&:|,.?]" - symbol.attribute: start: "^\\[" end: "\\]$" rules: - default: ".*" - symbol: "\\b(deprecated|direct_array_access|if|inline|live|ref_only|typedef|windows_stdcall)\\b" # Types - type: "\\b(byte|u(16|32|64|128)|i(nt|8|16|64|128)|f(32|64))\\b" - type: "\\b(bool|cha[nr]|map|rune|string)\\b" - type: "\\b(any(_int|_float)?|size_t|(uint|byte|char|void)ptr)\\b" - constant.bool: "\\b(true|false)\\b" - constant.none: "\\b(none)\\b" # Brackets - symbol.brackets: "(\\{|\\})" - symbol.brackets: "(\\(|\\))" - symbol.brackets: "(\\[|\\])" # Numbers and strings - constant.number: "\\b(0b[01_]+)\\b" - constant.number: "\\b(0o[0-7_]+)\\b" - constant.number: "\\b(0x[0-9a-fA-F_]+)\\b" - constant.number: "\\b([0-9_]+)\\b" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "%." - constant.specialChar: "\\\\[abefnrtv'\\\"\\\\]" - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})" - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "%." - constant.specialChar: "\\\\[abefnrtv'\\\"\\\\]" - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})" - constant.string: start: "`" end: "`" rules: [] - comment: start: "//" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "/\\*" end: "\\*/" rules: - todo: "(TODO|XXX|FIXME):?"