mirror of
https://github.com/neovim/neovim.git
synced 2024-12-29 14:41:06 -07:00
aaeb1a8cd1
Unison support (vim/vim#12715)
7159ac7fec
Co-authored-by: Anton Parkhomenko <chuwy@users.noreply.github.com>
104 lines
5.6 KiB
VimL
104 lines
5.6 KiB
VimL
" Vim syntax file
|
|
"
|
|
" Language: unison
|
|
" Maintainer: Anton Parkhomenko <anton@chuwy.me>
|
|
" Last Change: Aug 7, 2023
|
|
" Original Author: John Williams, Paul Chiusano and Rúnar Bjarnason
|
|
|
|
if exists("b:current_syntax")
|
|
finish
|
|
endif
|
|
|
|
syntax include @markdown $VIMRUNTIME/syntax/markdown.vim
|
|
|
|
syn cluster markdownLikeDocs contains=markdownBold,markdownItalic,markdownLinkText,markdownListMarker,markdownOrderedListMarker,markdownH1,markdownH2,markdownH3,markdownH4,markdownH5,markdownH6
|
|
|
|
syn match unisonOperator "[-!#$%&\*\+/<=>\?@\\^|~]"
|
|
syn match unisonDelimiter "[\[\](){},.]"
|
|
|
|
" Strings and constants
|
|
syn match unisonSpecialChar contained "\\\([0-9]\+\|o[0-7]\+\|x[0-9a-fA-F]\+\|[\"\\'&\\abfnrtv]\|^[A-Z^_\[\\\]]\)"
|
|
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\)"
|
|
syn match unisonSpecialCharError contained "\\&\|'''\+"
|
|
syn region unisonString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=unisonSpecialChar
|
|
syn match unisonCharacter "[^a-zA-Z0-9_']'\([^\\]\|\\[^']\+\|\\'\)'"lc=1 contains=unisonSpecialChar,unisonSpecialCharError
|
|
syn match unisonCharacter "^'\([^\\]\|\\[^']\+\|\\'\)'" contains=unisonSpecialChar,unisonSpecialCharError
|
|
syn match unisonNumber "\<[0-9]\+\>\|\<0[xX][0-9a-fA-F]\+\>\|\<0[oO][0-7]\+\>"
|
|
syn match unisonFloat "\<[0-9]\+\.[0-9]\+\([eE][-+]\=[0-9]\+\)\=\>"
|
|
|
|
" Keyword definitions. These must be patterns instead of keywords
|
|
" because otherwise they would match as keywords at the start of a
|
|
" "literate" comment (see lu.vim).
|
|
syn match unisonModule "\<namespace\>"
|
|
syn match unisonImport "\<use\>"
|
|
syn match unisonTypedef "\<\(unique\|structural\|∀\|forall\)\>"
|
|
syn match unisonStatement "\<\(ability\|do\|type\|where\|match\|cases\|;\|let\|with\|handle\)\>"
|
|
syn match unisonConditional "\<\(if\|else\|then\)\>"
|
|
|
|
syn match unisonBoolean "\<\(true\|false\)\>"
|
|
|
|
syn match unisonType "\<\C[A-Z][0-9A-Za-z_'!]*\>"
|
|
syn match unisonName "\<\C[a-z_][0-9A-Za-z_'!]*\>"
|
|
|
|
" Comments
|
|
syn match unisonLineComment "---*\([^-!#$%&\*\+./<=>\?@\\^|~].*\)\?$"
|
|
syn region unisonBlockComment start="{-" end="-}" contains=unisonBlockComment
|
|
syn region unisonBelowFold start="^---" skip="." end="." contains=unisonBelowFold
|
|
|
|
" Docs
|
|
syn region unisonDocBlock matchgroup=unisonDoc start="{{" end="}}" contains=unisonDocTypecheck,unisonDocQuasiquote,unisonDocDirective,unisonDocCode,unisonDocCodeInline,unisonDocCodeRaw,unisonDocMono,@markdownLikeDocs
|
|
syn region unisonDocQuasiquote contained matchgroup=unisonDocQuote start="{{" end= "}}" contains=TOP
|
|
syn region unisonDocCode contained matchgroup=unisonDocCode start="^\s*```\s*$" end="^\s*```\s*$" contains=TOP
|
|
syn region unisonDocTypecheck contained matchgroup=unisonDocCode start="^\s*@typecheck\s*```\s*$" end="^\s*```\s*$" contains=TOP
|
|
syn region unisonDocCodeRaw contained matchgroup=unisonDocCode start="^\s*```\s*raw\s*$" end="^\s*```\s*$" contains=NoSyntax
|
|
syn region unisonDocCodeInline contained matchgroup=unisonDocCode start="`\@<!``" end="`\@<!``" contains=TOP
|
|
syn match unisonDocMono "''[^']*''"
|
|
syn region unisonDocDirective contained matchgroup=unisonDocDirective start="\(@\([a-zA-Z0-9_']*\)\)\?{{\@!" end="}" contains=TOP
|
|
|
|
syn match unisonDebug "\<\(todo\|bug\|Debug.trace\|Debug.evalToText\)\>"
|
|
|
|
" things like
|
|
" > my_func 1 3
|
|
" test> Function.tap.tests.t1 = check let
|
|
" use Nat == +
|
|
" ( 99, 100 ) === (withInitialValue 0 do
|
|
" : : :
|
|
syn match unisonWatch "^[A-Za-z]*>"
|
|
|
|
hi def link unisonWatch Debug
|
|
hi def link unisonDocMono Delimiter
|
|
hi def link unisonDocDirective Import
|
|
hi def link unisonDocQuote Delimiter
|
|
hi def link unisonDocCode Delimiter
|
|
hi def link unisonDoc String
|
|
hi def link unisonBelowFold Comment
|
|
hi def link unisonBlockComment Comment
|
|
hi def link unisonBoolean Boolean
|
|
hi def link unisonCharacter Character
|
|
hi def link unisonComment Comment
|
|
hi def link unisonConditional Conditional
|
|
hi def link unisonConditional Conditional
|
|
hi def link unisonDebug Debug
|
|
hi def link unisonDelimiter Delimiter
|
|
hi def link unisonDocBlock String
|
|
hi def link unisonDocDirective Import
|
|
hi def link unisonDocIncluded Import
|
|
hi def link unisonFloat Float
|
|
hi def link unisonImport Include
|
|
hi def link unisonLineComment Comment
|
|
hi def link unisonLink Type
|
|
hi def link unisonName Identifier
|
|
hi def link unisonNumber Number
|
|
hi def link unisonOperator Operator
|
|
hi def link unisonSpecialChar SpecialChar
|
|
hi def link unisonSpecialCharError Error
|
|
hi def link unisonStatement Statement
|
|
hi def link unisonString String
|
|
hi def link unisonType Type
|
|
hi def link unisonTypedef Typedef
|
|
|
|
|
|
let b:current_syntax = "unison"
|
|
|
|
" Options for vi: ts=8 sw=2 sts=2 nowrap noexpandtab ft=vim
|