Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 43f3542

Browse files
committedJun 2, 2017
Improve builtin-func and highlight type annotations in func args
* Builtin-functions are highlighted only when used as global functions. * Annotations in type-only variable definitions and assignment statements are not supported yet due to potential conflicts with dictionary expressions. * Uses a custom syntax highlight def "Optional" (in my setup, it applies italic style.) * Taken from purpleP/python-syntax commits and customized.
1 parent 31f669d commit 43f3542

File tree

1 file changed

+89
-50
lines changed

1 file changed

+89
-50
lines changed
 

‎syntax/python.vim

+89-50
Original file line numberDiff line numberDiff line change
@@ -163,9 +163,19 @@ syn keyword pythonConditional if elif else
163163
" we provide a dummy group here to avoid crashing pyrex.vim.
164164
syn keyword pythonInclude import
165165
syn keyword pythonImport import
166+
syn match pythonIdentifier "\v[a-zA-Z_][a-zA-Z0-9_]*" nextgroup=FunctionParameters
166167
syn keyword pythonException try except finally
167168
syn keyword pythonOperator and in is not or
168169

170+
" TODO: contain pythonTypeAnno in assignments and non-assigning variable type defs
171+
syn match pythonTypeAnno ":\s*[a-zA-Z0-9_\[\],\s]\+" display contained contains=pythonType
172+
syn keyword pythonType Any AnyStr Callable ClassVar Tuple Union Optional Type TypeVar contained
173+
syn keyword pythonType AbstractSet MutableSet Mapping MutableMapping Sequence MutableSequence ByteString Deque List contained
174+
syn keyword pythonType Set FrozenSet MappingView KeysView ItemsView ValuesView Awaitable Coroutine AsyncIterable contained
175+
syn keyword pythonType AsyncIterator ContextManager Dict DefaultDict Generator AsyncGenerator Text NamedTuple contained
176+
syn keyword pythonType Iterable Iterator Reversible SupportsInt SupportsFloat SupportsAbs SupportsRound Container contained
177+
syn keyword pythonType Hashable Sized Collection contained
178+
169179
syn match pythonStatement "\<yield\>" display
170180
syn match pythonImport "\<from\>" display
171181

@@ -179,13 +189,39 @@ else
179189
syn keyword pythonStatement as nonlocal
180190
syn match pythonStatement "\<yield\s\+from\>" display
181191
syn keyword pythonBuiltinObj None True False
182-
syn match pythonFunction "\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*" display contained
192+
syn match pythonFunction "[a-zA-Z_][a-zA-Z0-9_]*" nextgroup=FunctionParameters display contained
183193
syn keyword pythonStatement await async
184194
syn match pythonStatement "\<async\s\+def\>" nextgroup=pythonFunction skipwhite
185195
syn match pythonStatement "\<async\s\+with\>" display
186196
syn match pythonStatement "\<async\s\+for\>" display
187197
endif
188198

199+
syn region FunctionParameters start='(' end=')' display contains=
200+
\ FunctionParameters,
201+
\ pythonRepeat,
202+
\ pythonConditional,
203+
\ pythonComment,
204+
\ pythonOperator,
205+
\ pythonNumber,
206+
\ pythonNumberError,
207+
\ pythonFloat,
208+
\ pythonHexNumber,
209+
\ pythonStatement,
210+
\ pythonOctNumber,
211+
\ pythonString,
212+
\ pythonRawString,
213+
\ pythonUniString,
214+
\ pythonExClass,
215+
\ pythonUniRawString,
216+
\ pythonNumber,
217+
\ pythonRawString,
218+
\ pythonBytes,
219+
\ pythonBuiltinObj,
220+
\ pythonNone,
221+
\ pythonBuiltinFunc,
222+
\ pythonTypeAnno,
223+
\ pythonBoolean nextgroup=pythonRaiseFromStatement display contained
224+
189225
syn cluster pythonExpression contains=pythonStatement,pythonRepeat,pythonConditional,pythonOperator,pythonNumber,pythonHexNumber,pythonOctNumber,pythonBinNumber,pythonFloat,pythonString,pythonBytes,pythonBoolean,pythonBuiltinObj,pythonBuiltinFunc
190226

191227
"
@@ -425,28 +461,28 @@ endif
425461

426462
if s:Enabled("g:python_highlight_builtin_funcs")
427463
if s:Python2Syntax()
428-
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(apply|basestring|buffer|callable|coerce)>'
429-
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(execfile|file|help|intern|long|raw_input)>'
430-
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(reduce|reload|unichr|unicode|xrange)>'
464+
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(apply|basestring|buffer|callable|coerce)>\ze\(' nextgroup=FunctionParameters
465+
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(execfile|file|help|intern|long|raw_input)>\ze\(' nextgroup=FunctionParameters
466+
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(reduce|reload|unichr|unicode|xrange)>\ze\(' nextgroup=FunctionParameters
431467
if s:Enabled("g:python_print_as_function")
432-
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(print)>'
468+
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(print)>\ze\(' nextgroup=FunctionParameters
433469
endif
434470
else
435-
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(ascii|exec|memoryview|print)>'
471+
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(ascii|exec|memoryview|print)\ze\(>' nextgroup=FunctionParameters
436472
endif
437-
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(__import__|abs|all|any)>'
438-
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(bin|bool|bytearray|bytes)>'
439-
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(chr|classmethod|cmp|compile|complex)>'
440-
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(delattr|dict|dir|divmod|enumerate|eval)>'
441-
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(filter|float|format|frozenset|getattr)>'
442-
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(globals|hasattr|hash|hex|id)>'
443-
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(input|int|isinstance)>'
444-
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(issubclass|iter|len|list|locals|map|max)>'
445-
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(min|next|object|oct|open|ord)>'
446-
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(pow|property|range)>'
447-
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(repr|reversed|round|set|setattr)>'
448-
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(slice|sorted|staticmethod|str|sum|super|tuple)>'
449-
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(type|vars|zip)>'
473+
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(__import__|abs|all|any)>\ze\(' nextgroup=FunctionParameters
474+
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(bin|bool|bytearray|bytes)>\ze\(' nextgroup=FunctionParameters
475+
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(chr|classmethod|cmp|compile|complex)>\ze\(' nextgroup=FunctionParameters
476+
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(delattr|dict|dir|divmod|enumerate|eval)>\ze\(' nextgroup=FunctionParameters
477+
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(filter|float|format|frozenset|getattr)>\ze\(' nextgroup=FunctionParameters
478+
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(globals|hasattr|hash|hex|id)>\ze\(' nextgroup=FunctionParameters
479+
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(input|int|isinstance)>\ze\(' nextgroup=FunctionParameters
480+
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(issubclass|iter|len|list|locals|map|max)>\ze\(' nextgroup=FunctionParameters
481+
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(min|next|object|oct|open|ord)>\ze\(' nextgroup=FunctionParameters
482+
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(pow|property|range)>\ze\(' nextgroup=FunctionParameters
483+
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(repr|reversed|round|set|setattr)>\ze\(' nextgroup=FunctionParameters
484+
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(slice|sorted|staticmethod|str|sum|super|tuple)>\ze\(' nextgroup=FunctionParameters
485+
syn match pythonBuiltinFunc '\v(\.)@<!\zs<(type|vars|zip)>\ze\(' nextgroup=FunctionParameters
450486
endif
451487

452488
"
@@ -455,39 +491,39 @@ endif
455491

456492
if s:Enabled("g:python_highlight_exceptions")
457493
if s:Python2Syntax()
458-
syn keyword pythonExClass StandardError
494+
syn keyword pythonExClass StandardError nextgroup=FunctionParameters
459495
else
460-
syn keyword pythonExClass BlockingIOError ChildProcessError
461-
syn keyword pythonExClass ConnectionError BrokenPipeError
462-
syn keyword pythonExClass ConnectionAbortedError ConnectionRefusedError
463-
syn keyword pythonExClass ConnectionResetError FileExistsError
464-
syn keyword pythonExClass FileNotFoundError InterruptedError
465-
syn keyword pythonExClass IsADirectoryError NotADirectoryError
466-
syn keyword pythonExClass PermissionError ProcessLookupError TimeoutError
467-
468-
syn keyword pythonExClass ResourceWarning
496+
syn keyword pythonExClass BlockingIOError ChildProcessError nextgroup=FunctionParameters
497+
syn keyword pythonExClass ConnectionError BrokenPipeError nextgroup=FunctionParameters
498+
syn keyword pythonExClass ConnectionAbortedError ConnectionRefusedError nextgroup=FunctionParameters
499+
syn keyword pythonExClass ConnectionResetError FileExistsError nextgroup=FunctionParameters
500+
syn keyword pythonExClass FileNotFoundError InterruptedError nextgroup=FunctionParameters
501+
syn keyword pythonExClass IsADirectoryError NotADirectoryError nextgroup=FunctionParameters
502+
syn keyword pythonExClass PermissionError ProcessLookupError TimeoutError nextgroup=FunctionParameters
503+
504+
syn keyword pythonExClass ResourceWarning nextgroup=FunctionParameters
469505
endif
470-
syn keyword pythonExClass BaseException
471-
syn keyword pythonExClass Exception ArithmeticError
472-
syn keyword pythonExClass LookupError EnvironmentError
473-
474-
syn keyword pythonExClass AssertionError AttributeError BufferError EOFError
475-
syn keyword pythonExClass FloatingPointError GeneratorExit IOError
476-
syn keyword pythonExClass ImportError IndexError KeyError
477-
syn keyword pythonExClass KeyboardInterrupt MemoryError NameError
478-
syn keyword pythonExClass NotImplementedError OSError OverflowError
479-
syn keyword pythonExClass ReferenceError RuntimeError StopIteration
480-
syn keyword pythonExClass SyntaxError IndentationError TabError
481-
syn keyword pythonExClass SystemError SystemExit TypeError
482-
syn keyword pythonExClass UnboundLocalError UnicodeError
483-
syn keyword pythonExClass UnicodeEncodeError UnicodeDecodeError
484-
syn keyword pythonExClass UnicodeTranslateError ValueError VMSError
485-
syn keyword pythonExClass WindowsError ZeroDivisionError
486-
487-
syn keyword pythonExClass Warning UserWarning BytesWarning DeprecationWarning
488-
syn keyword pythonExClass PendingDepricationWarning SyntaxWarning
489-
syn keyword pythonExClass RuntimeWarning FutureWarning
490-
syn keyword pythonExClass ImportWarning UnicodeWarning
506+
syn keyword pythonExClass BaseException nextgroup=FunctionParameters
507+
syn keyword pythonExClass Exception ArithmeticError nextgroup=FunctionParameters
508+
syn keyword pythonExClass LookupError EnvironmentError nextgroup=FunctionParameters
509+
510+
syn keyword pythonExClass AssertionError AttributeError BufferError EOFError nextgroup=FunctionParameters
511+
syn keyword pythonExClass FloatingPointError GeneratorExit IOError nextgroup=FunctionParameters
512+
syn keyword pythonExClass ImportError IndexError KeyError nextgroup=FunctionParameters
513+
syn keyword pythonExClass KeyboardInterrupt MemoryError NameError nextgroup=FunctionParameters
514+
syn keyword pythonExClass NotImplementedError OSError OverflowError nextgroup=FunctionParameters
515+
syn keyword pythonExClass ReferenceError RuntimeError StopIteration nextgroup=FunctionParameters
516+
syn keyword pythonExClass SyntaxError IndentationError TabError nextgroup=FunctionParameters
517+
syn keyword pythonExClass SystemError SystemExit TypeError nextgroup=FunctionParameters
518+
syn keyword pythonExClass UnboundLocalError UnicodeError nextgroup=FunctionParameters
519+
syn keyword pythonExClass UnicodeEncodeError UnicodeDecodeError nextgroup=FunctionParameters
520+
syn keyword pythonExClass UnicodeTranslateError ValueError VMSError nextgroup=FunctionParameters
521+
syn keyword pythonExClass WindowsError ZeroDivisionError nextgroup=FunctionParameters
522+
523+
syn keyword pythonExClass Warning UserWarning BytesWarning DeprecationWarning nextgroup=FunctionParameters
524+
syn keyword pythonExClass PendingDepricationWarning SyntaxWarning nextgroup=FunctionParameters
525+
syn keyword pythonExClass RuntimeWarning FutureWarning nextgroup=FunctionParameters
526+
syn keyword pythonExClass ImportWarning UnicodeWarning nextgroup=FunctionParameters
491527
endif
492528

493529
if s:Enabled("g:python_slow_sync")
@@ -577,6 +613,9 @@ if version >= 508 || !exists("did_python_syn_inits")
577613

578614
HiLink pythonExClass Structure
579615

616+
HiLink pythonTypeAnno Optional
617+
HiLink pythonType Special
618+
580619
delcommand HiLink
581620
endif
582621

0 commit comments

Comments
 (0)
Please sign in to comment.