xref: /vim-8.2.3635/runtime/syntax/erlang.vim (revision ad3b366c)
1" Vim syntax file
2" Language:     Erlang (http://www.erlang.org)
3" Maintainer:   Csaba Hoch <[email protected]>
4" Former Maintainer:  Kreąimir Marľić (Kresimir Marzic) <[email protected]>
5" Last Update:  2013-Mar-07
6" License:      Vim license
7" URL:          https://github.com/hcs42/vim-erlang
8
9" 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
28endif
29
30" Case sensitive
31syn case match
32
33if version >= 600
34  setlocal iskeyword+=$,@-@
35endif
36
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
176