Skip to content

Commit 678e27d

Browse files
committed
provide option to completely disable lsp
1 parent 3af7548 commit 678e27d

2 files changed

Lines changed: 26 additions & 8 deletions

File tree

book/src/configuration.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ The following statusline elements can be configured:
114114

115115
| Key | Description | Default |
116116
| --- | ----------- | ------- |
117+
| `enable` | Enables LSP integration. Setting to false will completely disable language servers regardless of language settings.| `true` |
117118
| `display-messages` | Display LSP progress messages below statusline[^1] | `false` |
118119
| `auto-signature-help` | Enable automatic popup of signature help (parameter hints) | `true` |
119120
| `display-signature-help-docs` | Display docs under signature help popup | `true` |

helix-view/src/editor.rs

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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)]
238238
pub 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 {
247249
impl 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

Comments
 (0)