[Bug] Rainbow breaks incomming patch bringing python f-strings to vim
Describe the bug
I am testing a patch from https://github.com/vim/vim/pull/14057, and together with this plugin it breaks the syntax.
To Reproduce
Download the syntax as following:
mkdir "$HOME/.vim/syntax" -p
curl -s https://raw.githubusercontent.com/vim/vim/21c6d8b5b6ef510c9c78b9dfb89a41146599505f/runtime/syntax/python.vim > ~/.vim/syntax/python.vim
And open the test.py file with the following content
VAR = (
"placeholderplaceholderplaceholderplaceholderplaceholderplaceholderplaceholder"
if not bool()
else f"placeholder {bool()}"
)
if not VAR:
logging.debug("placeholder")
_ = VAR
The closing bracket in f-string is white for some reason, and the whole following block is a part of string
I tried the following config in $MYVIMRC. It doesn't help
let g:rainbow_conf = {
\ 'python': {
\ 'parentheses_options': 'contains=@NopythonFStringContained',
\ },
\}
Expected behavior
F-string and rainbow shouldn't break each other. I am glad it's caught at the development phase. Hopefully, it could be solved before the release.
Thanks for your report, do you know what syntax rules this patch is adding?
Reproduced that.
The reproduce step is:
- wget https://raw.githubusercontent.com/vim/vim/21c6d8b5b6ef510c9c78b9dfb89a41146599505f/runtime/syntax/python.vim
- Inside vim
:syn clear - Inside vim
:source python.vim - Inside vim
:RainbowToggleOn
I have tried to compare 4 cases:
- old version python syntax with rainbow on
- new version python syntax with rainbow off
- no python syntax with rainbow on
- new version python syntax with rainbow on
Syntax under line2 col14 is:
Let's check the syntax rules
syn region pythonFStringReplacement matchgroup=pythonFStringBrace start=+{+ end=+}+ contained contains=pythonFStringExpression
syn region pythonFStringExpression
\ start="." end="\ze[=!:}]"
\ contained contains=@pythonExpression
\ nextgroup=pythonFStringEquals,pythonFStringConversion,pythonFStringFormatSpec
Seems like contains=pythonFStringExpression and start="." caused this issue.