From 901d336d821557f6e19848c2d553500d383d29e5 Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Mon, 18 Jun 2018 12:01:21 +0200 Subject: [PATCH] Add argon ale linter and allow local linters --- ale_linters/haskell/argon.vim | 64 +++++++++++++++++++++++++++++++++++ vimrc | 4 ++- 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 ale_linters/haskell/argon.vim diff --git a/ale_linters/haskell/argon.vim b/ale_linters/haskell/argon.vim new file mode 100644 index 0000000..d8d75bb --- /dev/null +++ b/ale_linters/haskell/argon.vim @@ -0,0 +1,64 @@ +" Author: Julian Ospald +" Description: argon for Haskell files + +call ale#Set('haskell_argon_executable', 'argon') +call ale#Set('haskell_argon_options', '') +call ale#Set('haskell_argon_error_level', 12) +call ale#Set('haskell_argon_warn_level', 8) +call ale#Set('haskell_argon_info_level', 4) + + +function! ale_linters#haskell#argon#GetExecutable(buffer) abort + return ale#Var(a:buffer, 'haskell_argon_executable') +endfunction + + +function! ale_linters#haskell#argon#GetCommand(buffer) abort + return ale#Escape(ale_linters#haskell#argon#GetExecutable(a:buffer)) + \ . ' ' + \ . ale#Var(a:buffer, 'haskell_argon_options') + \ . ' -m ' . ale#Var(a:buffer, 'haskell_argon_info_level') + \ . ' -j' + \ . ' %t' +endfunction + + +function! ale_linters#haskell#argon#Handle(buffer, lines) abort + let l:output = [] + + for l:error in ale#util#FuzzyJSONDecode(a:lines, []) + for l:block in l:error.blocks + let l:complexity = l:block.complexity + + if l:complexity >= ale#Var(a:buffer, 'haskell_argon_error_level') + let l:type = 'E' + let l:max_c = ale#Var(a:buffer, 'haskell_argon_error_level') + elseif l:complexity >= ale#Var(a:buffer, 'haskell_argon_warn_level') + let l:type = 'W' + let l:max_c = ale#Var(a:buffer, 'haskell_argon_warn_level') + else + let l:type = 'I' + let l:max_c = ale#Var(a:buffer, 'haskell_argon_info_level') + endif + + call add(l:output, { + \ 'filename': l:error.path, + \ 'lnum': str2nr(l:block.lineno), + \ 'col': str2nr(l:block.col), + \ 'text': l:block.name . ': cyclomatic complexity of ' . l:complexity, + \ 'type': l:type, + \}) + endfor + endfor + + return l:output +endfunction + + +call ale#linter#Define('haskell', { +\ 'name': 'argon', +\ 'executable_callback': 'ale_linters#haskell#argon#GetExecutable', +\ 'command_callback': 'ale_linters#haskell#argon#GetCommand', +\ 'callback': 'ale_linters#haskell#argon#Handle', +\}) + diff --git a/vimrc b/vimrc index 25ae2b8..2834d47 100644 --- a/vimrc +++ b/vimrc @@ -80,7 +80,9 @@ Plug 'autozimu/LanguageClient-neovim', { Plug 'junegunn/fzf', { 'for': 'haskell' } " linting/compilation -Plug 'w0rp/ale' +Plug 'w0rp/ale', { + \ 'do': 'bash -c \"cp -R ~/.vim/ale_linters .\"', + \ } " haskell " if has("nvim")