Skip to content

Commit dbb5b8f

Browse files
committed
minor refactoring
1 parent 9133a01 commit dbb5b8f

File tree

1 file changed

+25
-32
lines changed

1 file changed

+25
-32
lines changed

plugin/diffstat.vim

Lines changed: 25 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -27,77 +27,70 @@ function! s:DisplayBuffer()
2727
nnoremap <script> <buffer> <silent> <cr> :call g:DiffStatOpenFile()<cr>
2828
endfunction
2929

30-
function! DiffStatShortenPath(path, max_path_length)
31-
let path = strlen(a:path) < a:max_path_length ? a:path : pathshorten(a:path)
30+
function! s:DiffStatShortenPath(path, max_path_length)
31+
" Hardcode some googly patterns for now
32+
let path = substitute(a:path, 'java/com/google', 'j/c/g', '')
33+
let path = substitute(a:path, 'javatests/com/google', 'jt/c/g', '')
34+
35+
let path = strlen(path) < a:max_path_length ? path : pathshorten(a:path)
3236
if a:max_path_length < strlen(path)
3337
return '...' . matchstr(path, '\v.{0,'. (a:max_path_length - 3) . '}$')
3438
endif
3539
return path
3640
endfunction
3741

38-
function! s:DiffStatPaddedString(string, num, before)
39-
if a:before
40-
return a:string . repeat(' ', a:num - len(a:string))
41-
else
42-
return repeat(' ', a:num - len(a:string)) . a:string
43-
end
44-
endfunction
45-
4642
function! s:DiffStatCommand(command)
47-
let max_path_length = 54
48-
let max_deltas_length = 18
43+
let max_path_length = 56
44+
let max_deltas_length = 16
4945

50-
let toplevel = split(system(g:diff_stat_git_command . " rev-parse --show-toplevel"), "\n")[0]
51-
let command_result =
46+
let toplevel = split(system(
47+
\ g:diff_stat_git_command . " rev-parse --show-toplevel"), "\n")[0]
48+
let command_result =
5249
\ system(g:diff_stat_git_command . " diff " . a:command . " --numstat")
5350

5451
let files_list = {}
55-
let deltas = []
52+
let max_delta = 0
5653
let file_name_lengths = []
5754

5855
for diff_line in split(command_result, "\n")
5956
let [inserts, deletes, name] =
60-
\ matchlist(diff_line, '\v\s*([0-9\-]+)\s+([0-9-]+)\s+(.+)')[1:3]
57+
\ matchlist(diff_line, '\v\s*([0-9\-]+)\s+([0-9-]+)\s+(.+)')[1:3]
6158
let absolute_path = toplevel . '/' . name
6259
let relative_path = fnamemodify(absolute_path, ':.')
63-
let display_path_name = DiffStatShortenPath(relative_path, max_path_length)
60+
let display_path_name = s:DiffStatShortenPath(relative_path, max_path_length)
6461
let files_list[display_path_name] =
65-
\ {'inserts': inserts, 'deletes': deletes, 'name': relative_path}
66-
call add(deltas, inserts + deletes)
62+
\ {'inserts': inserts, 'deletes': deletes, 'name': relative_path}
63+
let max_delta = max([max_delta, inserts + deletes])
6764
let s:diff_files_list[display_path_name] = relative_path
6865
call add(file_name_lengths, strlen(display_path_name))
6966
endfor
7067

71-
let max_delta = max(deltas)
7268
let max_deltas_length = min([max_delta, max_deltas_length])
7369
let longest_filename = max(file_name_lengths)
74-
unlet deltas
7570
unlet file_name_lengths
7671

7772
for [key, value] in items(files_list)
73+
let deltas_string = ''
7874
if value['inserts'] ==# '-' || value['deletes'] ==# '-'
7975
let total = 'Bin'
80-
let files_list[key]['deltas'] = ''
8176
else
8277
let total = value['inserts'] + value['deletes']
8378
let inserts_count = max([value['inserts'] * max_deltas_length / max_delta,
84-
\ value['inserts'] + 0 > 0 ? 1 : 0])
79+
\ value['inserts'] + 0 > 0 ? 1 : 0])
8580
let deletes_count = max([value['deletes'] * max_deltas_length / max_delta,
86-
\ value['deletes'] + 0 > 0 ? 1 : 0])
87-
let files_list[key]['deltas'] =
88-
\ repeat('+', inserts_count) . repeat('-', deletes_count)
81+
\ value['deletes'] + 0 > 0 ? 1 : 0])
82+
let deltas_string =
83+
\ ' ' . repeat('+', inserts_count) . repeat('-', deletes_count)
8984
endif
90-
let files_list[key]['string'] = s:DiffStatPaddedString(key, max_path_length, 1)
91-
\ . ' | ' . s:DiffStatPaddedString(total, 3, 0) . ' ' . files_list[key]['deltas']
85+
9286
let files_list[key]['string'] =
93-
\ substitute(files_list[key]['string'], '\v\s+$', '', '')
87+
\ printf('% -' . max_path_length . 's | % 4s%s',
88+
\ key, total, deltas_string)
9489
endfor
9590
return files_list
9691
endfunction
9792

98-
9993
function DiffStatCallSystem(commit)
100-
" TODO(mpetrov): consider using diff-tree or --numstat
10194
let text = "# git diff " . a:commit . "\n"
10295
let result = s:DiffStatCommand(a:commit)
10396
for [key, value] in items(result)
@@ -107,7 +100,7 @@ function DiffStatCallSystem(commit)
107100
endfunction
108101

109102
let s:DiffStatRegex = '\v^\s*(\S+)\s*\|\s*\d+\s*[+-]+\s*$'
110-
function! s:DiffStatFileNameForLine(lnum)
103+
function! s:DiffStatFileNameForLine(lnum)
111104
if getline(a:lnum) =~? s:DiffStatRegex
112105
return matchlist(getline(a:lnum), s:DiffStatRegex)[1]
113106
endif

0 commit comments

Comments
 (0)