@@ -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