@@ -236,6 +236,8 @@ pub fn get_terminal_provider() -> Option<TerminalConfig> {
236236#[ derive( Debug , Clone , PartialEq , Eq , Serialize , Deserialize ) ]
237237#[ serde( default , rename_all = "kebab-case" , deny_unknown_fields) ]
238238pub struct LspConfig {
239+ /// Enables LSP
240+ pub enable : bool ,
239241 /// Display LSP progress messages below statusline
240242 pub display_messages : bool ,
241243 /// Enable automatic pop up of signature help (parameter hints)
@@ -247,6 +249,7 @@ pub struct LspConfig {
247249impl Default for LspConfig {
248250 fn default ( ) -> Self {
249251 Self {
252+ enable : true ,
250253 display_messages : false ,
251254 auto_signature_help : true ,
252255 display_signature_help_docs : true ,
@@ -931,18 +934,25 @@ impl Editor {
931934
932935 /// Refreshes the language server for a given document
933936 pub fn refresh_language_server ( & mut self , doc_id : DocumentId ) -> Option < ( ) > {
934- let doc = self . documents . get_mut ( & doc_id) ?;
935- Self :: launch_language_server ( & mut self . language_servers , doc)
937+ self . launch_language_server ( doc_id)
936938 }
937939
938940 /// Launch a language server for a given document
939- fn launch_language_server ( ls : & mut helix_lsp:: Registry , doc : & mut Document ) -> Option < ( ) > {
941+ fn launch_language_server ( & mut self , doc_id : DocumentId ) -> Option < ( ) > {
942+ if !self . config ( ) . lsp . enable {
943+ return None ;
944+ }
945+
940946 // if doc doesn't have a URL it's a scratch buffer, ignore it
941- let doc_url = doc. url ( ) ?;
947+ let ( lang, path) = {
948+ let doc = self . document ( doc_id) ?;
949+ ( doc. language . clone ( ) , doc. path ( ) . cloned ( ) )
950+ } ;
942951
943952 // try to find a language server based on the language name
944- let language_server = doc. language . as_ref ( ) . and_then ( |language| {
945- ls. get ( language, doc. path ( ) )
953+ let language_server = lang. as_ref ( ) . and_then ( |language| {
954+ self . language_servers
955+ . get ( language, path. as_ref ( ) )
946956 . map_err ( |e| {
947957 log:: error!(
948958 "Failed to initialize the LSP for `{}` {{ {} }}" ,
@@ -953,6 +963,10 @@ impl Editor {
953963 . ok ( )
954964 . flatten ( )
955965 } ) ;
966+
967+ let doc = self . document_mut ( doc_id) ?;
968+ let doc_url = doc. url ( ) ?;
969+
956970 if let Some ( language_server) = language_server {
957971 // only spawn a new lang server if the servers aren't the same
958972 if Some ( language_server. id ( ) ) != doc. language_server ( ) . map ( |server| server. id ( ) ) {
@@ -1133,11 +1147,14 @@ impl Editor {
11331147 } else {
11341148 let mut doc = Document :: open ( & path, None , Some ( self . syn_loader . clone ( ) ) ) ?;
11351149
1136- let _ = Self :: launch_language_server ( & mut self . language_servers , & mut doc) ;
11371150 if let Some ( diff_base) = self . diff_providers . get_diff_base ( & path) {
11381151 doc. set_diff_base ( diff_base, self . redraw_handle . clone ( ) ) ;
11391152 }
1140- self . new_document ( doc)
1153+
1154+ let id = self . new_document ( doc) ;
1155+ let _ = self . launch_language_server ( id) ;
1156+
1157+ id
11411158 } ;
11421159
11431160 self . switch ( id, action) ;
0 commit comments