diff options
author | Magnus Groß <21310755+vimpostor@users.noreply.github.com> | 2021-12-09 15:21:39 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-09 23:21:39 +0900 |
commit | 9860dadbc952b227b2d25269e717ae801c5d6f2c (patch) | |
tree | 276866e1ac7f55ff734d49b8e374b4abb060ceff | |
parent | de67f4743d9ffd1694d15b1b91fedfaa0a5cda70 (diff) | |
download | ale-9860dadbc952b227b2d25269e717ae801c5d6f2c.zip |
Initialize hl-groups correctly if virtual text is loaded first (#3960)
If virtualtext.vim is autoloaded first, it will link
ALEVirtualTextWarning to ALEWarning. But ALEWarning is not initialized
yet, so it will create ALEWarning, but with no color definition set.
Shortly after, highlight.vim is autoloaded, which would usually link
ALEWarning to SpellCap, but only if ALEWarning is not already set.
However since ALEWarning is already initialized due to the previous
link, we skip this and never actually come around to properly
initializing it.
We fix this by initializing all highlight groups in highlight.vim, thus
satisfying the dependency of ALEVirtualTextWarning being initialized
after ALEWarning.
Fixes #3585
-rw-r--r-- | autoload/ale/highlight.vim | 20 | ||||
-rw-r--r-- | autoload/ale/virtualtext.vim | 20 | ||||
-rw-r--r-- | test/test_highlight_placement.vader | 17 |
3 files changed, 37 insertions, 20 deletions
diff --git a/autoload/ale/highlight.vim b/autoload/ale/highlight.vim index 473ad354..c284f5ca 100644 --- a/autoload/ale/highlight.vim +++ b/autoload/ale/highlight.vim @@ -22,6 +22,26 @@ if !hlexists('ALEInfo') highlight link ALEInfo ALEWarning endif +if !hlexists('ALEVirtualTextError') + highlight link ALEVirtualTextError ALEError +endif + +if !hlexists('ALEVirtualTextStyleError') + highlight link ALEVirtualTextStyleError ALEVirtualTextError +endif + +if !hlexists('ALEVirtualTextWarning') + highlight link ALEVirtualTextWarning ALEWarning +endif + +if !hlexists('ALEVirtualTextStyleWarning') + highlight link ALEVirtualTextStyleWarning ALEVirtualTextWarning +endif + +if !hlexists('ALEVirtualTextInfo') + highlight link ALEVirtualTextInfo ALEVirtualTextWarning +endif + " The maximum number of items for the second argument of matchaddpos() let s:MAX_POS_VALUES = 8 let s:MAX_COL_SIZE = 1073741824 " pow(2, 30) diff --git a/autoload/ale/virtualtext.vim b/autoload/ale/virtualtext.vim index 598bc1bf..345deb70 100644 --- a/autoload/ale/virtualtext.vim +++ b/autoload/ale/virtualtext.vim @@ -18,26 +18,6 @@ elseif has('textprop') && has('popupwin') let s:has_virt_text = 1 endif -if !hlexists('ALEVirtualTextError') - highlight link ALEVirtualTextError ALEError -endif - -if !hlexists('ALEVirtualTextStyleError') - highlight link ALEVirtualTextStyleError ALEVirtualTextError -endif - -if !hlexists('ALEVirtualTextWarning') - highlight link ALEVirtualTextWarning ALEWarning -endif - -if !hlexists('ALEVirtualTextStyleWarning') - highlight link ALEVirtualTextStyleWarning ALEVirtualTextWarning -endif - -if !hlexists('ALEVirtualTextInfo') - highlight link ALEVirtualTextInfo ALEVirtualTextWarning -endif - function! ale#virtualtext#Clear() abort if !s:has_virt_text return diff --git a/test/test_highlight_placement.vader b/test/test_highlight_placement.vader index dab73073..44ae369b 100644 --- a/test/test_highlight_placement.vader +++ b/test/test_highlight_placement.vader @@ -10,6 +10,7 @@ Before: Save g:ale_exclude_highlights Save b:ale_exclude_highlights + runtime autoload/ale/virtualtext.vim runtime autoload/ale/highlight.vim let g:ale_run_synchronously = 1 @@ -98,6 +99,10 @@ Before: endif endfunction + function! GetLinkedGroup(grp) abort + return synIDattr(synIDtrans(hlID(a:grp)), 'name') + endfunction + call ale#linter#Define('testft', { \ 'name': 'x', \ 'executable': has('win32') ? 'cmd': 'echo', @@ -119,6 +124,9 @@ After: call ale#linter#Reset() call clearmatches() call ale#sign#Clear() + if has('textprop') && has('popupwin') + call prop_type_delete('ale') + endif highlight clear SomeOtherGroup runtime autoload/ale/highlight.vim @@ -129,6 +137,15 @@ Given testft(A Javscript file with warnings/errors): baz wat line four +" Autoloading virtualtext.vim first should still properly initialize hl-groups +Execute(Loading virtualtext first does not break highlight groups): + AssertEqual + \ "SpellBad", + \ GetLinkedGroup("ALEError") + AssertEqual + \ "SpellCap", + \ GetLinkedGroup("ALEWarning") + Execute(Highlights should be set when a linter runs): ALELint call ale#test#FlushJobs() |