Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-term/src/ui/lsp/signature_help.rs')
-rw-r--r--helix-term/src/ui/lsp/signature_help.rs21
1 files changed, 12 insertions, 9 deletions
diff --git a/helix-term/src/ui/lsp/signature_help.rs b/helix-term/src/ui/lsp/signature_help.rs
index 87a3eb95..8df525af 100644
--- a/helix-term/src/ui/lsp/signature_help.rs
+++ b/helix-term/src/ui/lsp/signature_help.rs
@@ -94,7 +94,8 @@ impl Component for SignatureHelp {
}
fn render(&mut self, area: Rect, surface: &mut Buffer, cx: &mut Context) {
- let margin = Margin::horizontal(1);
+ let margin = Margin::all(1);
+ let area = area.inner(margin);
let signature = self
.signatures
@@ -127,13 +128,15 @@ impl Component for SignatureHelp {
let signature_index = self.signature_index();
let text = Text::from(signature_index);
let paragraph = Paragraph::new(&text).alignment(Alignment::Right);
- paragraph.render(area.clip_top(1).with_height(1).clip_right(1), surface);
+ paragraph.render(area.with_height(1).clip_right(1), surface);
}
- let (_, sig_text_height) = crate::ui::text::required_size(&sig_text, area.width);
- let sig_text_area = area.clip_top(1).with_height(sig_text_height);
- let sig_text_area = sig_text_area.inner(margin).intersection(surface.area);
- let sig_text_para = Paragraph::new(&sig_text).wrap(Wrap { trim: false });
+ let sig_text_para = Paragraph::new(&sig_text)
+ .wrap(Wrap { trim: false })
+ .scroll((cx.scroll.unwrap_or_default() as u16, 0));
+ let (_, sig_text_height) = sig_text_para.required_size(area.width);
+ let sig_text_area = area.with_height(sig_text_height.min(area.height));
+ let sig_text_area = sig_text_area.intersection(surface.area);
sig_text_para.render(sig_text_area, surface);
if signature.signature_doc.is_none() {
@@ -159,7 +162,7 @@ impl Component for SignatureHelp {
let sig_doc_para = Paragraph::new(&sig_doc)
.wrap(Wrap { trim: false })
.scroll((cx.scroll.unwrap_or_default() as u16, 0));
- sig_doc_para.render(sig_doc_area.inner(margin), surface);
+ sig_doc_para.render(sig_doc_area, surface);
}
fn required_size(&mut self, viewport: (u16, u16)) -> Option<(u16, u16)> {
@@ -180,8 +183,8 @@ impl Component for SignatureHelp {
&self.config_loader.load(),
None,
);
- let (sig_width, sig_height) =
- crate::ui::text::required_size(&signature_text, max_text_width);
+ let sig_text_para = Paragraph::new(&signature_text).wrap(Wrap { trim: false });
+ let (sig_width, sig_height) = sig_text_para.required_size(max_text_width);
let (width, height) = match signature.signature_doc {
Some(ref doc) => {