@@ -187,7 +187,6 @@ impl LanguageClient {
187187 pub  fn  apply_workspace_edit ( & self ,  edit :  & WorkspaceEdit )  -> Result < ( ) >  { 
188188 let  mut  filename = self . vim ( ) ?. get_filename ( & Value :: Null ) ?; 
189189 let  mut  position = self . vim ( ) ?. get_position ( & Value :: Null ) ?; 
190- 
191190 if  let  Some ( ref  changes)  = edit. document_changes  { 
192191 match  changes { 
193192 DocumentChanges :: Edits ( ref  changes)  => { 
@@ -735,13 +734,7 @@ impl LanguageClient {
735734
736735 fn  try_handle_command_by_client ( & self ,  cmd :  & Command )  -> Result < bool >  { 
737736 let  filetype:  String  = self . vim ( ) ?. eval ( "&filetype" ) ?; 
738-  let  enabled_extensions = self . get_config ( |c| { 
739-  c. enable_extensions 
740-  . as_ref ( ) 
741-  . map ( |c| c. get ( & filetype) . copied ( ) . unwrap_or ( true ) ) 
742-  . unwrap_or ( true ) 
743-  } ) ?; 
744-  if  !enabled_extensions { 
737+  if  !self . extensions_enabled ( & filetype) ? { 
745738 return  Ok ( false ) ; 
746739 } 
747740
@@ -884,7 +877,7 @@ impl LanguageClient {
884877 /* deprecated in lsp types, but can't initialize without it */ 
885878 root_path :  Some ( root. clone ( ) ) , 
886879 root_uri :  Some ( root. to_url ( ) ?) , 
887-  initialization_options, 
880+  initialization_options :  initialization_options . clone ( ) , 
888881 capabilities :  ClientCapabilities  { 
889882 text_document :  Some ( TextDocumentClientCapabilities  { 
890883 color_provider :  Some ( GenericCapability  { 
@@ -982,9 +975,21 @@ impl LanguageClient {
982975
983976 let  initialize_result = InitializeResult :: deserialize ( & result) ?; 
984977 self . update_state ( |state| { 
978+  let  server_name = initialize_result
979+  . server_info 
980+  . as_ref ( ) 
981+  . map ( |info| info. name . clone ( ) ) ; 
982+  match  ( server_name,  initialization_options)  { 
983+  ( Some ( name) ,  Some ( options) )  => { 
984+  state. initialization_options . insert ( name,  options) ; 
985+  } 
986+  _ => { } 
987+  } 
988+ 
985989 state
986990 . capabilities 
987991 . insert ( language_id. clone ( ) ,  initialize_result) ; 
992+ 
988993 Ok ( ( ) ) 
989994 } ) ?; 
990995
@@ -1943,6 +1948,7 @@ impl LanguageClient {
19431948 . notify ( "s:ExecuteAutocmd" ,  "LanguageClientTextDocumentDidOpenPost" ) ?; 
19441949
19451950 self . text_document_code_lens ( params) ?; 
1951+  self . text_document_inlay_hints ( & language_id,  & filename) ?; 
19461952
19471953 Ok ( ( ) ) 
19481954 } 
@@ -1989,7 +1995,7 @@ impl LanguageClient {
19891995 Ok ( version) 
19901996 } ) ?; 
19911997
1992-  self . get_client ( & Some ( language_id) ) ?. notify ( 
1998+  self . get_client ( & Some ( language_id. clone ( ) ) ) ?. notify ( 
19931999 lsp_types:: notification:: DidChangeTextDocument :: METHOD , 
19942000 DidChangeTextDocumentParams  { 
19952001 text_document :  VersionedTextDocumentIdentifier  { 
@@ -2005,6 +2011,7 @@ impl LanguageClient {
20052011 ) ?; 
20062012
20072013 self . text_document_code_lens ( params) ?; 
2014+  self . text_document_inlay_hints ( & language_id,  & filename) ?; 
20082015
20092016 Ok ( ( ) ) 
20102017 } 
@@ -2019,7 +2026,7 @@ impl LanguageClient {
20192026
20202027 let  uri = filename. to_url ( ) ?; 
20212028
2022-  self . get_client ( & Some ( language_id) ) ?. notify ( 
2029+  self . get_client ( & Some ( language_id. clone ( ) ) ) ?. notify ( 
20232030 lsp_types:: notification:: DidSaveTextDocument :: METHOD , 
20242031 DidSaveTextDocumentParams  { 
20252032 text :  None , 
@@ -2931,15 +2938,25 @@ impl LanguageClient {
29312938
29322939 // code lens 
29332940 if  UseVirtualText :: All  == use_virtual_text || UseVirtualText :: CodeLens  == use_virtual_text { 
2934-  virtual_texts. extend ( self . virtual_texts_from_code_lenses ( filename) ?. into_iter ( ) ) ; 
2941+  virtual_texts. extend ( 
2942+  self . virtual_texts_from_code_lenses ( filename,  & viewport) ?
2943+  . into_iter ( ) , 
2944+  ) ; 
2945+  } 
2946+ 
2947+  // inlay hints 
2948+  if  UseVirtualText :: All  == use_virtual_text || UseVirtualText :: CodeLens  == use_virtual_text { 
2949+  let  additional_virtual_texts =
2950+  self . virtual_texts_from_inlay_hints ( filename,  & viewport) ?; 
2951+  virtual_texts. extend ( additional_virtual_texts) ; 
29352952 } 
29362953
29372954 // diagnostics 
29382955 if  UseVirtualText :: All  == use_virtual_text
29392956 || UseVirtualText :: Diagnostics  == use_virtual_text
29402957 { 
29412958 let  vt_diagnostics = self 
2942-  . virtual_texts_from_diagnostics ( filename,  viewport) ?
2959+  . virtual_texts_from_diagnostics ( filename,  & viewport) ?
29432960 . into_iter ( ) ; 
29442961 virtual_texts. extend ( vt_diagnostics) ; 
29452962 } 
@@ -2958,7 +2975,7 @@ impl LanguageClient {
29582975 fn  virtual_texts_from_diagnostics ( 
29592976 & self , 
29602977 filename :  & str , 
2961-  viewport :  viewport:: Viewport , 
2978+  viewport :  & viewport:: Viewport , 
29622979 )  -> Result < Vec < VirtualText > >  { 
29632980 let  mut  virtual_texts = vec ! [ ] ; 
29642981 let  diagnostics = self . get_state ( |state| state. diagnostics . clone ( ) ) ?; 
@@ -2987,11 +3004,52 @@ impl LanguageClient {
29873004 Ok ( virtual_texts) 
29883005 } 
29893006
2990-  fn  virtual_texts_from_code_lenses ( & self ,  filename :  & str )  -> Result < Vec < VirtualText > >  { 
3007+  fn  virtual_texts_from_inlay_hints ( 
3008+  & self , 
3009+  filename :  & str , 
3010+  viewport :  & viewport:: Viewport , 
3011+  )  -> Result < Vec < VirtualText > >  { 
3012+  let  inlay_hints:  Vec < InlayHint >  = self . get_state ( |state| { 
3013+  state
3014+  . inlay_hints 
3015+  . get ( filename) 
3016+  . map ( |s| { 
3017+  s. iter ( ) 
3018+  . filter ( |hint| viewport. overlaps ( hint. range ) ) 
3019+  . cloned ( ) 
3020+  . collect ( ) 
3021+  } ) 
3022+  . unwrap_or_default ( ) 
3023+  } ) ?; 
3024+  let  hl_group = self . get_config ( |c| c. code_lens_display . virtual_texthl . clone ( ) ) ?; 
3025+ 
3026+  let  virtual_texts = inlay_hints
3027+  . into_iter ( ) 
3028+  . map ( |hint| VirtualText  { 
3029+  line :  hint. range . end . line , 
3030+  text :  hint. label , 
3031+  hl_group :  hl_group. clone ( ) , 
3032+  } ) 
3033+  . collect ( ) ; 
3034+  Ok ( virtual_texts) 
3035+  } 
3036+ 
3037+  fn  virtual_texts_from_code_lenses ( 
3038+  & self , 
3039+  filename :  & str , 
3040+  viewport :  & viewport:: Viewport , 
3041+  )  -> Result < Vec < VirtualText > >  { 
29913042 let  mut  virtual_texts = vec ! [ ] ; 
2992-  let  code_lenses =
2993-  self . get_state ( |state| state. code_lens . get ( filename) . cloned ( ) . unwrap_or_default ( ) ) ?; 
2994-  let  code_lens_display = self . get_config ( |c| c. code_lens_display . clone ( ) ) ?; 
3043+  let  code_lenses:  Vec < CodeLens >  =
3044+  self . get_state ( |state| match  state. code_lens . get ( filename)  { 
3045+  Some ( cls)  => cls
3046+  . into_iter ( ) 
3047+  . filter ( |cl| viewport. overlaps ( cl. range ) ) 
3048+  . cloned ( ) 
3049+  . collect ( ) , 
3050+  None  => vec ! [ ] , 
3051+  } ) ?; 
3052+  let  hl_group = self . get_config ( |c| c. code_lens_display . virtual_texthl . clone ( ) ) ?; 
29953053
29963054 for  cl in  code_lenses { 
29973055 if  let  Some ( command)  = cl. command  { 
@@ -3008,7 +3066,7 @@ impl LanguageClient {
30083066 None  => virtual_texts. push ( VirtualText  { 
30093067 line, 
30103068 text, 
3011-  hl_group :  code_lens_display . virtual_texthl . clone ( ) , 
3069+  hl_group :  hl_group . clone ( ) , 
30123070 } ) , 
30133071 } 
30143072 } 
0 commit comments