@@ -1046,42 +1046,36 @@ impl LanguageClient {
1046
1046
1047
1047
let response: Option < GotoDefinitionResponse > = result. clone ( ) . to_lsp ( ) ?;
1048
1048
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!" ) ) ?;
1055
1063
self . vim ( ) ?. edit ( & goto_cmd, loc. uri . filepath ( ) ?) ?;
1056
1064
self . vim ( ) ?
1057
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
+ ) ) ?;
1058
1073
}
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) ?
1083
1077
}
1084
- } ;
1078
+ }
1085
1079
1086
1080
info ! ( "End {}" , method) ;
1087
1081
Ok ( result)
0 commit comments