Skip to content

Commit 34397f0

Browse files
authored
Merge pull request #488 from prabirshrestha/fix-textedit
Fix textEdit
2 parents 906bd2e + ff94e63 commit 34397f0

File tree

2 files changed

+58
-9
lines changed

2 files changed

+58
-9
lines changed

autoload/lsp/utils/text_edit.vim

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -162,15 +162,14 @@ endfunction
162162
function! s:generate_sub_cmd_insert(text_edit) abort
163163
let l:start_line = a:text_edit['range']['start']['line']
164164
let l:start_character = a:text_edit['range']['start']['character']
165-
let l:new_text = s:parse(a:text_edit['newText'])
166165

167166
let l:sub_cmd = s:preprocess_cmd(a:text_edit['range'])
168167
let l:sub_cmd .= s:generate_move_start_cmd(l:start_line, l:start_character)
169168

170169
if l:start_character >= strchars(getline(l:start_line))
171170
let l:sub_cmd .= "\"=l:merged_text_edit['merged']['newText']\<CR>p"
172171
else
173-
let l:sub_cmd .= "\"=l:merged_text_edit['merged']['newText']\<CR>P"
172+
let l:sub_cmd .= "\"=l:merged_text_edit['merged']['newText'].'?'\<CR>gPh\"_x"
174173
endif
175174

176175
return l:sub_cmd
@@ -181,7 +180,7 @@ function! s:generate_sub_cmd_replace(text_edit) abort
181180
let l:start_character = a:text_edit['range']['start']['character']
182181
let l:end_line = a:text_edit['range']['end']['line']
183182
let l:end_character = a:text_edit['range']['end']['character']
184-
let l:new_text = substitute(a:text_edit['newText'], '\n$', '', '')
183+
let l:new_text = a:text_edit['newText']
185184

186185
let l:sub_cmd = s:preprocess_cmd(a:text_edit['range'])
187186
let l:sub_cmd .= s:generate_move_start_cmd(l:start_line, l:start_character) " move to the first position
@@ -199,8 +198,10 @@ function! s:generate_sub_cmd_replace(text_edit) abort
199198

200199
if len(l:new_text) == 0
201200
let l:sub_cmd .= 'x'
202-
else
201+
elseif l:start_character == 0 && l:end_character == 0
203202
let l:sub_cmd .= "\"=l:merged_text_edit['merged']['newText']\<CR>p"
203+
else
204+
let l:sub_cmd .= "\"=l:merged_text_edit['merged']['newText'].'?'\<CR>gph\"_x"
204205
endif
205206

206207
return l:sub_cmd
@@ -224,11 +225,6 @@ function! s:generate_move_end_cmd(line_pos, character_pos) abort
224225
return l:result
225226
endfunction
226227

227-
function! s:parse(text) abort
228-
" https://stackoverflow.com/questions/71417/why-is-r-a-newline-for-vim
229-
return substitute(a:text, '\(^\n|\n$\|\r\n\)', '\r', 'g')
230-
endfunction
231-
232228
function! s:preprocess_cmd(range) abort
233229
" preprocess by opening the folds, this is needed because the line you are
234230
" going might have a folding

test/lsp/utils/text_edit.vimspec

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,59 @@ Describe lsp#utils#text_edit
390390
Assert Equals(l:buffer_text, ['x', 'y', 'z', ''])
391391
End
392392

393+
It multiple textEdit with inserting \r.
394+
" Add some text to buffer
395+
call s:set_text(['class ABC {', ' private:', ' ', 'int a;};', ])
396+
397+
" Format
398+
call lsp#utils#text_edit#apply_text_edits(
399+
\ expand('%'),
400+
\ [
401+
\ {
402+
\ "range": {
403+
\ "end": {
404+
\ "character": 2,
405+
\ "line": 1
406+
\ },
407+
\ "start": {
408+
\ "character": 11,
409+
\ "line": 0
410+
\ }
411+
\ },
412+
\ "newText": "\n"
413+
\ },
414+
\ {
415+
\ "range": {
416+
\ "end": {
417+
\ "character": 0,
418+
\ "line": 3
419+
\ },
420+
\ "start": {
421+
\ "character": 10,
422+
\ "line": 1
423+
\ }
424+
\ },
425+
\ "newText": "\n "
426+
\ },
427+
\ {
428+
\ "range": {
429+
\ "end": {
430+
\ "character": 6,
431+
\ "line": 3
432+
\ },
433+
\ "start": {
434+
\ "character": 6,
435+
\ "line": 3
436+
\ }
437+
\ },
438+
\ "newText": "\n"
439+
\ }
440+
\ ])
441+
442+
let l:buffer_text = s:get_text()
443+
Assert Equals(l:buffer_text, ['class ABC {', 'private:', ' int a;', '};', ''])
444+
End
445+
393446
It preserves v:completed_item
394447
" Add some text to buffer
395448
call s:set_text(['foo', 'bar'])

0 commit comments

Comments
 (0)