diff --git a/book/src/editor.md b/book/src/editor.md index fa5aef47e..ea61323c4 100644 --- a/book/src/editor.md +++ b/book/src/editor.md @@ -141,6 +141,7 @@ ### `[editor.lsp]` Section | Key | Description | Default | | --- | ----------- | ------- | | `enable` | Enables LSP integration. Setting to false will completely disable language servers regardless of language settings.| `true` | +| `autostart` | Enables LSP autostart on file opening. Setting to false will require running the `:lsp-restart` command to manually start the language server.| `true` | | `display-messages` | Display LSP progress messages below statusline[^1] | `false` | | `auto-signature-help` | Enable automatic popup of signature help (parameter hints) | `true` | | `display-inlay-hints` | Display inlay hints[^2] | `false` | diff --git a/helix-lsp/src/lib.rs b/helix-lsp/src/lib.rs index 47f38bcf2..258aa9af5 100644 --- a/helix-lsp/src/lib.rs +++ b/helix-lsp/src/lib.rs @@ -790,6 +790,7 @@ pub fn get<'a>( doc_path: Option<&'a std::path::PathBuf>, root_dirs: &'a [PathBuf], enable_snippets: bool, + autostart: bool, ) -> impl Iterator>)> + 'a { language_config.language_servers.iter().filter_map( move |LanguageServerFeatures { name, .. }| { @@ -807,6 +808,12 @@ pub fn get<'a>( }) { return Some((name.to_owned(), Ok(client.clone()))); } + } else { + // If autostart LSP turned off, do not automatically start a client for server + // Try emulate the empty clients list behavior for disable LSP + if !autostart { + return None; + } } match self.start_client( name.clone(), diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs index 9e1bee8e1..18afe0250 100644 --- a/helix-view/src/editor.rs +++ b/helix-view/src/editor.rs @@ -426,6 +426,8 @@ pub fn get_terminal_provider() -> Option { pub struct LspConfig { /// Enables LSP pub enable: bool, + /// Autostart LSP on open file + pub autostart: bool, /// Display LSP messagess from $/progress below statusline pub display_progress_messages: bool, /// Display LSP messages from window/showMessage below statusline @@ -446,6 +448,7 @@ impl Default for LspConfig { fn default() -> Self { Self { enable: true, + autostart: true, display_progress_messages: false, display_messages: true, auto_signature_help: true, @@ -1469,7 +1472,7 @@ fn launch_language_servers(&mut self, doc_id: DocumentId) { // store only successfully started language servers let language_servers = lang.as_ref().map_or_else(HashMap::default, |language| { self.language_servers - .get(language, path.as_ref(), root_dirs, config.lsp.snippets) + .get(language, path.as_ref(), root_dirs, config.lsp.snippets, config.lsp.autostart) .filter_map(|(lang, client)| match client { Ok(client) => Some((lang, client)), Err(err) => {