diff options
Diffstat (limited to 'helix-view')
-rw-r--r-- | helix-view/src/editor.rs | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs index aabf9cde..042f5bdb 100644 --- a/helix-view/src/editor.rs +++ b/helix-view/src/editor.rs @@ -369,6 +369,8 @@ pub fn get_terminal_provider() -> Option<TerminalConfig> { #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] #[serde(default, rename_all = "kebab-case", deny_unknown_fields)] pub struct LspConfig { + /// Enables LSP + pub enable: bool, /// Display LSP progress messages below statusline pub display_messages: bool, /// Enable automatic pop up of signature help (parameter hints) @@ -380,6 +382,7 @@ pub struct LspConfig { impl Default for LspConfig { fn default() -> Self { Self { + enable: true, display_messages: false, auto_signature_help: true, display_signature_help_docs: true, @@ -1077,18 +1080,25 @@ impl Editor { /// Refreshes the language server for a given document pub fn refresh_language_server(&mut self, doc_id: DocumentId) -> Option<()> { - let doc = self.documents.get_mut(&doc_id)?; - Self::launch_language_server(&mut self.language_servers, doc) + self.launch_language_server(doc_id) } /// Launch a language server for a given document - fn launch_language_server(ls: &mut helix_lsp::Registry, doc: &mut Document) -> Option<()> { + fn launch_language_server(&mut self, doc_id: DocumentId) -> Option<()> { + if !self.config().lsp.enable { + return None; + } + // if doc doesn't have a URL it's a scratch buffer, ignore it - let doc_url = doc.url()?; + let (lang, path) = { + let doc = self.document(doc_id)?; + (doc.language.clone(), doc.path().cloned()) + }; // try to find a language server based on the language name - let language_server = doc.language.as_ref().and_then(|language| { - ls.get(language, doc.path()) + let language_server = lang.as_ref().and_then(|language| { + self.language_servers + .get(language, path.as_ref()) .map_err(|e| { log::error!( "Failed to initialize the LSP for `{}` {{ {} }}", @@ -1099,6 +1109,10 @@ impl Editor { .ok() .flatten() }); + + let doc = self.document_mut(doc_id)?; + let doc_url = doc.url()?; + if let Some(language_server) = language_server { // only spawn a new lang server if the servers aren't the same if Some(language_server.id()) != doc.language_server().map(|server| server.id()) { @@ -1288,11 +1302,14 @@ impl Editor { self.config.clone(), )?; - let _ = Self::launch_language_server(&mut self.language_servers, &mut doc); if let Some(diff_base) = self.diff_providers.get_diff_base(&path) { doc.set_diff_base(diff_base, self.redraw_handle.clone()); } - self.new_document(doc) + + let id = self.new_document(doc); + let _ = self.launch_language_server(id); + + id }; self.switch(id, action); |