mirror of
				https://github.com/vim/vim.git
				synced 2025-10-31 09:57:14 -04: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 |