dropping Tree sitter.

This commit is contained in:
2026-05-27 09:10:38 +02:00
parent f3497b97a9
commit e1a4aae5c1
2 changed files with 236 additions and 2 deletions
+233
View File
@@ -0,0 +1,233 @@
" Vim syntax file
" Language: Odin
" Last changed: 2026-05-25
" Quit when a (custom) syntax file was already loaded
if exists("b:current_syntax")
finish
endif
syntax case match
syn keyword odinStatement do foreign import package defer return continue break
syn keyword odinStatement fallthrough using
syn keyword odinKeyword distinct proc context dynamic
syn keyword odinOperator in not_in cast transmute auto_cast
syn keyword odinOperator or_else or_return or_continue or_break
syn keyword odinRepeat for
syn keyword odinConditional if else switch when where case
syn keyword odinBoolean true false
syn keyword odinStructure matrix struct union enum bit_set bit_field map
" maybe create different groups here? odinBool, odinSignedInt, odinUnisgnedInt ...
syn keyword odinType bool b8 b16 b32 b64
syn keyword odinType int i8 i16 i32 i64 i128
syn keyword odinType uint byte u8 u16 u32 u64 u128 uintptr
syn keyword odinType i16le i32le i64le i128le u16le u32le u64le u128le
syn keyword odinType i16be i32be i64be i128be u16be u32be u64be u128be
syn keyword odinType f16 f32 f64
syn keyword odinType f16le f32le f64le
syn keyword odinType f16be f32be f64be
syn keyword odinType complex32 complex64 complex128
syn keyword odinType quaternion64 quaternion128 quaternion256
syn keyword odinType rune string cstring
syn keyword odinType typeid rawptr any
syn keyword odinNull nil
syn match odinBuiltinProc "\%(abs\|align_of\|cap\|clamp\|complex\|compress_values\|conj\|expand_values\|imag\|jmag\|kmag\|len\|max\|min\|offset_of\|offset_of_by_string\|offset_of_member\|offset_of_selector\|quaternion\|raw_data\|real\|size_of\|soa_unzip\|soa_zip\|swizzle\|type_info_of\|type_of\|typeid_of\)" contained
" TODO: these groups mess with other groups that don't use a \@<=
"syn match odinPtrPtr "\%(\W\)\@3<=^\{-}" display
"syn match odinPtrDeferencing "\^\+\%(\W\)\@=" display
syn match odinTodo "FIXME" display
syn match odinTodo "TODO" display
syn match odinTodo "XXX" display
syn match odinProbablyAType "\<_*[A-Z]\w*\>" display
" TODO: in [dynamic; asdf]int 'asdf' should be a Constant
syn match odinConstant "_*[A-Z]\w*\ze\s*::" display
syn match odinConstant "\%(\W\)\@3<=_*[A-Z_]\+\ze\%(\W\|$\)" display
syn match odinExplicitEnum "\%(\<_*[A-Z]\w\{-}\.\)\@20<=_*[A-Z]\w*\>" display
syn match odinLabel /\h\w*\ze:\s\+for/ display
syn match odinLabel "\%(\%(break\|continue\|or_continue\|or_break\)\s\+\)\@50<=\zs\h\w*" display
syn match odinAssignOp "=" display
syn match odinDeclareOp ":" display
syn match odinArithmeticOp "+\|\*\|/\|%\|-\|!" display
syn match odinVariadicOp "\.\." display
" I have no idea how to distinguish between & binaryOp and & addressOp
" maybe (\w|\d)@<!\s*&
syn match odinBinaryOp "!\|\~\||\|&" display
syn match odinComparisonOpError +=<\|=>\|=!+ display
syn match odinComparisonOp "==\|!=\|<=\|>=\|&&\|||\|[<>]" display
syn match odinRangeOpError +\%([_'"0-9A-Za-z]\s\{-}\)\@<=\.\.\ze[_'"0-9A-Za-z]+ display
syn match odinRangeOpError +\.\.>\|\.<\|\.>+ display
syn match odinRangeOp "\.\.=\|\.\.<" display
syn match odinBinaryOpError "<>\|><"
syn match odinBinaryOp "<<\|>>" display
syn match odinInteger "\%(^\|\W\)\@3<=\d[0-9_]*\%(i\|j\|k\)\?\>" display
syn match odinFloat "\%(^\|\W\)\@3<=\d[0-9_]*\%(\.\d[0-9_]*\%([eE][+-]\?\d[0-9_]*\)\?\|[eE][+-]\?\d[0-9_]*\)\%(i\|j\|k\)\?\>" display
" never knew hex floats were a thing (and it sometimes gives compiler errors as of dev-2026-05)
" but it's documented in the official EBNF file in the odin repo
syn match odinHexFloat "\%(^\|\W\)\@3<=0h\x[0-9A-Fa-f_]*\>" display
" Hex, Oct, and Bin can't be floats or imaginary
syn match odinBin "\%(^\|\W\)\@3<=0b[01][01_]*\>" display
syn match odinOct "\%(^\|\W\)\@3<=0o\o[0-7_]*\>" display
syn match odinHex "\%(^\|\W\)\@3<=0x\x[0-9A-Fa-f_]*\>" display
" table.slots[index].occupied " occupied is not an enum
syn match odinImplicitEnum "\%([^\]0-9A-Za-z_]\+\)\@<=\.\h\w*" display
syn match odinEnumDef "\<\h\w*" contained
syn match odinEnumDefConstant "\%(=\s*\)\@<=\h\w*" contained
" have to duplicate here because you can't set an enum to an imaginary or quaternion
syn match odinIntNotImg "\%(^\|\W\)\@3<=\zs\d[0-9_]*\>" display contained
syn region odinEnumDefinition start="\(:\s*enum.\{-}\)\@200<=\zs{"ms=e+1 end="}"me=s-1 contains=odinEnumDef,odinIntNotImg,odinRangeOp,odinRangeOpError,odinComment,odinCommentBlock,odinEnumDefConstant
syn match odinProcCall "\<[a-z_]\w*\ze\_s*(" display contains=odinBuiltinProc
syn match odinAllConst "[A-Z_]\w*" contained display
syn match odinCustomType "[A-Z_]\w*\ze(" contained display
syn match odinPtrType "\^\%(\h\w*\.\)*\zs[A-Z_]\w*" display
syn region odinCustomTypeRegion matchgroup=odinType start="_*[A-Z]\w*\ze(" matchgroup=NONE end=+)+me=s-1 contains=odinAllConst,odinParapoly,odinInteger,odinArithmeticOp,odinCustomType,odinType
syn match odinTypeDeclaration "[^:]:\s*\%(\[.*\]\)*\s*\%(\h\w*\.\)*\zs[A-Z_]\w*" display
syn match odinTypeDeclaration "\%(=\s*\)\@30<=\h\w*\ze{.\{-}\%(}\|$\)" display
syn match odinTypeDefinition "\h\w*\ze\s*::\s*\%(distinct\|struct\|union\|enum\|bit_field\|bit_set\)"
syn match odinSwitchUnion "\%(case.\{-}\)\@30<=[A-Z_]\w*\ze\s*:" display
"syn region odinParapolyConst start=+(+ end=+)+ contained contains=odinAllConst,odinParapolyConst,odinInteger,odinArithmeticOp,odinCustomType
syn region odinParapolyConst start=+\%(_*[A-Z]\w*\)\@30<=(+ end=+)+ contains=odinAllConst,odinParapolyConst,odinInteger,odinArithmeticOp,odinCustomType,odinParapoly
syn match odinParapoly "\$\h\w*" display
syn match odinImplicitAssertion +\%(\w\.\)\@4<=?+ display
syn region odinUnionAssertType start="\%(\h\w\{-}\.\)\@50<=("ms=e+1 end=")"me=s-1 contains=odinInteger,odinConstant,@odinTypes,odinCustomType,odinParapolyConst
syn match odinReturnType "\%(->\s*\)\@100<=(\?\zs[A-Z_]\w*\ze)\?" display
" CustomType2 is used only in UnionDefinition and can probably substituded with
" ProbablyAType, which will match less stuff but would still work so long you
" are using the idiomatic name convention
syn match odinCustomType2 "[A-Z_]\w*" contained
syn region odinUnionDefinition start="\%(:\s*union.\{-}\)\@200<=\zs{" end="}"me=s-1 contains=odinComment,odinCommentBlock,odinCustomType,odinPtrType,odinConstant,odinInteger,odinType,odinCustomType2
syn match odinParapolySpecType "\%(\$.\{-}/\)\@50<=[A-Z_]\w*" display
syn match odinProcName "\h\w*\ze\s*::\s*proc" display
syn match odinDirective "#\s*\h\w\{-}\>" display
syn region odinTernaryRegion matchgroup=odinTernary start="?" end=":" oneline contains=ALL display
syn match odinTernary "[?:]" contained transparent display
syn match odinAttribute "@(\h\w\{-}" contained display
syn match odinAttribute ")" contained transparent display
syn region odinAttributeRegion matchgroup=odinAttribute start="@(\h\w*\>" skip=+".\{-}).\{-}"+ end=")" contains=odinString,odinBoolean,@odinTypes,odinConstant,odinComparisonOp,odinComaparisonOpError,odinBinaryOp oneline display
syn match odinBuildTag "^\s*#+\%(build\|vet\|test\|ingnore\|private\|feature\|no-instrumentation\)" display
syn region odinBuildTagRegion matchgroup=odinBuildTag start="^\s*#+\%(build\|vet\|test\|ingnore\|private\|feature\|no-instrumentation\)" matchgroup=NONE end="$" oneline display
syn region odinComment start="//" end="$" oneline contains=odinTodo
syn region odinComment start="#!" end="$" oneline contains=odinTodo
syn region odinCommentBlock start=/\/\*/ end=/\*\// contains=odinCommentBlock,odinTodo
syn match odinEscapeChar /\\[abefnrtv"']\|\\\o\{3}\|\\x\x\{2}\|\\u\x\{4}\|\\U\x\{8}\|\\\\/ contained display
" TODO: figure out how to do the error
"syn match odinEscapeError /\\[^abefnrtv"']\|\\\%(\o\{,2}\|\o\{4,}\)\|\\x\%(\x\{3}\|\x\+\)\|\\u\x\{5,7}\|\\U\x\{9,}/ contained display
"syn match odinEscapeError /\\[^abefnrtv"']/ contained
syn region odinString start=/"/ skip=/\\"/ end=/"/ contains=odinEscapeChar oneline
syn region odinRawString start=+`+ end=+`+
syn region odinCharacter start=+'+ end=+'+ contains=odinEscapeChar oneline
" I think the minimum path is ".."
syn match odinImportPath +\%(\%(^\|*/\)\s*import.\{-}\)\@90<=".\{2,}"+ display
syn match odinPackageDeclaration "\(^package\)\@<=\s\+\h\w*" display
syn match odinCallingConventionError +\%(:\s*proc\s*\)\@90<=".*"+ display
syn match odinCallingConvention +\%(:\s*proc\s*\)\@200<="\%(std\%(call\)\?\|odin\|c\%(decl\)\?\|none\|contextless\|fast\%(call\)\?\)"+ display
syn match odinUndefined "---\ze\s*$" display
syn match odinVoidAssign "\<_\>" display
syn match odinProcRet "->" display
syn cluster odinOperators contains=odinOperator,odinArithmeticOp,odinRangeOp,odinComparisonOp
syn cluster odinTypes contains=odinType,odinTypeDefinition,odinTypeDeclaration,odinPtrType,odinReturnType
syn cluster odinNumbers contains=odinInteger,odinBin,odinOct,odinHex
hi def link odinPtrType odinType
hi def link odinTypeDeclaration odinType
hi def link odinTypeDefinition odinType
hi def link odinNull odinType
hi def link odinReturnType odinType
hi def link odinCustomType odinType
hi def link odinCustomType2 odinType
hi def link odinParapolySpecType odinType
hi def link odinSwitchUnion odinType
hi def link odinProbablyAType odinType
hi def link odinType Type
"hi def link odinPtrType Type
"hi def link odinTypeDeclaration Type
"hi def link odinTypeDefinition Type
"hi def link odinNull Type
"hi def link odinReturnType Type
"hi def link odinCustomType Type
"hi def link odinCustomType2 Type
"hi def link odinParapolySpecType Type
"hi def link odinSwitchUnion Type
"hi def link odinProbablyAType Type
hi def link odinOperator Operator
hi def link odinComparisonOp Operator
hi def link odinComparisonOpError Error
hi def link odinArithmeticOp Operator
hi def link odinBinaryOp Operator
hi def link odinBinaryOpError Error
hi def link odinRangeOp Operator
hi def link odinRangeOpError Error
hi def link odinVariadicOp Operator
hi def link odinExplicitEnum Number
hi def link odinImplicitEnum Number
hi def link odinEnumDef Number
hi def link odinInteger Number
hi def link odinIntNotImg Number
hi def link odinBin Number
hi def link odinOct Number
hi def link odinHex Number
hi def link odinFloat Float
hi def link odinHexFloat Float
hi def link odinString String
hi def link odinRawString String
hi def link odinEscapeChar Special
hi def link odinCharacter Character
"hi def link odinEscapeError Error
hi def link odinBoolean Boolean
hi def link odinStatement Statement
hi def link odinKeyword Keyword
hi def link odinRepeat Repeat
hi def link odinConditional Conditional
hi def link odinTernary Conditional
hi def link odinStructure Structure
hi def link odinConstant Constant
hi def link odinEnumDefConstant Constant
hi def link odinAllConst Constant
hi def link odinParapoly Constant
hi def link odinComment Comment
hi def link odinCommentBlock Comment
"JASON
"hi def link odinTodo Todo
"hi def link odinProcCall Function
"hi def link odinBuiltinProc Function
hi odinTodo guifg=#FFD700 guibg=NONE gui=bold ctermfg=Yellow cterm=bold
hi odinProcCall guifg=#8fa3b3 gui=NONE ctermfg=Blue
hi odinBuiltinProc guifg=#6ac6f2 gui=italic ctermfg=Cyan
hi odinProcName guifg=#8fa3b3 gui=bold ctermfg=Blue cterm=bold
hi def link odinLabel Special
hi def link odinAttribute Macro
hi def link odinBuildTag Macro
hi def link odinDirective Define
hi def link odinCallingConvention Define
hi def link odinCallingConventionError Error
syn sync ccomment odinCommentBlock
let b:current_syntax = "odin"