diff options
| author | Adam Stankiewicz <sheerun@sher.pl> | 2013-09-12 17:31:56 +0200 | 
|---|---|---|
| committer | Adam Stankiewicz <sheerun@sher.pl> | 2013-09-12 17:31:56 +0200 | 
| commit | 6eb0c57e8070d641382c8844d35408a2f13cc751 (patch) | |
| tree | 4ed16fc05df5e724c031c39d8c773998643a06be /syntax | |
| parent | 7d1b7e6f7123cd8b14f02221c7ec37d17d5d527e (diff) | |
| download | vim-polyglot-6eb0c57e8070d641382c8844d35408a2f13cc751.tar.gz vim-polyglot-6eb0c57e8070d641382c8844d35408a2f13cc751.zip | |
Add elixir language support
Diffstat (limited to 'syntax')
| -rw-r--r-- | syntax/elixir.vim | 162 | 
1 files changed, 162 insertions, 0 deletions
| diff --git a/syntax/elixir.vim b/syntax/elixir.vim new file mode 100644 index 00000000..7dc428ef --- /dev/null +++ b/syntax/elixir.vim @@ -0,0 +1,162 @@ +" Vim syntax file +" Language: Elixir +" Maintainer: Carlos Galdino <carloshsgaldino@gmail.com> +" Last Change: 2013 Apr 24 + +if exists("b:current_syntax") +  finish +endif + +" syncing starts 2000 lines before top line so docstrings don't screw things up +syn sync minlines=2000 + +syn cluster elixirNotTop contains=@elixirRegexSpecial,@elixirStringContained,@elixirDeclaration,elixirTodo,elixirArguments + +syn match elixirComment '#.*' contains=elixirTodo +syn keyword elixirTodo FIXME NOTE TODO OPTIMIZE XXX HACK contained + +syn keyword elixirKeyword is_atom is_binary is_bitstring is_boolean is_float is_function is_integer is_list is_number is_pid is_port is_record is_reference is_tuple is_exception +syn keyword elixirKeyword case cond bc lc inlist inbits if unless try receive function +syn keyword elixirKeyword exit raise throw after rescue catch else +syn keyword elixirKeyword use quote unquote super alias +syn match   elixirKeyword '\<\%(->\)\>\s*' + +syn keyword elixirInclude import require + +syn keyword elixirOperator and not or when xor in +syn match elixirOperator '%=\|\*=\|\*\*=\|+=\|-=\|\^=\|||=' +syn match elixirOperator "\%(<=>\|<\%(<\|=\)\@!\|>\%(<\|=\|>\)\@!\|<=\|>=\|===\|==\|=\~\|!=\|!\~\|\s?[ \t]\@=\)" +syn match elixirOperator "!+[ \t]\@=\|&&\|||\|\^\|\*\|+\|-\|/" +syn match elixirOperator "|\|++\|--\|\*\*\|\/\/\|<-\|<>\|<<\|>>\|=\|\.\|::" + +syn match elixirSymbol '\(:\)\@<!:\%([a-zA-Z_]\w*\%([?!]\|=[>=]\@!\)\?\|<>\|===\?\|>=\?\|<=\?\)' +syn match elixirSymbol '\(:\)\@<!:\%(<=>\|&&\?\|%\(()\|\[\]\|{}\)\|++\?\|--\?\|||\?\|!\|//\|[%&`/|]\)' +syn match elixirSymbol "\%([a-zA-Z_]\w*\([?!]\)\?\):\(:\)\@!" + +syn keyword elixirName nil +syn match   elixirName '\<[A-Z]\w*\>' + +syn match elixirUnusedVariable '\<_\w*\>' + +syn keyword elixirBoolean true false + +syn match elixirVariable '@[a-zA-Z_]\w*\|&\d' + +syn keyword elixirPseudoVariable __FILE__ __DIR__ __MODULE__ __ENV__ __CALLER__ + +syn match elixirNumber '\<\d\(_\?\d\)*\(\.[^[:space:][:digit:]]\@!\(_\?\d\)*\)\?\([eE][-+]\?\d\(_\?\d\)*\)\?\>' +syn match elixirNumber '\<0[xX][0-9A-Fa-f]\+\>' +syn match elixirNumber '\<0[bB][01]\+\>' + +syn match elixirRegexEscape            "\\\\\|\\[aAbBcdDefGhHnrsStvVwW]\|\\\d\{3}\|\\x[0-9a-fA-F]\{2}" contained +syn match elixirRegexEscapePunctuation "?\|\\.\|*\|\\\[\|\\\]\|+\|\\^\|\\\$\|\\|\|\\(\|\\)\|\\{\|\\}" contained +syn match elixirRegexQuantifier        "[*?+][?+]\=" contained display +syn match elixirRegexQuantifier        "{\d\+\%(,\d*\)\=}?\=" contained display +syn match elixirRegexCharClass         "\[:\(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|word\|xdigit\):\]" contained display + +syn region elixirRegex matchgroup=elixirDelimiter start="%r/" end="/[uiomxfr]*" skip="\\\\" contains=@elixirRegexSpecial + +syn cluster elixirRegexSpecial    contains=elixirRegexEscape,elixirRegexCharClass,elixirRegexQuantifier,elixirRegexEscapePunctuation +syn cluster elixirStringContained contains=elixirInterpolation,elixirRegexEscape,elixirRegexCharClass + +syn region elixirString        matchgroup=elixirDelimiter start="'" end="'" skip="\\'" +syn region elixirString        matchgroup=elixirDelimiter start='"' end='"' skip='\\"' contains=@elixirStringContained +syn region elixirInterpolation matchgroup=elixirDelimiter start="#{" end="}" contained contains=ALLBUT,elixirComment,@elixirNotTop + +syn region elixirDocStringStart matchgroup=elixirDocString start=+"""+ end=+$+ oneline contains=ALLBUT,@elixirNotTop +syn region elixirDocStringStart matchgroup=elixirDocString start=+'''+ end=+$+ oneline contains=ALLBUT,@elixirNotTop +syn region elixirDocString     start=+\z("""\)+ end=+^\s*\zs\z1+ contains=elixirDocStringStart,elixirTodo fold keepend +syn region elixirDocString     start=+\z('''\)+ end=+^\s*\zs\z1+ contains=elixirDocStringStart,elixirTodo fold keepend + +syn match elixirSymbolInterpolated ':\("\)\@=' contains=elixirString +syn match elixirString             "\(\w\)\@<!?\%(\\\(x\d{1,2}\|\h{1,2}\h\@!\>\|0[0-7]{0,2}[0-7]\@!\>\|[^x0MC]\)\|(\\[MC]-)+\w\|[^\s\\]\)" + +syn region elixirBlock              matchgroup=elixirKeyword start="\<do\>\(:\)\@!" end="\<end\>" contains=ALLBUT,@elixirNotTop fold +syn region elixirAnonymousFunction  matchgroup=elixirKeyword start="\<fn\>"         end="\<end\>" contains=ALLBUT,@elixirNotTop fold + +syn region elixirArguments start="(" end=")" contained contains=elixirOperator,elixirSymbol,elixirPseudoVariable,elixirName,elixirBoolean,elixirVariable,elixirUnusedVariable,elixirNumber,elixirDocString,elixirSymbolInterpolated,elixirRegex,elixirRegexEscape,elixirRegexEscapePunctuation,elixirRegexCharClass,elixirRegexQuantifier,elixirSpecial,elixirString,elixirDelimiter + +syn match elixirDelimEscape "\\[(<{\[)>}\]]" transparent display contained contains=NONE + +syn region elixirSigil matchgroup=elixirDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)"       end="\z1" skip="\\\\\|\\\z1" fold +syn region elixirSigil matchgroup=elixirDelimiter start="%[BCRW]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold +syn region elixirSigil matchgroup=elixirDelimiter start="%[BCRW]\={"                              end="}"   skip="\\\\\|\\}"   contains=elixirDelimEscape fold +syn region elixirSigil matchgroup=elixirDelimiter start="%[BCRW]\=<"                              end=">"   skip="\\\\\|\\>"   contains=elixirDelimEscape fold +syn region elixirSigil matchgroup=elixirDelimiter start="%[BCRW]\=\["                             end="\]"  skip="\\\\\|\\\]"  contains=elixirDelimEscape fold +syn region elixirSigil matchgroup=elixirDelimiter start="%[BCRW]\=("                              end=")"   skip="\\\\\|\\)"   contains=elixirDelimEscape fold + +syn region elixirSigil matchgroup=elixirDelimiter start="%[bcrw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold +syn region elixirSigil matchgroup=elixirDelimiter start="%[bcrw]{"                                end="}"   skip="\\\\\|\\}"   fold contains=@elixirStringContained,elixirRegexEscapePunctuation +syn region elixirSigil matchgroup=elixirDelimiter start="%[bcrw]<"                                end=">"   skip="\\\\\|\\>"   fold contains=@elixirStringContained,elixirRegexEscapePunctuation +syn region elixirSigil matchgroup=elixirDelimiter start="%[bcrw]\["                               end="\]"  skip="\\\\\|\\\]"  fold contains=@elixirStringContained,elixirRegexEscapePunctuation +syn region elixirSigil matchgroup=elixirDelimiter start="%[bcrw]("                                end=")"   skip="\\\\\|\\)"   fold contains=@elixirStringContained,elixirRegexEscapePunctuation + +" Defines +syn keyword elixirDefine              def            nextgroup=elixirFunctionDeclaration    skipwhite skipnl +syn keyword elixirDefine              def            nextgroup=elixirFunctionDeclaration    skipwhite skipnl +syn keyword elixirPrivateDefine       defp           nextgroup=elixirFunctionDeclaration    skipwhite skipnl +syn keyword elixirModuleDefine        defmodule      nextgroup=elixirModuleDeclaration      skipwhite skipnl +syn keyword elixirProtocolDefine      defprotocol    nextgroup=elixirProtocolDeclaration    skipwhite skipnl +syn keyword elixirImplDefine          defimpl        nextgroup=elixirImplDeclaration        skipwhite skipnl +syn keyword elixirRecordDefine        defrecord      nextgroup=elixirRecordDeclaration      skipwhite skipnl +syn keyword elixirPrivateRecordDefine defrecordp     nextgroup=elixirRecordDeclaration      skipwhite skipnl +syn keyword elixirMacroDefine         defmacro       nextgroup=elixirMacroDeclaration       skipwhite skipnl +syn keyword elixirPrivateMacroDefine  defmacrop      nextgroup=elixirMacroDeclaration       skipwhite skipnl +syn keyword elixirDelegateDefine      defdelegate    nextgroup=elixirDelegateDeclaration    skipwhite skipnl +syn keyword elixirOverridableDefine   defoverridable nextgroup=elixirOverridableDeclaration skipwhite skipnl +syn keyword elixirExceptionDefine     defexception   nextgroup=elixirExceptionDeclaration   skipwhite skipnl +syn keyword elixirCallbackDefine      defcallback    nextgroup=elixirCallbackDeclaration    skipwhite skipnl + +" Declarations +syn match  elixirModuleDeclaration      "[^[:space:];#<]\+"        contained contains=elixirName nextgroup=elixirBlock     skipwhite skipnl +syn match  elixirFunctionDeclaration    "[^[:space:];#<,()\[\]]\+" contained                     nextgroup=elixirArguments skipwhite skipnl +syn match  elixirProtocolDeclaration    "[^[:space:];#<]\+"        contained contains=elixirName                           skipwhite skipnl +syn match  elixirImplDeclaration        "[^[:space:];#<]\+"        contained contains=elixirName                           skipwhite skipnl +syn match  elixirRecordDeclaration      "[^[:space:];#<]\+"        contained contains=elixirName,elixirSymbol              skipwhite skipnl +syn match  elixirMacroDeclaration       "[^[:space:];#<,()\[\]]\+" contained                     nextgroup=elixirArguments skipwhite skipnl +syn match  elixirDelegateDeclaration    "[^[:space:];#<,()\[\]]\+" contained contains=elixirFunctionDeclaration            skipwhite skipnl +syn region elixirDelegateDeclaration    start='\['     end='\]'    contained contains=elixirFunctionDeclaration            skipwhite skipnl +syn match  elixirOverridableDeclaration "[^[:space:];#<]\+"        contained contains=elixirName                           skipwhite skipnl +syn match  elixirExceptionDeclaration   "[^[:space:];#<]\+"        contained contains=elixirName                           skipwhite skipnl +syn match  elixirCallbackDeclaration    "[^[:space:];#<,()\[\]]\+" contained contains=elixirFunctionDeclaration            skipwhite skipnl + +syn cluster elixirDeclaration contains=elixirFunctionDeclaration,elixirModuleDeclaration,elixirProtocolDeclaration,elixirImplDeclaration,elixirRecordDeclaration,elixirMacroDeclaration,elixirDelegateDeclaration,elixirOverridableDeclaration,elixirExceptionDeclaration,elixirCallbackDeclaration + +hi def link elixirDefine                 Define +hi def link elixirPrivateDefine          Define +hi def link elixirModuleDefine           Define +hi def link elixirProtocolDefine         Define +hi def link elixirImplDefine             Define +hi def link elixirRecordDefine           Define +hi def link elixirPrivateRecordDefine    Define +hi def link elixirMacroDefine            Define +hi def link elixirPrivateMacroDefine     Define +hi def link elixirDelegateDefine         Define +hi def link elixirOverridableDefine      Define +hi def link elixirExceptionDefine        Define +hi def link elixirCallbackDefine         Define +hi def link elixirFunctionDeclaration    Function +hi def link elixirMacroDeclaration       Macro +hi def link elixirInclude                Include +hi def link elixirComment                Comment +hi def link elixirTodo                   Todo +hi def link elixirKeyword                Keyword +hi def link elixirOperator               Operator +hi def link elixirSymbol                 Constant +hi def link elixirPseudoVariable         Constant +hi def link elixirName                   Type +hi def link elixirBoolean                Boolean +hi def link elixirVariable               Identifier +hi def link elixirUnusedVariable         Comment +hi def link elixirNumber                 Number +hi def link elixirDocString              Comment +hi def link elixirSymbolInterpolated     elixirSymbol +hi def link elixirRegex                  elixirString +hi def link elixirRegexEscape            elixirSpecial +hi def link elixirRegexEscapePunctuation elixirSpecial +hi def link elixirRegexCharClass         elixirSpecial +hi def link elixirRegexQuantifier        elixirSpecial +hi def link elixirSpecial                Special +hi def link elixirString                 String +hi def link elixirSigil                  String +hi def link elixirDelimiter              Delimiter | 
