From fdd2222ddf85113cc9820c1f4b1b07efac4703aa Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Sun, 19 Nov 2017 17:32:37 +1300 Subject: Adapt sh check/lint to use :lmake This opens the error list in the location list for the error list if there were any. It seems to work well. --- vim/after/ftplugin/sh/lint.vim | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'vim/after/ftplugin/sh/lint.vim') diff --git a/vim/after/ftplugin/sh/lint.vim b/vim/after/ftplugin/sh/lint.vim index 8745a31e..2381e6e2 100644 --- a/vim/after/ftplugin/sh/lint.vim +++ b/vim/after/ftplugin/sh/lint.vim @@ -11,15 +11,31 @@ endif " Choose linter based on shell family if exists('b:is_bash') - let b:sh_lint = 'write !shellcheck -e SC1090 -s bash -' + let b:sh_lint_makeprg = 'shellcheck -e SC1090 -f gcc -s bash %:S' elseif exists('b:is_kornshell') - let b:sh_lint = 'write !shellcheck -e SC1090 -s ksh -' + let b:sh_lint_makeprg = 'shellcheck -e SC1090 -f gcc -s ksh %:S' else - let b:sh_lint = 'write !shellcheck -e SC1090 -s sh -' + let b:sh_lint_makeprg = 'shellcheck -e SC1090 -f gcc -s sh %:S' endif +let b:sh_lint_errorformat = '%f:%l:%c: %m [SC%n]' if exists('b:undo_ftplugin') let b:undo_ftplugin = b:undo_ftplugin - \ . '|unlet b:sh_lint' + \ . '|unlet b:sh_lint_makeprg' + \ . '|unlet b:sh_lint_errorformat' +endif + +" Build function for checker +if !exists('*s:ShLint') + function s:ShLint() + let l:save_makeprg = &l:makeprg + let l:save_errorformat = &l:errorformat + let &l:makeprg = b:sh_lint_makeprg + let &l:errorformat = b:sh_lint_errorformat + lmake! + let &l:makeprg = l:save_makeprg + let &l:errorformat = l:save_errorformat + lwindow + endfunction endif " Set up a mapping for the linter, if we're allowed @@ -28,7 +44,7 @@ if !exists('g:no_plugin_maps') && !exists('g:no_sh_maps') " Define a mapping target nnoremap \ ShLint - \ :execute b:sh_lint + \ :call ShLint() if exists('b:undo_ftplugin') let b:undo_ftplugin = b:undo_ftplugin \ . '|nunmap ShLint' -- cgit v1.2.3