mirror of
https://github.com/neovim/neovim.git
synced 2025-10-17 15:21:47 +00:00
vim-patch:7159ac7fec28 (#24624)
Unison support (vim/vim#12715)
7159ac7fec
Co-authored-by: Anton Parkhomenko <chuwy@users.noreply.github.com>
This commit is contained in:
103
runtime/syntax/unison.vim
Normal file
103
runtime/syntax/unison.vim
Normal file
@@ -0,0 +1,103 @@
|
||||
" 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
|
Reference in New Issue
Block a user