unison.vim (5881B)
1 " Vim syntax file 2 " 3 " Language: unison 4 " Maintainer: Anton Parkhomenko <anton@chuwy.me> 5 " Last Change: Oct 25, 2025 6 " Original Author: John Williams, Paul Chiusano and Rúnar Bjarnason 7 8 if exists("b:current_syntax") 9 finish 10 endif 11 12 syntax include @markdown $VIMRUNTIME/syntax/markdown.vim 13 14 syn cluster markdownLikeDocs contains=markdownBold,markdownItalic,markdownLinkText,markdownListMarker,markdownOrderedListMarker,markdownH1,markdownH2,markdownH3,markdownH4,markdownH5,markdownH6 15 16 syn match unisonOperator "[-!#$%&\*\+/<=>\?@\\^|~]" 17 syn match unisonDelimiter "[\[\](){},.]" 18 19 " Strings and constants 20 syn match unisonSpecialChar contained "\\\([0-9]\+\|o[0-7]\+\|x[0-9a-fA-F]\+\|[\"\\'&\\abfnrtv]\|^[A-Z^_\[\\\]]\)" 21 syn match unisonSpecialChar contained "\\\(NUL\|SOH\|STX\|ETX\|EOT\|ENQ\|ACK\|BEL\|BS\|HT\|LF\|VT\|FF\|CR\|SO\|SI\|DLE\|DC1\|DC2\|DC3\|DC4\|NAK\|SYN\|ETB\|CAN\|EM\|SUB\|ESC\|FS\|GS\|RS\|US\|SP\|DEL\)" 22 syn match unisonSpecialCharError contained "\\&\|'''\+" 23 syn region unisonString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=unisonSpecialChar 24 syn match unisonCharacter "[^a-zA-Z0-9_']'\([^\\]\|\\[^']\+\|\\'\)'"lc=1 contains=unisonSpecialChar,unisonSpecialCharError 25 syn match unisonCharacter "^'\([^\\]\|\\[^']\+\|\\'\)'" contains=unisonSpecialChar,unisonSpecialCharError 26 syn match unisonNumber "\<[0-9]\+\>\|\<0[xX][0-9a-fA-F]\+\>\|\<0[oO][0-7]\+\>\|\<0[bB][01]\+\>" 27 syn match unisonFloat "\<[0-9]\+\.[0-9]\+\([eE][-+]\=[0-9]\+\)\=\>" 28 29 " Keyword definitions. These must be patterns instead of keywords 30 " because otherwise they would match as keywords at the start of a 31 " "literate" comment (see lu.vim). 32 syn match unisonModule "\<namespace\>" 33 syn match unisonImport "\<use\>" 34 syn match unisonTypedef "\<\(unique\|structural\|∀\|forall\)\>" 35 syn match unisonStatement "\<\(ability\|do\|type\|where\|match\|cases\|;\|let\|with\|handle\)\>" 36 syn match unisonConditional "\<\(if\|else\|then\)\>" 37 38 syn match unisonBoolean "\<\(true\|false\)\>" 39 40 syn match unisonType "\<\C[A-Z][0-9A-Za-z_'!]*\>" 41 syn match unisonName "\<\C[a-z_][0-9A-Za-z_'!]*\>" contains=ALL 42 syn match unisonDef "^\C[A-Za-z_][0-9A-Za-z_'!]*:" 43 44 " Comments 45 syn match unisonLineComment "---*\([^-!#$%&\*\+./<=>\?@\\^|~].*\)\?$" 46 syn region unisonBlockComment start="{-" end="-}" contains=unisonBlockComment 47 syn region unisonBelowFold start="^---" skip="." end="." contains=unisonBelowFold 48 49 " Docs 50 syn region unisonDocBlock matchgroup=unisonDoc start="{{" end="}}" contains=unisonDocTypecheck,unisonDocQuasiquote,unisonDocDirective,unisonDocCode,unisonDocCodeInline,unisonDocCodeRaw,unisonDocMono,@markdownLikeDocs 51 syn region unisonDocQuasiquote contained matchgroup=unisonDocQuote start="{{" end= "}}" contains=TOP 52 syn region unisonDocCode contained matchgroup=unisonDocCode start="^\s*```\s*$" end="^\s*```\s*$" contains=TOP 53 syn region unisonDocTypecheck contained matchgroup=unisonDocCode start="^\s*@typecheck\s*```\s*$" end="^\s*```\s*$" contains=TOP 54 syn region unisonDocCodeRaw contained matchgroup=unisonDocCode start="^\s*```\s*raw\s*$" end="^\s*```\s*$" contains=NoSyntax 55 syn region unisonDocCodeInline contained matchgroup=unisonDocCode start="`\@<!``" end="`\@<!``" contains=TOP 56 syn match unisonDocMono "''[^']*''" 57 syn region unisonDocDirective contained matchgroup=unisonDocDirective start="\(@\([a-zA-Z0-9_']*\)\)\?{{\@!" end="}" contains=TOP 58 59 syn match unisonDebug "\<\(todo\|bug\|Debug.trace\|Debug.evalToText\)\>" 60 61 " things like 62 " > my_func 1 3 63 " test> Function.tap.tests.t1 = check let 64 " use Nat == + 65 " ( 99, 100 ) === (withInitialValue 0 do 66 " : : : 67 syn match unisonWatch "^[A-Za-z]*>" 68 69 hi def link unisonWatch Debug 70 hi def link unisonDocMono Delimiter 71 hi def link unisonDocDirective Import 72 hi def link unisonDocQuote Delimiter 73 hi def link unisonDocCode Delimiter 74 hi def link unisonDoc String 75 hi def link unisonBelowFold Comment 76 hi def link unisonBlockComment Comment 77 hi def link unisonBoolean Boolean 78 hi def link unisonCharacter Character 79 hi def link unisonComment Comment 80 hi def link unisonConditional Conditional 81 hi def link unisonConditional Conditional 82 hi def link unisonDebug Debug 83 hi def link unisonDelimiter Delimiter 84 hi def link unisonDocBlock String 85 hi def link unisonDocDirective Import 86 hi def link unisonDocIncluded Import 87 hi def link unisonFloat Float 88 hi def link unisonImport Include 89 hi def link unisonLineComment Comment 90 hi def link unisonLink Type 91 hi def link unisonName Identifier 92 hi def link unisonDef Typedef 93 hi def link unisonNumber Number 94 hi def link unisonOperator Operator 95 hi def link unisonSpecialChar SpecialChar 96 hi def link unisonSpecialCharError Error 97 hi def link unisonStatement Statement 98 hi def link unisonString String 99 hi def link unisonType Type 100 hi def link unisonTypedef Typedef 101 102 103 let b:current_syntax = "unison" 104 105 " Options for vi: ts=8 sw=2 sts=2 nowrap noexpandtab ft=vim