@@ -298,7 +298,7 @@ function! s:handle_symbol(server, last_req_id, type, data) abort
298
298
endif
299
299
300
300
if lsp#client#is_error (a: data [' response' ])
301
- call lsp#utils#error (' Failed to retrieve ' . a: type . ' for ' . a: server )
301
+ call lsp#utils#error (' Failed to retrieve ' . a: type . ' for ' . a: server . ' : ' . lsp#client#error_message ( a: data [ ' response ' ]) )
302
302
return
303
303
endif
304
304
@@ -322,7 +322,7 @@ function! s:handle_location(ctx, server, type, data) abort "ctx = {counter, list
322
322
let a: ctx [' counter' ] = a: ctx [' counter' ] - 1
323
323
324
324
if lsp#client#is_error (a: data [' response' ])
325
- call lsp#utils#error (' Failed to retrieve ' . a: type . ' for ' . a: server )
325
+ call lsp#utils#error (' Failed to retrieve ' . a: type . ' for ' . a: server . ' : ' . lsp#client#error_message ( a: data [ ' response ' ]) )
326
326
else
327
327
let a: ctx [' list' ] = a: ctx [' list' ] + lsp#ui#vim#utils#locations_to_loc_list (a: data )
328
328
endif
@@ -353,8 +353,8 @@ function! s:handle_workspace_edit(server, last_req_id, type, data) abort
353
353
return
354
354
endif
355
355
356
- if lsp#client#is_error (a: data )
357
- call lsp#utils#error (' Failed to retrieve ' . a: type . ' for ' . a: server )
356
+ if lsp#client#is_error (a: data[ ' response ' ] )
357
+ call lsp#utils#error (' Failed to retrieve ' . a: type . ' for ' . a: server . ' : ' . lsp#client#error_message ( a: data [ ' response ' ]) )
358
358
return
359
359
endif
360
360
@@ -369,7 +369,7 @@ function! s:handle_text_edit(server, last_req_id, type, data) abort
369
369
endif
370
370
371
371
if lsp#client#is_error (a: data [' response' ])
372
- call lsp#utils#error (' Failed to ' . a: type . ' for ' . a: server )
372
+ call lsp#utils#error (' Failed to ' . a: type . ' for ' . a: server . ' : ' . lsp#client#error_message ( a: data [ ' response ' ]) )
373
373
return
374
374
endif
375
375
@@ -490,7 +490,7 @@ function! s:apply_text_edits(uri, text_edits) abort
490
490
let l: was_view = winsaveview ()
491
491
492
492
set paste
493
- set selection = inclusive
493
+ set selection = exclusive
494
494
set virtualedit = onemore
495
495
496
496
execute l: cmd
@@ -588,7 +588,7 @@ function! s:generate_sub_cmd_insert(text_edit) abort
588
588
let l: new_text = s: parse (a: text_edit [' newText' ])
589
589
590
590
let l: sub_cmd = s: preprocess_cmd (a: text_edit [' range' ])
591
- let l: sub_cmd .= s: generate_move_cmd (l: start_line , l: start_character )
591
+ let l: sub_cmd .= s: generate_move_start_cmd (l: start_line , l: start_character )
592
592
593
593
if len (l: new_text ) == 0
594
594
let l: sub_cmd .= ' x'
@@ -613,9 +613,9 @@ function! s:generate_sub_cmd_replace(text_edit) abort
613
613
let l: new_text = substitute (a: text_edit [' newText' ], ' \n$' , ' ' , ' ' )
614
614
615
615
let l: sub_cmd = s: preprocess_cmd (a: text_edit [' range' ])
616
- let l: sub_cmd .= s: generate_move_cmd (l: start_line , l: start_character ) " move to the first position
616
+ let l: sub_cmd .= s: generate_move_start_cmd (l: start_line , l: start_character ) " move to the first position
617
617
let l: sub_cmd .= ' v'
618
- let l: sub_cmd .= s: generate_move_cmd (l: end_line , l: end_character ) " move to the last position
618
+ let l: sub_cmd .= s: generate_move_end_cmd (l: end_line , l: end_character ) " move to the last position
619
619
620
620
if len (l: new_text ) == 0
621
621
let l: sub_cmd .= ' x'
@@ -627,14 +627,24 @@ function! s:generate_sub_cmd_replace(text_edit) abort
627
627
return l: sub_cmd
628
628
endfunction
629
629
630
- function ! s: generate_move_cmd (line_pos, character_pos) abort
630
+ function ! s: generate_move_start_cmd (line_pos, character_pos) abort
631
631
let l: result = printf (' %dG0' , a: line_pos ) " move the line and set to the cursor at the beginning
632
632
if a: character_pos > 0
633
633
let l: result .= printf (' %dl' , a: character_pos ) " move right until the character
634
634
endif
635
635
return l: result
636
636
endfunction
637
637
638
+ function ! s: generate_move_end_cmd (line_pos, character_pos) abort
639
+ let l: result = printf (' %dG0' , a: line_pos ) " move the line and set to the cursor at the beginning
640
+ if a: character_pos > 0
641
+ let l: result .= printf (' %dl' , a: character_pos ) " move right until the character
642
+ else
643
+ let l: result = printf (' %dG$' , a: line_pos - 1 ) " move most right
644
+ endif
645
+ return l: result
646
+ endfunction
647
+
638
648
function ! s: parse (text) abort
639
649
" https://stackoverflow.com/questions/71417/why-is-r-a-newline-for-vim
640
650
return substitute (a: text , ' \(^\n|\n$\|\r\n\)' , ' \r' , ' g' )
0 commit comments