Mercurial > vim
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: |