neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

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