mirror of
https://github.com/neovim/neovim.git
synced 2024-12-26 14:11:15 -07:00
134 lines
4.2 KiB
VimL
134 lines
4.2 KiB
VimL
|
" PRELUDE {{{1
|
||
|
" Vim syntax file
|
||
|
" Language: Hare
|
||
|
" Maintainer: Amelia Clarke <me@rsaihe.dev>
|
||
|
" Last Change: 2022-09-21
|
||
|
|
||
|
if exists("b:current_syntax")
|
||
|
finish
|
||
|
endif
|
||
|
let b:current_syntax = "hare"
|
||
|
|
||
|
" SYNTAX {{{1
|
||
|
syn case match
|
||
|
|
||
|
" KEYWORDS {{{2
|
||
|
syn keyword hareConditional if else match switch
|
||
|
syn keyword hareKeyword break continue return yield
|
||
|
syn keyword hareKeyword defer
|
||
|
syn keyword hareKeyword fn
|
||
|
syn keyword hareKeyword let
|
||
|
syn keyword hareLabel case
|
||
|
syn keyword hareOperator as is
|
||
|
syn keyword hareRepeat for
|
||
|
syn keyword hareStorageClass const def export nullable static
|
||
|
syn keyword hareStructure enum struct union
|
||
|
syn keyword hareTypedef type
|
||
|
|
||
|
" C ABI.
|
||
|
syn keyword hareKeyword vastart vaarg vaend
|
||
|
|
||
|
" BUILTINS {{{2
|
||
|
syn keyword hareBuiltin abort
|
||
|
syn keyword hareBuiltin alloc free
|
||
|
syn keyword hareBuiltin append delete insert
|
||
|
syn keyword hareBuiltin assert
|
||
|
syn keyword hareBuiltin len offset
|
||
|
|
||
|
" TYPES {{{2
|
||
|
syn keyword hareType bool
|
||
|
syn keyword hareType char str
|
||
|
syn keyword hareType f32 f64
|
||
|
syn keyword hareType u8 u16 u32 u64 i8 i16 i32 i64
|
||
|
syn keyword hareType uint int
|
||
|
syn keyword hareType rune
|
||
|
syn keyword hareType uintptr
|
||
|
syn keyword hareType void
|
||
|
|
||
|
" C ABI.
|
||
|
syn keyword hareType valist
|
||
|
|
||
|
" LITERALS {{{2
|
||
|
syn keyword hareBoolean true false
|
||
|
syn keyword hareNull null
|
||
|
|
||
|
" Number literals.
|
||
|
syn match hareNumber "\v(\.@1<!|\.\.)\zs<\d+([Ee][+-]?\d+)?(z|[iu](8|16|32|64)?)?>" display
|
||
|
syn match hareNumber "\v(\.@1<!|\.\.)\zs<0b[01]+(z|[iu](8|16|32|64)?)?>" display
|
||
|
syn match hareNumber "\v(\.@1<!|\.\.)\zs<0o\o+(z|[iu](8|16|32|64)?)?>" display
|
||
|
syn match hareNumber "\v(\.@1<!|\.\.)\zs<0x\x+(z|[iu](8|16|32|64)?)?>" display
|
||
|
|
||
|
" Floating-point number literals.
|
||
|
syn match hareFloat "\v<\d+\.\d+([Ee][+-]?\d+)?(f32|f64)?>" display
|
||
|
syn match hareFloat "\v<\d+([Ee][+-]?\d+)?(f32|f64)>" display
|
||
|
|
||
|
" String and rune literals.
|
||
|
syn match hareEscape "\\[\\'"0abfnrtv]" contained display
|
||
|
syn match hareEscape "\v\\(x\x{2}|u\x{4}|U\x{8})" contained display
|
||
|
syn match hareFormat "\v\{\d*(\%\d*|(:[ 0+-]?\d*(\.\d+)?[Xbox]?))?}" contained display
|
||
|
syn match hareFormat "\({{\|}}\)" contained display
|
||
|
syn region hareRune start="'" end="'\|$" skip="\\'" contains=hareEscape display extend
|
||
|
syn region hareString start=+"+ end=+"\|$+ skip=+\\"+ contains=hareEscape,hareFormat display extend
|
||
|
syn region hareString start="`" end="`\|$" contains=hareFormat display
|
||
|
|
||
|
" MISCELLANEOUS {{{2
|
||
|
syn keyword hareTodo FIXME TODO XXX contained
|
||
|
|
||
|
" Attributes.
|
||
|
syn match hareAttribute "@[a-z]*"
|
||
|
|
||
|
" Blocks.
|
||
|
syn region hareBlock start="{" end="}" fold transparent
|
||
|
|
||
|
" Comments.
|
||
|
syn region hareComment start="//" end="$" contains=hareCommentDoc,hareTodo,@Spell display keepend
|
||
|
syn region hareCommentDoc start="\[\[" end="]]\|\ze\_s" contained display
|
||
|
|
||
|
" The size keyword can be either a builtin or a type.
|
||
|
syn match hareBuiltin "\v<size>\ze(\_s*//.*\_$)*\_s*\(" contains=hareComment
|
||
|
syn match hareType "\v<size>((\_s*//.*\_$)*\_s*\()@!" contains=hareComment
|
||
|
|
||
|
" Trailing whitespace.
|
||
|
syn match hareSpaceError "\v\s+$" display excludenl
|
||
|
syn match hareSpaceError "\v\zs +\ze\t" display
|
||
|
|
||
|
" Use statement.
|
||
|
syn region hareUse start="\v^\s*\zsuse>" end=";" contains=hareComment display
|
||
|
|
||
|
syn match hareErrorAssertion "\v(^([^/]|//@!)*\)\_s*)@<=!\=@!"
|
||
|
syn match hareQuestionMark "?"
|
||
|
|
||
|
" DEFAULT HIGHLIGHTING {{{1
|
||
|
hi def link hareAttribute Keyword
|
||
|
hi def link hareBoolean Boolean
|
||
|
hi def link hareBuiltin Function
|
||
|
hi def link hareComment Comment
|
||
|
hi def link hareCommentDoc SpecialComment
|
||
|
hi def link hareConditional Conditional
|
||
|
hi def link hareEscape SpecialChar
|
||
|
hi def link hareFloat Float
|
||
|
hi def link hareFormat SpecialChar
|
||
|
hi def link hareKeyword Keyword
|
||
|
hi def link hareLabel Label
|
||
|
hi def link hareNull Constant
|
||
|
hi def link hareNumber Number
|
||
|
hi def link hareOperator Operator
|
||
|
hi def link hareQuestionMark Special
|
||
|
hi def link hareRepeat Repeat
|
||
|
hi def link hareRune Character
|
||
|
hi def link hareStorageClass StorageClass
|
||
|
hi def link hareString String
|
||
|
hi def link hareStructure Structure
|
||
|
hi def link hareTodo Todo
|
||
|
hi def link hareType Type
|
||
|
hi def link hareTypedef Typedef
|
||
|
hi def link hareUse PreProc
|
||
|
|
||
|
hi def link hareSpaceError Error
|
||
|
autocmd InsertEnter * hi link hareSpaceError NONE
|
||
|
autocmd InsertLeave * hi link hareSpaceError Error
|
||
|
|
||
|
hi def hareErrorAssertion ctermfg=red cterm=bold guifg=red gui=bold
|
||
|
|
||
|
" vim: tabstop=8 shiftwidth=2 expandtab
|