From 84cb4b8b9d954e39ff9eaa76afcb06da1cb0b79a Mon Sep 17 00:00:00 2001 From: Andy Stewart Date: Tue, 4 Feb 2014 12:49:55 +0100 Subject: [PATCH 1/2] Remove orphaned signs. --- autoload/sign.vim | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/autoload/sign.vim b/autoload/sign.vim index 4f69f5e..6cd5a4c 100644 --- a/autoload/sign.vim +++ b/autoload/sign.vim @@ -82,6 +82,12 @@ function! sign#find_current_signs(file_name) let line_number = str2nr(split(components[0], '=')[1]) if name =~# 'GitGutter' let id = str2nr(split(components[1], '=')[1]) + " Remove orphaned signs (signs placed on lines which have been deleted). + " (When a line is deleted its sign lingers. Subsequent lines' signs' + " line numbers are decremented appropriately.) + if has_key(gitgutter_signs, line_number) + execute "sign unplace" gitgutter_signs[line_number].id + endif let gitgutter_signs[line_number] = {'id': id, 'name': name} else call add(other_signs, line_number) From 43ae99b3d05a41623aea6d70eb30a1c999acf398 Mon Sep 17 00:00:00 2001 From: Andy Stewart Date: Tue, 4 Feb 2014 12:50:21 +0100 Subject: [PATCH 2/2] Document variable types. --- autoload/diff.vim | 1 + autoload/sign.vim | 11 ++++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/autoload/diff.vim b/autoload/diff.vim index c52e6fe..f4780de 100644 --- a/autoload/diff.vim +++ b/autoload/diff.vim @@ -72,6 +72,7 @@ function! diff#process_hunks(hunks) return modified_lines endfunction +" Returns [ [, ], ...] function! diff#process_hunk(hunk) let modifications = [] let from_line = a:hunk[0] diff --git a/autoload/sign.vim b/autoload/sign.vim index 6cd5a4c..dcf5777 100644 --- a/autoload/sign.vim +++ b/autoload/sign.vim @@ -20,7 +20,7 @@ endfunction " Updates gitgutter's signs in the given file. " -" modified_lines: list of [line_number, name] +" modified_lines: list of [, ] " where name = 'added|removed|modified|modified_removed' function! sign#update_signs(file_name, modified_lines) call sign#find_current_signs(a:file_name) @@ -63,8 +63,8 @@ endfunction function! sign#find_current_signs(file_name) - let gitgutter_signs = {} " : {'id': , 'name': } - let other_signs = [] + let gitgutter_signs = {} " : {'id': , 'name': } + let other_signs = [] " [ signs @@ -101,8 +101,9 @@ function! sign#find_current_signs(file_name) endfunction +" Returns a list of [, ...] function! sign#obsolete_gitgutter_signs_to_remove(file_name, new_gitgutter_signs_line_numbers) - let signs_to_remove = [] + let signs_to_remove = [] " list of [, ...] let remove_all_signs = 1 let old_gitgutter_signs = getbufvar(a:file_name, 'gitgutter_gitgutter_signs') for line_number in keys(old_gitgutter_signs) @@ -128,7 +129,7 @@ function! sign#upsert_new_gitgutter_signs(file_name, modified_lines) let old_gitgutter_signs = getbufvar(a:file_name, 'gitgutter_gitgutter_signs') for line in a:modified_lines - let line_number = line[0] + let line_number = line[0] " if index(other_signs, line_number) == -1 " don't clobber others' signs let name = utility#highlight_name_for_change(line[1]) if !has_key(old_gitgutter_signs, line_number) " insert