Separate hunk iteration from processing.

This commit is contained in:
Andy Stewart
2013-02-21 14:43:42 +01:00
parent cda4597459
commit f0ad2a5b6d

View File

@@ -82,33 +82,39 @@ endfunction
function! s:process_hunks(hunks) function! s:process_hunks(hunks)
let modified_lines = [] let modified_lines = []
for hunk in a:hunks for hunk in a:hunks
let from_line = hunk[0] call extend(modified_lines, s:process_hunk(hunk))
let from_count = hunk[1] endfor
let to_line = hunk[2] return modified_lines
let to_count = hunk[3] endfunction
function! s:process_hunk(hunk)
let modifications = []
let from_line = a:hunk[0]
let from_count = a:hunk[1]
let to_line = a:hunk[2]
let to_count = a:hunk[3]
" added " added
if from_count == 0 && to_count > 0 if from_count == 0 && to_count > 0
let offset = 0 let offset = 0
while offset < to_count while offset < to_count
let line_number = to_line + offset let line_number = to_line + offset
call add(modified_lines, [line_number, 'added']) call add(modifications, [line_number, 'added'])
let offset += 1 let offset += 1
endwhile endwhile
" removed " removed
elseif from_count > 0 && to_count == 0 elseif from_count > 0 && to_count == 0
" removed lines came after `to_line`. " removed lines came after `to_line`.
call add(modified_lines, [to_line, 'removed']) call add(modifications, [to_line, 'removed'])
" modified " modified
else else
let offset = 0 let offset = 0
while offset < to_count while offset < to_count
let line_number = to_line + offset let line_number = to_line + offset
call add(modified_lines, [line_number, 'modified']) call add(modifications, [line_number, 'modified'])
let offset += 1 let offset += 1
endwhile endwhile
endif endif
endfor return modifications
return modified_lines
endfunction endfunction
function! s:clear_signs() function! s:clear_signs()