blob: 4c7ae924869b82b895bf9a4cf6748f5363a81447 [file] [log] [blame]
Amelia Clarke35dfe582024-05-24 08:05:00 +02001" Vim syntax file.
2" Language: Hare
3" Maintainer: Amelia Clarke <selene@perilune.dev>
4" Last Change: 2024-05-10
5" Upstream: https://git.sr.ht/~sircmpwn/hare.vim
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +01006
Amelia Clarke35dfe582024-05-24 08:05:00 +02007if exists('b:current_syntax')
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +01008 finish
9endif
Amelia Clarke35dfe582024-05-24 08:05:00 +020010syn include @haredoc syntax/haredoc.vim
11let b:current_syntax = 'hare'
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010012
Amelia Clarke35dfe582024-05-24 08:05:00 +020013" Syntax {{{1
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010014syn case match
Amelia Clarke35dfe582024-05-24 08:05:00 +020015syn iskeyword @,48-57,@-@,_
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010016
Amelia Clarke35dfe582024-05-24 08:05:00 +020017" Keywords {{{2
18syn keyword hareConditional else if match switch
19syn keyword hareDefine def
20syn keyword hareInclude use
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010021syn keyword hareKeyword break continue return yield
Amelia Clarke35dfe582024-05-24 08:05:00 +020022syn keyword hareKeyword case
23syn keyword hareKeyword const let
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010024syn keyword hareKeyword defer
Amelia Clarke35dfe582024-05-24 08:05:00 +020025syn keyword hareKeyword export static
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010026syn keyword hareKeyword fn
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010027syn keyword hareOperator as is
28syn keyword hareRepeat for
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010029syn keyword hareTypedef type
30
Amelia Clarke35dfe582024-05-24 08:05:00 +020031" Attributes.
32syn keyword hareAttribute @fini @init @test
33syn keyword hareAttribute @offset @packed
34syn keyword hareAttribute @symbol
35syn keyword hareAttribute @threadlocal
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010036
Amelia Clarke35dfe582024-05-24 08:05:00 +020037" Builtins.
38syn keyword hareBuiltin abort assert
39syn keyword hareBuiltin align len offset
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010040syn keyword hareBuiltin alloc free
41syn keyword hareBuiltin append delete insert
Amelia Clarke35dfe582024-05-24 08:05:00 +020042syn keyword hareBuiltin vaarg vaend vastart
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010043
Amelia Clarke35dfe582024-05-24 08:05:00 +020044" Types {{{2
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010045syn keyword hareType bool
Amelia Clarke35dfe582024-05-24 08:05:00 +020046syn keyword hareType done
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010047syn keyword hareType f32 f64
Amelia Clarke35dfe582024-05-24 08:05:00 +020048syn keyword hareType i8 i16 i32 i64 int
49syn keyword hareType never
50syn keyword hareType opaque
51syn keyword hareType rune str
52syn keyword hareType u8 u16 u32 u64 uint
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010053syn keyword hareType uintptr
Amelia Clarke35dfe582024-05-24 08:05:00 +020054syn keyword hareType valist
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010055syn keyword hareType void
56
Amelia Clarke35dfe582024-05-24 08:05:00 +020057" Other types.
58syn keyword hareStorageClass nullable
59syn keyword hareStructure enum struct union
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010060
Amelia Clarke35dfe582024-05-24 08:05:00 +020061" Literals {{{2
62syn keyword hareBoolean false true
63syn keyword hareConstant null
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010064
Amelia Clarke35dfe582024-05-24 08:05:00 +020065" Integer literals.
66syn match hareNumber '\v<%(0|[1-9]%(_?\d)*)%([Ee]\+?\d+)?%([iu]%(8|16|32|64)?|z)?>' display
67syn match hareNumber '\v<0b[01]%(_?[01])*%([iu]%(8|16|32|64)?|z)?>' display
68syn match hareNumber '\v<0o\o%(_?\o)*%([iu]%(8|16|32|64)?|z)?>' display
69syn match hareNumber '\v<0x\x%(_?\x)*%([iu]%(8|16|32|64)?|z)?>' display
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010070
Amelia Clarke35dfe582024-05-24 08:05:00 +020071" Floating-point literals.
72syn match hareFloat '\v<%(0|[1-9]%(_?\d)*)\.\d%(_?\d)*%([Ee][+-]?\d+)?%(f32|f64)?>' display
73syn match hareFloat '\v<%(0|[1-9]%(_?\d)*)%([Ee][+-]?\d+)?%(f32|f64)>' display
74syn match hareFloat '\v<0x\x%(_?\x)*%(\.\x%(_?\x)*)?[Pp][+-]?\d+%(f32|f64)?>' display
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010075
Amelia Clarke35dfe582024-05-24 08:05:00 +020076" Rune and string literals.
77syn region hareRune start="'" skip="\\'" end="'" contains=hareEscape
78syn region hareString start='"' skip='\\"' end='"' contains=hareEscape,hareFormat
79syn region hareString start='`' end='`' contains=hareFormat
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010080
Amelia Clarke35dfe582024-05-24 08:05:00 +020081" Escape sequences.
82syn match hareEscape '\\[0abfnrtv\\'"]' contained
83syn match hareEscape '\v\\%(x\x{2}|u\x{4}|U\x{8})' contained display
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010084
Amelia Clarke35dfe582024-05-24 08:05:00 +020085" Format sequences.
86syn match hareFormat '\v\{\d*%(:%(\.?\d+|[ +\-=Xbefgox]|F[.2ESUs]|_%(.|\\%([0abfnrtv\\'"]|x\x{2}|u\x{4}|U\x{8})))*)?}' contained contains=hareEscape display
87syn match hareFormat '{\d*%\d*}' contained display
88syn match hareFormat '{{\|}}' contained display
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010089
Amelia Clarke35dfe582024-05-24 08:05:00 +020090" Miscellaneous {{{2
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010091
92" Comments.
Amelia Clarke35dfe582024-05-24 08:05:00 +020093syn region hareComment start='//' end='$' contains=hareTodo,@haredoc,@Spell display
94syn keyword hareTodo FIXME TODO XXX contained
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010095
Amelia Clarke35dfe582024-05-24 08:05:00 +020096" Identifiers.
97syn match hareDelimiter '::' display
98syn match hareName '\<\h\w*\>' nextgroup=@harePostfix skipempty skipwhite transparent
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +010099
Amelia Clarke35dfe582024-05-24 08:05:00 +0200100" Labels.
101syn match hareLabel ':\h\w*\>' display
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +0100102
Amelia Clarke35dfe582024-05-24 08:05:00 +0200103" Match `size` as a type unless it is followed by an open paren.
104syn match hareType '\<size\>' display
105syn match hareBuiltin '\<size\ze(' display
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +0100106
Amelia Clarke35dfe582024-05-24 08:05:00 +0200107" Postfix expressions.
108syn cluster harePostfix contains=hareErrorTest,hareField,hareIndex,hareParens
109syn match hareErrorTest '!=\@!' contained nextgroup=@harePostfix skipempty skipwhite
110syn match hareErrorTest '?' nextgroup=@harePostfix skipempty skipwhite
111syn match hareField '\.\w*\>'hs=s+1 contained contains=hareNumber nextgroup=@harePostfix skipempty skipwhite
112syn region hareIndex start='\[' end=']' contained nextgroup=@harePostfix skipempty skipwhite transparent
113syn region hareParens start='(' end=')' nextgroup=@harePostfix skipempty skipwhite transparent
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +0100114
Amelia Clarke35dfe582024-05-24 08:05:00 +0200115" Whitespace errors.
116syn match hareSpaceError '^ \+\ze\t' display
117syn match hareSpaceError excludenl '\s\+$' containedin=ALL display
118
119" Folding {{{3
120syn region hareBlock start='{' end='}' fold transparent
121
122" Default highlighting {{{1
123hi def link hareAttribute PreProc
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +0100124hi def link hareBoolean Boolean
Amelia Clarke35dfe582024-05-24 08:05:00 +0200125hi def link hareBuiltin Operator
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +0100126hi def link hareComment Comment
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +0100127hi def link hareConditional Conditional
Amelia Clarke35dfe582024-05-24 08:05:00 +0200128hi def link hareConstant Constant
129hi def link hareDefine Define
130hi def link hareDelimiter Delimiter
131hi def link hareErrorTest Special
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +0100132hi def link hareEscape SpecialChar
133hi def link hareFloat Float
134hi def link hareFormat SpecialChar
Amelia Clarke35dfe582024-05-24 08:05:00 +0200135hi def link hareInclude Include
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +0100136hi def link hareKeyword Keyword
Amelia Clarke35dfe582024-05-24 08:05:00 +0200137hi def link hareLabel Special
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +0100138hi def link hareNumber Number
139hi def link hareOperator Operator
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +0100140hi def link hareRepeat Repeat
141hi def link hareRune Character
142hi def link hareStorageClass StorageClass
143hi def link hareString String
144hi def link hareStructure Structure
145hi def link hareTodo Todo
146hi def link hareType Type
147hi def link hareTypedef Typedef
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +0100148
Amelia Clarke35dfe582024-05-24 08:05:00 +0200149" Highlight embedded haredoc references.
150hi! def link haredocRefValid SpecialComment
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +0100151
Amelia Clarke35dfe582024-05-24 08:05:00 +0200152" Highlight whitespace errors by default.
153if get(g:, 'hare_space_error', 1)
154 hi def link hareSpaceError Error
155endif
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +0100156
Amelia Clarke35dfe582024-05-24 08:05:00 +0200157" vim: et sts=2 sw=2 ts=8