diff options
author | w0rp <w0rp@users.noreply.github.com> | 2017-02-21 11:09:15 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-21 11:09:15 +0000 |
commit | 8eca101fd1cbf5a686093273be74be0dc944c6d1 (patch) | |
tree | add194f4c1503e172d325d126afb842e81b49e02 /autoload | |
parent | b21ca4ed4e09bd519ba2943aed17cff909dd71e2 (diff) | |
parent | 06fe8a043f5046405327984ab05641d3280f4cbc (diff) | |
download | ale-8eca101fd1cbf5a686093273be74be0dc944c6d1.zip |
Merge pull request #348 from rob-b/add-hdevtools-linter
Add hdevtools linter for haskell
Diffstat (limited to 'autoload')
-rw-r--r-- | autoload/ale/handlers.vim | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/autoload/ale/handlers.vim b/autoload/ale/handlers.vim index 544c91de..93282a4b 100644 --- a/autoload/ale/handlers.vim +++ b/autoload/ale/handlers.vim @@ -220,3 +220,57 @@ function! ale#handlers#HandleStyleLintFormat(buffer, lines) abort return l:output endfunction + +function! ale#handlers#HandleGhcFormat(buffer, lines) abort + " Look for lines like the following. + " + "Appoint/Lib.hs:8:1: warning: + "Appoint/Lib.hs:8:1: + let l:pattern = '^[^:]\+:\(\d\+\):\(\d\+\):\(.*\)\?$' + let l:output = [] + + let l:corrected_lines = [] + for l:line in a:lines + if len(matchlist(l:line, l:pattern)) > 0 + call add(l:corrected_lines, l:line) + elseif l:line ==# '' + 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 + endif + endfor + + for l:line in l:corrected_lines + let l:match = matchlist(l:line, l:pattern) + + if len(l:match) == 0 + continue + endif + + let l:errors = matchlist(l:match[3], '\(warning:\|error:\)\(.*\)') + + if len(l:errors) > 0 + let l:type = l:errors[1] + let l:text = l:errors[2] + else + let l:type = '' + let l:text = l:match[3] + end + let l:type = l:type ==# '' ? 'E' : toupper(l:type[0]) + + call add(l:output, { + \ 'bufnr': a:buffer, + \ 'lnum': l:match[1] + 0, + \ 'vcol': 0, + \ 'col': l:match[2] + 0, + \ 'text': l:text, + \ 'type': l:type, + \ 'nr': -1, + \}) + endfor + + return l:output +endfunction |