summaryrefslogtreecommitdiffstats
path: root/syntax/zig.vim
diff options
context:
space:
mode:
Diffstat (limited to 'syntax/zig.vim')
-rw-r--r--syntax/zig.vim106
1 files changed, 106 insertions, 0 deletions
diff --git a/syntax/zig.vim b/syntax/zig.vim
new file mode 100644
index 00000000..05e29d5f
--- /dev/null
+++ b/syntax/zig.vim
@@ -0,0 +1,106 @@
+if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'zig') != -1
+ finish
+endif
+
+" Vim syntax file
+" Language: Zig
+" Maintainer: Andrew Kelley
+" Latest Revision: 03 August 2016
+
+if exists("b:current_syntax")
+ finish
+endif
+let b:current_syntax = "zig"
+
+syn keyword zigStorage const var extern packed export pub noalias inline comptime nakedcc stdcallcc volatile allowzero align linksection threadlocal
+syn keyword zigStructure struct enum union error
+syn keyword zigStatement break return continue asm defer errdefer unreachable try catch async await suspend resume cancel
+syn keyword zigConditional if else switch and or orelse
+syn keyword zigRepeat while for
+
+syn keyword zigConstant null undefined
+syn keyword zigKeyword fn usingnamespace test
+syn keyword zigType bool f16 f32 f64 f128 void noreturn type anyerror promise
+syn keyword zigType i0 u0 isize usize comptime_int comptime_float
+syn keyword zigType c_short c_ushort c_int c_uint c_long c_ulong c_longlong c_ulonglong c_longdouble c_void
+
+syn keyword zigBoolean true false
+
+syn match zigType "\v<[iu][1-9]\d*>"
+
+syn match zigOperator display "\%(+%\?\|-%\?\|/\|*%\?\|=\|\^\|&\|?\||\|!\|>\|<\|%\|<<%\?\|>>\)=\?"
+syn match zigArrowCharacter display "->"
+
+syn match zigBuiltinFn "\v\@(addWithOverflow|ArgType|atomicLoad|bitCast|breakpoint)>"
+syn match zigBuiltinFn "\v\@(alignCast|alignOf|cDefine|cImport|cInclude)>"
+syn match zigBuiltinFn "\v\@(cUndef|canImplicitCast|clz|cmpxchgWeak|cmpxchgStrong|compileError)>"
+syn match zigBuiltinFn "\v\@(compileLog|ctz|popCount|divExact|divFloor|divTrunc)>"
+syn match zigBuiltinFn "\v\@(embedFile|export|tagName|TagType|errorName)>"
+syn match zigBuiltinFn "\v\@(errorReturnTrace|fence|fieldParentPtr|field)>"
+syn match zigBuiltinFn "\v\@(frameAddress|import|inlineCall|newStackCall|intToPtr|IntType)>"
+syn match zigBuiltinFn "\v\@(maxValue|memberCount|memberName|memberType)>"
+syn match zigBuiltinFn "\v\@(memcpy|memset|minValue|mod|mulWithOverflow)>"
+syn match zigBuiltinFn "\v\@(noInlineCall|bitOffsetOf|byteOffsetOf|OpaqueType|panic|ptrCast)>"
+syn match zigBuiltinFn "\v\@(ptrToInt|rem|returnAddress|setCold)>"
+syn match zigBuiltinFn "\v\@(setRuntimeSafety|setEvalBranchQuota|setFloatMode)>"
+syn match zigBuiltinFn "\v\@(setGlobalLinkage|setGlobalSection|shlExact|This|hasDecl)>"
+syn match zigBuiltinFn "\v\@(shlWithOverflow|shrExact|sizeOf|sqrt|bswap|subWithOverflow|intCast|floatCast|intToFloat|floatToInt|boolToInt|errSetCast)>"
+syn match zigBuiltinFn "\v\@(truncate|typeId|typeInfo|typeName|typeOf|atomicRmw|bytesToSlice|sliceToBytes)>"
+syn match zigBuiltinFn "\v\@(intToError|errorToInt|intToEnum|enumToInt|setAlignStack|handle|bitreverse|Vector)>"
+
+syn match zigDecNumber display "\<[0-9]\+\%(.[0-9]\+\)\=\%([eE][+-]\?[0-9]\+\)\="
+syn match zigHexNumber display "\<0x[a-fA-F0-9]\+\%([a-fA-F0-9]\+\%([pP][+-]\?[0-9]\+\)\?\)\="
+syn match zigOctNumber display "\<0o[0-7]\+"
+syn match zigBinNumber display "\<0b[01]\+\%(.[01]\+\%([eE][+-]\?[0-9]\+\)\?\)\="
+
+
+syn match zigCharacterInvalid display contained /b\?'\zs[\n\r\t']\ze'/
+syn match zigCharacterInvalidUnicode display contained /b'\zs[^[:cntrl:][:graph:][:alnum:][:space:]]\ze'/
+syn match zigCharacter /b'\([^\\]\|\\\(.\|x\x\{2}\)\)'/ contains=zigEscape,zigEscapeError,zigCharacterInvalid,zigCharacterInvalidUnicode
+syn match zigCharacter /'\([^\\]\|\\\(.\|x\x\{2}\|u\x\{4}\|U\x\{6}\)\)'/ contains=zigEscape,zigEscapeUnicode,zigEscapeError,zigCharacterInvalid
+
+syn region zigCommentLine start="//" end="$" contains=zigTodo,@Spell
+syn region zigCommentLineDoc start="////\@!" end="$" contains=zigTodo,@Spell
+
+" TODO: match only the first '\\' within the zigMultilineString as zigMultilineStringPrefix
+syn match zigMultilineStringPrefix display contained /c\?\\\\/
+syn region zigMultilineString start="c\?\\\\" end="$" contains=zigMultilineStringPrefix
+
+syn keyword zigTodo contained TODO
+
+syn match zigEscapeError display contained /\\./
+syn match zigEscape display contained /\\\([nrt\\'"]\|x\x\{2}\)/
+syn match zigEscapeUnicode display contained /\\\(u\x\{4}\|U\x\{6}\)/
+syn region zigString start=+c\?"+ skip=+\\\\\|\\"+ end=+"+ oneline contains=zigEscape,zigEscapeUnicode,zigEscapeError,@Spell
+
+hi def link zigDecNumber zigNumber
+hi def link zigHexNumber zigNumber
+hi def link zigOctNumber zigNumber
+hi def link zigBinNumber zigNumber
+
+hi def link zigBuiltinFn Function
+hi def link zigKeyword Keyword
+hi def link zigType Type
+hi def link zigCommentLine Comment
+hi def link zigCommentLineDoc SpecialComment
+hi def link zigTodo Todo
+hi def link zigString String
+hi def link zigMultilineString String
+hi def link zigMultilineStringContent String
+hi def link zigMultilineStringPrefix Comment
+hi def link zigCharacterInvalid Error
+hi def link zigCharacterInvalidUnicode zigCharacterInvalid
+hi def link zigCharacter Character
+hi def link zigEscape Special
+hi def link zigEscapeUnicode zigEscape
+hi def link zigEscapeError Error
+hi def link zigBoolean Boolean
+hi def link zigConstant Constant
+hi def link zigNumber Number
+hi def link zigArrowCharacter zigOperator
+hi def link zigOperator Operator
+hi def link zigStorage StorageClass
+hi def link zigStructure Structure
+hi def link zigStatement Statement
+hi def link zigConditional Conditional
+hi def link zigRepeat Repeat