Skip to content

Commit 2c6ada3

Browse files
committed
Update vital modules
1 parent e5f975e commit 2c6ada3

File tree

1 file changed

+54
-47
lines changed

1 file changed

+54
-47
lines changed

autoload/vital/_lsp/VS/LSP/TextEdit.vim

Lines changed: 54 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
function! s:_SID() abort
55
return matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze__SID$')
66
endfunction
7-
execute join(['function! vital#_lsp#VS#LSP#TextEdit#import() abort', printf("return map({'set_method': '', '_vital_depends': '', 'get_method': '', 'is_text_mark_preserved': '', 'apply': '', 'get_methods': '', '_vital_loaded': ''}, \"vital#_lsp#function('<SNR>%s_' . v:key)\")", s:_SID()), 'endfunction'], "\n")
7+
execute join(['function! vital#_lsp#VS#LSP#TextEdit#import() abort', printf("return map({'set_method': '', '_vital_depends': '', 'get_method': '', 'is_text_mark_preserved': '', 'apply': '', 'get_methods': '', 'delete': '', '_vital_loaded': ''}, \"vital#_lsp#function('<SNR>%s_' . v:key)\")", s:_SID()), 'endfunction'], "\n")
88
delfunction s:_SID
99
" ___vital___
1010
"
@@ -55,8 +55,10 @@ function! s:get_method() abort
5555
if s:_method ==# 'auto'
5656
if exists('*nvim_buf_set_text')
5757
return 'nvim_buf_set_text'
58-
else
58+
elseif !has('nvim')
5959
return 'normal'
60+
else
61+
return 'function'
6062
endif
6163
endif
6264
return s:_method
@@ -66,7 +68,7 @@ endfunction
6668
" get_methods
6769
"
6870
function! s:get_methods() abort
69-
return ['function', 'nvim_buf_set_text', 'normal']
71+
return ['nvim_buf_set_text', 'normal', 'function']
7072
endfunction
7173

7274
"
@@ -89,7 +91,7 @@ function! s:apply(path, text_edits) abort
8991
let [l:has_overflowed, l:text_edits] = s:_normalize(bufnr(l:target_bufname), a:text_edits)
9092
let l:fix_cursor = s:_methods[s:get_method()](bufnr(l:target_bufname), l:text_edits, l:cursor_position)
9193
if l:has_overflowed && getline('$') ==# ''
92-
$delete _
94+
call s:delete(bufnr(l:target_bufname), '$', '$')
9395
endif
9496
call s:_switch(l:current_bufname)
9597
catch /.*/
@@ -135,7 +137,7 @@ function! s:_methods.normal(bufnr, text_edits, cursor_position) abort
135137

136138
try
137139
let l:Restore = s:Option.define({
138-
\ 'foldenable': '1',
140+
\ 'foldenable': '0',
139141
\ 'virtualedit': 'onemore',
140142
\ 'whichwrap': 'h',
141143
\ 'selection': 'exclusive',
@@ -172,50 +174,41 @@ endfunction
172174
"
173175
function! s:_methods.function(bufnr, text_edits, cursor_position) abort
174176
let l:fix_cursor = v:false
175-
try
176-
let l:Restore = s:Option.define({
177-
\ 'foldenable': '1',
178-
\ })
179177

180-
for l:text_edit in a:text_edits
181-
let l:start_line = getline(l:text_edit.range.start.line + 1)
182-
let l:end_line = getline(l:text_edit.range.end.line + 1)
183-
let l:before_line = strcharpart(l:start_line, 0, l:text_edit.range.start.character)
184-
let l:after_line = strcharpart(l:end_line, l:text_edit.range.end.character, strchars(l:end_line) - l:text_edit.range.end.character)
185-
186-
" create lines.
187-
let l:lines = s:Text.split_by_eol(l:text_edit.newText)
188-
let l:lines[0] = l:before_line . l:lines[0]
189-
let l:lines[-1] = l:lines[-1] . l:after_line
190-
191-
" save length.
192-
let l:lines_len = len(l:lines)
193-
let l:range_len = (l:text_edit.range.end.line - l:text_edit.range.start.line) + 1
194-
195-
" append or delete lines.
196-
if l:lines_len > l:range_len
197-
call append(l:text_edit.range.end.line, repeat([''], l:lines_len - l:range_len))
198-
elseif l:lines_len < l:range_len
199-
execute printf('%s,%sdelete _', l:text_edit.range.start.line + l:lines_len, l:text_edit.range.end.line)
178+
for l:text_edit in a:text_edits
179+
let l:start_line = getline(l:text_edit.range.start.line + 1)
180+
let l:end_line = getline(l:text_edit.range.end.line + 1)
181+
let l:before_line = strcharpart(l:start_line, 0, l:text_edit.range.start.character)
182+
let l:after_line = strcharpart(l:end_line, l:text_edit.range.end.character, strchars(l:end_line) - l:text_edit.range.end.character)
183+
184+
" create lines.
185+
let l:lines = s:Text.split_by_eol(l:text_edit.newText)
186+
let l:lines[0] = l:before_line . l:lines[0]
187+
let l:lines[-1] = l:lines[-1] . l:after_line
188+
189+
" save length.
190+
let l:lines_len = len(l:lines)
191+
let l:range_len = (l:text_edit.range.end.line - l:text_edit.range.start.line) + 1
192+
193+
" append or delete lines.
194+
if l:lines_len > l:range_len
195+
call append(l:text_edit.range.end.line, repeat([''], l:lines_len - l:range_len))
196+
elseif l:lines_len < l:range_len
197+
call s:delete(a:bufnr, l:text_edit.range.start.line + l:lines_len, l:text_edit.range.end.line)
198+
endif
199+
200+
" set lines.
201+
let l:i = 0
202+
while l:i < len(l:lines)
203+
let l:lnum = l:text_edit.range.start.line + l:i + 1
204+
if get(getbufline(a:bufnr, l:lnum), 0, v:null) !=# l:lines[l:i]
205+
call setline(l:lnum, l:lines[l:i])
200206
endif
207+
let l:i += 1
208+
endwhile
201209

202-
" set lines.
203-
let l:i = 0
204-
while l:i < len(l:lines)
205-
let l:lnum = l:text_edit.range.start.line + l:i + 1
206-
if get(getbufline(a:bufnr, l:lnum), 0, v:null) !=# l:lines[l:i]
207-
call setline(l:lnum, l:lines[l:i])
208-
endif
209-
let l:i += 1
210-
endwhile
211-
212-
let l:fix_cursor = s:_fix_cursor(a:cursor_position, l:text_edit, s:Text.split_by_eol(l:text_edit.newText))
213-
endfor
214-
catch /.*/
215-
echomsg string({ 'exception': v:exception, 'throwpoint': v:throwpoint })
216-
finally
217-
call l:Restore()
218-
endtry
210+
let l:fix_cursor = s:_fix_cursor(a:cursor_position, l:text_edit, s:Text.split_by_eol(l:text_edit.newText))
211+
endfor
219212

220213
return l:fix_cursor
221214
endfunction
@@ -279,7 +272,6 @@ function! s:_check(text_edits) abort
279272
\ l:range.end.line == l:text_edit.range.start.line &&
280273
\ l:range.end.character > l:text_edit.range.start.character
281274
\ )
282-
283275
echomsg 'VS.LSP.TextEdit: range overlapped.'
284276
endif
285277
let l:range = l:text_edit.range
@@ -337,3 +329,18 @@ function! s:_switch(path) abort
337329
endif
338330
endfunction
339331

332+
"
333+
" delete
334+
"
335+
function! s:delete(bufnr, start, end) abort
336+
if exists('*deletebufline')
337+
call deletebufline(a:bufnr, a:start, a:end)
338+
else
339+
try
340+
let l:Restore = s:Option.define({ 'foldenable': '0' })
341+
execute printf('%s,%sdelete _', a:start, a:end)
342+
finally
343+
call l:Restore()
344+
endtry
345+
endif
346+
endfunction

0 commit comments

Comments
 (0)