From d2e1348c096f04bde591089ca5ce87c4cbecbf61 Mon Sep 17 00:00:00 2001 From: w0rp Date: Tue, 13 Sep 2016 22:25:28 +0100 Subject: [PATCH] Make signs prefer errors to warnings if there are two loclist items for one line. --- plugin/ale/sign.vim | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/plugin/ale/sign.vim b/plugin/ale/sign.vim index 7eb858b..4797e52 100644 --- a/plugin/ale/sign.vim +++ b/plugin/ale/sign.vim @@ -30,14 +30,36 @@ function! ale#sign#SetSigns(loclist) exec 'sign unplace * buffer=' . buffer - for i in range(0, len(a:loclist) - 1) - let obj = a:loclist[i] + let signlist = [] + + for obj in a:loclist + let should_append = 1 + + if len(signlist) > 0 && signlist[-1].lnum == obj.lnum + " We can't add the same line twice, because signs must be + " unique per line. + let should_append = 0 + + if signlist[-1].type ==# 'W' && obj.type ==# 'E' + " If we had a warning previously, but now have an error, + " we replace the object to set an error instead. + let signlist[-1] = obj + endif + endif + + if should_append + call add(signlist, obj) + endif + endfor + + for i in range(0, len(signlist) - 1) + let obj = signlist[i] let name = obj['type'] ==# 'W' ? 'ALEWarningSign' : 'ALEErrorSign' let sign_line = 'sign place ' . (i + 1) \. ' line=' . obj['lnum'] \. ' name=' . name - \. ' buffer=' . obj['bufnr'] + \. ' buffer=' . buffer exec sign_line endfor