blob: f34a004df6d2a7a4b68c895dd4e204b13eb378ad [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>
4" Former Maintainer: Kreąimir Marľić (Kresimir Marzic) <kmarzic@fly.srk.fer.hr>
5" Last Update: 2013-Mar-07
Bram Moolenaar6be7f872012-01-20 21:08:56 +01006" License: Vim license
Bram Moolenaarad3b3662013-05-17 18:14:19 +02007" URL: https://github.com/hcs42/vim-erlang
Bram Moolenaar071d4272004-06-13 20:20:40 +00008
Bram Moolenaarad3b3662013-05-17 18:14:19 +02009" Customization:
10"
11" There are two optional sets of highlighting:
12"
13" 1. The BIFs (built-in functions) are highlighted by default. To disable
14" this, put the following line in your vimrc:
15"
16" let g:erlang_highlight_bifs = 0
17"
18" 2. To enable highlighting some special atoms, put this in your vimrc:
19"
20" let g:erlang_highlight_special_atoms = 1
21
22" For version 5.x: Clear all syntax items
23" For version 6.x: Quit when a syntax file was already loaded
24if version < 600
25 syntax clear
26elseif exists("b:current_syntax")
27 finish
Bram Moolenaar071d4272004-06-13 20:20:40 +000028endif
29
Bram Moolenaarad3b3662013-05-17 18:14:19 +020030" Case sensitive
Bram Moolenaar071d4272004-06-13 20:20:40 +000031syn case match
32
Bram Moolenaarad3b3662013-05-17 18:14:19 +020033if version >= 600
34 setlocal iskeyword+=$,@-@
Bram Moolenaar071d4272004-06-13 20:20:40 +000035endif
Bram Moolenaarad3b3662013-05-17 18:14:19 +020036
37" Comments
38syn match erlangComment '%.*$' contains=erlangCommentAnnotation,erlangTodo
39syn match erlangCommentAnnotation ' \@<=@\%(clear\|docfile\|end\|headerfile\|todo\|TODO\|type\|author\|copyright\|doc\|reference\|see\|since\|title\|version\|deprecated\|hidden\|private\|equiv\|spec\|throws\)' contained
40syn match erlangCommentAnnotation /`[^']*'/ contained
41syn keyword erlangTodo TODO FIXME XXX contained
42
43" Numbers (minimum base is 2, maximum is 36.)
44syn match erlangNumberInteger '\<\d\+\>'
45syn match erlangNumberInteger '\<\%([2-9]\|[12]\d\|3[0-6]\)\+#[[:alnum:]]\+\>'
46syn match erlangNumberFloat '\<\d\+\.\d\+\%([eE][+-]\=\d\+\)\=\>'
47
48" Strings, atoms, characters
49syn region erlangString start=/"/ end=/"/ contains=erlangStringModifier
50syn region erlangQuotedAtom start=/'/ end=/'/ contains=erlangQuotedAtomModifier
51syn match erlangStringModifier '\~\a\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained
52syn match erlangQuotedAtomModifier '\~\a\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained
53syn match erlangModifier '\$\%([^\\]\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)\)'
54
55" Operators
56syn match erlangOperator '==\|=:=\|/=\|=/=\|<\|=<\|>\|>=\|++\|--\|=\|!\|<-\|+\|-\|\*\|\/'
57syn keyword erlangOperator div rem or xor bor bxor bsl bsr and band not bnot andalso orelse
58
59" Separators
60syn match erlangSeparator '(\|)\|{\|}\|\[\|]\||\|||\|;\|,\|?\|#'
61syn match erlangRightArrow '->'
62
63" Functions call
64syn match erlangFCall '\<\%(\a[[:alnum:]@]*\s*\.\s*\)*\a[[:alnum:]@]*\s*:\s*\a[[:alnum:]@]*\>'
65
66" Constants and Directives
67syn match erlangDirective '-\%(behaviour\|behavior\|compile\|define\|else\|endif\|export\|file\|ifdef\|ifndef\|import\|include_lib\|include\|module\|record\|undef\|author\|copyright\|doc\|vsn\|on_load\|export_type\)\>'
68
69" Keywords
70syn keyword erlangKeyword after begin case catch cond end fun if let of query receive when try
71syn keyword erlangExtra true false
72
73
74if !exists("g:erlang_highlight_bifs") || g:erlang_highlight_bifs == 1
75
76 " build-in-functions (BIFs)
77 syn keyword erlangBIF abs alive apply atom_to_binary atom_to_list binary_part binary_to_atom binary_to_existing_atom binary_to_float binary_to_integer bitstring_to_list binary_to_list binary_to_term bit_size byte_size check_old_code check_process_code concat_binary date delete_module demonitor disconnect_node element erase error exit float float_to_binary float_to_list garbage_collect get get_keys group_leader halt hd integer_to_binary integer_to_list iolist_to_binary iolist_size 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 pre_loaded process_flag process_flag process_info process purge_module put register registered round self setelement size spawn spawn_link spawn_monitor spawn_opt split_binary statistics term_to_binary throw time tl trunc tuple_size tuple_to_list unlink unregister whereis
78
79endif
80
81
82if exists("g:erlang_highlight_special_atoms") && g:erlang_highlight_special_atoms == 1
83
84 " Processes
85 syn keyword erlangProcess creation current_function dictionary
86 syn keyword erlangProcess group_leader heap_size high initial_call
87 syn keyword erlangProcess linked low memory_in_use message_queue
88 syn keyword erlangProcess net_kernel node normal priority
89 syn keyword erlangProcess reductions registered_name runnable
90 syn keyword erlangProcess running stack_trace status timer
91 syn keyword erlangProcess trap_exit waiting
92
93 " Ports
94 syn keyword erlangPort command count_in count_out creation in
95 syn keyword erlangPort in_format linked node out owner packeting
96
97 " Nodes
98 syn keyword erlangNode atom_tables communicating creation
99 syn keyword erlangNode current_gc current_reductions current_runtime
100 syn keyword erlangNode current_wall_clock distribution_port
101 syn keyword erlangNode entry_points error_handler friends
102 syn keyword erlangNode garbage_collection magic_cookie magic_cookies
103 syn keyword erlangNode module_table monitored_nodes name next_ref
104 syn keyword erlangNode ports preloaded processes reductions
105 syn keyword erlangNode ref_state registry runtime wall_clock
106
107 " Reserved
108 syn keyword erlangReserved apply_lambda module_info module_lambdas
109 syn keyword erlangReserved record record_index record_info
110
111 " Extras
112 syn keyword erlangExtra badarg nocookie
113
114 " Signals
115 syn keyword erlangSignal badsig kill killed exit normal
116endif
117
118" Sync at the beginning of functions: if this is not used, multiline string
119" are not always recognized
120syn sync match erlangSync grouphere NONE "^[a-z]\s*("
121
122" Define the default highlighting.
123" For version 5.7 and earlier: only when not done already
124" For version 5.8 and later: only when an item doesn't have highlighting yet
125if version >= 508 || !exists ("did_erlang_inits")
126 if version < 508
127 let did_erlang_inits = 1
128 command -nargs=+ HiLink hi link <args>
129 else
130 command -nargs=+ HiLink hi def link <args>
131 endif
132
133 " erlang_characters
134 HiLink erlangComment Comment
135 HiLink erlangCommentAnnotation Special
136 HiLink erlangTodo Todo
137 HiLink erlangSeparator Normal
138 HiLink erlangOperator Operator
139 HiLink erlangRightArrow Operator
140
141 HiLink erlangStartString String
142 HiLink erlangString String
143 HiLink erlangStringModifier Special
144
145 HiLink erlangStartQuotedAtom Type
146 HiLink erlangQuotedAtom Type
147 HiLink erlangQuotedAtomModifier Special
148
149 HiLink erlangNumberInteger Number
150 HiLink erlangNumberFloat Float
151 HiLink erlangNumberHex Number
152
153 HiLink erlangModifier Special
154
155 " erlang_functions
156 HiLink erlangFCall Function
157 HiLink erlangBIF Function
158
159 " erlang_keywords
160 HiLink erlangDirective Type
161 HiLink erlangKeyword Keyword
162 HiLink erlangProcess Special
163 HiLink erlangPort Special
164 HiLink erlangNode Special
165 HiLink erlangReserved Statement
166 HiLink erlangExtra Statement
167 HiLink erlangSignal Statement
168
169 delcommand HiLink
170endif
171
172
173let b:current_syntax = "erlang"
174
175" vim: sw=2 et