diff options
author | Bartek thindil Jasicki <thindil@laeran.pl> | 2020-11-27 13:38:24 +0100 |
---|---|---|
committer | Bartek thindil Jasicki <thindil@laeran.pl> | 2020-11-27 13:38:24 +0100 |
commit | 09b8cc97de2bd78f09c8331be25ede9e4ef8abb1 (patch) | |
tree | 62407f3473347c164aaa8960cb6796c790d99ecd /ale_linters/erlang/elvis.vim | |
parent | f156548c16d87a60664002a4c88c534486b84de5 (diff) | |
parent | 1365dce921c1fb84a668ae121d5d5aeebef99fbc (diff) | |
download | ale-09b8cc97de2bd78f09c8331be25ede9e4ef8abb1.zip |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'ale_linters/erlang/elvis.vim')
-rw-r--r-- | ale_linters/erlang/elvis.vim | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/ale_linters/erlang/elvis.vim b/ale_linters/erlang/elvis.vim new file mode 100644 index 00000000..31dea3dd --- /dev/null +++ b/ale_linters/erlang/elvis.vim @@ -0,0 +1,39 @@ +" Author: Dmitri Vereshchagin <dmitri.vereshchagin@gmail.com> +" Description: Elvis linter for Erlang files + +call ale#Set('erlang_elvis_executable', 'elvis') + +function! ale_linters#erlang#elvis#Handle(buffer, lines) abort + let l:pattern = '\v:(\d+):[^:]+:(.+)' + let l:loclist = [] + + for l:match in ale#util#GetMatches(a:lines, l:pattern) + call add(l:loclist, { + \ 'lnum': str2nr(l:match[1]), + \ 'text': s:AbbreviateMessage(l:match[2]), + \ 'type': 'W', + \}) + endfor + + return l:loclist +endfunction + +function! s:AbbreviateMessage(text) abort + let l:pattern = '\v\c^(line \d+ is too long):.*$' + + return substitute(a:text, l:pattern, '\1.', '') +endfunction + +function! s:GetCommand(buffer) abort + let l:file = ale#Escape(expand('#' . a:buffer . ':.')) + + return '%e rock --output-format=parsable ' . l:file +endfunction + +call ale#linter#Define('erlang', { +\ 'name': 'elvis', +\ 'callback': 'ale_linters#erlang#elvis#Handle', +\ 'executable': {b -> ale#Var(b, 'erlang_elvis_executable')}, +\ 'command': function('s:GetCommand'), +\ 'lint_file': 1, +\}) |