From 5635b3c86437f22123a19601bebcaa335c1ceb2e Mon Sep 17 00:00:00 2001 From: w0rp Date: Fri, 17 Nov 2017 14:29:51 +0000 Subject: [PATCH] Fix #741 - Set highlights for entire lines when signs are disabled --- autoload/ale/highlight.vim | 16 ++++++++++++++++ doc/ale.txt | 26 +++++++++++++++++++++++--- test/test_highlight_placement.vader | 21 +++++++++++++++++++++ 3 files changed, 60 insertions(+), 3 deletions(-) diff --git a/autoload/ale/highlight.vim b/autoload/ale/highlight.vim index 47256f0b..e3c749fb 100644 --- a/autoload/ale/highlight.vim +++ b/autoload/ale/highlight.vim @@ -91,6 +91,22 @@ function! ale#highlight#UpdateHighlights() abort \ 'matchaddpos(l:group, v:val)' \) endfor + + " If highlights are enabled and signs are not enabled, we should still + " offer line highlights by adding a separate set of highlights. + if !g:ale_set_signs + for l:item in l:item_list + if l:item.type is# 'W' + let l:group = 'ALEWarningLine' + elseif l:item.type is# 'I' + let l:group = 'ALEInfoLine' + else + let l:group = 'ALEErrorLine' + endif + + call matchaddpos(l:group, [l:item.lnum]) + endfor + endif endfunction function! ale#highlight#BufferHidden(buffer) abort diff --git a/doc/ale.txt b/doc/ale.txt index 697c592e..7b9deeee 100644 --- a/doc/ale.txt +++ b/doc/ale.txt @@ -1149,6 +1149,17 @@ g:ale_set_highlights *g:ale_set_highlights* |ALEStyleError| - Items with `'type': 'E'` and `'sub_type': 'style'` |ALEStyleWarning| - Items with `'type': 'W'` and `'sub_type': 'style'` + When |g:ale_set_signs| is set to `0`, the following highlights for entire + lines will be set. + + |ALEErrorLine| - All items with `'type': 'E'` + |ALEWarningLine| - All items with `'type': 'W'` + |ALEInfoLine| - All items with `'type': 'I'` + + Vim can only highlight the characters up to the last column in a buffer for + match highlights, whereas the line highlights when signs are enabled will + run to the edge of the screen. + g:ale_set_loclist *g:ale_set_loclist* @@ -1366,7 +1377,10 @@ ALEErrorLine *ALEErrorLine* Default: Undefined - The highlight for lines where error signs appear. See |g:ale_set_signs|. + The highlight for an entire line where errors appear. Only the first + line for a problem will be highlighted. + + See |g:ale_set_signs| and |g:ale_set_highlights|. ALEErrorSign *ALEErrorSign* @@ -1394,7 +1408,10 @@ ALEInfoLine *ALEInfoLine* Default: Undefined - The highlight for lines where info signs appear. See |g:ale_set_signs|. + The highlight for entire lines where info messages appear. Only the first + line for a problem will be highlighted. + + See |g:ale_set_signs| and |g:ale_set_highlights|. ALEStyleError *ALEStyleError* @@ -1436,7 +1453,10 @@ ALEWarningLine *ALEWarningLine* Default: Undefined - The highlight for lines where warning signs appear. See |g:ale_set_signs|. + The highlight for entire lines where warnings appear. Only the first line + for a problem will be highlighted. + + See |g:ale_set_signs| and |g:ale_set_highlights|. ALEWarningSign *ALEWarningSign* diff --git a/test/test_highlight_placement.vader b/test/test_highlight_placement.vader index 6a84e571..725faff4 100644 --- a/test/test_highlight_placement.vader +++ b/test/test_highlight_placement.vader @@ -1,5 +1,6 @@ Before: Save g:ale_enabled + Save g:ale_set_signs function! GenerateResults(buffer, output) return [ @@ -258,3 +259,23 @@ Execute(Highlights should be cleared when ALE is disabled): call ale#highlight#UpdateHighlights() AssertEqual [], GetMatchesWithoutIDs() + +Execute(Line highlights should be set when signs are disabled): + let g:ale_set_signs = 0 + + call ale#highlight#SetHighlights(bufnr(''), [ + \ {'bufnr': bufnr(''), 'type': 'E', 'lnum': 1, 'col': 1}, + \ {'bufnr': bufnr(''), 'type': 'W', 'lnum': 2, 'col': 1}, + \ {'bufnr': bufnr(''), 'type': 'I', 'lnum': 3, 'col': 1}, + \]) + + AssertEqual + \ [ + \ {'group': 'ALEError', 'priority': 10, 'pos1': [1, 1, 1]}, + \ {'group': 'ALEWarning', 'priority': 10, 'pos1': [2, 1, 1]}, + \ {'group': 'ALEInfo', 'priority': 10, 'pos1': [3, 1, 1]}, + \ {'group': 'ALEErrorLine', 'priority': 10, 'pos1': [1]}, + \ {'group': 'ALEWarningLine', 'priority': 10, 'pos1': [2]}, + \ {'group': 'ALEInfoLine', 'priority': 10, 'pos1': [3]}, + \ ], + \ GetMatchesWithoutIDs()