Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 1 | " Vim syntax file |
| 2 | " Language: Zig |
| 3 | " Upstream: https://github.com/ziglang/zig.vim |
| 4 | |
| 5 | if exists("b:current_syntax") |
| 6 | finish |
| 7 | endif |
| 8 | |
| 9 | let s:cpo_save = &cpo |
| 10 | set cpo&vim |
| 11 | |
| 12 | let s:zig_syntax_keywords = { |
| 13 | \ 'zigBoolean': ["true" |
| 14 | \ , "false"] |
| 15 | \ , 'zigNull': ["null"] |
| 16 | \ , 'zigType': ["bool" |
| 17 | \ , "f16" |
| 18 | \ , "f32" |
| 19 | \ , "f64" |
| 20 | \ , "f80" |
| 21 | \ , "f128" |
| 22 | \ , "void" |
| 23 | \ , "type" |
| 24 | \ , "anytype" |
| 25 | \ , "anyerror" |
| 26 | \ , "anyframe" |
| 27 | \ , "volatile" |
| 28 | \ , "linksection" |
| 29 | \ , "noreturn" |
| 30 | \ , "allowzero" |
| 31 | \ , "i0" |
| 32 | \ , "u0" |
| 33 | \ , "isize" |
| 34 | \ , "usize" |
| 35 | \ , "comptime_int" |
| 36 | \ , "comptime_float" |
Gregory Anders | e08bfef | 2023-10-19 10:16:59 -0500 | [diff] [blame] | 37 | \ , "c_char" |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 38 | \ , "c_short" |
| 39 | \ , "c_ushort" |
| 40 | \ , "c_int" |
| 41 | \ , "c_uint" |
| 42 | \ , "c_long" |
| 43 | \ , "c_ulong" |
| 44 | \ , "c_longlong" |
| 45 | \ , "c_ulonglong" |
| 46 | \ , "c_longdouble" |
| 47 | \ , "anyopaque"] |
| 48 | \ , 'zigConstant': ["undefined" |
| 49 | \ , "unreachable"] |
| 50 | \ , 'zigConditional': ["if" |
| 51 | \ , "else" |
| 52 | \ , "switch"] |
| 53 | \ , 'zigRepeat': ["while" |
| 54 | \ , "for"] |
| 55 | \ , 'zigComparatorWord': ["and" |
| 56 | \ , "or" |
| 57 | \ , "orelse"] |
| 58 | \ , 'zigStructure': ["struct" |
| 59 | \ , "enum" |
| 60 | \ , "union" |
| 61 | \ , "error" |
| 62 | \ , "packed" |
| 63 | \ , "opaque"] |
| 64 | \ , 'zigException': ["error"] |
| 65 | \ , 'zigVarDecl': ["var" |
| 66 | \ , "const" |
| 67 | \ , "comptime" |
| 68 | \ , "threadlocal"] |
| 69 | \ , 'zigDummyVariable': ["_"] |
| 70 | \ , 'zigKeyword': ["fn" |
| 71 | \ , "try" |
| 72 | \ , "test" |
| 73 | \ , "pub" |
| 74 | \ , "usingnamespace"] |
| 75 | \ , 'zigExecution': ["return" |
| 76 | \ , "break" |
| 77 | \ , "continue"] |
| 78 | \ , 'zigMacro': ["defer" |
| 79 | \ , "errdefer" |
| 80 | \ , "async" |
| 81 | \ , "nosuspend" |
| 82 | \ , "await" |
| 83 | \ , "suspend" |
| 84 | \ , "resume" |
| 85 | \ , "export" |
| 86 | \ , "extern"] |
| 87 | \ , 'zigPreProc': ["catch" |
| 88 | \ , "inline" |
| 89 | \ , "noinline" |
| 90 | \ , "asm" |
| 91 | \ , "callconv" |
| 92 | \ , "noalias"] |
| 93 | \ , 'zigBuiltinFn': ["align" |
| 94 | \ , "@addWithOverflow" |
| 95 | \ , "@as" |
| 96 | \ , "@atomicLoad" |
| 97 | \ , "@atomicStore" |
| 98 | \ , "@bitCast" |
| 99 | \ , "@breakpoint" |
Gregory Anders | e08bfef | 2023-10-19 10:16:59 -0500 | [diff] [blame] | 100 | \ , "@trap" |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 101 | \ , "@alignCast" |
| 102 | \ , "@alignOf" |
| 103 | \ , "@cDefine" |
| 104 | \ , "@cImport" |
| 105 | \ , "@cInclude" |
| 106 | \ , "@cUndef" |
| 107 | \ , "@clz" |
| 108 | \ , "@cmpxchgWeak" |
| 109 | \ , "@cmpxchgStrong" |
| 110 | \ , "@compileError" |
| 111 | \ , "@compileLog" |
Gregory Anders | e08bfef | 2023-10-19 10:16:59 -0500 | [diff] [blame] | 112 | \ , "@constCast" |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 113 | \ , "@ctz" |
| 114 | \ , "@popCount" |
| 115 | \ , "@divExact" |
| 116 | \ , "@divFloor" |
| 117 | \ , "@divTrunc" |
| 118 | \ , "@embedFile" |
| 119 | \ , "@export" |
| 120 | \ , "@extern" |
| 121 | \ , "@tagName" |
| 122 | \ , "@TagType" |
| 123 | \ , "@errorName" |
| 124 | \ , "@call" |
| 125 | \ , "@errorReturnTrace" |
| 126 | \ , "@fence" |
| 127 | \ , "@fieldParentPtr" |
| 128 | \ , "@field" |
| 129 | \ , "@unionInit" |
| 130 | \ , "@frameAddress" |
| 131 | \ , "@import" |
Gregory Anders | e08bfef | 2023-10-19 10:16:59 -0500 | [diff] [blame] | 132 | \ , "@inComptime" |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 133 | \ , "@newStackCall" |
| 134 | \ , "@asyncCall" |
Gregory Anders | e08bfef | 2023-10-19 10:16:59 -0500 | [diff] [blame] | 135 | \ , "@ptrFromInt" |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 136 | \ , "@max" |
| 137 | \ , "@min" |
| 138 | \ , "@memcpy" |
| 139 | \ , "@memset" |
| 140 | \ , "@mod" |
| 141 | \ , "@mulAdd" |
| 142 | \ , "@mulWithOverflow" |
| 143 | \ , "@splat" |
| 144 | \ , "@src" |
| 145 | \ , "@bitOffsetOf" |
| 146 | \ , "@byteOffsetOf" |
| 147 | \ , "@offsetOf" |
| 148 | \ , "@OpaqueType" |
| 149 | \ , "@panic" |
| 150 | \ , "@prefetch" |
| 151 | \ , "@ptrCast" |
Gregory Anders | e08bfef | 2023-10-19 10:16:59 -0500 | [diff] [blame] | 152 | \ , "@intFromPtr" |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 153 | \ , "@rem" |
| 154 | \ , "@returnAddress" |
| 155 | \ , "@setCold" |
| 156 | \ , "@Type" |
| 157 | \ , "@shuffle" |
| 158 | \ , "@reduce" |
| 159 | \ , "@select" |
| 160 | \ , "@setRuntimeSafety" |
| 161 | \ , "@setEvalBranchQuota" |
| 162 | \ , "@setFloatMode" |
| 163 | \ , "@shlExact" |
| 164 | \ , "@This" |
| 165 | \ , "@hasDecl" |
| 166 | \ , "@hasField" |
| 167 | \ , "@shlWithOverflow" |
| 168 | \ , "@shrExact" |
| 169 | \ , "@sizeOf" |
| 170 | \ , "@bitSizeOf" |
| 171 | \ , "@sqrt" |
| 172 | \ , "@byteSwap" |
| 173 | \ , "@subWithOverflow" |
| 174 | \ , "@intCast" |
| 175 | \ , "@floatCast" |
Gregory Anders | e08bfef | 2023-10-19 10:16:59 -0500 | [diff] [blame] | 176 | \ , "@floatFromInt" |
| 177 | \ , "@intFromFloat" |
| 178 | \ , "@intFromBool" |
| 179 | \ , "@errorCast" |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 180 | \ , "@truncate" |
| 181 | \ , "@typeInfo" |
| 182 | \ , "@typeName" |
| 183 | \ , "@TypeOf" |
| 184 | \ , "@atomicRmw" |
Gregory Anders | e08bfef | 2023-10-19 10:16:59 -0500 | [diff] [blame] | 185 | \ , "@errorFromInt" |
| 186 | \ , "@intFromError" |
| 187 | \ , "@enumFromInt" |
| 188 | \ , "@intFromEnum" |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 189 | \ , "@setAlignStack" |
| 190 | \ , "@frame" |
| 191 | \ , "@Frame" |
| 192 | \ , "@frameSize" |
| 193 | \ , "@bitReverse" |
| 194 | \ , "@Vector" |
Gregory Anders | e08bfef | 2023-10-19 10:16:59 -0500 | [diff] [blame] | 195 | \ , "@volatileCast" |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 196 | \ , "@sin" |
| 197 | \ , "@cos" |
| 198 | \ , "@tan" |
| 199 | \ , "@exp" |
| 200 | \ , "@exp2" |
| 201 | \ , "@log" |
| 202 | \ , "@log2" |
| 203 | \ , "@log10" |
Gregory Anders | e08bfef | 2023-10-19 10:16:59 -0500 | [diff] [blame] | 204 | \ , "@abs" |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 205 | \ , "@floor" |
| 206 | \ , "@ceil" |
| 207 | \ , "@trunc" |
| 208 | \ , "@wasmMemorySize" |
| 209 | \ , "@wasmMemoryGrow" |
| 210 | \ , "@round"] |
| 211 | \ } |
| 212 | |
| 213 | function! s:syntax_keyword(dict) |
| 214 | for key in keys(a:dict) |
| 215 | execute 'syntax keyword' key join(a:dict[key], ' ') |
| 216 | endfor |
| 217 | endfunction |
| 218 | |
| 219 | call s:syntax_keyword(s:zig_syntax_keywords) |
| 220 | |
| 221 | syntax match zigType "\v<[iu][1-9]\d*>" |
| 222 | syntax match zigOperator display "\V\[-+/*=^&?|!><%~]" |
| 223 | syntax match zigArrowCharacter display "\V->" |
| 224 | |
| 225 | " 12_34 (. but not ..)? (12_34)? (exponent 12_34)? |
| 226 | syntax match zigDecNumber display "\v<\d%(_?\d)*%(\.\.@!)?%(\d%(_?\d)*)?%([eE][+-]?\d%(_?\d)*)?" |
| 227 | syntax match zigHexNumber display "\v<0x\x%(_?\x)*%(\.\.@!)?%(\x%(_?\x)*)?%([pP][+-]?\d%(_?\d)*)?" |
| 228 | syntax match zigOctNumber display "\v<0o\o%(_?\o)*" |
| 229 | syntax match zigBinNumber display "\v<0b[01]%(_?[01])*" |
| 230 | |
| 231 | syntax match zigCharacterInvalid display contained /b\?'\zs[\n\r\t']\ze'/ |
| 232 | syntax match zigCharacterInvalidUnicode display contained /b'\zs[^[:cntrl:][:graph:][:alnum:][:space:]]\ze'/ |
| 233 | syntax match zigCharacter /b'\([^\\]\|\\\(.\|x\x\{2}\)\)'/ contains=zigEscape,zigEscapeError,zigCharacterInvalid,zigCharacterInvalidUnicode |
| 234 | syntax match zigCharacter /'\([^\\]\|\\\(.\|x\x\{2}\|u\x\{4}\|U\x\{6}\)\)'/ contains=zigEscape,zigEscapeUnicode,zigEscapeError,zigCharacterInvalid |
| 235 | |
| 236 | syntax region zigBlock start="{" end="}" transparent fold |
| 237 | |
| 238 | syntax region zigCommentLine start="//" end="$" contains=zigTodo,@Spell |
| 239 | syntax region zigCommentLineDoc start="//[/!]/\@!" end="$" contains=zigTodo,@Spell |
| 240 | |
| 241 | syntax match zigMultilineStringPrefix /c\?\\\\/ contained containedin=zigMultilineString |
| 242 | syntax region zigMultilineString matchgroup=zigMultilineStringDelimiter start="c\?\\\\" end="$" contains=zigMultilineStringPrefix display |
| 243 | |
| 244 | syntax keyword zigTodo contained TODO |
| 245 | |
| 246 | syntax region zigString matchgroup=zigStringDelimiter start=+c\?"+ skip=+\\\\\|\\"+ end=+"+ oneline contains=zigEscape,zigEscapeUnicode,zigEscapeError,@Spell |
| 247 | syntax match zigEscapeError display contained /\\./ |
| 248 | syntax match zigEscape display contained /\\\([nrt\\'"]\|x\x\{2}\)/ |
| 249 | syntax match zigEscapeUnicode display contained /\\\(u\x\{4}\|U\x\{6}\)/ |
| 250 | |
| 251 | highlight default link zigDecNumber zigNumber |
| 252 | highlight default link zigHexNumber zigNumber |
| 253 | highlight default link zigOctNumber zigNumber |
| 254 | highlight default link zigBinNumber zigNumber |
| 255 | |
| 256 | highlight default link zigBuiltinFn Statement |
| 257 | highlight default link zigKeyword Keyword |
| 258 | highlight default link zigType Type |
| 259 | highlight default link zigCommentLine Comment |
| 260 | highlight default link zigCommentLineDoc Comment |
| 261 | highlight default link zigDummyVariable Comment |
| 262 | highlight default link zigTodo Todo |
| 263 | highlight default link zigString String |
| 264 | highlight default link zigStringDelimiter String |
| 265 | highlight default link zigMultilineString String |
| 266 | highlight default link zigMultilineStringContent String |
| 267 | highlight default link zigMultilineStringPrefix String |
| 268 | highlight default link zigMultilineStringDelimiter Delimiter |
| 269 | highlight default link zigCharacterInvalid Error |
| 270 | highlight default link zigCharacterInvalidUnicode zigCharacterInvalid |
| 271 | highlight default link zigCharacter Character |
| 272 | highlight default link zigEscape Special |
| 273 | highlight default link zigEscapeUnicode zigEscape |
| 274 | highlight default link zigEscapeError Error |
| 275 | highlight default link zigBoolean Boolean |
| 276 | highlight default link zigNull Boolean |
| 277 | highlight default link zigConstant Constant |
| 278 | highlight default link zigNumber Number |
| 279 | highlight default link zigArrowCharacter zigOperator |
| 280 | highlight default link zigOperator Operator |
| 281 | highlight default link zigStructure Structure |
| 282 | highlight default link zigExecution Special |
| 283 | highlight default link zigMacro Macro |
| 284 | highlight default link zigConditional Conditional |
| 285 | highlight default link zigComparatorWord Keyword |
| 286 | highlight default link zigRepeat Repeat |
| 287 | highlight default link zigSpecial Special |
| 288 | highlight default link zigVarDecl Function |
| 289 | highlight default link zigPreProc PreProc |
| 290 | highlight default link zigException Exception |
| 291 | |
| 292 | delfunction s:syntax_keyword |
| 293 | |
| 294 | let b:current_syntax = "zig" |
| 295 | |
| 296 | let &cpo = s:cpo_save |
| 297 | unlet! s:cpo_save |