diff options
author | w0rp <devw0rp@gmail.com> | 2017-11-26 18:24:10 +0000 |
---|---|---|
committer | w0rp <devw0rp@gmail.com> | 2017-11-26 18:24:10 +0000 |
commit | ae7cd2c0907573c9c4996296b642e547fd1ee04f (patch) | |
tree | 4bebc720de3fa238dc47e4f9e1b43d84cddbac15 /autoload | |
parent | 8254e507d67bde88081602dbf4ff9bca03ab23cd (diff) | |
download | ale-ae7cd2c0907573c9c4996296b642e547fd1ee04f.zip |
Fix #918 - Save prettier details for Haskell linters
Diffstat (limited to 'autoload')
-rw-r--r-- | autoload/ale/handlers/haskell.vim | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/autoload/ale/handlers/haskell.vim b/autoload/ale/handlers/haskell.vim index 09606692..8a0d0013 100644 --- a/autoload/ale/handlers/haskell.vim +++ b/autoload/ale/handlers/haskell.vim @@ -24,20 +24,25 @@ function! ale#handlers#haskell#HandleGHCFormat(buffer, lines) abort let l:corrected_lines = [] + " Group the lines into smaller lists. for l:line in a:lines if len(matchlist(l:line, l:pattern)) > 0 - call add(l:corrected_lines, l:line) + call add(l:corrected_lines, [l:line]) elseif l:line is# '' - call add(l:corrected_lines, l:line) - else - if len(l:corrected_lines) > 0 - let l:line = substitute(l:line, '\v^\s+', ' ', '') - let l:corrected_lines[-1] .= l:line - endif + call add(l:corrected_lines, [l:line]) + elseif len(l:corrected_lines) > 0 + call add(l:corrected_lines[-1], l:line) endif endfor - for l:line in l:corrected_lines + for l:line_list in l:corrected_lines + " Join the smaller lists into one large line to parse. + let l:line = l:line_list[0] + + for l:extra_line in l:line_list[1:] + let l:line .= substitute(l:extra_line, '\v^\s+', ' ', '') + endfor + let l:match = matchlist(l:line, l:pattern) if len(l:match) == 0 @@ -67,12 +72,19 @@ function! ale#handlers#haskell#HandleGHCFormat(buffer, lines) abort " Replace temporary filenames in problem messages with the basename let l:text = substitute(l:text, l:temp_filename_regex, l:basename, 'g') - call add(l:output, { + let l:item = { \ 'lnum': l:match[2] + 0, \ 'col': l:match[3] + 0, \ 'text': l:text, \ 'type': l:type, - \}) + \} + + " Include extra lines as details if they are there. + if len(l:line_list) > 1 + let l:item.detail = join(l:line_list[1:], "\n") + endif + + call add(l:output, l:item) endfor return l:output |