Fix chktex highlighting wrong column when using tabs instead of spaces (#4661)

* Fix chktex highlighting wrong column when using tabs instead of spaces

Fixes #723

chktex implemented feature request [1] for allowing setting options from
the command line. Thanks to that we can tell it to treat tab character
as of one space width, i.e. one char. That means, after we translate the
output back to Vim columns, we get correct numbers.

[1]: https://savannah.nongnu.org/bugs/?56486

* Add test_tex_chktex.vader

* Use functions to set g: variables in ale_linters/tex/chktex.vim

* Update ale_linters#tex#chktex#GetCommand() to use '%e'
This commit is contained in:
Jorengarenar
2024-01-14 13:04:23 +01:00
committed by GitHub
parent 3dbf0b2202
commit 94f764631d
2 changed files with 40 additions and 15 deletions
+13 -15
View File
@@ -1,29 +1,27 @@
" Author: Andrew Balmos - <andrew@balmos.org> " Author: Andrew Balmos - <andrew@balmos.org>
" Description: chktex for LaTeX files " Description: chktex for LaTeX files
let g:ale_tex_chktex_executable = call ale#Set('tex_chktex_executable', 'chktex')
\ get(g:, 'ale_tex_chktex_executable', 'chktex') call ale#Set('tex_chktex_options', '-I')
let g:ale_tex_chktex_options =
\ get(g:, 'ale_tex_chktex_options', '-I')
function! ale_linters#tex#chktex#GetCommand(buffer) abort function! ale_linters#tex#chktex#GetCommand(buffer) abort
" Check for optional .chktexrc let l:options = ''
let l:chktex_config = ale#path#FindNearestFile(
\ a:buffer,
\ '.chktexrc')
let l:command = ale#Var(a:buffer, 'tex_chktex_executable')
" Avoid bug when used without -p (last warning has gibberish for a filename) " Avoid bug when used without -p (last warning has gibberish for a filename)
let l:command .= ' -v0 -p stdin -q' let l:options .= ' -v0 -p stdin -q'
" Avoid bug of reporting wrong column when using tabs (issue #723)
let l:options .= ' -s TabSize=1'
" Check for optional .chktexrc
let l:chktex_config = ale#path#FindNearestFile(a:buffer, '.chktexrc')
if !empty(l:chktex_config) if !empty(l:chktex_config)
let l:command .= ' -l ' . ale#Escape(l:chktex_config) let l:options .= ' -l ' . ale#Escape(l:chktex_config)
endif endif
let l:command .= ' ' . ale#Var(a:buffer, 'tex_chktex_options') let l:options .= ' ' . ale#Var(a:buffer, 'tex_chktex_options')
return l:command return '%e' . l:options
endfunction endfunction
function! ale_linters#tex#chktex#Handle(buffer, lines) abort function! ale_linters#tex#chktex#Handle(buffer, lines) abort
@@ -48,7 +46,7 @@ endfunction
call ale#linter#Define('tex', { call ale#linter#Define('tex', {
\ 'name': 'chktex', \ 'name': 'chktex',
\ 'executable': 'chktex', \ 'executable': {b -> ale#Var(b, 'tex_chktex_executable')},
\ 'command': function('ale_linters#tex#chktex#GetCommand'), \ 'command': function('ale_linters#tex#chktex#GetCommand'),
\ 'callback': 'ale_linters#tex#chktex#Handle' \ 'callback': 'ale_linters#tex#chktex#Handle'
\}) \})
+27
View File
@@ -0,0 +1,27 @@
Before:
call ale#assert#SetUpLinterTest('tex', 'chktex')
After:
call ale#assert#TearDownLinterTest()
Execute(The default command should be correct):
AssertLinter 'chktex',
\ 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'
AssertLinter 'bin/foo',
\ ale#Escape('bin/foo')
\ . ' -v0 -p stdin -q -s TabSize=1'
\ . ' -I'
Execute(The options should be configurable):
let b:ale_tex_chktex_options = '--something'
AssertLinter 'chktex',
\ ale#Escape('chktex')
\ . ' -v0 -p stdin -q -s TabSize=1'
\ . ' --something'