rainbow
rainbow copied to clipboard
Avoid single line if statements
There's a bug with vim (neovim?) where inline if cond | return | endif style commands can result in errors such as this one.
:%s/
Error detected while processing ~/.local/share/nvim/plugged/rainbow/autoload/rainbow.vim:
line 129:
E171: Missing :endif
Error detected while processing function rainbow_main#load:
line 3:
E117: Unknown function: rainbow#syn
Error detected while processing ~/.local/share/nvim/plugged/rainbow/autoload/rainbow.vim:
line 129:
E171: Missing :endif
Error detected while processing function rainbow_main#load:
line 4:
E117: Unknown function: rainbow#hi
Press ENTER or type command to continue
This can be reproduced by opening neovim and pressing :%s/<C-f>.
Replacing the inline if statements with multiple line ones fixes the issue.
Thanks, this addressed an issue I had trying to use the plugin in neovim. Changing to your branch with this change fixed the issue.
Maybe it's better to use get instead of a check? i.e.:
diff --git a/autoload/rainbow.vim b/autoload/rainbow.vim
index 10551c5..8f870e0 100644
--- a/autoload/rainbow.vim
+++ b/autoload/rainbow.vim
@@ -79,7 +79,9 @@ fun rainbow#syn(config)
exe 'syn cluster '.prefix.'Regions contains='.join(map(range(cycle), '"@".s:synGroupID(prefix, "Regions", v:val)'), ',')
exe 'syn cluster '.prefix.'Parentheses contains='.join(map(range(cycle), '"@".s:synGroupID(prefix, "Parentheses", v:val)'), ',')
exe 'syn cluster '.prefix.'Operators contains='.join(map(range(cycle), '"@".s:synGroupID(prefix, "Operators", v:val)'), ',')
- if has_key(conf, 'after') | for cmd in conf.after | exe cmd | endfor | endif
+ for cmd in get(conf, 'after', [])
+ exe cmd
+ endfor
endfun
fun rainbow#syn_clear(config)
I want to merge this, but there is mixed indent in this PR... Maybe this indent detect plugin will help