aboutsummaryrefslogtreecommitdiff
path: root/helix-term/src/ui/editor.rs
diff options
context:
space:
mode:
authorGokul Soumya2022-07-19 02:28:24 +0000
committerGitHub2022-07-19 02:28:24 +0000
commit791bf7e50a19bcf7612788deb7514847089cb976 (patch)
tree0bac607be8b940aed8000b77a2f4dfa2e14882b8 /helix-term/src/ui/editor.rs
parent02f009921007301284cbb0db4bc36bc629088fbb (diff)
Add lsp signature help (#1755)
* Add lsp signature help * Do not move signature help popup on multiple triggers * Highlight current parameter in signature help * Auto close signature help * Position signature help above to not block completion * Update signature help on backspace/insert mode delete * Add lsp.auto-signature-help config option * Add serde default annotation for LspConfig * Show LSP inactive message only if signature help is invoked manually * Do not assume valid signature help response from LSP Malformed LSP responses are common, and these should not crash the editor. * Check signature help capability before sending request * Reuse Open enum for PositionBias in popup * Close signature popup and exit insert mode on escape * Add config to control signature help docs display * Use new Margin api in signature help * Invoke signature help on changing to insert mode
Diffstat (limited to 'helix-term/src/ui/editor.rs')
-rw-r--r--helix-term/src/ui/editor.rs14
1 files changed, 13 insertions, 1 deletions
diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs
index 911ee0f0..849f0b0b 100644
--- a/helix-term/src/ui/editor.rs
+++ b/helix-term/src/ui/editor.rs
@@ -1,7 +1,7 @@
use crate::{
commands,
compositor::{Component, Context, EventResult},
- key,
+ job, key,
keymap::{KeymapResult, Keymaps},
ui::{Completion, ProgressSpinners},
};
@@ -28,6 +28,7 @@ use std::borrow::Cow;
use crossterm::event::{Event, MouseButton, MouseEvent, MouseEventKind};
use tui::buffer::Buffer as Surface;
+use super::lsp::SignatureHelp;
use super::statusline;
pub struct EditorView {
@@ -1205,10 +1206,21 @@ impl Component for EditorView {
_ => unimplemented!(),
};
self.last_insert.1.clear();
+ commands::signature_help_impl(
+ &mut cx,
+ commands::SignatureHelpInvoked::Automatic,
+ );
}
(Mode::Insert, Mode::Normal) => {
// if exiting insert mode, remove completion
self.completion = None;
+ // TODO: Use an on_mode_change hook to remove signature help
+ context.jobs.callback(async {
+ let call: job::Callback = Box::new(|_editor, compositor| {
+ compositor.remove(SignatureHelp::ID);
+ });
+ Ok(call)
+ });
}
_ => (),
}