Skip to content

Commit

Permalink
Fix chktex highlighting wrong column when using tabs instead of spaces (
Browse files Browse the repository at this point in the history
#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'
  • Loading branch information
Jorenar authored Jan 14, 2024
1 parent 3dbf0b2 commit 94f7646
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 15 deletions.
28 changes: 13 additions & 15 deletions ale_linters/tex/chktex.vim
Original file line number Diff line number Diff line change
@@ -1,29 +1,27 @@
" Author: Andrew Balmos - <andrew@balmos.org>
" Description: chktex for LaTeX files

let g:ale_tex_chktex_executable =
\ get(g:, 'ale_tex_chktex_executable', 'chktex')

let g:ale_tex_chktex_options =
\ get(g:, 'ale_tex_chktex_options', '-I')
call ale#Set('tex_chktex_executable', 'chktex')
call ale#Set('tex_chktex_options', '-I')

function! ale_linters#tex#chktex#GetCommand(buffer) abort
" Check for optional .chktexrc
let l:chktex_config = ale#path#FindNearestFile(
\ a:buffer,
\ '.chktexrc')
let l:options = ''

let l:command = ale#Var(a:buffer, 'tex_chktex_executable')
" 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)
let l:command .= ' -l ' . ale#Escape(l:chktex_config)
let l:options .= ' -l ' . ale#Escape(l:chktex_config)
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

function! ale_linters#tex#chktex#Handle(buffer, lines) abort
Expand All @@ -48,7 +46,7 @@ endfunction

call ale#linter#Define('tex', {
\ 'name': 'chktex',
\ 'executable': 'chktex',
\ 'executable': {b -> ale#Var(b, 'tex_chktex_executable')},
\ 'command': function('ale_linters#tex#chktex#GetCommand'),
\ 'callback': 'ale_linters#tex#chktex#Handle'
\})
27 changes: 27 additions & 0 deletions test/linter/test_tex_chktex.vader
Original file line number Diff line number Diff line change
@@ -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'

0 comments on commit 94f7646

Please sign in to comment.