0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

runtime(python): highlight ellipsis literals

The ellipsis literal (`...`) can be used in multiple contexts:

- Placeholders:     `class Foo: ...`
- Containers:       `Tuple[int, ...]`
- Assignments:      `x = ...`

This is a trickier pattern to match because we can't rely on keyword
boundaries, so we instead look for exactly three dots (`...`).

This does mean that we will match the `...` portion of `x...x`, which
isn't valid Python syntax, but I think that's an acceptable trade-off
that avoids making this pattern much more complex.

Reference:
- https://docs.python.org/3/library/constants.html#Ellipsis

closes: #18107

Signed-off-by: Jon Parise <jon@indelible.org>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Jon Parise
2025-09-08 16:29:53 -04:00
committed by Christian Brabandt
parent d7d6a6f05a
commit 77cfc49060
5 changed files with 110 additions and 2 deletions

View File

@@ -0,0 +1,43 @@
# Ellipsis Literal
# https://docs.python.org/3/library/constants.html#Ellipsis
# Placeholders
...
...
x = ...
y = ... # Comment
class C: ...
lambda: ...
# Annotations
numbers: Tuple[int, ...]
# Doctests
"""A doctest
>>> class A:
... def __init__(self):
... ...
>>> class B: ...
>>> x = ...
>>> raise ValueError('multi\n line\ndetail')
Traceback (most recent call last):
...
ValueError: multi
line
detail
>>> print(list(range(20))) # doctest: +ELLIPSIS
[0, 1, ..., 18, 19]
>>> exec(s) #doctest: +ELLIPSIS
-3.21716034272e-0...7
"""
class C:
"""
>>> class C:
... def __init__(self):
... ...
"""
# Numpy
x[..., 0]