diff --git a/autoload/ale/linter.vim b/autoload/ale/linter.vim index 0a5b9ae3..be173588 100644 --- a/autoload/ale/linter.vim +++ b/autoload/ale/linter.vim @@ -114,6 +114,15 @@ function! ale#linter#PreProcess(linter) abort \ . 'must be defined' endif + if ( + \ has_key(a:linter, 'command') + \ + has_key(a:linter, 'command_chain') + \ + has_key(a:linter, 'command_callback') + \) > 1 + throw 'Only one of `command`, `command_callback`, or `command_chain` ' + \ . 'should be set' + endif + let l:obj.output_stream = get(a:linter, 'output_stream', 'stdout') if type(l:obj.output_stream) != type('') diff --git a/test/test_linter_defintion_processing.vader b/test/test_linter_defintion_processing.vader index 4b5c6a76..969a8932 100644 --- a/test/test_linter_defintion_processing.vader +++ b/test/test_linter_defintion_processing.vader @@ -211,3 +211,26 @@ Execute(PreProcess should complain about invalid chain items at higher indices): \} AssertThrows call ale#linter#PreProcess(g:linter) AssertEqual 'The `command_chain` item 1 must define a `callback` function', g:vader_exception + +Execute(PreProcess should complain when conflicting command options are used): + let g:linter = { + \ 'name': 'x', + \ 'callback': 'x', + \ 'executable': 'x', + \ 'command': 'foo', + \ 'command_chain': [{'callback': 'foo'}], + \} + AssertThrows call ale#linter#PreProcess(g:linter) + AssertEqual 'Only one of `command`, `command_callback`, or `command_chain` should be set', g:vader_exception + + unlet g:linter.command + let g:linter.command_callback = 'foo' + + AssertThrows call ale#linter#PreProcess(g:linter) + AssertEqual 'Only one of `command`, `command_callback`, or `command_chain` should be set', g:vader_exception + + let g:linter.command = 'foo' + unlet g:linter.command_chain + + AssertThrows call ale#linter#PreProcess(g:linter) + AssertEqual 'Only one of `command`, `command_callback`, or `command_chain` should be set', g:vader_exception