summaryrefslogtreecommitdiff
path: root/autoload
diff options
context:
space:
mode:
authorRob Berry <rob@luvhate.us>2017-02-14 22:47:53 +0000
committerRob Berry <rob@luvhate.us>2017-02-16 10:06:48 +0000
commitc4afd727926ec11d1f980847c48f0828784402d6 (patch)
treeac313cbb62fc77b973daabc5cf8f786953e2a34d /autoload
parentc460602cbbf80c1b1b3f006ae3dd28528a80c17c (diff)
downloadale-c4afd727926ec11d1f980847c48f0828784402d6.zip
Add hdevtools linter for haskell
This adds support for the hdevtools haskell linter https://github.com/hdevtools/hdevtools The output for hdevtools is near identical to the ghc output so this also extracts the ghc handler into the handle file and adds tests
Diffstat (limited to 'autoload')
-rw-r--r--autoload/ale/handlers.vim46
1 files changed, 46 insertions, 0 deletions
diff --git a/autoload/ale/handlers.vim b/autoload/ale/handlers.vim
index 544c91de..22c830c9 100644
--- a/autoload/ale/handlers.vim
+++ b/autoload/ale/handlers.vim
@@ -220,3 +220,49 @@ function! ale#handlers#HandleStyleLintFormat(buffer, lines) abort
return l:output
endfunction
+
+function! ale#handlers#HandleGhcFormat(buffer, lines) abort
+ " Look for lines like the following.
+ "
+ " /dev/stdin:28:26: Not in scope: `>>>>>'
+ "Appoint/Lib.hs:8:1: warning:
+ let l:pattern = '^[^:]\+:\(\d\+\):\(\d\+\):\s\{-}\(warning\|error\)\(.\+\)$'
+ 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)
+ if l:line !~# '\(: error\|warning\):$'
+ call add(l:corrected_lines, '')
+ endif
+ 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
+
+ call add(l:output, {
+ \ 'bufnr': a:buffer,
+ \ 'lnum': l:match[1] + 0,
+ \ 'vcol': 0,
+ \ 'col': l:match[2] + 0,
+ \ 'text': l:match[4],
+ \ 'type': toupper(l:match[3][0]),
+ \ 'nr': -1,
+ \})
+ endfor
+
+ return l:output
+endfunction