blob: 0af0d776f89515fe010b263b948228148178f31a [file] [log] [blame]
Bram Moolenaar96f45c02019-10-26 19:53:45 +02001" Vim syntax file
2" Language: Meson
3" License: VIM License
4" Maintainer: Nirbheek Chauhan <nirbheek.chauhan@gmail.com>
Bram Moolenaar3ec32172021-05-16 12:39:47 +02005" Liam Beguin <liambeguin@gmail.com>
Bram Moolenaar113cb512021-11-07 20:27:04 +00006" Last Change: 2021 Aug 16
Bram Moolenaar96f45c02019-10-26 19:53:45 +02007" Credits: Zvezdan Petkovic <zpetkovic@acm.org>
8" Neil Schemenauer <nas@meson.ca>
9" Dmitry Vasiliev
10"
11" This version is copied and edited from python.vim
12" It's very basic, and doesn't do many things I'd like it to
13" For instance, it should show errors for syntax that is valid in
14" Python but not in Meson.
15"
16" Optional highlighting can be controlled using these variables.
17"
18" let meson_space_error_highlight = 1
19"
20
Bram Moolenaar3ec32172021-05-16 12:39:47 +020021if exists("b:current_syntax")
Bram Moolenaar96f45c02019-10-26 19:53:45 +020022 finish
23endif
24
25" We need nocompatible mode in order to continue lines with backslashes.
26" Original setting will be restored.
27let s:cpo_save = &cpo
28set cpo&vim
29
30" http://mesonbuild.com/Syntax.html
31syn keyword mesonConditional elif else if endif
Bram Moolenaar3ec32172021-05-16 12:39:47 +020032syn keyword mesonRepeat foreach endforeach
33syn keyword mesonOperator and not or in
34syn keyword mesonStatement continue break
Bram Moolenaar96f45c02019-10-26 19:53:45 +020035
36syn match mesonComment "#.*$" contains=mesonTodo,@Spell
37syn keyword mesonTodo FIXME NOTE NOTES TODO XXX contained
38
39" Strings can either be single quoted or triple counted across multiple lines,
40" but always with a '
41syn region mesonString
42 \ start="\z('\)" end="\z1" skip="\\\\\|\\\z1"
43 \ contains=mesonEscape,@Spell
44syn region mesonString
45 \ start="\z('''\)" end="\z1" keepend
46 \ contains=mesonEscape,mesonSpaceError,@Spell
47
48syn match mesonEscape "\\[abfnrtv'\\]" contained
49syn match mesonEscape "\\\o\{1,3}" contained
50syn match mesonEscape "\\x\x\{2}" contained
51syn match mesonEscape "\%(\\u\x\{4}\|\\U\x\{8}\)" contained
52" Meson allows case-insensitive Unicode IDs: http://www.unicode.org/charts/
53syn match mesonEscape "\\N{\a\+\%(\s\a\+\)*}" contained
54syn match mesonEscape "\\$"
55
56" Meson only supports integer numbers
57" http://mesonbuild.com/Syntax.html#numbers
58syn match mesonNumber "\<\d\+\>"
Bram Moolenaar113cb512021-11-07 20:27:04 +000059syn match mesonNumber "\<0x\x\+\>"
60syn match mesonNumber "\<0o\o\+\>"
Bram Moolenaar96f45c02019-10-26 19:53:45 +020061
62" booleans
Bram Moolenaar113cb512021-11-07 20:27:04 +000063syn keyword mesonBoolean false true
Bram Moolenaar96f45c02019-10-26 19:53:45 +020064
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
Bram Moolenaar113cb512021-11-07 20:27:04 +0000102 \ install_emptydir
Bram Moolenaar96f45c02019-10-26 19:53:45 +0200103 \ is_disabler
104 \ is_variable
105 \ jar
106 \ join_paths
107 \ library
108 \ meson
109 \ message
110 \ option
111 \ project
112 \ run_command
113 \ run_target
114 \ set_variable
115 \ shared_library
116 \ shared_module
117 \ static_library
118 \ subdir
119 \ subdir_done
120 \ subproject
Bram Moolenaar3ec32172021-05-16 12:39:47 +0200121 \ summary
Bram Moolenaar96f45c02019-10-26 19:53:45 +0200122 \ target_machine
123 \ test
Bram Moolenaar113cb512021-11-07 20:27:04 +0000124 \ unset_variable
Bram Moolenaar96f45c02019-10-26 19:53:45 +0200125 \ vcs_tag
126 \ warning
Bram Moolenaar3ec32172021-05-16 12:39:47 +0200127 \ range
Bram Moolenaar96f45c02019-10-26 19:53:45 +0200128
129if exists("meson_space_error_highlight")
130 " trailing whitespace
131 syn match mesonSpaceError display excludenl "\s\+$"
132 " mixed tabs and spaces
133 syn match mesonSpaceError display " \+\t"
134 syn match mesonSpaceError display "\t\+ "
135endif
136
Bram Moolenaar3ec32172021-05-16 12:39:47 +0200137" The default highlight links. Can be overridden later.
138hi def link mesonStatement Statement
139hi def link mesonConditional Conditional
Bram Moolenaar113cb512021-11-07 20:27:04 +0000140hi def link mesonRepeat Repeat
Bram Moolenaar3ec32172021-05-16 12:39:47 +0200141hi def link mesonOperator Operator
142hi def link mesonComment Comment
143hi def link mesonTodo Todo
Bram Moolenaar113cb512021-11-07 20:27:04 +0000144hi def link mesonString String
145hi def link mesonEscape Special
146hi def link mesonNumber Number
Bram Moolenaar3ec32172021-05-16 12:39:47 +0200147hi def link mesonBuiltin Function
Bram Moolenaar113cb512021-11-07 20:27:04 +0000148hi def link mesonBoolean Boolean
Bram Moolenaar3ec32172021-05-16 12:39:47 +0200149if exists("meson_space_error_higlight")
150 hi def link mesonSpaceError Error
Bram Moolenaar96f45c02019-10-26 19:53:45 +0200151endif
152
153let b:current_syntax = "meson"
154
155let &cpo = s:cpo_save
156unlet s:cpo_save
157
158" vim:set sw=2 sts=2 ts=8 noet: