xref: /vim-8.2.3635/runtime/syntax/erlang.vim (revision 1d59aa1f)
1071d4279SBram Moolenaar" Vim syntax file
2ad3b366cSBram Moolenaar" Language:     Erlang (http://www.erlang.org)
3ad3b366cSBram Moolenaar" Maintainer:   Csaba Hoch <[email protected]>
4036986f1SBram Moolenaar" Contributor:  Adam Rutkowski <[email protected]>
5*1d59aa1fSBram Moolenaar" Last Update:  2020-May-26
66be7f873SBram Moolenaar" License:      Vim license
7036986f1SBram Moolenaar" URL:          https://github.com/vim-erlang/vim-erlang-runtime
8071d4279SBram Moolenaar
9203d04d7SBram Moolenaar" Acknowledgements: This script was originally created by Kresimir Marzic [1].
10203d04d7SBram Moolenaar" The script was then revamped by Csaba Hoch [2]. During the revamp, the new
11203d04d7SBram Moolenaar" highlighting style and some code was taken from the Erlang syntax script
12203d04d7SBram Moolenaar" that is part of vimerl [3], created by Oscar Hellström [4] and improved by
13203d04d7SBram Moolenaar" Ricardo Catalinas Jiménez [5].
14203d04d7SBram Moolenaar
15203d04d7SBram Moolenaar" [1]: Kreąimir Marľić (Kresimir Marzic) <[email protected]>
16203d04d7SBram Moolenaar" [2]: Csaba Hoch <[email protected]>
17203d04d7SBram Moolenaar" [3]: https://github.com/jimenezrick/vimerl
18203d04d7SBram Moolenaar" [4]: Oscar Hellström <[email protected]> (http://oscar.hellstrom.st)
19203d04d7SBram Moolenaar" [5]: Ricardo Catalinas Jiménez <[email protected]>
20203d04d7SBram Moolenaar
21ad3b366cSBram Moolenaar" Customization:
22ad3b366cSBram Moolenaar"
23203d04d7SBram Moolenaar" To use the old highlighting style, add this to your .vimrc:
24ad3b366cSBram Moolenaar"
25203d04d7SBram Moolenaar"     let g:erlang_old_style_highlight = 1
26ad3b366cSBram Moolenaar"
27203d04d7SBram Moolenaar" To highlight further module attributes, add them to
28203d04d7SBram Moolenaar" ~/.vim/after/syntax/erlang.vim:
29ad3b366cSBram Moolenaar"
30203d04d7SBram Moolenaar"     syn keyword erlangAttribute myattr1 myattr2 contained
31ad3b366cSBram Moolenaar
3289bcfda6SBram Moolenaar" quit when a syntax file was already loaded
3389bcfda6SBram Moolenaarif exists("b:current_syntax")
34071d4279SBram Moolenaar    finish
35071d4279SBram Moolenaarendif
36071d4279SBram Moolenaar
379d98fe9cSBram Moolenaarlet s:cpo_save = &cpo
389d98fe9cSBram Moolenaarset cpo&vim
399d98fe9cSBram Moolenaar
40ad3b366cSBram Moolenaar" Case sensitive
41071d4279SBram Moolenaarsyn case match
42071d4279SBram Moolenaar
43ad3b366cSBram Moolenaarsetlocal iskeyword+=$,@-@
44ad3b366cSBram Moolenaar
45ad3b366cSBram Moolenaar" Comments
46ad3b366cSBram Moolenaarsyn match erlangComment           '%.*$' contains=erlangCommentAnnotation,erlangTodo
47*1d59aa1fSBram Moolenaarsyn match erlangCommentAnnotation ' \@<=@\%(clear\|docfile\|end\|headerfile\|todo\|TODO\|type\|author\|copyright\|doc\|reference\|see\|since\|title\|version\|deprecated\|hidden\|param\|private\|equiv\|spec\|throws\)' contained
48ad3b366cSBram Moolenaarsyn match erlangCommentAnnotation /`[^']*'/ contained
49ad3b366cSBram Moolenaarsyn keyword erlangTodo            TODO FIXME XXX contained
50ad3b366cSBram Moolenaar
51ad3b366cSBram Moolenaar" Numbers (minimum base is 2, maximum is 36.)
52ad3b366cSBram Moolenaarsyn match erlangNumberInteger '\<\d\+\>'
53ad3b366cSBram Moolenaarsyn match erlangNumberInteger '\<\%([2-9]\|[12]\d\|3[0-6]\)\+#[[:alnum:]]\+\>'
54ad3b366cSBram Moolenaarsyn match erlangNumberFloat   '\<\d\+\.\d\+\%([eE][+-]\=\d\+\)\=\>'
55ad3b366cSBram Moolenaar
56ad3b366cSBram Moolenaar" Strings, atoms, characters
57ad3b366cSBram Moolenaarsyn region erlangString            start=/"/ end=/"/ contains=erlangStringModifier
58ad3b366cSBram Moolenaarsyn region erlangQuotedAtom        start=/'/ end=/'/ contains=erlangQuotedAtomModifier
59036986f1SBram Moolenaarsyn match erlangStringModifier     '\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)\|\~\%([ni~]\|\%(-\=\d\+\|\*\)\=\.\=\%(\*\|\d\+\)\=\%(\..\)\=[tl]*[cfegswpWPBX#bx+]\)' contained
60036986f1SBram Moolenaarsyn match erlangQuotedAtomModifier '\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained
61ad3b366cSBram Moolenaarsyn match erlangModifier           '\$\%([^\\]\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)\)'
62ad3b366cSBram Moolenaar
63203d04d7SBram Moolenaar" Operators, separators
64036986f1SBram Moolenaarsyn match erlangOperator   '==\|=:=\|/=\|=/=\|<\|=<\|>\|>=\|=>\|:=\|++\|--\|=\|!\|<-\|+\|-\|\*\|\/'
65ad3b366cSBram Moolenaarsyn keyword erlangOperator div rem or xor bor bxor bsl bsr and band not bnot andalso orelse
66203d04d7SBram Moolenaarsyn match erlangBracket    '{\|}\|\[\|]\||\|||'
67203d04d7SBram Moolenaarsyn match erlangPipe       '|'
68ad3b366cSBram Moolenaarsyn match erlangRightArrow '->'
69ad3b366cSBram Moolenaar
70203d04d7SBram Moolenaar" Atoms, function calls (order is important)
71203d04d7SBram Moolenaarsyn match erlangAtom           '\<\l[[:alnum:]_@]*' contains=erlangBoolean
72203d04d7SBram Moolenaarsyn keyword erlangBoolean      true false contained
73203d04d7SBram Moolenaarsyn match erlangLocalFuncCall  '\<\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*(\)\@=' contains=erlangBIF
74203d04d7SBram Moolenaarsyn match erlangLocalFuncRef   '\<\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*/\)\@='
75036986f1SBram Moolenaarsyn 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,erlangVariable
76036986f1SBram Moolenaarsyn 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,erlangVariable
77203d04d7SBram Moolenaar
78036986f1SBram Moolenaar" Variables, macros, records, maps
79203d04d7SBram Moolenaarsyn match erlangVariable '\<[A-Z_][[:alnum:]_@]*'
80203d04d7SBram Moolenaarsyn match erlangMacro    '??\=[[:alnum:]_@]\+'
81203d04d7SBram Moolenaarsyn match erlangMacro    '\%(-define(\)\@<=[[:alnum:]_@]\+'
825ef1c6a4SBram Moolenaarsyn region erlangQuotedMacro         start=/??\=\s*'/ end=/'/ contains=erlangQuotedAtomModifier
83036986f1SBram Moolenaarsyn match erlangMap      '#'
84203d04d7SBram Moolenaarsyn match erlangRecord   '#\s*\l[[:alnum:]_@]*'
85036986f1SBram Moolenaarsyn region erlangQuotedRecord        start=/#\s*'/ end=/'/ contains=erlangQuotedAtomModifier
86036986f1SBram Moolenaar
87036986f1SBram Moolenaar" Shebang (this line has to be after the ErlangMap)
88036986f1SBram Moolenaarsyn match erlangShebang  '^#!.*'
89203d04d7SBram Moolenaar
90203d04d7SBram Moolenaar" Bitstrings
91203d04d7SBram Moolenaarsyn 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
92ad3b366cSBram Moolenaar
93ad3b366cSBram Moolenaar" Constants and Directives
949d98fe9cSBram Moolenaarsyn match erlangUnknownAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\l[[:alnum:]_@]*' contains=erlangComment
95*1d59aa1fSBram Moolenaarsyn match erlangAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\%(behaviou\=r\|compile\|export\(_type\)\=\|file\|import\|module\|author\|copyright\|doc\|vsn\|on_load\|optional_callbacks\)\>' contains=erlangComment
969d98fe9cSBram Moolenaarsyn match erlangInclude   '^\s*-\%(\s\|\n\|%.*\n\)*\%(include\|include_lib\)\>' contains=erlangComment
979d98fe9cSBram Moolenaarsyn match erlangRecordDef '^\s*-\%(\s\|\n\|%.*\n\)*record\>' contains=erlangComment
989d98fe9cSBram Moolenaarsyn match erlangDefine    '^\s*-\%(\s\|\n\|%.*\n\)*\%(define\|undef\)\>' contains=erlangComment
999d98fe9cSBram Moolenaarsyn match erlangPreCondit '^\s*-\%(\s\|\n\|%.*\n\)*\%(ifdef\|ifndef\|else\|endif\)\>' contains=erlangComment
1009d98fe9cSBram Moolenaarsyn match erlangType      '^\s*-\%(\s\|\n\|%.*\n\)*\%(spec\|type\|opaque\|callback\)\>' contains=erlangComment
101ad3b366cSBram Moolenaar
102ad3b366cSBram Moolenaar" Keywords
103036986f1SBram Moolenaarsyn keyword erlangKeyword after begin case catch cond end fun if let of
104203d04d7SBram Moolenaarsyn keyword erlangKeyword receive when try
105ad3b366cSBram Moolenaar
106203d04d7SBram Moolenaar" Build-in-functions (BIFs)
107203d04d7SBram Moolenaarsyn keyword erlangBIF abs alive apply atom_to_binary atom_to_list contained
108203d04d7SBram Moolenaarsyn keyword erlangBIF binary_part binary_to_atom contained
109203d04d7SBram Moolenaarsyn keyword erlangBIF binary_to_existing_atom binary_to_float contained
110203d04d7SBram Moolenaarsyn keyword erlangBIF binary_to_integer bitstring_to_list contained
111203d04d7SBram Moolenaarsyn keyword erlangBIF binary_to_list binary_to_term bit_size contained
112203d04d7SBram Moolenaarsyn keyword erlangBIF byte_size check_old_code check_process_code contained
113203d04d7SBram Moolenaarsyn keyword erlangBIF concat_binary date delete_module demonitor contained
114203d04d7SBram Moolenaarsyn keyword erlangBIF disconnect_node element erase error exit contained
115203d04d7SBram Moolenaarsyn keyword erlangBIF float float_to_binary float_to_list contained
116203d04d7SBram Moolenaarsyn keyword erlangBIF garbage_collect get get_keys group_leader contained
117203d04d7SBram Moolenaarsyn keyword erlangBIF halt hd integer_to_binary integer_to_list contained
118203d04d7SBram Moolenaarsyn keyword erlangBIF iolist_to_binary iolist_size is_alive contained
119203d04d7SBram Moolenaarsyn keyword erlangBIF is_atom is_binary is_bitstring is_boolean contained
1205ef1c6a4SBram Moolenaarsyn keyword erlangBIF is_float is_function is_integer is_list is_map is_map_key contained
121203d04d7SBram Moolenaarsyn keyword erlangBIF is_number is_pid is_port is_process_alive contained
122203d04d7SBram Moolenaarsyn keyword erlangBIF is_record is_reference is_tuple length link contained
123203d04d7SBram Moolenaarsyn keyword erlangBIF list_to_atom list_to_binary contained
124203d04d7SBram Moolenaarsyn keyword erlangBIF list_to_bitstring list_to_existing_atom contained
125203d04d7SBram Moolenaarsyn keyword erlangBIF list_to_float list_to_integer list_to_pid contained
1265ef1c6a4SBram Moolenaarsyn keyword erlangBIF list_to_tuple load_module make_ref map_size max contained
1275ef1c6a4SBram Moolenaarsyn keyword erlangBIF min module_loaded monitor monitor_node node contained
128203d04d7SBram Moolenaarsyn keyword erlangBIF nodes now open_port pid_to_list port_close contained
129203d04d7SBram Moolenaarsyn keyword erlangBIF port_command port_connect pre_loaded contained
130203d04d7SBram Moolenaarsyn keyword erlangBIF process_flag process_flag process_info contained
131203d04d7SBram Moolenaarsyn keyword erlangBIF process purge_module put register registered contained
132203d04d7SBram Moolenaarsyn keyword erlangBIF round self setelement size spawn spawn_link contained
133203d04d7SBram Moolenaarsyn keyword erlangBIF spawn_monitor spawn_opt split_binary contained
134203d04d7SBram Moolenaarsyn keyword erlangBIF statistics term_to_binary throw time tl contained
135203d04d7SBram Moolenaarsyn keyword erlangBIF trunc tuple_size tuple_to_list unlink contained
136203d04d7SBram Moolenaarsyn keyword erlangBIF unregister whereis contained
137ad3b366cSBram Moolenaar
138ad3b366cSBram Moolenaar" Sync at the beginning of functions: if this is not used, multiline string
139203d04d7SBram Moolenaar" are not always recognized, and the indentation script cannot use the
140203d04d7SBram Moolenaar" "searchpair" (because it would not always skip strings and comments when
141203d04d7SBram Moolenaar" looking for keywords and opening parens/brackets).
142ad3b366cSBram Moolenaarsyn sync match erlangSync grouphere NONE "^[a-z]\s*("
143203d04d7SBram Moolenaarlet b:erlang_syntax_synced = 1
144ad3b366cSBram Moolenaar
145203d04d7SBram Moolenaar" Define the default highlighting. See ":help group-name" for the groups and
146203d04d7SBram Moolenaar" their colors.
147203d04d7SBram Moolenaar
1489d98fe9cSBram Moolenaarlet s:old_style = (exists("g:erlang_old_style_highlight") &&
1499d98fe9cSBram Moolenaar                  \g:erlang_old_style_highlight == 1)
150203d04d7SBram Moolenaar
151ad3b366cSBram Moolenaar
152203d04d7SBram Moolenaar" Comments
153f37506f6SBram Moolenaarhi def link erlangComment Comment
154f37506f6SBram Moolenaarhi def link erlangCommentAnnotation Special
155f37506f6SBram Moolenaarhi def link erlangTodo Todo
156f37506f6SBram Moolenaarhi def link erlangShebang Comment
157ad3b366cSBram Moolenaar
158203d04d7SBram Moolenaar" Numbers
159f37506f6SBram Moolenaarhi def link erlangNumberInteger Number
160f37506f6SBram Moolenaarhi def link erlangNumberFloat Float
161ad3b366cSBram Moolenaar
162203d04d7SBram Moolenaar" Strings, atoms, characters
163f37506f6SBram Moolenaarhi def link erlangString String
164203d04d7SBram Moolenaar
165203d04d7SBram Moolenaarif s:old_style
166f37506f6SBram Moolenaarhi def link erlangQuotedAtom Type
167203d04d7SBram Moolenaarelse
168f37506f6SBram Moolenaarhi def link erlangQuotedAtom String
169203d04d7SBram Moolenaarendif
170203d04d7SBram Moolenaar
171f37506f6SBram Moolenaarhi def link erlangStringModifier Special
172f37506f6SBram Moolenaarhi def link erlangQuotedAtomModifier Special
173f37506f6SBram Moolenaarhi def link erlangModifier Special
174ad3b366cSBram Moolenaar
175203d04d7SBram Moolenaar" Operators, separators
176f37506f6SBram Moolenaarhi def link erlangOperator Operator
177f37506f6SBram Moolenaarhi def link erlangRightArrow Operator
178203d04d7SBram Moolenaarif s:old_style
179f37506f6SBram Moolenaarhi def link erlangBracket Normal
180f37506f6SBram Moolenaarhi def link erlangPipe Normal
181203d04d7SBram Moolenaarelse
182f37506f6SBram Moolenaarhi def link erlangBracket Delimiter
183f37506f6SBram Moolenaarhi def link erlangPipe Delimiter
184203d04d7SBram Moolenaarendif
185203d04d7SBram Moolenaar
186203d04d7SBram Moolenaar" Atoms, functions, variables, macros
187203d04d7SBram Moolenaarif s:old_style
188f37506f6SBram Moolenaarhi def link erlangAtom Normal
189f37506f6SBram Moolenaarhi def link erlangLocalFuncCall Normal
190f37506f6SBram Moolenaarhi def link erlangLocalFuncRef Normal
191f37506f6SBram Moolenaarhi def link erlangGlobalFuncCall Function
192f37506f6SBram Moolenaarhi def link erlangGlobalFuncRef Function
193f37506f6SBram Moolenaarhi def link erlangVariable Normal
194f37506f6SBram Moolenaarhi def link erlangMacro Normal
1955ef1c6a4SBram Moolenaarhi def link erlangQuotedMacro Normal
196f37506f6SBram Moolenaarhi def link erlangRecord Normal
197036986f1SBram Moolenaarhi def link erlangQuotedRecord Normal
198036986f1SBram Moolenaarhi def link erlangMap Normal
199203d04d7SBram Moolenaarelse
200f37506f6SBram Moolenaarhi def link erlangAtom String
201f37506f6SBram Moolenaarhi def link erlangLocalFuncCall Normal
202f37506f6SBram Moolenaarhi def link erlangLocalFuncRef Normal
203f37506f6SBram Moolenaarhi def link erlangGlobalFuncCall Normal
204f37506f6SBram Moolenaarhi def link erlangGlobalFuncRef Normal
205f37506f6SBram Moolenaarhi def link erlangVariable Identifier
206f37506f6SBram Moolenaarhi def link erlangMacro Macro
2075ef1c6a4SBram Moolenaarhi def link erlangQuotedMacro Macro
208f37506f6SBram Moolenaarhi def link erlangRecord Structure
209036986f1SBram Moolenaarhi def link erlangQuotedRecord Structure
210036986f1SBram Moolenaarhi def link erlangMap Structure
211203d04d7SBram Moolenaarendif
212203d04d7SBram Moolenaar
213203d04d7SBram Moolenaar" Bitstrings
214203d04d7SBram Moolenaarif !s:old_style
215f37506f6SBram Moolenaarhi def link erlangBitType Type
216203d04d7SBram Moolenaarendif
217203d04d7SBram Moolenaar
218203d04d7SBram Moolenaar" Constants and Directives
219203d04d7SBram Moolenaarif s:old_style
220f37506f6SBram Moolenaarhi def link erlangAttribute Type
221f37506f6SBram Moolenaarhi def link erlangMacroDef Type
222f37506f6SBram Moolenaarhi def link erlangUnknownAttribute Normal
223f37506f6SBram Moolenaarhi def link erlangInclude Type
224f37506f6SBram Moolenaarhi def link erlangRecordDef Type
225f37506f6SBram Moolenaarhi def link erlangDefine Type
226f37506f6SBram Moolenaarhi def link erlangPreCondit Type
227f37506f6SBram Moolenaarhi def link erlangType Type
228203d04d7SBram Moolenaarelse
229f37506f6SBram Moolenaarhi def link erlangAttribute Keyword
230f37506f6SBram Moolenaarhi def link erlangMacroDef Macro
231f37506f6SBram Moolenaarhi def link erlangUnknownAttribute Normal
232f37506f6SBram Moolenaarhi def link erlangInclude Include
233f37506f6SBram Moolenaarhi def link erlangRecordDef Keyword
234f37506f6SBram Moolenaarhi def link erlangDefine Define
235f37506f6SBram Moolenaarhi def link erlangPreCondit PreCondit
236f37506f6SBram Moolenaarhi def link erlangType Type
237203d04d7SBram Moolenaarendif
238203d04d7SBram Moolenaar
239203d04d7SBram Moolenaar" Keywords
240f37506f6SBram Moolenaarhi def link erlangKeyword Keyword
241203d04d7SBram Moolenaar
242203d04d7SBram Moolenaar" Build-in-functions (BIFs)
243f37506f6SBram Moolenaarhi def link erlangBIF Function
244ad3b366cSBram Moolenaar
245203d04d7SBram Moolenaarif s:old_style
246f37506f6SBram Moolenaarhi def link erlangBoolean Statement
247f37506f6SBram Moolenaarhi def link erlangExtra Statement
248f37506f6SBram Moolenaarhi def link erlangSignal Statement
249203d04d7SBram Moolenaarelse
250f37506f6SBram Moolenaarhi def link erlangBoolean Boolean
251f37506f6SBram Moolenaarhi def link erlangExtra Statement
252f37506f6SBram Moolenaarhi def link erlangSignal Statement
253203d04d7SBram Moolenaarendif
254ad3b366cSBram Moolenaar
255ad3b366cSBram Moolenaar
256ad3b366cSBram Moolenaarlet b:current_syntax = "erlang"
257ad3b366cSBram Moolenaar
2589d98fe9cSBram Moolenaarlet &cpo = s:cpo_save
2599d98fe9cSBram Moolenaarunlet s:cpo_save
2609d98fe9cSBram Moolenaar
261ad3b366cSBram Moolenaar" vim: sw=2 et
262