| 1 | " Vim syntax file |
| 2 | " Language: V |
| 3 | " Maintainer: V contributors |
| 4 | |
| 5 | if exists('b:current_syntax') |
| 6 | finish |
| 7 | endif |
| 8 | |
| 9 | syn case match |
| 10 | |
| 11 | syn keyword vTodo TODO FIXME XXX NOTE BUG contained |
| 12 | syn match vComment +//.*$+ contains=vTodo,@Spell |
| 13 | syn region vComment start='/\*' end='\*/' contains=vTodo,@Spell |
| 14 | |
| 15 | syn region vString start=+r'+ end=+'+ |
| 16 | syn region vString start=+c'+ skip=+\\\\\|\\'+ end=+'+ contains=vEscape,vInterpolation |
| 17 | syn region vString start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=vEscape,vInterpolation |
| 18 | syn region vChar start=+`+ skip=+\\\\\|\\`+ end=+`+ contains=vEscape |
| 19 | |
| 20 | syn match vEscape +\\[abfnrtv'"`\\$]+ contained |
| 21 | syn match vEscape +\\x[0-9A-Fa-f]\{2}+ contained |
| 22 | syn match vEscape +\\u[0-9A-Fa-f]\{4}+ contained |
| 23 | syn region vInterpolation start=+\${+ end=+}+ contained contains=vComptime,vNumber,vString,vChar,vOperator |
| 24 | |
| 25 | syn match vNumber /\v<0x[0-9A-Fa-f_]+>/ |
| 26 | syn match vNumber /\v<0b[01_]+>/ |
| 27 | syn match vNumber /\v<0o[0-7_]+>/ |
| 28 | syn match vNumber /\v<\d[\d_]*\.\d[\d_]*([eE][+-]?\d[\d_]*)?>/ |
| 29 | syn match vNumber /\v<\d[\d_]*([eE][+-]?\d[\d_]*)?>/ |
| 30 | |
| 31 | syn keyword vBoolean true false |
| 32 | syn keyword vConstant none nil |
| 33 | syn keyword vKeyword as asm assert atomic break const continue defer else enum false for fn __global go goto if import in interface is match module mut shared lock rlock none nil return select sizeof isreftype _likely_ _unlikely_ __offsetof struct true type typeof dump or union pub static volatile unsafe spawn implements like ilike |
| 34 | syn keyword vType bool string rune i8 i16 int i64 i128 isize byte u8 u16 u32 u64 u128 usize f32 f64 char map chan any voidptr byteptr charptr |
| 35 | |
| 36 | syn match vComptime /\$[A-Za-z_][A-Za-z0-9_]*/ |
| 37 | syn match vComptime /@[A-Z_][A-Z0-9_]*/ |
| 38 | syn region vAttribute start=/@\[/ end=/\]/ contains=vComptime |
| 39 | |
| 40 | syn match vOperator /::\|:=\|==\|!=\|<=\|>=\|<<=\|>>=\|>>>=\|&&=\|||=\|<<\|>>>\|>>\|&&\|||\|+=\|-=\|\*=\|\/=\|%=\|\^=\||=\|&=\|<-\|++\|--/ |
| 41 | syn match vOperator /[+\-*\/%&|^~!=<>?:]/ |
| 42 | |
| 43 | syn match vFunction /\<[A-Za-z_][A-Za-z0-9_]*\ze\s*(/ |
| 44 | |
| 45 | hi def link vTodo Todo |
| 46 | hi def link vComment Comment |
| 47 | hi def link vString String |
| 48 | hi def link vChar Character |
| 49 | hi def link vEscape SpecialChar |
| 50 | hi def link vInterpolation Special |
| 51 | hi def link vNumber Number |
| 52 | hi def link vBoolean Boolean |
| 53 | hi def link vConstant Constant |
| 54 | hi def link vKeyword Keyword |
| 55 | hi def link vType Type |
| 56 | hi def link vComptime PreProc |
| 57 | hi def link vAttribute PreProc |
| 58 | hi def link vOperator Operator |
| 59 | hi def link vFunction Function |
| 60 | |
| 61 | let b:current_syntax = 'v' |
| 62 | |