summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--autoload/ale/engine.vim82
-rw-r--r--test/test_engine_invocation.vader34
2 files changed, 39 insertions, 77 deletions
diff --git a/autoload/ale/engine.vim b/autoload/ale/engine.vim
index e96bc83d..34f0d4d7 100644
--- a/autoload/ale/engine.vim
+++ b/autoload/ale/engine.vim
@@ -462,53 +462,49 @@ function! ale#engine#ProcessChain(buffer, executable, linter, chain_index, input
let l:chain_index = a:chain_index
let l:input = a:input
- if has_key(a:linter, 'command_chain')
- while l:chain_index < len(a:linter.command_chain)
- " Run a chain of commands, one asynchronous command after the other,
- " so that many programs can be run in a sequence.
- let l:chain_item = a:linter.command_chain[l:chain_index]
-
- if l:chain_index == 0
- " The first callback in the chain takes only a buffer number.
- let l:command = ale#util#GetFunction(l:chain_item.callback)(
- \ a:buffer
- \)
- else
- " The second callback in the chain takes some input too.
- let l:command = ale#util#GetFunction(l:chain_item.callback)(
- \ a:buffer,
- \ l:input
- \)
+ while l:chain_index < len(a:linter.command_chain)
+ " Run a chain of commands, one asynchronous command after the other,
+ " so that many programs can be run in a sequence.
+ let l:chain_item = a:linter.command_chain[l:chain_index]
+
+ if l:chain_index == 0
+ " The first callback in the chain takes only a buffer number.
+ let l:command = ale#util#GetFunction(l:chain_item.callback)(
+ \ a:buffer
+ \)
+ else
+ " The second callback in the chain takes some input too.
+ let l:command = ale#util#GetFunction(l:chain_item.callback)(
+ \ a:buffer,
+ \ l:input
+ \)
+ endif
+
+ " If we have a command to run, execute that.
+ if !empty(l:command)
+ " The chain item can override the output_stream option.
+ if has_key(l:chain_item, 'output_stream')
+ let l:output_stream = l:chain_item.output_stream
endif
- " If we have a command to run, execute that.
- if !empty(l:command)
- " The chain item can override the output_stream option.
- if has_key(l:chain_item, 'output_stream')
- let l:output_stream = l:chain_item.output_stream
- endif
-
- " The chain item can override the read_buffer option.
- if has_key(l:chain_item, 'read_buffer')
- let l:read_buffer = l:chain_item.read_buffer
- elseif l:chain_index != len(a:linter.command_chain) - 1
- " Don't read the buffer for commands besides the last one
- " in the chain by default.
- let l:read_buffer = 0
- endif
-
- break
+ " The chain item can override the read_buffer option.
+ if has_key(l:chain_item, 'read_buffer')
+ let l:read_buffer = l:chain_item.read_buffer
+ elseif l:chain_index != len(a:linter.command_chain) - 1
+ " Don't read the buffer for commands besides the last one
+ " in the chain by default.
+ let l:read_buffer = 0
endif
- " Command chain items can return an empty string to indicate that
- " a command should be skipped, so we should try the next item
- " with no input.
- let l:input = []
- let l:chain_index += 1
- endwhile
- else
- let l:command = ale#linter#GetCommand(a:buffer, a:linter)
- endif
+ break
+ endif
+
+ " Command chain items can return an empty string to indicate that
+ " a command should be skipped, so we should try the next item
+ " with no input.
+ let l:input = []
+ let l:chain_index += 1
+ endwhile
return [l:command, {
\ 'executable': a:executable,
diff --git a/test/test_engine_invocation.vader b/test/test_engine_invocation.vader
index b43fa448..af713953 100644
--- a/test/test_engine_invocation.vader
+++ b/test/test_engine_invocation.vader
@@ -67,40 +67,6 @@ Execute(Engine invocation should return the command for the fourth item correctl
AssertEqual 'fourth', g:result.command
AssertEqual 4, g:result.next_chain_index
-Execute(Engine invocation should return the command for a single callback correctly):
- unlet g:linter.command_chain
- let g:linter.command_callback = 'FirstChainFunction'
-
- let g:result = ProcessIndex(0)
-
- AssertEqual 'first', g:result.command
-
-Execute(Engine invocation should return the command for a command string correctly):
- unlet g:linter.command_chain
- let g:linter.command = 'foo bar'
-
- let g:result = ProcessIndex(0)
-
- AssertEqual 'foo bar', g:result.command
-
-Execute(Engine invocation should process read_buffer correctly for simple commands):
- unlet g:linter.command_chain
- let g:linter.command = 'foo bar'
- let g:linter.read_buffer = 0
-
- let g:result = ProcessIndex(0)
-
- AssertEqual 'foo bar', g:result.command
- AssertEqual 0, g:result.read_buffer
-
- let g:linter.command_callback = 'FirstChainFunction'
- unlet g:linter.command
-
- let g:result = ProcessIndex(0)
-
- AssertEqual 'first', g:result.command
- AssertEqual 0, g:result.read_buffer
-
Execute(Engine invocation should allow read_buffer to be enabled for a command in the middle of a chain):
let g:linter.command_chain[2].read_buffer = 1