|
7 | 7 | "
|
8 | 8 | " Finds a single change between the common prefix, and common postfix.
|
9 | 9 | function! lsp#utils#diff#compute(old, new) abort
|
10 |
| - let [start_line, start_char] = s:FirstDifference(a:old, a:new) |
11 |
| - let [end_line, end_char] = |
12 |
| - \ s:LastDifference(a:old[start_line:], a:new[start_line:], start_char) |
| 10 | + let [l:start_line, l:start_char] = s:FirstDifference(a:old, a:new) |
| 11 | + let [l:end_line, l:end_char] = |
| 12 | + \ s:LastDifference(a:old[l:start_line:], a:new[l:start_line:], l:start_char) |
13 | 13 |
|
14 |
| - let text = s:ExtractText(a:new, start_line, start_char, end_line, end_char) |
15 |
| - let length = s:Length(a:old, start_line, start_char, end_line, end_char) |
| 14 | + let l:text = s:ExtractText(a:new, l:start_line, l:start_char, l:end_line, l:end_char) |
| 15 | + let l:length = s:Length(a:old, l:start_line, l:start_char, l:end_line, l:end_char) |
16 | 16 |
|
17 |
| - let adj_end_line = len(a:old) + end_line |
18 |
| - let adj_end_char = end_line == 0 ? 0 : strlen(a:old[end_line]) + end_char + 1 |
| 17 | + let l:adj_end_line = len(a:old) + l:end_line |
| 18 | + let l:adj_end_char = l:end_line == 0 ? 0 : strlen(a:old[l:end_line]) + l:end_char + 1 |
19 | 19 |
|
20 |
| - let result = { 'range': {'start': {'line': start_line, 'character': start_char}, |
21 |
| - \ 'end': {'line': adj_end_line, 'character': adj_end_char}}, |
22 |
| - \ 'text': text, |
23 |
| - \ 'rangeLength': length, |
| 20 | + let l:result = { 'range': {'start': {'line': l:start_line, 'character': l:start_char}, |
| 21 | + \ 'end': {'line': l:adj_end_line, 'character': l:adj_end_char}}, |
| 22 | + \ 'text': l:text, |
| 23 | + \ 'rangeLength': l:length, |
24 | 24 | \}
|
25 | 25 |
|
26 |
| - return result |
| 26 | + return l:result |
27 | 27 | endfunction
|
28 | 28 |
|
29 | 29 | " Finds the line and character of the first different character between two
|
30 | 30 | " list of Strings.
|
31 | 31 | function! s:FirstDifference(old, new) abort
|
32 |
| - let line_count = min([len(a:old), len(a:new)]) |
33 |
| - let i = 0 |
34 |
| - while i < line_count |
35 |
| - if a:old[i] !=# a:new[i] | break | endif |
36 |
| - let i += 1 |
| 32 | + let l:line_count = min([len(a:old), len(a:new)]) |
| 33 | + let l:i = 0 |
| 34 | + while l:i < l:line_count |
| 35 | + if a:old[l:i] !=# a:new[l:i] | break | endif |
| 36 | + let l:i += 1 |
37 | 37 | endwhile
|
38 |
| - if i >= line_count |
39 |
| - return [line_count - 1, strlen(a:old[line_count - 1])] |
| 38 | + if i >= l:line_count |
| 39 | + return [l:line_count - 1, strlen(a:old[l:line_count - 1])] |
40 | 40 | endif
|
41 |
| - let old_line = a:old[i] |
42 |
| - let new_line = a:new[i] |
43 |
| - let length = min([strlen(old_line), strlen(new_line)]) |
44 |
| - let j = 0 |
45 |
| - while j < length |
46 |
| - if old_line[j:j] !=# new_line[j:j] | break | endif |
47 |
| - let j += 1 |
| 41 | + let l:old_line = a:old[l:i] |
| 42 | + let l:new_line = a:new[l:i] |
| 43 | + let l:length = min([strlen(l:old_line), strlen(l:new_line)]) |
| 44 | + let l:j = 0 |
| 45 | + while l:j < l:length |
| 46 | + if l:old_line[l:j:l:j] !=# l:new_line[l:j:l:j] | break | endif |
| 47 | + let l:j += 1 |
48 | 48 | endwhile
|
49 |
| - return [i, j] |
| 49 | + return [l:i, l:j] |
50 | 50 | endfunction
|
51 | 51 |
|
52 | 52 | function! s:LastDifference(old, new, start_char) abort
|
53 |
| - let line_count = min([len(a:old), len(a:new)]) |
54 |
| - if line_count == 0 | return [0, 0] | endif |
55 |
| - let i = -1 |
56 |
| - while i >= -1 * line_count |
57 |
| - if a:old[i] !=# a:new[i] | break | endif |
58 |
| - let i -= 1 |
| 53 | + let l:line_count = min([len(a:old), len(a:new)]) |
| 54 | + if l:line_count == 0 | return [0, 0] | endif |
| 55 | + let l:i = -1 |
| 56 | + while l:i >= -1 * l:line_count |
| 57 | + if a:old[l:i] !=# a:new[l:i] | break | endif |
| 58 | + let l:i -= 1 |
59 | 59 | endwhile
|
60 |
| - if i <= -1 * line_count |
61 |
| - let i = -1 * line_count |
62 |
| - let old_line = a:old[i][a:start_char:] |
63 |
| - let new_line = a:new[i][a:start_char:] |
| 60 | + if l:i <= -1 * l:line_count |
| 61 | + let l:i = -1 * l:line_count |
| 62 | + let l:old_line = a:old[l:i][a:start_char:] |
| 63 | + let l:new_line = a:new[l:i][a:start_char:] |
64 | 64 | else
|
65 |
| - let old_line = a:old[i] |
66 |
| - let new_line = a:new[i] |
| 65 | + let l:old_line = a:old[l:i] |
| 66 | + let l:new_line = a:new[l:i] |
67 | 67 | endif
|
68 |
| - let length = min([strlen(old_line), strlen(new_line)]) |
69 |
| - let j = -1 |
70 |
| - while j >= -1 * length |
71 |
| - if old_line[j:j] !=# new_line[j:j] | break | endif |
72 |
| - let j -= 1 |
| 68 | + let l:length = min([strlen(l:old_line), strlen(l:new_line)]) |
| 69 | + let l:j = -1 |
| 70 | + while l:j >= -1 * l:length |
| 71 | + if l:old_line[l:j:l:j] !=# l:new_line[l:j:l:j] | break | endif |
| 72 | + let l:j -= 1 |
73 | 73 | endwhile
|
74 |
| - return [i, j] |
| 74 | + return [l:i, l:j] |
75 | 75 | endfunction
|
76 | 76 |
|
77 | 77 | function! s:ExtractText(lines, start_line, start_char, end_line, end_char) abort
|
78 | 78 | if a:start_line == len(a:lines) + a:end_line
|
79 | 79 | if a:end_line == 0 | return '' | endif
|
80 |
| - let result = a:lines[a:start_line][a:start_char:a:end_char] |
| 80 | + let l:result = a:lines[a:start_line][a:start_char:a:end_char] |
81 | 81 | " json_encode treats empty string computed this was as 'null'
|
82 |
| - if strlen(result) == 0 | let result = '' | endif |
83 |
| - return result |
| 82 | + if strlen(l:result) == 0 | let l:result = '' | endif |
| 83 | + return l:result |
84 | 84 | endif
|
85 |
| - let result = a:lines[a:start_line][a:start_char:]."\n" |
86 |
| - let adj_end_line = len(a:lines) + a:end_line |
87 |
| - for line in a:lines[a:start_line + 1:a:end_line - 1] |
88 |
| - let result .= line."\n" |
| 85 | + let l:result = a:lines[a:start_line][a:start_char:]."\n" |
| 86 | + let l:adj_end_line = len(a:lines) + a:end_line |
| 87 | + for l:line in a:lines[a:start_line + 1:a:end_line - 1] |
| 88 | + let l:result .= l:line."\n" |
89 | 89 | endfor
|
90 | 90 | if a:end_line != 0
|
91 |
| - let result .= a:lines[a:end_line][:a:end_char] |
| 91 | + let l:result .= a:lines[a:end_line][:a:end_char] |
92 | 92 | endif
|
93 |
| - return result |
| 93 | + return l:result |
94 | 94 | endfunction
|
95 | 95 |
|
96 | 96 | function! s:Length(lines, start_line, start_char, end_line, end_char)
|
97 | 97 | \ abort
|
98 |
| - let adj_end_line = len(a:lines) + a:end_line |
99 |
| - if adj_end_line >= len(a:lines) |
100 |
| - let adj_end_char = a:end_char - 1 |
| 98 | + let l:adj_end_line = len(a:lines) + a:end_line |
| 99 | + if l:adj_end_line >= len(a:lines) |
| 100 | + let l:adj_end_char = a:end_char - 1 |
101 | 101 | else
|
102 |
| - let adj_end_char = strlen(a:lines[adj_end_line]) + a:end_char |
| 102 | + let l:adj_end_char = strlen(a:lines[l:adj_end_line]) + a:end_char |
103 | 103 | endif
|
104 |
| - if a:start_line == adj_end_line |
105 |
| - return adj_end_char - a:start_char + 1 |
| 104 | + if a:start_line == l:adj_end_line |
| 105 | + return l:adj_end_char - a:start_char + 1 |
106 | 106 | endif
|
107 |
| - let result = strlen(a:lines[a:start_line]) - a:start_char + 1 |
108 |
| - let line = a:start_line + 1 |
109 |
| - while line < adj_end_line |
110 |
| - let result += strlen(a:lines[line]) + 1 |
111 |
| - let line += 1 |
| 107 | + let l:result = strlen(a:lines[a:start_line]) - a:start_char + 1 |
| 108 | + let l:line = a:start_line + 1 |
| 109 | + while l:line < l:adj_end_line |
| 110 | + let l:result += strlen(a:lines[l:line]) + 1 |
| 111 | + let l:line += 1 |
112 | 112 | endwhile
|
113 |
| - let result += adj_end_char + 1 |
114 |
| - return result |
| 113 | + let l:result += l:adj_end_char + 1 |
| 114 | + return l:result |
115 | 115 | endfunction
|
0 commit comments