comparison runtime/syntax/mojo.vim @ 33235:44fa2b82a642 v9.0.1891

patch 9.0.1891: No runtime support for Mojo Commit: https://github.com/vim/vim/commit/0ce2c594d0704f27a16d2c13fce85d596cc91489 Author: Mahmoud Abduljawad <mahmoud@masaar.com> Date: Sun Sep 10 18:23:04 2023 +0200 patch 9.0.1891: No runtime support for Mojo Problem: No runtime support for Mojo Solution: Add basic filetype and syntax plugins closes: #13062 closes: #13063 Signed-off-by: Christian Brabandt <cb@256bit.org> Signed-off-by: Doug Kearns <dougkearns@gmail.com> Co-authored-by: Mahmoud Abduljawad <mahmoud@masaar.com>
author Christian Brabandt <cb@256bit.org>
date Sun, 10 Sep 2023 18:30:06 +0200
parents
children
comparison
equal deleted inserted replaced
33234:e156c26a2a88 33235:44fa2b82a642
1 " Vim syntax file
2 " Language: Mojo
3 " Maintainer: Mahmoud Abduljawad <me@mahmoudajawad.com>
4 " Last Change: 2023 Sep 09
5 " Credits: Mahmoud Abduljawad <me@mahmoudajawad.com>
6 " Neil Schemenauer <nas@python.ca>
7 " Dmitry Vasiliev
8 "
9 " This is based on Vim Python highlighting
10 "
11 " - introduced highlighting of doctests
12 " - updated keywords, built-ins, and exceptions
13 " - corrected regular expressions for
14 "
15 " * functions
16 " * decorators
17 " * strings
18 " * escapes
19 " * numbers
20 " * space error
21 "
22 " - corrected synchronization
23 " - more highlighting is ON by default, except
24 " - space error highlighting is OFF by default
25 "
26 " Optional highlighting can be controlled using these variables.
27 "
28 " let mojo_no_builtin_highlight = 1
29 " let mojo_no_doctest_code_highlight = 1
30 " let mojo_no_doctest_highlight = 1
31 " let mojo_no_exception_highlight = 1
32 " let mojo_no_number_highlight = 1
33 " let mojo_space_error_highlight = 1
34 "
35 " All the options above can be switched on together.
36 "
37 " let mojo_highlight_all = 1
38 "
39 " The use of Python 2 compatible syntax highlighting can be enforced.
40 " The straddling code (Python 2 and 3 compatible), up to Python 3.5,
41 " will be also supported.
42 "
43 " let mojo_use_python2_syntax = 1
44 "
45 " This option will exclude all modern Python 3.6 or higher features.
46 "
47
48 " quit when a syntax file was already loaded.
49 if exists("b:current_syntax")
50 finish
51 endif
52
53 " We need nocompatible mode in order to continue lines with backslashes.
54 " Original setting will be restored.
55 let s:cpo_save = &cpo
56 set cpo&vim
57
58 if exists("mojo_no_doctest_highlight")
59 let mojo_no_doctest_code_highlight = 1
60 endif
61
62 if exists("mojo_highlight_all")
63 if exists("mojo_no_builtin_highlight")
64 unlet mojo_no_builtin_highlight
65 endif
66 if exists("mojo_no_doctest_code_highlight")
67 unlet mojo_no_doctest_code_highlight
68 endif
69 if exists("mojo_no_doctest_highlight")
70 unlet mojo_no_doctest_highlight
71 endif
72 if exists("mojo_no_exception_highlight")
73 unlet mojo_no_exception_highlight
74 endif
75 if exists("mojo_no_number_highlight")
76 unlet mojo_no_number_highlight
77 endif
78 let mojo_space_error_highlight = 1
79 endif
80
81 " These keywords are based on Python syntax highlight, and adds to it struct,
82 " fn, alias, var, let
83 "
84 syn keyword mojoStatement False None True
85 syn keyword mojoStatement as assert break continue del global
86 syn keyword mojoStatement lambda nonlocal pass return with yield
87 syn keyword mojoStatement class def nextgroup=mojoFunction skipwhite
88 syn keyword mojoStatement struct fn nextgroup=mojoFunction skipwhite
89 syn keyword mojoStatement alias var let
90 syn keyword mojoConditional elif else if
91 syn keyword mojoRepeat for while
92 syn keyword mojoOperator and in is not or
93 syn keyword mojoException except finally raise try
94 syn keyword mojoInclude from import
95 syn keyword mojoAsync async await
96
97 " Soft keywords
98 " These keywords do not mean anything unless used in the right context.
99 " See https://docs.python.org/3/reference/lexical_analysis.html#soft-keywords
100 " for more on this.
101 syn match mojoConditional "^\s*\zscase\%(\s\+.*:.*$\)\@="
102 syn match mojoConditional "^\s*\zsmatch\%(\s\+.*:\s*\%(#.*\)\=$\)\@="
103
104 " Decorators
105 " A dot must be allowed because of @MyClass.myfunc decorators.
106 syn match mojoDecorator "@" display contained
107 syn match mojoDecoratorName "@\s*\h\%(\w\|\.\)*" display contains=pythonDecorator
108
109 " Python 3.5 introduced the use of the same symbol for matrix multiplication:
110 " https://www.python.org/dev/peps/pep-0465/. We now have to exclude the
111 " symbol from highlighting when used in that context.
112 " Single line multiplication.
113 syn match mojoMatrixMultiply
114 \ "\%(\w\|[])]\)\s*@"
115 \ contains=ALLBUT,mojoDecoratorName,mojoDecorator,mojoFunction,mojoDoctestValue
116 \ transparent
117 " Multiplication continued on the next line after backslash.
118 syn match mojoMatrixMultiply
119 \ "[^\\]\\\s*\n\%(\s*\.\.\.\s\)\=\s\+@"
120 \ contains=ALLBUT,mojoDecoratorName,mojoDecorator,mojoFunction,mojoDoctestValue
121 \ transparent
122 " Multiplication in a parenthesized expression over multiple lines with @ at
123 " the start of each continued line; very similar to decorators and complex.
124 syn match mojoMatrixMultiply
125 \ "^\s*\%(\%(>>>\|\.\.\.\)\s\+\)\=\zs\%(\h\|\%(\h\|[[(]\).\{-}\%(\w\|[])]\)\)\s*\n\%(\s*\.\.\.\s\)\=\s\+@\%(.\{-}\n\%(\s*\.\.\.\s\)\=\s\+@\)*"
126 \ contains=ALLBUT,mojoDecoratorName,mojoDecorator,mojoFunction,mojoDoctestValue
127 \ transparent
128
129 syn match mojoFunction "\h\w*" display contained
130
131 syn match mojoComment "#.*$" contains=mojoTodo,@Spell
132 syn keyword mojoTodo FIXME NOTE NOTES TODO XXX contained
133
134 " Triple-quoted strings can contain doctests.
135 syn region mojoString matchgroup=mojoQuotes
136 \ start=+[uU]\=\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
137 \ contains=mojoEscape,@Spell
138 syn region mojoString matchgroup=mojoTripleQuotes
139 \ start=+[uU]\=\z('''\|"""\)+ end="\z1" keepend
140 \ contains=mojoEscape,mojoSpaceError,mojoDoctest,@Spell
141 syn region mojoRawString matchgroup=mojoQuotes
142 \ start=+[uU]\=[rR]\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
143 \ contains=@Spell
144 syn region mojoRawString matchgroup=pythonTripleQuotes
145 \ start=+[uU]\=[rR]\z('''\|"""\)+ end="\z1" keepend
146 \ contains=pythonSpaceError,mojoDoctest,@Spell
147
148 syn match mojoEscape +\\[abfnrtv'"\\]+ contained
149 syn match mojoEscape "\\\o\{1,3}" contained
150 syn match mojoEscape "\\x\x\{2}" contained
151 syn match mojoEscape "\%(\\u\x\{4}\|\\U\x\{8}\)" contained
152 " Python allows case-insensitive Unicode IDs: http://www.unicode.org/charts/
153 syn match mojoEscape "\\N{\a\+\%(\s\a\+\)*}" contained
154 syn match mojoEscape "\\$"
155
156 " It is very important to understand all details before changing the
157 " regular expressions below or their order.
158 " The word boundaries are *not* the floating-point number boundaries
159 " because of a possible leading or trailing decimal point.
160 " The expressions below ensure that all valid number literals are
161 " highlighted, and invalid number literals are not. For example,
162 "
163 " - a decimal point in '4.' at the end of a line is highlighted,
164 " - a second dot in 1.0.0 is not highlighted,
165 " - 08 is not highlighted,
166 " - 08e0 or 08j are highlighted,
167 "
168 " and so on, as specified in the 'Python Language Reference'.
169 " https://docs.python.org/reference/lexical_analysis.html#numeric-literals
170 if !exists("mojo_no_number_highlight")
171 " numbers (including complex)
172 syn match mojoNumber "\<0[oO]\%(_\=\o\)\+\>"
173 syn match mojoNumber "\<0[xX]\%(_\=\x\)\+\>"
174 syn match mojoNumber "\<0[bB]\%(_\=[01]\)\+\>"
175 syn match mojoNumber "\<\%([1-9]\%(_\=\d\)*\|0\+\%(_\=0\)*\)\>"
176 syn match mojoNumber "\<\d\%(_\=\d\)*[jJ]\>"
177 syn match mojoNumber "\<\d\%(_\=\d\)*[eE][+-]\=\d\%(_\=\d\)*[jJ]\=\>"
178 syn match mojoNumber
179 \ "\<\d\%(_\=\d\)*\.\%([eE][+-]\=\d\%(_\=\d\)*\)\=[jJ]\=\%(\W\|$\)\@="
180 syn match mojoNumber
181 \ "\%(^\|\W\)\zs\%(\d\%(_\=\d\)*\)\=\.\d\%(_\=\d\)*\%([eE][+-]\=\d\%(_\=\d\)*\)\=[jJ]\=\>"
182 endif
183
184 " The built-ins are added in the same order of appearance in Mojo stdlib docs
185 " https://docs.modular.com/mojo/lib.html
186 "
187 if !exists("mojo_no_builtin_highlight")
188 " Built-in functions
189 syn keyword mojoBuiltin slice constrained debug_assert put_new_line print
190 syn keyword mojoBuiltin print_no_newline len range rebind element_type
191 syn keyword mojoBuiltin ord chr atol isdigit index address string
192 " Built-in types
193 syn keyword mojoType Byte ListLiteral CoroutineContext Coroutine DType
194 syn keyword mojoType dtype type invalid bool int8 si8 unit8 ui8 int16
195 syn keyword mojoType si16 unit16 ui16 int32 si32 uint32 ui32 int64
196 syn keyword mojoType si64 uint64 ui64 bfloat16 bf16 float16 f16 float32
197 syn keyword mojoType f32 float64 f64 Error FloatLiteral Int Attr SIMD
198 syn keyword mojoType Int8 UInt8 Int16 UInt16 Int32 UInt32 Int64 UInt64
199 syn keyword mojoType Float16 Float32 Float64 element_type _65x13_type
200 syn keyword mojoType String StringLiteral StringRef Tuple AnyType
201 syn keyword mojoType NoneType None Lifetime
202 " avoid highlighting attributes as builtins
203 syn match mojoAttribute /\.\h\w*/hs=s+1
204 \ contains=ALLBUT,mojoBuiltin,mojoFunction,mojoAsync
205 \ transparent
206 endif
207
208 " From the 'Python Library Reference' class hierarchy at the bottom.
209 " http://docs.python.org/library/exceptions.html
210 if !exists("mojo_no_exception_highlight")
211 " builtin base exceptions (used mostly as base classes for other exceptions)
212 syn keyword mojoExceptions BaseException Exception
213 syn keyword mojoExceptions ArithmeticError BufferError LookupError
214 " builtin exceptions (actually raised)
215 syn keyword mojoExceptions AssertionError AttributeError EOFError
216 syn keyword mojoExceptions FloatingPointError GeneratorExit ImportError
217 syn keyword mojoExceptions IndentationError IndexError KeyError
218 syn keyword mojoExceptions KeyboardInterrupt MemoryError
219 syn keyword mojoExceptions ModuleNotFoundError NameError
220 syn keyword mojoExceptions NotImplementedError OSError OverflowError
221 syn keyword mojoExceptions RecursionError ReferenceError RuntimeError
222 syn keyword mojoExceptions StopAsyncIteration StopIteration SyntaxError
223 syn keyword mojoExceptions SystemError SystemExit TabError TypeError
224 syn keyword mojoExceptions UnboundLocalError UnicodeDecodeError
225 syn keyword mojoExceptions UnicodeEncodeError UnicodeError
226 syn keyword mojoExceptions UnicodeTranslateError ValueError
227 syn keyword mojoExceptions ZeroDivisionError
228 " builtin exception aliases for OSError
229 syn keyword mojoExceptions EnvironmentError IOError WindowsError
230 " builtin OS exceptions in Python 3
231 syn keyword mojoExceptions BlockingIOError BrokenPipeError
232 syn keyword mojoExceptions ChildProcessError ConnectionAbortedError
233 syn keyword mojoExceptions ConnectionError ConnectionRefusedError
234 syn keyword mojoExceptions ConnectionResetError FileExistsError
235 syn keyword mojoExceptions FileNotFoundError InterruptedError
236 syn keyword mojoExceptions IsADirectoryError NotADirectoryError
237 syn keyword mojoExceptions PermissionError ProcessLookupError TimeoutError
238 " builtin warnings
239 syn keyword mojoExceptions BytesWarning DeprecationWarning FutureWarning
240 syn keyword mojoExceptions ImportWarning PendingDeprecationWarning
241 syn keyword mojoExceptions ResourceWarning RuntimeWarning
242 syn keyword mojoExceptions SyntaxWarning UnicodeWarning
243 syn keyword mojoExceptions UserWarning Warning
244 endif
245
246 if exists("mojo_space_error_highlight")
247 " trailing whitespace
248 syn match mojoSpaceError display excludenl "\s\+$"
249 " mixed tabs and spaces
250 syn match mojoSpaceError display " \+\t"
251 syn match mojoSpaceError display "\t\+ "
252 endif
253
254 " Do not spell doctests inside strings.
255 " Notice that the end of a string, either ''', or """, will end the contained
256 " doctest too. Thus, we do *not* need to have it as an end pattern.
257 if !exists("mojo_no_doctest_highlight")
258 if !exists("mojo_no_doctest_code_highlight")
259 syn region mojoDoctest
260 \ start="^\s*>>>\s" end="^\s*$"
261 \ contained contains=ALLBUT,mojoDoctest,mojoFunction,@Spell
262 syn region mojoDoctestValue
263 \ start=+^\s*\%(>>>\s\|\.\.\.\s\|"""\|'''\)\@!\S\++ end="$"
264 \ contained
265 else
266 syn region mojoDoctest
267 \ start="^\s*>>>" end="^\s*$"
268 \ contained contains=@NoSpell
269 endif
270 endif
271
272 " Sync at the beginning of class, function, or method definition.
273 syn sync match mojoSync grouphere NONE "^\%(def\|class\)\s\+\h\w*\s*[(:]"
274
275 " The default highlight links. Can be overridden later.
276 hi def link mojoStatement Statement
277 hi def link mojoConditional Conditional
278 hi def link mojoRepeat Repeat
279 hi def link mojoOperator Operator
280 hi def link mojoException Exception
281 hi def link mojoInclude Include
282 hi def link mojoAsync Statement
283 hi def link mojoDecorator Define
284 hi def link mojoDecoratorName Function
285 hi def link mojoFunction Function
286 hi def link mojoComment Comment
287 hi def link mojoTodo Todo
288 hi def link mojoString String
289 hi def link mojoRawString String
290 hi def link mojoQuotes String
291 hi def link mojoTripleQuotes mojoQuotes
292 hi def link mojoEscape Special
293 if !exists("mojo_no_number_highlight")
294 hi def link mojoNumber Number
295 endif
296 if !exists("mojo_no_builtin_highlight")
297 hi def link mojoBuiltin Function
298 hi def link mojoType Type
299 endif
300 if !exists("mojo_no_exception_highlight")
301 hi def link mojoExceptions Structure
302 endif
303 if exists("mojo_space_error_highlight")
304 hi def link mojoSpaceError Error
305 endif
306 if !exists("mojo_no_doctest_highlight")
307 hi def link mojoDoctest Special
308 hi def link mojoDoctestValue Define
309 endif
310
311 let b:current_syntax = "mojo"
312
313 let &cpo = s:cpo_save
314 unlet s:cpo_save
315
316 " vim:set sw=2 sts=2 ts=8 noet: