xref: /vim-8.2.3635/runtime/syntax/erlang.vim (revision 30b65817)
1" Vim syntax file
2" Language:     Erlang
3" Author:       Oscar Hellstr�m <[email protected]> (http://oscar.hellstrom.st)
4" Contributors: Ricardo Catalinas Jim�nez <[email protected]>
5" License:      Vim license
6" Version:      2011/09/11
7
8if exists("b:current_syntax")
9	finish
10else
11	let b:current_syntax = "erlang"
12endif
13
14if !exists("g:erlang_highlight_bif")
15	let g:erlang_highlight_bif = 1
16endif
17
18" Erlang is case sensitive
19syn case match
20
21" Match groups
22syn match erlangStringModifier               /\\./ contained
23syn match erlangStringModifier               /\~\%(-\?[0-9*]\+\)\?\%(\.[0-9*]\+\..\?\)\?\%(c\|f\|e\|g\|s\|w\|p\|W\|P\|B\|X\|#\|b\|+\|n\|i\)/ contained
24syn match erlangModifier                     /\$\\\?./
25
26syn match erlangInteger                      /\<\%([0-9]\+#[0-9a-fA-F]\+\|[0-9]\+\)\>/
27syn match erlangFloat                        /\<[0-9]\+\.[0-9]\+\%(e-\?[0-9]\+\)\?\>/
28
29syn keyword erlangTodo                       TODO FIXME XXX contained
30syn match   erlangComment                    /%.*$/ contains=@Spell,erlangTodo,erlangAnnotation
31syn match   erlangAnnotation                 /\%(%\s\)\@<=@\%(author\|clear\|copyright\|deprecated\|doc\|docfile\|end\|equiv\|headerfile\|hidden\|private\|reference\|see\|since\|spec\|throws\|title\|todo\|TODO\|type\|version\)/ contained
32syn match   erlangAnnotation                 /`[^']\+'/ contained
33
34syn keyword erlangKeyword                    band bor bnot bsl bsr bxor div rem xor
35syn keyword erlangKeyword                    try catch begin receive after cond fun let query
36
37syn keyword erlangConditional                case if of end
38syn keyword erlangConditional                not and or andalso orelse
39syn keyword erlangConditional                when
40
41syn keyword erlangBoolean                    true false
42
43syn 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
44
45syn match erlangOperator                     /\/\|*\|+\|-\|++\|--/
46syn match erlangOperator                     /->\|<-\|||\||\|!\|=/
47syn match erlangOperator                     /=:=\|==\|\/=\|=\/=\|<\|>\|=<\|>=/
48syn keyword erlangOperator                   div rem
49
50syn region erlangString                      start=/"/ end=/"/ skip=/\\/ contains=@Spell,erlangStringModifier
51
52syn match erlangVariable                     /\<[A-Z_]\w*\>/
53syn match erlangAtom                         /\%(\%(^-\)\|#\)\@<!\<[a-z][A-Za-z0-9_]*\>\%(\s*[(:]\)\@!/
54syn match erlangAtom                         /\\\@<!'[^']*\\\@<!'/
55
56syn match erlangRecord                       /#\w\+/
57
58syn match erlangTuple                        /{\|}/
59syn match erlangList                         /\[\|\]/
60
61syn match erlangAttribute                    /^-\%(vsn\|author\|copyright\|compile\|deprecated\|module\|export\|import\|behaviour\|behavior\|export_type\|ignore_xref\|on_load\)\s*(\@=/
62syn match erlangInclude                      /^-include\%(_lib\)\?\s*(\@=/
63syn match erlangRecordDef                    /^-record\s*(\@=/
64syn match erlangDefine                       /^-\%(define\|undef\)\s*(\@=/
65syn match erlangPreCondit                    /^-\%(ifdef\|ifndef\|else\|endif\)\%(\s*(\@=\)\?/
66
67syn match erlangType                         /^-\%(spec\|type\)[( ]\@=/
68
69syn match erlangMacro                        /\%(-define(\)\@<=\w\+/
70syn match erlangMacro                        /?\??\w\+/
71
72syn match erlangBitType                      /\%(\/\|-\)\@<=\%(bits\|bitstring\|binary\|integer\|float\|unit\)\>/
73syn match erlangBitSize                      /:\@<=[0-9]\+/
74
75syn match erlangBinary                      /<<\|>>/
76
77" BIFs
78syn match erlangBIF                          /\%([^:0-9A-Za-z_]\|\<erlang:\)\@<=\%(abs\|apply\|atom_to_binary\|atom_to_list\|binary_part\|binary_to_atom\|binary_to_existing_atom\|binary_to_list\|binary_to_term\|bit_size\|bitstring_to_list\|byte_size\|check_process_code\|date\|delete_module\|demonitor\|disconnect_node\|element\|erase\|exit\|float\|float_to_list\|garbage_collect\|get\|get_keys\|group_leader\|hd\|integer_to_list\|iolist_size\|iolist_to_binary\|is_alive\|is_atom\|is_binary\|is_bitstring\|is_boolean\|is_float\|is_function\|is_integer\|is_list\|is_number\|is_pid\|is_port\|is_process_alive\|is_record\|is_reference\|is_tuple\|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\|max\|min\|module_loaded\|monitor\|monitor_node\|node\|nodes\|now\|open_port\|pid_to_list\|port_close\|port_command\|port_connect\|port_control\|pre_loaded\|processes\|process_flag\|process_info\|purge_module\|put\|register\|registered\|round\|self\|setelement\|size\|spawn\|spawn_link\|spawn_monitor\|spawn_opt\|split_binary\|statistics\|term_to_binary\|time\|tl\|trunc\|tuple_size\|tuple_to_list\|unlink\|unregister\|whereis\)\%((\|\/[0-9]\)\@=/
79syn match erlangBIF                          /\<\%(erlang:\)\@<=\%(append_element\|bump_reductions\|cancel_timer\|decode_packet\|display\|function_exported\|fun_info\|fun_to_list\|get_cookie\|get_stacktrace\|hash\|is_builtin\|loaded\|load_nif\|localtime\|localtime_to_universaltime\|make_tuple\|memory\|monitor_node\|phash\|port_call\|port_info\|ports\|port_to_list\|process_display\|read_timer\|ref_to_list\|resume_process\|send\|send_after\|send_nosuspend\|set_cookie\|start_timer\|suspend_process\|system_flag\|system_info\|system_monitor\|system_profile\|trace\|trace_delivered\|trace_info\|trace_pattern\|universaltime\|universaltime_to_localtime\|yield\)(\@=/
80syn match erlangGBIF                         /erlang\%(:\w\)\@=/
81
82" Link Erlang stuff to Vim groups
83hi link erlangTodo           Todo
84hi link erlangString         String
85hi link erlangNoSpellString  String
86hi link erlangModifier       SpecialChar
87hi link erlangStringModifier SpecialChar
88hi link erlangComment        Comment
89hi link erlangAnnotation     Special
90hi link erlangVariable       Identifier
91hi link erlangInclude        Include
92hi link erlangRecordDef      Keyword
93hi link erlangAttribute      Keyword
94hi link erlangKeyword        Keyword
95hi link erlangMacro          Macro
96hi link erlangDefine         Define
97hi link erlangPreCondit      PreCondit
98hi link erlangPreProc        PreProc
99hi link erlangDelimiter      Delimiter
100hi link erlangBitDelimiter   Normal
101hi link erlangOperator       Operator
102hi link erlangConditional    Conditional
103hi link erlangGuard          Conditional
104hi link erlangBoolean        Boolean
105hi link erlangAtom           Constant
106hi link erlangRecord         Structure
107hi link erlangInteger        Number
108hi link erlangFloat          Number
109hi link erlangFloat          Number
110hi link erlangFloat          Number
111hi link erlangFloat          Number
112hi link erlangHex            Number
113hi link erlangFun            Keyword
114hi link erlangList           Delimiter
115hi link erlangTuple          Delimiter
116hi link erlangBinary         Keyword
117hi link erlangBitVariable    Identifier
118hi link erlangBitType        Type
119hi link erlangType           Type
120hi link erlangBitSize        Number
121
122" Optional highlighting
123if g:erlang_highlight_bif
124	hi link erlangBIF    Keyword
125	hi link erlangGBIF   Keyword
126endif
127