on master help sign in
provide option to completely disable lsp
06d095fSkyler Hawthorne
book/src/configuration.md+1
@@ -115,6 +115,7 @@ The following statusline elements can be configured:
115
115
116| Key | Description | Default |
116| Key | Description | Default |
117| --- | ----------- | ------- |
117| --- | ----------- | ------- |
118+| `enable` | Enables LSP integration. Setting to false will completely disable language servers regardless of language settings.| `true` |
118| `display-messages` | Display LSP progress messages below statusline[^1] | `false` |
119| `display-messages` | Display LSP progress messages below statusline[^1] | `false` |
119| `auto-signature-help` | Enable automatic popup of signature help (parameter hints) | `true` |
120| `auto-signature-help` | Enable automatic popup of signature help (parameter hints) | `true` |
120| `display-signature-help-docs` | Display docs under signature help popup | `true` |
121| `display-signature-help-docs` | Display docs under signature help popup | `true` |
helix-view/src/editor.rs+25−8
@@ -369,6 +369,8 @@ pub fn get_terminal_provider() -> Option<TerminalConfig> {
369#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
369#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
370#[serde(default, rename_all = "kebab-case", deny_unknown_fields)]
370#[serde(default, rename_all = "kebab-case", deny_unknown_fields)]
371pub struct LspConfig {
371pub struct LspConfig {
372+ /// Enables LSP
373+ pub enable: bool,
372 /// Display LSP progress messages below statusline
374 /// Display LSP progress messages below statusline
373 pub display_messages: bool,
375 pub display_messages: bool,
374 /// Enable automatic pop up of signature help (parameter hints)
376 /// Enable automatic pop up of signature help (parameter hints)
@@ -380,6 +382,7 @@ pub struct LspConfig {
380impl Default for LspConfig {
382impl Default for LspConfig {
381 fn default() -> Self {
383 fn default() -> Self {
382 Self {
384 Self {
385+ enable: true,
383 display_messages: false,
386 display_messages: false,
384 auto_signature_help: true,
387 auto_signature_help: true,
385 display_signature_help_docs: true,
388 display_signature_help_docs: true,
@@ -1077,18 +1080,25 @@ impl Editor {
1077
1080
1078 /// Refreshes the language server for a given document
1081 /// Refreshes the language server for a given document
1079 pub fn refresh_language_server(&mut self, doc_id: DocumentId) -> Option<()> {
1082 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)
1082 }
1084 }
1083
1085
1084 /// Launch a language server for a given document
1086 /// 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+
1086 // if doc doesn't have a URL it's a scratch buffer, ignore it
1092 // 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+ };
1088
1097
1089 // try to find a language server based on the language name
1098 // try to find a language server based on the language name
1090− let language_server = doc.language.as_ref().and_then(|language| {
1099+ let language_server = lang.as_ref().and_then(|language| {
1100+ self.language_servers
1091− ls.get(language, doc.path())
1101+ .get(language, path.as_ref())
1092 .map_err(|e| {
1102 .map_err(|e| {
1093 log::error!(
1103 log::error!(
1094 "Failed to initialize the LSP for `{}` {{ {} }}",
1104 "Failed to initialize the LSP for `{}` {{ {} }}",
@@ -1099,6 +1109,10 @@ impl Editor {
1099 .ok()
1109 .ok()
1100 .flatten()
1110 .flatten()
1101 });
1111 });
1112+
1113+ let doc = self.document_mut(doc_id)?;
1114+ let doc_url = doc.url()?;
1115+
1102 if let Some(language_server) = language_server {
1116 if let Some(language_server) = language_server {
1103 // only spawn a new lang server if the servers aren't the same
1117 // only spawn a new lang server if the servers aren't the same
1104 if Some(language_server.id()) != doc.language_server().map(|server| server.id()) {
1118 if Some(language_server.id()) != doc.language_server().map(|server| server.id()) {
@@ -1288,11 +1302,14 @@ impl Editor {
1288 self.config.clone(),
1302 self.config.clone(),
1289 )?;
1303 )?;
1290
1304
1291− let _ = Self::launch_language_server(&mut self.language_servers, &mut doc);
1292 if let Some(diff_base) = self.diff_providers.get_diff_base(&path) {
1305 if let Some(diff_base) = self.diff_providers.get_diff_base(&path) {
1293 doc.set_diff_base(diff_base, self.redraw_handle.clone());
1306 doc.set_diff_base(diff_base, self.redraw_handle.clone());
1294 }
1307 }
1308+
1295− self.new_document(doc)
1309+ let id = self.new_document(doc);
1310+ let _ = self.launch_language_server(id);
1311+
1312+ id
1296 };
1313 };
1297
1314
1298 self.switch(id, action);
1315 self.switch(id, action);