diff --git a/ale_linters/tex/chktex.vim b/ale_linters/tex/chktex.vim index b4eacb82..9e7be587 100644 --- a/ale_linters/tex/chktex.vim +++ b/ale_linters/tex/chktex.vim @@ -4,12 +4,20 @@ call ale#Set('tex_chktex_executable', 'chktex') call ale#Set('tex_chktex_options', '-I') -function! ale_linters#tex#chktex#GetCommand(buffer) abort +function! ale_linters#tex#chktex#GetExecutable(buffer) abort + return ale#Var(a:buffer, 'tex_chktex_executable') +endfunction + +function! ale_linters#tex#chktex#GetCommand(buffer, version) abort let l:options = '' " Avoid bug when used without -p (last warning has gibberish for a filename) let l:options .= ' -v0 -p stdin -q' + " Avoid bug of reporting wrong column when using tabs (issue #723) + if ale#semver#GTE(a:version, [1, 7, 7]) + let l:options .= ' -S TabSize=1' + endif " Check for optional .chktexrc let l:chktex_config = ale#path#FindNearestFile(a:buffer, '.chktexrc') @@ -45,7 +53,12 @@ endfunction call ale#linter#Define('tex', { \ 'name': 'chktex', -\ 'executable': {b -> ale#Var(b, 'tex_chktex_executable')}, -\ 'command': function('ale_linters#tex#chktex#GetCommand'), +\ 'executable': function('ale_linters#tex#chktex#GetExecutable'), +\ 'command': {buffer -> ale#semver#RunWithVersionCheck( +\ buffer, +\ ale_linters#tex#chktex#GetExecutable(buffer), +\ '%e --version', +\ function('ale_linters#tex#chktex#GetCommand'), +\ )}, \ 'callback': 'ale_linters#tex#chktex#Handle' \}) diff --git a/test/linter/test_tex_chktex.vader b/test/linter/test_tex_chktex.vader index d787ca87..038bd10c 100644 --- a/test/linter/test_tex_chktex.vader +++ b/test/linter/test_tex_chktex.vader @@ -1,14 +1,37 @@ Before: call ale#assert#SetUpLinterTest('tex', 'chktex') + GivenCommandOutput ['ChkTeX v1.7.6 - Copyright 1995-96 Jens T. Berger Thielemann'] + After: call ale#assert#TearDownLinterTest() Execute(The default command should be correct): - AssertLinter 'chktex', + AssertLinter 'chktex', [ + \ ale#Escape('chktex') . ' --version', \ ale#Escape('chktex') \ . ' -v0 -p stdin -q' - \ . ' -I' + \ . ' -I', + \] + + " The version check should be cached. + GivenCommandOutput [] + AssertLinter 'chktex', [ + \ ale#Escape('chktex') + \ . ' -v0 -p stdin -q' + \ . ' -I', + \] + + " Try newer version + call ale#semver#ResetVersionCache() + GivenCommandOutput ['ChkTeX v1.7.8 - Copyright 1995-96 Jens T. Berger Thielemann'] + AssertLinter 'chktex', [ + \ ale#Escape('chktex') . ' --version', + \ ale#Escape('chktex') + \ . ' -v0 -p stdin -q' + \ . ' -S TabSize=1' + \ . ' -I', + \] Execute(The executable should be configurable): let g:ale_tex_chktex_executable = 'bin/foo'