@@ -1046,42 +1046,36 @@ impl LanguageClient {
10461046
10471047 let  response:  Option < GotoDefinitionResponse >  = result. clone ( ) . to_lsp ( ) ?; 
10481048
1049-  match  response { 
1050-  None  => { 
1051-  self . vim ( ) ?. echowarn ( "Not found!" ) ?; 
1052-  return  Ok ( Value :: Null ) ; 
1053-  } 
1054-  Some ( GotoDefinitionResponse :: Scalar ( loc) )  => { 
1049+  let  locations = match  response { 
1050+  None  => vec ! [ ] , 
1051+  Some ( GotoDefinitionResponse :: Scalar ( loc) )  => vec ! [ loc] , 
1052+  Some ( GotoDefinitionResponse :: Array ( arr) )  => arr, 
1053+  Some ( GotoDefinitionResponse :: Link ( links) )  => links
1054+  . into_iter ( ) 
1055+  . map ( |link| Location :: new ( link. target_uri ,  link. target_selection_range ) ) 
1056+  . collect ( ) , 
1057+  } ; 
1058+ 
1059+  match  locations. len ( )  { 
1060+  0  => self . vim ( ) ?. echowarn ( "Not found!" ) ?, 
1061+  1  => { 
1062+  let  loc = locations. get ( 0 ) . ok_or_else ( || err_msg ( "Not found!" ) ) ?; 
10551063 self . vim ( ) ?. edit ( & goto_cmd,  loc. uri . filepath ( ) ?) ?; 
10561064 self . vim ( ) ?
10571065 . cursor ( loc. range . start . line  + 1 ,  loc. range . start . character  + 1 ) ?; 
1066+  let  cur_file:  String  = self . vim ( ) ?. eval ( "expand('%')" ) ?; 
1067+  self . vim ( ) ?. echomsg_ellipsis ( format ! ( 
1068+  "{} {}:{}" , 
1069+  cur_file, 
1070+  loc. range. start. line + 1 , 
1071+  loc. range. start. character + 1 
1072+  ) ) ?; 
10581073 } 
1059-  Some ( GotoDefinitionResponse :: Array ( arr) )  => match  arr. len ( )  { 
1060-  0  => self . vim ( ) ?. echowarn ( "Not found!" ) ?, 
1061-  1  => { 
1062-  let  loc = arr. get ( 0 ) . ok_or_else ( || err_msg ( "Not found!" ) ) ?; 
1063-  self . vim ( ) ?. edit ( & goto_cmd,  loc. uri . filepath ( ) ?) ?; 
1064-  self . vim ( ) ?
1065-  . cursor ( loc. range . start . line  + 1 ,  loc. range . start . character  + 1 ) ?; 
1066-  let  cur_file:  String  = self . vim ( ) ?. eval ( "expand('%')" ) ?; 
1067-  self . vim ( ) ?. echomsg_ellipsis ( format ! ( 
1068-  "{} {}:{}" , 
1069-  cur_file, 
1070-  loc. range. start. line + 1 , 
1071-  loc. range. start. character + 1 
1072-  ) ) ?; 
1073-  } 
1074-  _ => { 
1075-  let  title = format ! ( "[LC]: search for {}" ,  current_word) ; 
1076-  self . display_locations ( & arr,  & title) ?
1077-  } 
1078-  } , 
1079-  Some ( GotoDefinitionResponse :: Link ( _) )  => { 
1080-  self . vim ( ) ?
1081-  . echowarn ( "Definition links are not supported!" ) ?; 
1082-  return  Ok ( Value :: Null ) ; 
1074+  _ => { 
1075+  let  title = format ! ( "[LC]: search for {}" ,  current_word) ; 
1076+  self . display_locations ( & locations,  & title) ?
10831077 } 
1084-  } ; 
1078+  } 
10851079
10861080 info ! ( "End {}" ,  method) ; 
10871081 Ok ( result) 
0 commit comments