diff options
author | Adam Stankiewicz <sheerun@sher.pl> | 2014-12-11 22:58:14 +0100 |
---|---|---|
committer | Adam Stankiewicz <sheerun@sher.pl> | 2014-12-11 22:58:14 +0100 |
commit | 7f2e3663341d725b073857fcd3b2f5868ce85248 (patch) | |
tree | 34c4063119045da0824d46b6c1f8fc8fc0b9c2b4 /syntax/erlang.vim | |
parent | 04f868b94aad9ef31d3cd1adc526d720808f7837 (diff) | |
download | vim-polyglot-7f2e3663341d725b073857fcd3b2f5868ce85248.tar.gz vim-polyglot-7f2e3663341d725b073857fcd3b2f5868ce85248.zip |
Change erlang provider to hcs42/vim-erlang-runtime
Diffstat (limited to 'syntax/erlang.vim')
-rw-r--r-- | syntax/erlang.vim | 376 |
1 files changed, 255 insertions, 121 deletions
diff --git a/syntax/erlang.vim b/syntax/erlang.vim index 8b6ad624..7f883559 100644 --- a/syntax/erlang.vim +++ b/syntax/erlang.vim @@ -1,137 +1,271 @@ " Vim syntax file -" Language: Erlang -" Maintainer: Oscar Hellström <oscar@oscarh.net> -" URL: http://oscar.hellstrom.st -" Version: 2010-08-09 -" ------------------------------------------------------------------------------ -" {{{1 -" Options: +" Language: Erlang (http://www.erlang.org) +" Maintainer: Csaba Hoch <csaba.hoch@gmail.com> +" Contributor: Adam Rutkowski <hq@mtod.org> +" Last Update: 2013-Nov-23 +" License: Vim license +" URL: https://github.com/hcs42/vim-erlang + +" Acknowledgements: This script was originally created by Kresimir Marzic [1]. +" The script was then revamped by Csaba Hoch [2]. During the revamp, the new +" highlighting style and some code was taken from the Erlang syntax script +" that is part of vimerl [3], created by Oscar Hellström [4] and improved by +" Ricardo Catalinas Jiménez [5]. + +" [1]: KreÄ…imir Marľić (Kresimir Marzic) <kmarzic@fly.srk.fer.hr> +" [2]: Csaba Hoch <csaba.hoch@gmail.com> +" [3]: https://github.com/jimenezrick/vimerl +" [4]: Oscar Hellström <oscar@oscarh.net> (http://oscar.hellstrom.st) +" [5]: Ricardo Catalinas Jiménez <jimenezrick@gmail.com> + +" Customization: +" +" To use the old highlighting style, add this to your .vimrc: +" +" let g:erlang_old_style_highlight = 1 " -" Erlang BIFs -" g:erlangHighlightBif - highlight erlang built in functions (default: off) +" To highlight further module attributes, add them to +" ~/.vim/after/syntax/erlang.vim: " -" }}} -" ----------------------------------------------------------------------------- +" syn keyword erlangAttribute myattr1 myattr2 contained -" Setup {{{1 " For version 5.x: Clear all syntax items " For version 6.x: Quit when a syntax file was already loaded if version < 600 - syntax clear + syntax clear elseif exists("b:current_syntax") - finish + finish endif -" Erlang is case sensitive +let s:cpo_save = &cpo +set cpo&vim + +" Case sensitive syn case match -" Match groups {{{1 -syn match erlangStringModifier /\\./ contained -syn match erlangStringModifier /\~\%(-\?[0-9*]\+\)\?\%(\.[0-9*]\+\..\?\)\?\%(c\|f\|e\|g\|s\|w\|p\|W\|P\|B\|X\|#\|b\|+\|n\|i\)/ contained -syn match erlangModifier /\$\\\?./ - -syn match erlangInteger /\<\%([0-9]\+#[0-9a-fA-F]\+\|[0-9]\+\)\>/ -syn match erlangFloat /\<[0-9]\+\.[0-9]\+\%(e-\?[0-9]\+\)\?\>/ - -syn keyword erlangTodo TODO FIXME XXX contained -syn match erlangComment /%.*$/ contains=@Spell,erlangTodo - -syn keyword erlangKeyword band bor bnot bsl bsr bxor div rem xor -syn keyword erlangKeyword try catch begin receive after cond fun let query - -syn keyword erlangConditional case if of end -syn keyword erlangConditional not and or andalso orelse -syn keyword erlangConditional when - -syn keyword erlangBoolean true false - -syn keyword erlangGuard is_list is_alive is_atom is_binary is_bitstring is_boolean is_tuple is_number is_integer is_float is_function is_constant is_pid is_port is_reference is_record is_process_alive - -syn match erlangOperator /\/\|*\|+\|-\|++\|--/ -syn match erlangOperator /->\|<-\|||\||\|!\|=/ -syn match erlangOperator /=:=\|==\|\/=\|=\/=\|<\|>\|=<\|>=/ -syn keyword erlangOperator div rem - -syn region erlangString start=/"/ end=/"/ skip=/\\/ contains=@Spell,erlangStringModifier - -syn match erlangVariable /\<[A-Z_]\w*\>/ -syn match erlangAtom /\%(\%(^-\)\|#\)\@<!\<[a-z][A-Za-z0-9_]*\>\%(\s*[(:]\)\@!/ -syn match erlangAtom /\\\@<!'[^']*\\\@<!'/ - -syn match erlangRecord /#\w\+/ - -syn match erlangTuple /{\|}/ -syn match erlangList /\[\|\]/ - - syn match erlangAttribute /^-\%(vsn\|author\|copyright\|compile\|deprecated\|module\|export\|import\|behaviour\|export_type\|ignore_xref\) *(\@=/ -syn match erlangInclude /^-include\%(_lib\)\?\s*(\@=/ -syn match erlangRecordDef /^-record\s*(\@=/ -syn match erlangDefine /^-\%(define\|undef\)\s*(\@=/ -syn match erlangPreCondit /^-\%(ifdef\|ifndef\|else\|endif\)\%(\s*(\@=\)\?/ - -syn match erlangType /^-\%(spec\|type\)[( ]\@=/ - -syn match erlangMacro /\%(-define(\)\@<=\w\+/ -syn match erlangMacro /?\w\+/ - -syn match erlangBitType /\%(\/\|-\)\@<=\%(bits\|bitstring\|binary\|integer\|float\|unit\)\>/ -syn match erlangBitSize /:\@<=[0-9]\+/ - -syn match erlangBinary /<<\|>>/ - -" BIFS -syn match erlangBIF /\%([^:0-9A-Za-z_]\|\<erlang:\)\@<=\%(abs\|apply\|atom_to_list\|binary_part\|binary_to_list\|binary_to_term\|binary_to_atom\|binary_to_existing_atom\|bitstring_to_list\|check_process_code\|concat_binary\|date\|delete_module\|disconnect_node\|element\|erase\|error\|exit\|float\|float_to_list\|garbage_collect\|get\|get_keys\|group_leader\|halt\|hd\|integer_to_list\|iolist_to_binary\|iolist_size\|length\|link\|list_to_atom\|list_to_binary\|list_to_bitstring\|list_to_existing_atom\|list_to_float\|list_to_integer\|list_to_pid\|list_to_tuple\|load_module\|make_ref\|monitor_node\|node\|nodes\|now\|open_port\|pid_to_list\|port_close\|port_command\|port_connect\|port_control\|pre_loaded\|process_flag\|process_info\|processes\|purge_module\|put\|register\|registered\|round\|self\|setelement\|size\|bit_size\|byte_size\|spawn\|spawn_link\|spawn_opt\|split_binary\|statistics\|term_to_binary\|throw\|time\|tl\|trunc\|tuple_to_list\|unlink\|unregister\|whereis\)\((\|\/[0-9]\)\@=/ -syn match erlangBIF /\<\%(erlang:\)\@<=\%(append_element\|bump_reductions\|cancel_timer\|decode_packet\|demonitor\|display\|fault\|fun_info\|fun_to_list\|function_exported\|get_cookie\|get_stacktrace\|hash\|hibernate\|info\|is_builtin\|loaded\|localtime\|localtime_to_universaltime\|localtime_to_universaltime\|make_tuple\|md5\|md5_init\|md5_update\|memory\|monitor\|monitor_node\|phash\|phash2\|port_call\|port_info\|port_to_list\|ports\|process_display\|raise\|read_timer\|ref_to_list\|resume_process\|send\|send_after\|send_nosuspend\|set_cookie\|spawn_monitor\|start_timer\|suspend_process\|system_flag\|system_info\|system_monitor\|trace\|trace_delivered\|trace_info\|trace_pattern\|universaltime\|universaltime_to_localtime\|yield\)(\@=/ -syn match erlangGBIF /erlang\(:\w\)\@=/ -" }}} - -" Link Erlang stuff to Vim groups {{{1 -hi link erlangTodo Todo -hi link erlangString String -hi link erlangNoSpellString String -hi link erlangModifier SpecialChar -hi link erlangStringModifier SpecialChar -hi link erlangComment Comment -hi link erlangVariable Identifier -hi link erlangInclude Include -hi link erlangRecordDef Keyword -hi link erlangAttribute Keyword -hi link erlangKeyword Keyword -hi link erlangMacro Macro -hi link erlangDefine Define -hi link erlangPreCondit PreCondit -hi link erlangPreProc PreProc -hi link erlangDelimiter Delimiter -hi link erlangBitDelimiter Normal -hi link erlangOperator Operator -hi link erlangConditional Conditional -hi link erlangGuard Conditional -hi link erlangBoolean Boolean -hi link erlangAtom Constant -hi link erlangRecord Structure -hi link erlangInteger Number -hi link erlangFloat Number -hi link erlangFloat Number -hi link erlangFloat Number -hi link erlangFloat Number -hi link erlangHex Number -hi link erlangBIF Keyword -hi link erlangFun Keyword -hi link erlangList Delimiter -hi link erlangTuple Delimiter -hi link erlangBinary Keyword -hi link erlangBitVariable Identifier -hi link erlangBitType Type -hi link erlangType Type -hi link erlangBitSize Number -" }}} - -" Optional linkings {{{1 -if exists("g:erlangHighlightBif") && g:erlangHighlightBif - hi link erlangGBIF Keyword +if version >= 600 + setlocal iskeyword+=$,@-@ +endif + +" Comments +syn match erlangComment '%.*$' contains=erlangCommentAnnotation,erlangTodo +syn match erlangCommentAnnotation ' \@<=@\%(clear\|docfile\|end\|headerfile\|todo\|TODO\|type\|author\|copyright\|doc\|reference\|see\|since\|title\|version\|deprecated\|hidden\|private\|equiv\|spec\|throws\)' contained +syn match erlangCommentAnnotation /`[^']*'/ contained +syn keyword erlangTodo TODO FIXME XXX contained + +" Numbers (minimum base is 2, maximum is 36.) +syn match erlangNumberInteger '\<\d\+\>' +syn match erlangNumberInteger '\<\%([2-9]\|[12]\d\|3[0-6]\)\+#[[:alnum:]]\+\>' +syn match erlangNumberFloat '\<\d\+\.\d\+\%([eE][+-]\=\d\+\)\=\>' + +" Strings, atoms, characters +syn region erlangString start=/"/ end=/"/ contains=erlangStringModifier +syn region erlangQuotedAtom start=/'/ end=/'/ contains=erlangQuotedAtomModifier +syn match erlangStringModifier '\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)\|\~\%([ni~]\|\%(-\=\d\+\|\*\)\=\.\=\%(\*\|\d\+\)\=\%(\..\)\=[tl]*[cfegswpWPBX#bx+]\)' contained +syn match erlangQuotedAtomModifier '\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained +syn match erlangModifier '\$\%([^\\]\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)\)' + +" Operators, separators +syn match erlangOperator '==\|=:=\|/=\|=/=\|<\|=<\|>\|>=\|=>\|:=\|++\|--\|=\|!\|<-\|+\|-\|\*\|\/' +syn keyword erlangOperator div rem or xor bor bxor bsl bsr and band not bnot andalso orelse +syn match erlangBracket '{\|}\|\[\|]\||\|||' +syn match erlangPipe '|' +syn match erlangRightArrow '->' + +" Atoms, function calls (order is important) +syn match erlangAtom '\<\l[[:alnum:]_@]*' contains=erlangBoolean +syn keyword erlangBoolean true false contained +syn match erlangLocalFuncCall '\<\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*(\)\@=' contains=erlangBIF +syn match erlangLocalFuncRef '\<\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*/\)\@=' +syn match erlangGlobalFuncCall '\<\%(\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*\.\%(\s\|\n\|%.*\n\)*\)*\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*:\%(\s\|\n\|%.*\n\)*\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*(\)\@=' contains=erlangComment +syn match erlangGlobalFuncRef '\<\%(\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*\.\%(\s\|\n\|%.*\n\)*\)*\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*:\%(\s\|\n\|%.*\n\)*\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*/\)\@=' contains=erlangComment + +" Variables, macros, records, maps +syn match erlangVariable '\<[A-Z_][[:alnum:]_@]*' +syn match erlangMacro '??\=[[:alnum:]_@]\+' +syn match erlangMacro '\%(-define(\)\@<=[[:alnum:]_@]\+' +syn match erlangMap '#' +syn match erlangRecord '#\s*\l[[:alnum:]_@]*' + +" Shebang (this line has to be after the ErlangMap) +syn match erlangShebang '^#!.*' + +" Bitstrings +syn match erlangBitType '\%(\/\%(\s\|\n\|%.*\n\)*\)\@<=\%(integer\|float\|binary\|bytes\|bitstring\|bits\|binary\|utf8\|utf16\|utf32\|signed\|unsigned\|big\|little\|native\|unit\)\%(\%(\s\|\n\|%.*\n\)*-\%(\s\|\n\|%.*\n\)*\%(integer\|float\|binary\|bytes\|bitstring\|bits\|binary\|utf8\|utf16\|utf32\|signed\|unsigned\|big\|little\|native\|unit\)\)*' contains=erlangComment + +" Constants and Directives +syn match erlangUnknownAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\l[[:alnum:]_@]*' contains=erlangComment +syn match erlangAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\%(behaviou\=r\|compile\|export\(_type\)\=\|file\|import\|module\|author\|copyright\|doc\|vsn\|on_load\)\>' contains=erlangComment +syn match erlangInclude '^\s*-\%(\s\|\n\|%.*\n\)*\%(include\|include_lib\)\>' contains=erlangComment +syn match erlangRecordDef '^\s*-\%(\s\|\n\|%.*\n\)*record\>' contains=erlangComment +syn match erlangDefine '^\s*-\%(\s\|\n\|%.*\n\)*\%(define\|undef\)\>' contains=erlangComment +syn match erlangPreCondit '^\s*-\%(\s\|\n\|%.*\n\)*\%(ifdef\|ifndef\|else\|endif\)\>' contains=erlangComment +syn match erlangType '^\s*-\%(\s\|\n\|%.*\n\)*\%(spec\|type\|opaque\|callback\)\>' contains=erlangComment + +" Keywords +syn keyword erlangKeyword after begin case catch cond end fun if let of +syn keyword erlangKeyword receive when try + +" Build-in-functions (BIFs) +syn keyword erlangBIF abs alive apply atom_to_binary atom_to_list contained +syn keyword erlangBIF binary_part binary_to_atom contained +syn keyword erlangBIF binary_to_existing_atom binary_to_float contained +syn keyword erlangBIF binary_to_integer bitstring_to_list contained +syn keyword erlangBIF binary_to_list binary_to_term bit_size contained +syn keyword erlangBIF byte_size check_old_code check_process_code contained +syn keyword erlangBIF concat_binary date delete_module demonitor contained +syn keyword erlangBIF disconnect_node element erase error exit contained +syn keyword erlangBIF float float_to_binary float_to_list contained +syn keyword erlangBIF garbage_collect get get_keys group_leader contained +syn keyword erlangBIF halt hd integer_to_binary integer_to_list contained +syn keyword erlangBIF iolist_to_binary iolist_size is_alive contained +syn keyword erlangBIF is_atom is_binary is_bitstring is_boolean contained +syn keyword erlangBIF is_float is_function is_integer is_list contained +syn keyword erlangBIF is_number is_pid is_port is_process_alive contained +syn keyword erlangBIF is_record is_reference is_tuple length link contained +syn keyword erlangBIF list_to_atom list_to_binary contained +syn keyword erlangBIF list_to_bitstring list_to_existing_atom contained +syn keyword erlangBIF list_to_float list_to_integer list_to_pid contained +syn keyword erlangBIF list_to_tuple load_module make_ref max min contained +syn keyword erlangBIF module_loaded monitor monitor_node node contained +syn keyword erlangBIF nodes now open_port pid_to_list port_close contained +syn keyword erlangBIF port_command port_connect pre_loaded contained +syn keyword erlangBIF process_flag process_flag process_info contained +syn keyword erlangBIF process purge_module put register registered contained +syn keyword erlangBIF round self setelement size spawn spawn_link contained +syn keyword erlangBIF spawn_monitor spawn_opt split_binary contained +syn keyword erlangBIF statistics term_to_binary throw time tl contained +syn keyword erlangBIF trunc tuple_size tuple_to_list unlink contained +syn keyword erlangBIF unregister whereis contained + +" Sync at the beginning of functions: if this is not used, multiline string +" are not always recognized, and the indentation script cannot use the +" "searchpair" (because it would not always skip strings and comments when +" looking for keywords and opening parens/brackets). +syn sync match erlangSync grouphere NONE "^[a-z]\s*(" +let b:erlang_syntax_synced = 1 + +" Define the default highlighting. See ":help group-name" for the groups and +" their colors. + +let s:old_style = (exists("g:erlang_old_style_highlight") && + \g:erlang_old_style_highlight == 1) + +" For version 5.7 and earlier: only when not done already +" For version 5.8 and later: only when an item doesn't have highlighting yet +if version >= 508 || !exists("did_erlang_inits") + if version < 508 + let did_erlang_inits = 1 + command -nargs=+ HiLink hi link <args> + else + command -nargs=+ HiLink hi def link <args> + endif + + " Comments + HiLink erlangComment Comment + HiLink erlangCommentAnnotation Special + HiLink erlangTodo Todo + HiLink erlangShebang Comment + + " Numbers + HiLink erlangNumberInteger Number + HiLink erlangNumberFloat Float + + " Strings, atoms, characters + HiLink erlangString String + + if s:old_style + HiLink erlangQuotedAtom Type + else + HiLink erlangQuotedAtom String + endif + + HiLink erlangStringModifier Special + HiLink erlangQuotedAtomModifier Special + HiLink erlangModifier Special + + " Operators, separators + HiLink erlangOperator Operator + HiLink erlangRightArrow Operator + if s:old_style + HiLink erlangBracket Normal + HiLink erlangPipe Normal + else + HiLink erlangBracket Delimiter + HiLink erlangPipe Delimiter + endif + + " Atoms, functions, variables, macros + if s:old_style + HiLink erlangAtom Normal + HiLink erlangLocalFuncCall Normal + HiLink erlangLocalFuncRef Normal + HiLink erlangGlobalFuncCall Function + HiLink erlangGlobalFuncRef Function + HiLink erlangVariable Normal + HiLink erlangMacro Normal + HiLink erlangRecord Normal + HiLink erlangMap Normal + else + HiLink erlangAtom String + HiLink erlangLocalFuncCall Normal + HiLink erlangLocalFuncRef Normal + HiLink erlangGlobalFuncCall Normal + HiLink erlangGlobalFuncRef Normal + HiLink erlangVariable Identifier + HiLink erlangMacro Macro + HiLink erlangRecord Structure + HiLink erlangMap Structure + endif + + " Bitstrings + if !s:old_style + HiLink erlangBitType Type + endif + + " Constants and Directives + if s:old_style + HiLink erlangAttribute Type + HiLink erlangMacroDef Type + HiLink erlangUnknownAttribute Normal + HiLink erlangInclude Type + HiLink erlangRecordDef Type + HiLink erlangDefine Type + HiLink erlangPreCondit Type + HiLink erlangType Type + else + HiLink erlangAttribute Keyword + HiLink erlangMacroDef Macro + HiLink erlangUnknownAttribute Normal + HiLink erlangInclude Include + HiLink erlangRecordDef Keyword + HiLink erlangDefine Define + HiLink erlangPreCondit PreCondit + HiLink erlangType Type + endif + + " Keywords + HiLink erlangKeyword Keyword + + " Build-in-functions (BIFs) + HiLink erlangBIF Function + + if s:old_style + HiLink erlangBoolean Statement + HiLink erlangExtra Statement + HiLink erlangSignal Statement + else + HiLink erlangBoolean Boolean + HiLink erlangExtra Statement + HiLink erlangSignal Statement + endif + + delcommand HiLink endif -" }}} let b:current_syntax = "erlang" -" vim: set foldmethod=marker: +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: sw=2 et |