@@ -369,6 +369,8 @@ pub fn get_terminal_provider() -> Option<TerminalConfig> {
369369#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
370370#[serde(default, rename_all = "kebab-case", deny_unknown_fields)]
371371pub struct LspConfig {
372+ /// Enables LSP
373+ pub enable: bool,
372374 /// Display LSP progress messages below statusline
373375 pub display_messages: bool,
374376 /// Enable automatic pop up of signature help (parameter hints)
@@ -380,6 +382,7 @@ pub struct LspConfig {
380382impl Default for LspConfig {
381383 fn default() -> Self {
382384 Self {
385+ enable: true,
383386 display_messages: false,
384387 auto_signature_help: true,
385388 display_signature_help_docs: true,
@@ -1077,18 +1080,25 @@ impl Editor {
10771080
10781081 /// Refreshes the language server for a given document
10791082 pub fn refresh_language_server(&mut self, doc_id: DocumentId) -> Option<()> {
1080− let doc = self.documents.get_mut(&doc_id)?;
1081− Self::launch_language_server(&mut self.language_servers, doc)
1083+ self.launch_language_server(doc_id)
10821084 }
10831085
10841086 /// Launch a language server for a given document
1085− fn launch_language_server(ls: &mut helix_lsp::Registry, doc: &mut Document) -> Option<()> {
1087+ fn launch_language_server(&mut self, doc_id: DocumentId) -> Option<()> {
1088+ if !self.config().lsp.enable {
1089+ return None;
1090+ }
1091+
10861092 // if doc doesn't have a URL it's a scratch buffer, ignore it
1087− let doc_url = doc.url()?;
1093+ let (lang, path) = {
1094+ let doc = self.document(doc_id)?;
1095+ (doc.language.clone(), doc.path().cloned())
1096+ };
10881097
10891098 // try to find a language server based on the language name
1090− let language_server = doc.language.as_ref().and_then(|language| {
1091− ls.get(language, doc.path())
1099+ let language_server = lang.as_ref().and_then(|language| {
1100+ self.language_servers
1101+ .get(language, path.as_ref())
10921102 .map_err(|e| {
10931103 log::error!(
10941104 "Failed to initialize the LSP for `{}` {{ {} }}",
@@ -1099,6 +1109,10 @@ impl Editor {
10991109 .ok()
11001110 .flatten()
11011111 });
1112+
1113+ let doc = self.document_mut(doc_id)?;
1114+ let doc_url = doc.url()?;
1115+
11021116 if let Some(language_server) = language_server {
11031117 // only spawn a new lang server if the servers aren't the same
11041118 if Some(language_server.id()) != doc.language_server().map(|server| server.id()) {
@@ -1288,11 +1302,14 @@ impl Editor {
12881302 self.config.clone(),
12891303 )?;
12901304
1291− let _ = Self::launch_language_server(&mut self.language_servers, &mut doc);
12921305 if let Some(diff_base) = self.diff_providers.get_diff_base(&path) {
12931306 doc.set_diff_base(diff_base, self.redraw_handle.clone());
12941307 }
1295− self.new_document(doc)
1308+
1309+ let id = self.new_document(doc);
1310+ let _ = self.launch_language_server(id);
1311+
1312+ id
12961313 };
12971314
12981315 self.switch(id, action);