summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEinfachToll <istjanichtzufassen@googlemail.com>2017-01-19 21:01:51 +0100
committerw0rp <w0rp@users.noreply.github.com>2017-01-19 20:01:51 +0000
commit831f783493ec761191da48a07536b267cbe565ec (patch)
tree78bdbfa59fa907e6a85aa06dd85d0973f7b26a6f
parent2478d7d92552c3381b757ec432aa0c92d945af4d (diff)
downloadale-831f783493ec761191da48a07536b267cbe565ec.zip
Join the lines Neovim passes to ale (#263)
* Join the lines Neovim passes to ale Fixes #256 * Refactor line joining into own function * Add test for line joining * Fix the test. Sorry.
-rw-r--r--autoload/ale/engine.vim31
-rw-r--r--test/test_line_join.vader23
2 files changed, 47 insertions, 7 deletions
diff --git a/autoload/ale/engine.vim b/autoload/ale/engine.vim
index 005bca43..933be2ac 100644
--- a/autoload/ale/engine.vim
+++ b/autoload/ale/engine.vim
@@ -72,22 +72,39 @@ function! s:StopPreviousJobs(buffer, linter) abort
let g:ale_buffer_info[a:buffer].job_list = l:new_job_list
endfunction
-function! s:GatherOutput(job, data) abort
- let l:job_id = s:GetJobID(a:job)
+function! s:GatherOutputVim(channel, data) abort
+ let l:job_id = s:GetJobID(ch_getjob(a:channel))
if !has_key(s:job_info_map, l:job_id)
return
endif
- call extend(s:job_info_map[l:job_id].output, a:data)
+ call add(s:job_info_map[l:job_id].output, a:data)
endfunction
-function! s:GatherOutputVim(channel, data) abort
- call s:GatherOutput(ch_getjob(a:channel), [a:data])
+function! s:GatherOutputNeoVim(job, data, event) abort
+ let l:job_id = s:GetJobID(a:job)
+
+ if !has_key(s:job_info_map, l:job_id)
+ return
+ endif
+
+ " Join the lines passed to ale, because Neovim splits them up.
+ " a:data is a list of strings, where every item is a new line, except the
+ " first one, which is the continuation of the last item passed last time.
+ call ale#engine#JoinNeovimOutput(s:job_info_map[l:job_id].output, a:data)
endfunction
-function! s:GatherOutputNeoVim(job, data, event) abort
- call s:GatherOutput(a:job, a:data)
+function! ale#engine#JoinNeovimOutput(output, data) abort
+ if empty(a:output)
+ call extend(a:output, a:data)
+ else
+ " Extend the previous line, which can be continued.
+ let a:output[-1] .= get(a:data, 0, '')
+
+ " Add the new lines.
+ call extend(a:output, a:data[1:])
+ endif
endfunction
function! s:HandleExit(job) abort
diff --git a/test/test_line_join.vader b/test/test_line_join.vader
new file mode 100644
index 00000000..26abb7c9
--- /dev/null
+++ b/test/test_line_join.vader
@@ -0,0 +1,23 @@
+Before:
+ let g:test_output = [
+ \ ['one', 'two', 'thr'],
+ \ ['ee', ''],
+ \ ['fou'],
+ \ [''],
+ \ ['r', 'five'],
+ \ [],
+ \ ['', 'six']
+ \]
+
+ let g:expected_result = ['one', 'two', 'three', 'four', 'five', 'six']
+
+After:
+ unlet g:test_output
+ unlet g:expected_result
+
+Execute (Join the lines):
+ let joined_result = []
+ for item in g:test_output
+ call ale#engine#JoinNeovimOutput(joined_result, item)
+ endfor
+ AssertEqual g:expected_result, joined_result