@@ -119,7 +119,7 @@ pub struct Document {
119119 pub ( crate ) modified_since_accessed : bool ,
120120
121121 diagnostics : Vec < Diagnostic > ,
122- language_servers : Option < Vec < Arc < helix_lsp:: Client > > > ,
122+ language_servers : Vec < Arc < helix_lsp:: Client > > ,
123123}
124124
125125use std:: { fmt, mem} ;
@@ -359,7 +359,7 @@ impl Document {
359359 savepoint : None ,
360360 last_saved_revision : 0 ,
361361 modified_since_accessed : false ,
362- language_servers : None ,
362+ language_servers : Vec :: new ( ) ,
363363 }
364364 }
365365
@@ -407,22 +407,22 @@ impl Document {
407407 /// If supported, returns the changes that should be applied to this document in order
408408 /// to format it nicely.
409409 pub fn format ( & self ) -> Option < impl Future < Output = LspFormatting > + ' static > {
410- let language_servers = self . language_servers ( ) ?;
411410 let text = self . text . clone ( ) ;
412411 // finds first language server that supports formatting and then formats
413- let ( offset_encoding, request) = language_servers. iter ( ) . find_map ( |language_server| {
414- let offset_encoding = language_server. offset_encoding ( ) ;
415- let request = language_server. text_document_formatting (
416- self . identifier ( ) ,
417- lsp:: FormattingOptions {
418- tab_size : self . tab_width ( ) as u32 ,
419- insert_spaces : matches ! ( self . indent_style, IndentStyle :: Spaces ( _) ) ,
420- ..Default :: default ( )
421- } ,
422- None ,
423- ) ?;
424- Some ( ( offset_encoding, request) )
425- } ) ?;
412+ let ( offset_encoding, request) =
413+ self . language_servers ( ) . iter ( ) . find_map ( |language_server| {
414+ let offset_encoding = language_server. offset_encoding ( ) ;
415+ let request = language_server. text_document_formatting (
416+ self . identifier ( ) ,
417+ lsp:: FormattingOptions {
418+ tab_size : self . tab_width ( ) as u32 ,
419+ insert_spaces : matches ! ( self . indent_style, IndentStyle :: Spaces ( _) ) ,
420+ ..Default :: default ( )
421+ } ,
422+ None ,
423+ ) ?;
424+ Some ( ( offset_encoding, request) )
425+ } ) ?;
426426
427427 let fut = async move {
428428 let edits = request. await . unwrap_or_else ( |e| {
@@ -501,16 +501,14 @@ impl Document {
501501 let mut file = File :: create ( path) . await ?;
502502 to_writer ( & mut file, encoding, & text) . await ?;
503503
504- if let Some ( language_servers) = language_servers {
505- for language_server in language_servers {
506- if !language_server. is_initialized ( ) {
507- return Ok ( ( ) ) ;
508- }
509- if let Some ( notification) =
510- language_server. text_document_did_save ( identifier. clone ( ) , & text)
511- {
512- notification. await ?;
513- }
504+ for language_server in language_servers {
505+ if !language_server. is_initialized ( ) {
506+ return Ok ( ( ) ) ;
507+ }
508+ if let Some ( notification) =
509+ language_server. text_document_did_save ( identifier. clone ( ) , & text)
510+ {
511+ notification. await ?;
514512 }
515513 }
516514
@@ -631,7 +629,7 @@ impl Document {
631629 }
632630
633631 /// Set the LSP.
634- pub fn set_language_servers ( & mut self , language_servers : Option < Vec < Arc < helix_lsp:: Client > > > ) {
632+ pub fn set_language_servers ( & mut self , language_servers : Vec < Arc < helix_lsp:: Client > > ) {
635633 self . language_servers = language_servers;
636634 }
637635
@@ -698,18 +696,16 @@ impl Document {
698696 }
699697
700698 // emit lsp notification
701- if let Some ( language_servers) = self . language_servers ( ) {
702- for language_server in language_servers {
703- let notify = language_server. text_document_did_change (
704- self . versioned_identifier ( ) ,
705- & old_doc,
706- self . text ( ) ,
707- transaction. changes ( ) ,
708- ) ;
709-
710- if let Some ( notify) = notify {
711- tokio:: spawn ( notify) ;
712- }
699+ for language_server in self . language_servers ( ) {
700+ let notify = language_server. text_document_did_change (
701+ self . versioned_identifier ( ) ,
702+ & old_doc,
703+ self . text ( ) ,
704+ transaction. changes ( ) ,
705+ ) ;
706+
707+ if let Some ( notify) = notify {
708+ tokio:: spawn ( notify) ;
713709 }
714710 }
715711 }
@@ -863,9 +859,9 @@ impl Document {
863859 pub fn language_id ( & self ) -> Option < & str > {
864860 // TODO is it safe to get the language_id from the first language server that defines it?
865861 self . language_config ( )
866- . and_then ( |config| config . language_servers . as_ref ( ) )
867- . and_then ( |lsp_configs| {
868- lsp_configs
862+ . and_then ( |config| {
863+ config
864+ . language_servers
869865 . iter ( )
870866 . find_map ( |lsp_config| lsp_config. language_id . as_deref ( ) )
871867 } )
@@ -883,12 +879,11 @@ impl Document {
883879 }
884880
885881 /// Language server if it has been initialized.
886- pub fn language_servers ( & self ) -> Option < Vec < & helix_lsp:: Client > > {
887- self . language_servers . as_ref ( ) . map ( |ls| {
888- ls. iter ( )
889- . filter_map ( |l| if l. is_initialized ( ) { Some ( & * * l) } else { None } )
890- . collect ( )
891- } )
882+ pub fn language_servers ( & self ) -> Vec < & helix_lsp:: Client > {
883+ self . language_servers
884+ . iter ( )
885+ . filter_map ( |l| if l. is_initialized ( ) { Some ( & * * l) } else { None } )
886+ . collect ( )
892887 }
893888
894889 #[ inline]
0 commit comments