blob: 11b763409bdad8e0d516f435092aaa422e895652 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaarad3b3662013-05-17 18:14:19 +02002" Language: Erlang (http://www.erlang.org)
3" Maintainer: Csaba Hoch <csaba.hoch@gmail.com>
Bram Moolenaar9d98fe92013-08-03 18:35:36 +02004" Last Update: 2013-Jul-25
Bram Moolenaar6be7f872012-01-20 21:08:56 +01005" License: Vim license
Bram Moolenaarad3b3662013-05-17 18:14:19 +02006" URL: https://github.com/hcs42/vim-erlang
Bram Moolenaar071d4272004-06-13 20:20:40 +00007
Bram Moolenaar203d04d2013-06-06 21:36:40 +02008" Acknowledgements: This script was originally created by Kresimir Marzic [1].
9" The script was then revamped by Csaba Hoch [2]. During the revamp, the new
10" highlighting style and some code was taken from the Erlang syntax script
11" that is part of vimerl [3], created by Oscar Hellström [4] and improved by
12" Ricardo Catalinas Jiménez [5].
13
14" [1]: Kreąimir Marľić (Kresimir Marzic) <kmarzic@fly.srk.fer.hr>
15" [2]: Csaba Hoch <csaba.hoch@gmail.com>
16" [3]: https://github.com/jimenezrick/vimerl
17" [4]: Oscar Hellström <oscar@oscarh.net> (http://oscar.hellstrom.st)
18" [5]: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
19
Bram Moolenaarad3b3662013-05-17 18:14:19 +020020" Customization:
21"
Bram Moolenaar203d04d2013-06-06 21:36:40 +020022" To use the old highlighting style, add this to your .vimrc:
Bram Moolenaarad3b3662013-05-17 18:14:19 +020023"
Bram Moolenaar203d04d2013-06-06 21:36:40 +020024" let g:erlang_old_style_highlight = 1
Bram Moolenaarad3b3662013-05-17 18:14:19 +020025"
Bram Moolenaar203d04d2013-06-06 21:36:40 +020026" To highlight further module attributes, add them to
27" ~/.vim/after/syntax/erlang.vim:
Bram Moolenaarad3b3662013-05-17 18:14:19 +020028"
Bram Moolenaar203d04d2013-06-06 21:36:40 +020029" syn keyword erlangAttribute myattr1 myattr2 contained
Bram Moolenaarad3b3662013-05-17 18:14:19 +020030
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020031" quit when a syntax file was already loaded
32if exists("b:current_syntax")
Bram Moolenaarad3b3662013-05-17 18:14:19 +020033 finish
Bram Moolenaar071d4272004-06-13 20:20:40 +000034endif
35
Bram Moolenaar9d98fe92013-08-03 18:35:36 +020036let s:cpo_save = &cpo
37set cpo&vim
38
Bram Moolenaarad3b3662013-05-17 18:14:19 +020039" Case sensitive
Bram Moolenaar071d4272004-06-13 20:20:40 +000040syn case match
41
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020042setlocal iskeyword+=$,@-@
Bram Moolenaarad3b3662013-05-17 18:14:19 +020043
44" Comments
Bram Moolenaar203d04d2013-06-06 21:36:40 +020045syn match erlangComment '%.*$' contains=erlangCommentAnnotation,erlangTodo
46syn match erlangCommentAnnotation ' \@<=@\%(clear\|docfile\|end\|headerfile\|todo\|TODO\|type\|author\|copyright\|doc\|reference\|see\|since\|title\|version\|deprecated\|hidden\|private\|equiv\|spec\|throws\)' contained
47syn match erlangCommentAnnotation /`[^']*'/ contained
48syn keyword erlangTodo TODO FIXME XXX contained
49syn match erlangShebang '^#!.*'
Bram Moolenaarad3b3662013-05-17 18:14:19 +020050
51" Numbers (minimum base is 2, maximum is 36.)
Bram Moolenaar203d04d2013-06-06 21:36:40 +020052syn match erlangNumberInteger '\<\d\+\>'
53syn match erlangNumberInteger '\<\%([2-9]\|[12]\d\|3[0-6]\)\+#[[:alnum:]]\+\>'
54syn match erlangNumberFloat '\<\d\+\.\d\+\%([eE][+-]\=\d\+\)\=\>'
Bram Moolenaarad3b3662013-05-17 18:14:19 +020055
56" Strings, atoms, characters
Bram Moolenaar203d04d2013-06-06 21:36:40 +020057syn region erlangString start=/"/ end=/"/ contains=erlangStringModifier
58syn region erlangQuotedAtom start=/'/ end=/'/ contains=erlangQuotedAtomModifier
59syn match erlangStringModifier '\~\a\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained
60syn match erlangQuotedAtomModifier '\~\a\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained
61syn match erlangModifier '\$\%([^\\]\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)\)'
Bram Moolenaarad3b3662013-05-17 18:14:19 +020062
Bram Moolenaar203d04d2013-06-06 21:36:40 +020063" Operators, separators
64syn match erlangOperator '==\|=:=\|/=\|=/=\|<\|=<\|>\|>=\|++\|--\|=\|!\|<-\|+\|-\|\*\|\/'
65syn keyword erlangOperator div rem or xor bor bxor bsl bsr and band not bnot andalso orelse
66syn match erlangBracket '{\|}\|\[\|]\||\|||'
67syn match erlangPipe '|'
68syn match erlangRightArrow '->'
Bram Moolenaarad3b3662013-05-17 18:14:19 +020069
Bram Moolenaar203d04d2013-06-06 21:36:40 +020070" Atoms, function calls (order is important)
71syn match erlangAtom '\<\l[[:alnum:]_@]*' contains=erlangBoolean
72syn keyword erlangBoolean true false contained
73syn match erlangLocalFuncCall '\<\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*(\)\@=' contains=erlangBIF
74syn match erlangLocalFuncRef '\<\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*/\)\@='
75syn 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
76syn 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
Bram Moolenaarad3b3662013-05-17 18:14:19 +020077
Bram Moolenaar203d04d2013-06-06 21:36:40 +020078" Variables, macros, records
79syn match erlangVariable '\<[A-Z_][[:alnum:]_@]*'
80syn match erlangMacro '??\=[[:alnum:]_@]\+'
81syn match erlangMacro '\%(-define(\)\@<=[[:alnum:]_@]\+'
82syn match erlangRecord '#\s*\l[[:alnum:]_@]*'
83
84" Bitstrings
85syn 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
Bram Moolenaarad3b3662013-05-17 18:14:19 +020086
87" Constants and Directives
Bram Moolenaar9d98fe92013-08-03 18:35:36 +020088syn match erlangUnknownAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\l[[:alnum:]_@]*' contains=erlangComment
89syn match erlangAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\%(behaviou\=r\|compile\|export\(_type\)\=\|file\|import\|module\|author\|copyright\|doc\|vsn\|on_load\)\>' contains=erlangComment
90syn match erlangInclude '^\s*-\%(\s\|\n\|%.*\n\)*\%(include\|include_lib\)\>' contains=erlangComment
91syn match erlangRecordDef '^\s*-\%(\s\|\n\|%.*\n\)*record\>' contains=erlangComment
92syn match erlangDefine '^\s*-\%(\s\|\n\|%.*\n\)*\%(define\|undef\)\>' contains=erlangComment
93syn match erlangPreCondit '^\s*-\%(\s\|\n\|%.*\n\)*\%(ifdef\|ifndef\|else\|endif\)\>' contains=erlangComment
94syn match erlangType '^\s*-\%(\s\|\n\|%.*\n\)*\%(spec\|type\|opaque\|callback\)\>' contains=erlangComment
Bram Moolenaarad3b3662013-05-17 18:14:19 +020095
96" Keywords
Bram Moolenaar203d04d2013-06-06 21:36:40 +020097syn keyword erlangKeyword after begin case catch cond end fun if let of query
98syn keyword erlangKeyword receive when try
Bram Moolenaarad3b3662013-05-17 18:14:19 +020099
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200100" Build-in-functions (BIFs)
101syn keyword erlangBIF abs alive apply atom_to_binary atom_to_list contained
102syn keyword erlangBIF binary_part binary_to_atom contained
103syn keyword erlangBIF binary_to_existing_atom binary_to_float contained
104syn keyword erlangBIF binary_to_integer bitstring_to_list contained
105syn keyword erlangBIF binary_to_list binary_to_term bit_size contained
106syn keyword erlangBIF byte_size check_old_code check_process_code contained
107syn keyword erlangBIF concat_binary date delete_module demonitor contained
108syn keyword erlangBIF disconnect_node element erase error exit contained
109syn keyword erlangBIF float float_to_binary float_to_list contained
110syn keyword erlangBIF garbage_collect get get_keys group_leader contained
111syn keyword erlangBIF halt hd integer_to_binary integer_to_list contained
112syn keyword erlangBIF iolist_to_binary iolist_size is_alive contained
113syn keyword erlangBIF is_atom is_binary is_bitstring is_boolean contained
114syn keyword erlangBIF is_float is_function is_integer is_list contained
115syn keyword erlangBIF is_number is_pid is_port is_process_alive contained
116syn keyword erlangBIF is_record is_reference is_tuple length link contained
117syn keyword erlangBIF list_to_atom list_to_binary contained
118syn keyword erlangBIF list_to_bitstring list_to_existing_atom contained
119syn keyword erlangBIF list_to_float list_to_integer list_to_pid contained
120syn keyword erlangBIF list_to_tuple load_module make_ref max min contained
121syn keyword erlangBIF module_loaded monitor monitor_node node contained
122syn keyword erlangBIF nodes now open_port pid_to_list port_close contained
123syn keyword erlangBIF port_command port_connect pre_loaded contained
124syn keyword erlangBIF process_flag process_flag process_info contained
125syn keyword erlangBIF process purge_module put register registered contained
126syn keyword erlangBIF round self setelement size spawn spawn_link contained
127syn keyword erlangBIF spawn_monitor spawn_opt split_binary contained
128syn keyword erlangBIF statistics term_to_binary throw time tl contained
129syn keyword erlangBIF trunc tuple_size tuple_to_list unlink contained
130syn keyword erlangBIF unregister whereis contained
Bram Moolenaarad3b3662013-05-17 18:14:19 +0200131
132" Sync at the beginning of functions: if this is not used, multiline string
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200133" are not always recognized, and the indentation script cannot use the
134" "searchpair" (because it would not always skip strings and comments when
135" looking for keywords and opening parens/brackets).
Bram Moolenaarad3b3662013-05-17 18:14:19 +0200136syn sync match erlangSync grouphere NONE "^[a-z]\s*("
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200137let b:erlang_syntax_synced = 1
Bram Moolenaarad3b3662013-05-17 18:14:19 +0200138
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200139" Define the default highlighting. See ":help group-name" for the groups and
140" their colors.
141
Bram Moolenaar9d98fe92013-08-03 18:35:36 +0200142let s:old_style = (exists("g:erlang_old_style_highlight") &&
143 \g:erlang_old_style_highlight == 1)
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200144
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200145" Only when an item doesn't have highlighting yet
Bram Moolenaarad3b3662013-05-17 18:14:19 +0200146
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200147" Comments
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200148hi def link erlangComment Comment
149hi def link erlangCommentAnnotation Special
150hi def link erlangTodo Todo
151hi def link erlangShebang Comment
Bram Moolenaarad3b3662013-05-17 18:14:19 +0200152
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200153" Numbers
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200154hi def link erlangNumberInteger Number
155hi def link erlangNumberFloat Float
Bram Moolenaarad3b3662013-05-17 18:14:19 +0200156
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200157" Strings, atoms, characters
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200158hi def link erlangString String
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200159
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200160if s:old_style
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200161hi def link erlangQuotedAtom Type
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200162else
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200163hi def link erlangQuotedAtom String
Bram Moolenaarad3b3662013-05-17 18:14:19 +0200164endif
165
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200166hi def link erlangStringModifier Special
167hi def link erlangQuotedAtomModifier Special
168hi def link erlangModifier Special
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200169
170" Operators, separators
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200171hi def link erlangOperator Operator
172hi def link erlangRightArrow Operator
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200173if s:old_style
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200174hi def link erlangBracket Normal
175hi def link erlangPipe Normal
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200176else
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200177hi def link erlangBracket Delimiter
178hi def link erlangPipe Delimiter
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200179endif
180
181" Atoms, functions, variables, macros
182if s:old_style
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200183hi def link erlangAtom Normal
184hi def link erlangLocalFuncCall Normal
185hi def link erlangLocalFuncRef Normal
186hi def link erlangGlobalFuncCall Function
187hi def link erlangGlobalFuncRef Function
188hi def link erlangVariable Normal
189hi def link erlangMacro Normal
190hi def link erlangRecord Normal
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200191else
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200192hi def link erlangAtom String
193hi def link erlangLocalFuncCall Normal
194hi def link erlangLocalFuncRef Normal
195hi def link erlangGlobalFuncCall Normal
196hi def link erlangGlobalFuncRef Normal
197hi def link erlangVariable Identifier
198hi def link erlangMacro Macro
199hi def link erlangRecord Structure
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200200endif
201
202" Bitstrings
203if !s:old_style
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200204hi def link erlangBitType Type
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200205endif
206
207" Constants and Directives
208if s:old_style
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200209hi def link erlangAttribute Type
210hi def link erlangMacroDef Type
211hi def link erlangUnknownAttribute Normal
212hi def link erlangInclude Type
213hi def link erlangRecordDef Type
214hi def link erlangDefine Type
215hi def link erlangPreCondit Type
216hi def link erlangType Type
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200217else
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200218hi def link erlangAttribute Keyword
219hi def link erlangMacroDef Macro
220hi def link erlangUnknownAttribute Normal
221hi def link erlangInclude Include
222hi def link erlangRecordDef Keyword
223hi def link erlangDefine Define
224hi def link erlangPreCondit PreCondit
225hi def link erlangType Type
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200226endif
227
228" Keywords
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200229hi def link erlangKeyword Keyword
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200230
231" Build-in-functions (BIFs)
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200232hi def link erlangBIF Function
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200233
234if s:old_style
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200235hi def link erlangBoolean Statement
236hi def link erlangExtra Statement
237hi def link erlangSignal Statement
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200238else
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200239hi def link erlangBoolean Boolean
240hi def link erlangExtra Statement
241hi def link erlangSignal Statement
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200242endif
243
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200244
Bram Moolenaarad3b3662013-05-17 18:14:19 +0200245let b:current_syntax = "erlang"
246
Bram Moolenaar9d98fe92013-08-03 18:35:36 +0200247let &cpo = s:cpo_save
248unlet s:cpo_save
249
Bram Moolenaarad3b3662013-05-17 18:14:19 +0200250" vim: sw=2 et