neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 12868474db6fe7e4c3a1494bac26c8b0799393a3
parent 53e78bec7c60fea67ef4ef05ada11ab3c058b0eb
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Tue,  9 Sep 2025 11:39:03 +0800

vim-patch:77cfc49: 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: vim/vim#18107

https://github.com/vim/vim/commit/77cfc49060a50daefd1675b8a1dece0e6e943384

Co-authored-by: Jon Parise <jon@indelible.org>

Diffstat:
Mruntime/syntax/python.vim | 9+++++++--
1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/runtime/syntax/python.vim b/runtime/syntax/python.vim @@ -313,6 +313,8 @@ if !exists("python_no_builtin_highlight") syn match pythonAttribute /\.\h\w*/hs=s+1 \ contains=ALLBUT,pythonBuiltin,pythonClass,pythonFunction,pythonType,pythonAsync \ transparent + " the ellipsis literal `...` can be used in multiple syntactic contexts + syn match pythonEllipsis "\.\@1<!.\.\.\ze\.\@!" display endif " From the 'Python Library Reference' class hierarchy at the bottom. @@ -368,10 +370,12 @@ if !exists("python_no_doctest_highlight") if !exists("python_no_doctest_code_highlight") syn region pythonDoctest \ start="^\s*>>>\s" end="^\s*$" - \ contained contains=ALLBUT,pythonDoctest,pythonClass,pythonFunction,pythonType,@Spell + \ contained contains=ALLBUT,pythonDoctest,pythonEllipsis,pythonClass,pythonFunction,pythonType,@Spell syn region pythonDoctestValue \ start=+^\s*\%(>>>\s\|\.\.\.\s\|"""\|'''\)\@!\S\++ end="$" - \ contained + \ contained contains=pythonEllipsis + syn match pythonEllipsis "\%(^\s*\)\@<!\.\@1<!\zs\.\.\.\ze\.\@!" display + \ contained containedin=pythonDoctest else syn region pythonDoctest \ start="^\s*>>>" end="^\s*$" @@ -414,6 +418,7 @@ if !exists("python_no_number_highlight") endif if !exists("python_no_builtin_highlight") hi def link pythonBuiltin Function + hi def link pythonEllipsis pythonBuiltin endif if !exists("python_no_exception_highlight") hi def link pythonExceptions Structure