summaryrefslogtreecommitdiff
path: root/config/vim/plugin/hare.vim
diff options
context:
space:
mode:
Diffstat (limited to 'config/vim/plugin/hare.vim')
-rw-r--r--config/vim/plugin/hare.vim78
1 files changed, 78 insertions, 0 deletions
diff --git a/config/vim/plugin/hare.vim b/config/vim/plugin/hare.vim
new file mode 100644
index 0000000..ad8cd3a
--- /dev/null
+++ b/config/vim/plugin/hare.vim
@@ -0,0 +1,78 @@
+" Vim syntax file
+" Language: Hare
+
+if exists("b:current_syntax")
+ finish
+endif
+
+syn case match
+syn keyword hareKeyword let const fn def type static export defer _
+syn keyword hareBranch for return break continue yield
+syn keyword hareConditional if else match switch
+syn keyword hareLabel case
+syn keyword hareBuiltin len offset free alloc assert append abort delete insert
+syn keyword hareBuiltin vastart vaarg vaend
+syn keyword hareOperator is as
+syn match hareType "\vsize((\_\s|//.*)*\()@!"
+syn match hareBuiltin "\vsize((\_\s|//.*)*\()@="
+syn match harePreProc "^use .*;"
+syn match harePreProc "@[a-z]*"
+syn match hareOperator "\.\.\." "\.\."
+
+syn region hareString start=+\z(["']\)+ end=+\z1+ skip=+\\\\\|\\\z1+
+syn region hareString start=+`+ end=+`+
+
+"adapted from c.vim
+"integer number, or floating point number without a dot and with "f".
+syn match hareNumbers display transparent "\v<\d" contains=hareNumber,hareOctal,hareBinary,hareFloat
+syn match hareNumber display contained "\v\d+(e[-+]?\d+)?(z|[iu](8|16|32|64)?)?"
+"hex number
+syn match hareNumber display contained "\v0x\x+(z|[iu](8|16|32|64)?)?"
+"octal number
+syn match hareOctal display contained "\v0o\o+(z|[iu](8|16|32|64)?)?"
+"binary number
+syn match hareBinary display contained '\v0b[01]+(z|[iu](8|16|32|64)?)?'
+syn match hareFloat display contained "\v\d+(e[-+]?\d+)?(f32|f64)"
+"floating point number, with dot, optional exponent
+syn match hareFloat display contained "\v\d+\.\d+(e[-+]?\d+)?(f32|f64)?"
+
+syn match hareSpaceError display excludenl "\v\s+$"
+syn match hareSpaceError display "\v +\t"me=e-1
+
+syn keyword hareTodo contained TODO FIXME XXX
+syn region hareComment start="//" end="$" contains=hareTodo,@Spell
+
+syn keyword hareType u8 u16 u32 u64 i8 i16 i32 i64
+syn keyword hareType uint int
+syn keyword hareType uintptr
+syn keyword hareType f32 f64
+syn keyword hareType bool
+syn keyword hareType char str
+syn keyword hareType void
+syn keyword hareType struct union
+syn keyword hareType enum
+syn keyword hareType nullable
+syn keyword hareType rune
+syn keyword hareType valist
+syn keyword hareNull null
+syn keyword hareBoolean true false
+
+hi def link hareBinary Number
+hi def link hareBoolean Boolean
+hi def link hareBranch Repeat
+hi def link hareBuiltin Function
+hi def link hareComment Comment
+hi def link hareConditional Conditional
+hi def link hareFloat Number
+hi def link hareKeyword Keyword
+hi def link hareLabel Label
+hi def link hareNull Constant
+hi def link hareNumber Number
+hi def link hareOctal Number
+hi def link hareOperator Operator
+hi def link harePreProc PreProc
+hi def link hareString String
+hi def link hareTodo Todo
+hi def link hareType Type
+hi def link hareSpaceError Error
+" vim: tabstop=8 shiftwidth=2 expandtab