wat.vim (4866B)
1 " Vim syntax file 2 " Language: WebAssembly 3 " Maintainer: rhysd <lin90162@yahoo.co.jp> 4 " Last Change: Nov 14, 2023 5 " For bugs, patches and license go to https://github.com/rhysd/vim-wasm 6 7 if exists("b:current_syntax") 8 finish 9 endif 10 11 let s:cpo_save = &cpo 12 set cpo&vim 13 14 syn cluster watNotTop contains=watModule,watInstWithType,watInstGetSet,watInstGeneral,watParamInst,watControlInst,watSimdInst,watString,watNamedVar,watUnnamedVar,watFloat,watNumber,watComment,watList,watType 15 16 " Instructions 17 " https://webassembly.github.io/spec/core/text/instructions.html 18 " Note: memarg (align=,offset=) can be added to memory instructions 19 syn match watInstWithType "\%((\s*\)\@<=\<\%(i32\|i64\|f32\|f64\|memory\)\.[[:alnum:]_]\+\%(/\%(i32\|i64\|f32\|f64\)\)\=\>\%(\s\+\%(align\|offset\)=\)\=" contained display 20 syn match watInstGeneral "\%((\s*\)\@<=\<[[:alnum:]_]\+\>" contained display 21 syn match watInstGetSet "\%((\s*\)\@<=\<\%(local\|global\)\.\%(get\|set\)\>" contained display 22 " https://webassembly.github.io/spec/core/text/instructions.html#control-instructions 23 syn match watControlInst "\%((\s*\)\@<=\<\%(block\|end\|loop\|if\|then\|else\|unreachable\|nop\|br\|br_if\|br_table\|return\|call\|call_indirect\)\>" contained display 24 " https://webassembly.github.io/spec/core/text/instructions.html#parametric-instructions 25 syn match watParamInst "\%((\s*\)\@<=\<\%(drop\|select\)\>" contained display 26 " SIMD instructions 27 " https://webassembly.github.io/simd/core/text/instructions.html#simd-instructions 28 syn match watSimdInst "\<\%(v128\|i8x16\|i16x8\|i32x4\|i64x2\|f32x4\|f64x2)\)\.[[:alnum:]_]\+\%(\s\+\%(i8x16\|i16x8\|i32x4\|i64x2\|f32x4\|f64x2\)\)\=\>" contained display 29 30 " Identifiers 31 " https://webassembly.github.io/spec/core/text/values.html#text-id 32 syn match watNamedVar "$\+[[:alnum:]!#$%&'∗./:=><?@\\^_`~+-]*" contained contains=watEscapeUtf8 33 syn match watUnnamedVar "$\+\d\+[[:alnum:]!#$%&'∗./:=><?@\\^_`~+-]\@!" contained display 34 " Presuming the source text is itself encoded correctly, strings that do not 35 " contain any uses of hexadecimal byte escapes are always valid names. 36 " https://webassembly.github.io/spec/core/text/values.html#names 37 syn match watEscapedUtf8 "\\\x\{1,6}" contained containedin=watNamedVar display 38 39 " String literals 40 " https://webassembly.github.io/spec/core/text/values.html#strings 41 syn region watString start=+"+ skip=+\\\\\|\\"+ end=+"+ contained contains=watStringSpecial 42 syn match watStringSpecial "\\\x\x\|\\[tnr'\\\"]\|\\u\x\+" contained containedin=watString display 43 44 " Float literals 45 " https://webassembly.github.io/spec/core/text/values.html#floating-point 46 syn match watFloat "\<-\=\d\%(_\=\d\)*\%(\.\d\%(_\=\d\)*\)\=\%([eE][-+]\=\d\%(_\=\d\)*\)\=" display contained 47 syn match watFloat "\<-\=0x\x\%(_\=\x\)*\%(\.\x\%(_\=\x\)*\)\=\%([pP][-+]\=\d\%(_\=\d\)*\)\=" display contained 48 syn keyword watFloat inf nan contained 49 syn match watFloat "nan:0x\x\%(_\=\x\)*" display contained 50 51 " Integer literals 52 " https://webassembly.github.io/spec/core/text/values.html#integers 53 syn match watNumber "\<-\=\d\%(_\=\d\)*\>" display contained 54 syn match watNumber "\<-\=0x\x\%(_\=\x\)*\>" display contained 55 56 " Comments 57 " https://webassembly.github.io/spec/core/text/lexical.html#comments 58 syn region watComment start=";;" end="$" 59 syn region watComment start="(;;\@!" end=";)" 60 61 syn region watList matchgroup=watListDelimiter start="(;\@!" matchgroup=watListDelimiter end=";\@<!)" contains=@watNotTop 62 63 " Types 64 " https://webassembly.github.io/spec/core/text/types.html 65 " Note: `mut` was changed to `const`/`var` at Wasm 2.0 66 syn keyword watType i64 i32 f64 f32 param result funcref func externref extern mut v128 const var contained 67 syn match watType "\%((\_s*\)\@<=func\%(\_s*[()]\)\@=" display contained 68 69 " Modules 70 " https://webassembly.github.io/spec/core/text/modules.html 71 syn keyword watModule module type export import table memory global data elem contained 72 syn match watModule "\%((\_s*\)\@<=func\%(\_s\+\$\)\@=" display contained 73 74 syn sync maxlines=100 75 76 hi def link watModule PreProc 77 hi def link watListDelimiter Delimiter 78 hi def link watInstWithType Operator 79 hi def link watInstGetSet Operator 80 hi def link watInstGeneral Operator 81 hi def link watControlInst Statement 82 hi def link watSimdInst Operator 83 hi def link watParamInst Conditional 84 hi def link watString String 85 hi def link watStringSpecial Special 86 hi def link watNamedVar Identifier 87 hi def link watUnnamedVar PreProc 88 hi def link watFloat Float 89 hi def link watNumber Number 90 hi def link watComment Comment 91 hi def link watType Type 92 hi def link watEscapedUtf8 Special 93 94 let b:current_syntax = "wat" 95 96 let &cpo = s:cpo_save 97 unlet s:cpo_save