xref: /vim-8.2.3635/runtime/syntax/meson.vim (revision 5f1920ad)
1" Vim syntax file
2" Language:	Meson
3" License:	VIM License
4" Maintainer:	Nirbheek Chauhan <[email protected]>
5" Last Change:	2019 Oct 18
6" Credits:	Zvezdan Petkovic <[email protected]>
7"		Neil Schemenauer <[email protected]>
8"		Dmitry Vasiliev
9"
10"		This version is copied and edited from python.vim
11"		It's very basic, and doesn't do many things I'd like it to
12"		For instance, it should show errors for syntax that is valid in
13"		Python but not in Meson.
14"
15" Optional highlighting can be controlled using these variables.
16"
17"   let meson_space_error_highlight = 1
18"
19
20" For version 5.x: Clear all syntax items.
21" For version 6.x: Quit when a syntax file was already loaded.
22if version < 600
23  syntax clear
24elseif exists("b:current_syntax")
25  finish
26endif
27
28" We need nocompatible mode in order to continue lines with backslashes.
29" Original setting will be restored.
30let s:cpo_save = &cpo
31set cpo&vim
32
33" http://mesonbuild.com/Syntax.html
34syn keyword mesonConditional	elif else if endif
35syn keyword mesonRepeat	foreach endforeach
36syn keyword mesonOperator	and not or
37
38syn match   mesonComment	"#.*$" contains=mesonTodo,@Spell
39syn keyword mesonTodo		FIXME NOTE NOTES TODO XXX contained
40
41" Strings can either be single quoted or triple counted across multiple lines,
42" but always with a '
43syn region  mesonString
44      \ start="\z('\)" end="\z1" skip="\\\\\|\\\z1"
45      \ contains=mesonEscape,@Spell
46syn region  mesonString
47      \ start="\z('''\)" end="\z1" keepend
48      \ contains=mesonEscape,mesonSpaceError,@Spell
49
50syn match   mesonEscape	"\\[abfnrtv'\\]" contained
51syn match   mesonEscape	"\\\o\{1,3}" contained
52syn match   mesonEscape	"\\x\x\{2}" contained
53syn match   mesonEscape	"\%(\\u\x\{4}\|\\U\x\{8}\)" contained
54" Meson allows case-insensitive Unicode IDs: http://www.unicode.org/charts/
55syn match   mesonEscape	"\\N{\a\+\%(\s\a\+\)*}" contained
56syn match   mesonEscape	"\\$"
57
58" Meson only supports integer numbers
59" http://mesonbuild.com/Syntax.html#numbers
60syn match   mesonNumber	"\<\d\+\>"
61
62" booleans
63syn keyword mesonConstant	false true
64
65" Built-in functions
66syn keyword mesonBuiltin
67  \ add_global_arguments
68  \ add_global_link_arguments
69  \ add_languages
70  \ add_project_arguments
71  \ add_project_link_arguments
72  \ add_test_setup
73  \ alias_target
74  \ assert
75  \ benchmark
76  \ both_libraries
77  \ build_machine
78  \ build_target
79  \ configuration_data
80  \ configure_file
81  \ custom_target
82  \ declare_dependency
83  \ dependency
84  \ disabler
85  \ environment
86  \ error
87  \ executable
88  \ files
89  \ find_library
90  \ find_program
91  \ generator
92  \ get_option
93  \ get_variable
94  \ gettext
95  \ host_machine
96  \ import
97  \ include_directories
98  \ install_data
99  \ install_headers
100  \ install_man
101  \ install_subdir
102  \ is_disabler
103  \ is_variable
104  \ jar
105  \ join_paths
106  \ library
107  \ meson
108  \ message
109  \ option
110  \ project
111  \ run_command
112  \ run_target
113  \ set_variable
114  \ shared_library
115  \ shared_module
116  \ static_library
117  \ subdir
118  \ subdir_done
119  \ subproject
120  \ target_machine
121  \ test
122  \ vcs_tag
123  \ warning
124
125if exists("meson_space_error_highlight")
126  " trailing whitespace
127  syn match   mesonSpaceError	display excludenl "\s\+$"
128  " mixed tabs and spaces
129  syn match   mesonSpaceError	display " \+\t"
130  syn match   mesonSpaceError	display "\t\+ "
131endif
132
133if version >= 508 || !exists("did_meson_syn_inits")
134  if version <= 508
135    let did_meson_syn_inits = 1
136    command -nargs=+ HiLink hi link <args>
137  else
138    command -nargs=+ HiLink hi def link <args>
139  endif
140
141  " The default highlight links.  Can be overridden later.
142  HiLink mesonStatement		Statement
143  HiLink mesonConditional	Conditional
144  HiLink mesonRepeat		Repeat
145  HiLink mesonOperator		Operator
146  HiLink mesonComment		Comment
147  HiLink mesonTodo		Todo
148  HiLink mesonString		String
149  HiLink mesonEscape		Special
150  HiLink mesonNumber		Number
151  HiLink mesonBuiltin		Function
152  HiLink mesonConstant		Number
153  if exists("meson_space_error_highlight")
154    HiLink mesonSpaceError	Error
155  endif
156
157  delcommand HiLink
158endif
159
160let b:current_syntax = "meson"
161
162let &cpo = s:cpo_save
163unlet s:cpo_save
164
165" vim:set sw=2 sts=2 ts=8 noet:
166