mirror of
https://github.com/neovim/neovim.git
synced 2026-01-03 01:46:31 +10:00
This reverts commits:
- 6b652a785033fd4164e049492a7327c1ed7c3e5f
- 2f689d5abde0ccddca9e20d8c93a0299bd054e32
- a025a46d4169587145fb54f04af349cd05cb6122
Several email addresses that are known to be valid caused bounces
due to an issue with my email setup. The previous commits incorrectly
marked these addresses as invalid. So revert the whole thing again.
62d8f3dab5
N/A patch:
vim-patch:2f689d5: runtime: mark more invalid email addresses
Co-authored-by: Christian Brabandt <cb@256bit.org>
317 lines
12 KiB
VimL
317 lines
12 KiB
VimL
" Vim syntax file
|
|
" Language: Mojo
|
|
" Maintainer: Mahmoud Abduljawad <me@mahmoudajawad.com>
|
|
" Last Change: 2023 Sep 09
|
|
" Credits: Mahmoud Abduljawad <me@mahmoudajawad.com>
|
|
" Neil Schemenauer <nas@python.ca>
|
|
" Dmitry Vasiliev
|
|
"
|
|
" This is based on Vim Python highlighting
|
|
"
|
|
" - introduced highlighting of doctests
|
|
" - updated keywords, built-ins, and exceptions
|
|
" - corrected regular expressions for
|
|
"
|
|
" * functions
|
|
" * decorators
|
|
" * strings
|
|
" * escapes
|
|
" * numbers
|
|
" * space error
|
|
"
|
|
" - corrected synchronization
|
|
" - more highlighting is ON by default, except
|
|
" - space error highlighting is OFF by default
|
|
"
|
|
" Optional highlighting can be controlled using these variables.
|
|
"
|
|
" let mojo_no_builtin_highlight = 1
|
|
" let mojo_no_doctest_code_highlight = 1
|
|
" let mojo_no_doctest_highlight = 1
|
|
" let mojo_no_exception_highlight = 1
|
|
" let mojo_no_number_highlight = 1
|
|
" let mojo_space_error_highlight = 1
|
|
"
|
|
" All the options above can be switched on together.
|
|
"
|
|
" let mojo_highlight_all = 1
|
|
"
|
|
" The use of Python 2 compatible syntax highlighting can be enforced.
|
|
" The straddling code (Python 2 and 3 compatible), up to Python 3.5,
|
|
" will be also supported.
|
|
"
|
|
" let mojo_use_python2_syntax = 1
|
|
"
|
|
" This option will exclude all modern Python 3.6 or higher features.
|
|
"
|
|
|
|
" quit when a syntax file was already loaded.
|
|
if exists("b:current_syntax")
|
|
finish
|
|
endif
|
|
|
|
" We need nocompatible mode in order to continue lines with backslashes.
|
|
" Original setting will be restored.
|
|
let s:cpo_save = &cpo
|
|
set cpo&vim
|
|
|
|
if exists("mojo_no_doctest_highlight")
|
|
let mojo_no_doctest_code_highlight = 1
|
|
endif
|
|
|
|
if exists("mojo_highlight_all")
|
|
if exists("mojo_no_builtin_highlight")
|
|
unlet mojo_no_builtin_highlight
|
|
endif
|
|
if exists("mojo_no_doctest_code_highlight")
|
|
unlet mojo_no_doctest_code_highlight
|
|
endif
|
|
if exists("mojo_no_doctest_highlight")
|
|
unlet mojo_no_doctest_highlight
|
|
endif
|
|
if exists("mojo_no_exception_highlight")
|
|
unlet mojo_no_exception_highlight
|
|
endif
|
|
if exists("mojo_no_number_highlight")
|
|
unlet mojo_no_number_highlight
|
|
endif
|
|
let mojo_space_error_highlight = 1
|
|
endif
|
|
|
|
" These keywords are based on Python syntax highlight, and adds to it struct,
|
|
" fn, alias, var, let
|
|
"
|
|
syn keyword mojoStatement False None True
|
|
syn keyword mojoStatement as assert break continue del global
|
|
syn keyword mojoStatement lambda nonlocal pass return with yield
|
|
syn keyword mojoStatement class def nextgroup=mojoFunction skipwhite
|
|
syn keyword mojoStatement struct fn nextgroup=mojoFunction skipwhite
|
|
syn keyword mojoStatement alias var let
|
|
syn keyword mojoConditional elif else if
|
|
syn keyword mojoRepeat for while
|
|
syn keyword mojoOperator and in is not or
|
|
syn keyword mojoException except finally raise try
|
|
syn keyword mojoInclude from import
|
|
syn keyword mojoAsync async await
|
|
|
|
" Soft keywords
|
|
" These keywords do not mean anything unless used in the right context.
|
|
" See https://docs.python.org/3/reference/lexical_analysis.html#soft-keywords
|
|
" for more on this.
|
|
syn match mojoConditional "^\s*\zscase\%(\s\+.*:.*$\)\@="
|
|
syn match mojoConditional "^\s*\zsmatch\%(\s\+.*:\s*\%(#.*\)\=$\)\@="
|
|
|
|
" Decorators
|
|
" A dot must be allowed because of @MyClass.myfunc decorators.
|
|
syn match mojoDecorator "@" display contained
|
|
syn match mojoDecoratorName "@\s*\h\%(\w\|\.\)*" display contains=pythonDecorator
|
|
|
|
" Python 3.5 introduced the use of the same symbol for matrix multiplication:
|
|
" https://www.python.org/dev/peps/pep-0465/. We now have to exclude the
|
|
" symbol from highlighting when used in that context.
|
|
" Single line multiplication.
|
|
syn match mojoMatrixMultiply
|
|
\ "\%(\w\|[])]\)\s*@"
|
|
\ contains=ALLBUT,mojoDecoratorName,mojoDecorator,mojoFunction,mojoDoctestValue
|
|
\ transparent
|
|
" Multiplication continued on the next line after backslash.
|
|
syn match mojoMatrixMultiply
|
|
\ "[^\\]\\\s*\n\%(\s*\.\.\.\s\)\=\s\+@"
|
|
\ contains=ALLBUT,mojoDecoratorName,mojoDecorator,mojoFunction,mojoDoctestValue
|
|
\ transparent
|
|
" Multiplication in a parenthesized expression over multiple lines with @ at
|
|
" the start of each continued line; very similar to decorators and complex.
|
|
syn match mojoMatrixMultiply
|
|
\ "^\s*\%(\%(>>>\|\.\.\.\)\s\+\)\=\zs\%(\h\|\%(\h\|[[(]\).\{-}\%(\w\|[])]\)\)\s*\n\%(\s*\.\.\.\s\)\=\s\+@\%(.\{-}\n\%(\s*\.\.\.\s\)\=\s\+@\)*"
|
|
\ contains=ALLBUT,mojoDecoratorName,mojoDecorator,mojoFunction,mojoDoctestValue
|
|
\ transparent
|
|
|
|
syn match mojoFunction "\h\w*" display contained
|
|
|
|
syn match mojoComment "#.*$" contains=mojoTodo,@Spell
|
|
syn keyword mojoTodo FIXME NOTE NOTES TODO XXX contained
|
|
|
|
" Triple-quoted strings can contain doctests.
|
|
syn region mojoString matchgroup=mojoQuotes
|
|
\ start=+[uU]\=\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
|
|
\ contains=mojoEscape,@Spell
|
|
syn region mojoString matchgroup=mojoTripleQuotes
|
|
\ start=+[uU]\=\z('''\|"""\)+ end="\z1" keepend
|
|
\ contains=mojoEscape,mojoSpaceError,mojoDoctest,@Spell
|
|
syn region mojoRawString matchgroup=mojoQuotes
|
|
\ start=+[uU]\=[rR]\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
|
|
\ contains=@Spell
|
|
syn region mojoRawString matchgroup=pythonTripleQuotes
|
|
\ start=+[uU]\=[rR]\z('''\|"""\)+ end="\z1" keepend
|
|
\ contains=pythonSpaceError,mojoDoctest,@Spell
|
|
|
|
syn match mojoEscape +\\[abfnrtv'"\\]+ contained
|
|
syn match mojoEscape "\\\o\{1,3}" contained
|
|
syn match mojoEscape "\\x\x\{2}" contained
|
|
syn match mojoEscape "\%(\\u\x\{4}\|\\U\x\{8}\)" contained
|
|
" Python allows case-insensitive Unicode IDs: http://www.unicode.org/charts/
|
|
syn match mojoEscape "\\N{\a\+\%(\s\a\+\)*}" contained
|
|
syn match mojoEscape "\\$"
|
|
|
|
" It is very important to understand all details before changing the
|
|
" regular expressions below or their order.
|
|
" The word boundaries are *not* the floating-point number boundaries
|
|
" because of a possible leading or trailing decimal point.
|
|
" The expressions below ensure that all valid number literals are
|
|
" highlighted, and invalid number literals are not. For example,
|
|
"
|
|
" - a decimal point in '4.' at the end of a line is highlighted,
|
|
" - a second dot in 1.0.0 is not highlighted,
|
|
" - 08 is not highlighted,
|
|
" - 08e0 or 08j are highlighted,
|
|
"
|
|
" and so on, as specified in the 'Python Language Reference'.
|
|
" https://docs.python.org/reference/lexical_analysis.html#numeric-literals
|
|
if !exists("mojo_no_number_highlight")
|
|
" numbers (including complex)
|
|
syn match mojoNumber "\<0[oO]\%(_\=\o\)\+\>"
|
|
syn match mojoNumber "\<0[xX]\%(_\=\x\)\+\>"
|
|
syn match mojoNumber "\<0[bB]\%(_\=[01]\)\+\>"
|
|
syn match mojoNumber "\<\%([1-9]\%(_\=\d\)*\|0\+\%(_\=0\)*\)\>"
|
|
syn match mojoNumber "\<\d\%(_\=\d\)*[jJ]\>"
|
|
syn match mojoNumber "\<\d\%(_\=\d\)*[eE][+-]\=\d\%(_\=\d\)*[jJ]\=\>"
|
|
syn match mojoNumber
|
|
\ "\<\d\%(_\=\d\)*\.\%([eE][+-]\=\d\%(_\=\d\)*\)\=[jJ]\=\%(\W\|$\)\@="
|
|
syn match mojoNumber
|
|
\ "\%(^\|\W\)\zs\%(\d\%(_\=\d\)*\)\=\.\d\%(_\=\d\)*\%([eE][+-]\=\d\%(_\=\d\)*\)\=[jJ]\=\>"
|
|
endif
|
|
|
|
" The built-ins are added in the same order of appearance in Mojo stdlib docs
|
|
" https://docs.modular.com/mojo/lib.html
|
|
"
|
|
if !exists("mojo_no_builtin_highlight")
|
|
" Built-in functions
|
|
syn keyword mojoBuiltin slice constrained debug_assert put_new_line print
|
|
syn keyword mojoBuiltin print_no_newline len range rebind element_type
|
|
syn keyword mojoBuiltin ord chr atol isdigit index address string
|
|
" Built-in types
|
|
syn keyword mojoType Byte ListLiteral CoroutineContext Coroutine DType
|
|
syn keyword mojoType dtype type invalid bool int8 si8 unit8 ui8 int16
|
|
syn keyword mojoType si16 unit16 ui16 int32 si32 uint32 ui32 int64
|
|
syn keyword mojoType si64 uint64 ui64 bfloat16 bf16 float16 f16 float32
|
|
syn keyword mojoType f32 float64 f64 Error FloatLiteral Int Attr SIMD
|
|
syn keyword mojoType Int8 UInt8 Int16 UInt16 Int32 UInt32 Int64 UInt64
|
|
syn keyword mojoType Float16 Float32 Float64 element_type _65x13_type
|
|
syn keyword mojoType String StringLiteral StringRef Tuple AnyType
|
|
syn keyword mojoType NoneType None Lifetime
|
|
" avoid highlighting attributes as builtins
|
|
syn match mojoAttribute /\.\h\w*/hs=s+1
|
|
\ contains=ALLBUT,mojoBuiltin,mojoFunction,mojoAsync
|
|
\ transparent
|
|
endif
|
|
|
|
" From the 'Python Library Reference' class hierarchy at the bottom.
|
|
" http://docs.python.org/library/exceptions.html
|
|
if !exists("mojo_no_exception_highlight")
|
|
" builtin base exceptions (used mostly as base classes for other exceptions)
|
|
syn keyword mojoExceptions BaseException Exception
|
|
syn keyword mojoExceptions ArithmeticError BufferError LookupError
|
|
" builtin exceptions (actually raised)
|
|
syn keyword mojoExceptions AssertionError AttributeError EOFError
|
|
syn keyword mojoExceptions FloatingPointError GeneratorExit ImportError
|
|
syn keyword mojoExceptions IndentationError IndexError KeyError
|
|
syn keyword mojoExceptions KeyboardInterrupt MemoryError
|
|
syn keyword mojoExceptions ModuleNotFoundError NameError
|
|
syn keyword mojoExceptions NotImplementedError OSError OverflowError
|
|
syn keyword mojoExceptions RecursionError ReferenceError RuntimeError
|
|
syn keyword mojoExceptions StopAsyncIteration StopIteration SyntaxError
|
|
syn keyword mojoExceptions SystemError SystemExit TabError TypeError
|
|
syn keyword mojoExceptions UnboundLocalError UnicodeDecodeError
|
|
syn keyword mojoExceptions UnicodeEncodeError UnicodeError
|
|
syn keyword mojoExceptions UnicodeTranslateError ValueError
|
|
syn keyword mojoExceptions ZeroDivisionError
|
|
" builtin exception aliases for OSError
|
|
syn keyword mojoExceptions EnvironmentError IOError WindowsError
|
|
" builtin OS exceptions in Python 3
|
|
syn keyword mojoExceptions BlockingIOError BrokenPipeError
|
|
syn keyword mojoExceptions ChildProcessError ConnectionAbortedError
|
|
syn keyword mojoExceptions ConnectionError ConnectionRefusedError
|
|
syn keyword mojoExceptions ConnectionResetError FileExistsError
|
|
syn keyword mojoExceptions FileNotFoundError InterruptedError
|
|
syn keyword mojoExceptions IsADirectoryError NotADirectoryError
|
|
syn keyword mojoExceptions PermissionError ProcessLookupError TimeoutError
|
|
" builtin warnings
|
|
syn keyword mojoExceptions BytesWarning DeprecationWarning FutureWarning
|
|
syn keyword mojoExceptions ImportWarning PendingDeprecationWarning
|
|
syn keyword mojoExceptions ResourceWarning RuntimeWarning
|
|
syn keyword mojoExceptions SyntaxWarning UnicodeWarning
|
|
syn keyword mojoExceptions UserWarning Warning
|
|
endif
|
|
|
|
if exists("mojo_space_error_highlight")
|
|
" trailing whitespace
|
|
syn match mojoSpaceError display excludenl "\s\+$"
|
|
" mixed tabs and spaces
|
|
syn match mojoSpaceError display " \+\t"
|
|
syn match mojoSpaceError display "\t\+ "
|
|
endif
|
|
|
|
" Do not spell doctests inside strings.
|
|
" Notice that the end of a string, either ''', or """, will end the contained
|
|
" doctest too. Thus, we do *not* need to have it as an end pattern.
|
|
if !exists("mojo_no_doctest_highlight")
|
|
if !exists("mojo_no_doctest_code_highlight")
|
|
syn region mojoDoctest
|
|
\ start="^\s*>>>\s" end="^\s*$"
|
|
\ contained contains=ALLBUT,mojoDoctest,mojoFunction,@Spell
|
|
syn region mojoDoctestValue
|
|
\ start=+^\s*\%(>>>\s\|\.\.\.\s\|"""\|'''\)\@!\S\++ end="$"
|
|
\ contained
|
|
else
|
|
syn region mojoDoctest
|
|
\ start="^\s*>>>" end="^\s*$"
|
|
\ contained contains=@NoSpell
|
|
endif
|
|
endif
|
|
|
|
" Sync at the beginning of class, function, or method definition.
|
|
syn sync match mojoSync grouphere NONE "^\%(def\|class\)\s\+\h\w*\s*[(:]"
|
|
|
|
" The default highlight links. Can be overridden later.
|
|
hi def link mojoStatement Statement
|
|
hi def link mojoConditional Conditional
|
|
hi def link mojoRepeat Repeat
|
|
hi def link mojoOperator Operator
|
|
hi def link mojoException Exception
|
|
hi def link mojoInclude Include
|
|
hi def link mojoAsync Statement
|
|
hi def link mojoDecorator Define
|
|
hi def link mojoDecoratorName Function
|
|
hi def link mojoFunction Function
|
|
hi def link mojoComment Comment
|
|
hi def link mojoTodo Todo
|
|
hi def link mojoString String
|
|
hi def link mojoRawString String
|
|
hi def link mojoQuotes String
|
|
hi def link mojoTripleQuotes mojoQuotes
|
|
hi def link mojoEscape Special
|
|
if !exists("mojo_no_number_highlight")
|
|
hi def link mojoNumber Number
|
|
endif
|
|
if !exists("mojo_no_builtin_highlight")
|
|
hi def link mojoBuiltin Function
|
|
hi def link mojoType Type
|
|
endif
|
|
if !exists("mojo_no_exception_highlight")
|
|
hi def link mojoExceptions Structure
|
|
endif
|
|
if exists("mojo_space_error_highlight")
|
|
hi def link mojoSpaceError Error
|
|
endif
|
|
if !exists("mojo_no_doctest_highlight")
|
|
hi def link mojoDoctest Special
|
|
hi def link mojoDoctestValue Define
|
|
endif
|
|
|
|
let b:current_syntax = "mojo"
|
|
|
|
let &cpo = s:cpo_save
|
|
unlet s:cpo_save
|
|
|
|
" vim:set sw=2 sts=2 ts=8 noet:
|