1use crate::signature_help::popover::SignatureHelpPopover;
2use crate::signature_help::SignatureHelpHiddenBy;
3use gpui::Task;
4
5#[derive(Default, Debug)]
6pub struct SignatureHelpState {
7 task: Option<Task<()>>,
8 popover: Option<SignatureHelpPopover>,
9 hidden_by: Option<SignatureHelpHiddenBy>,
10 backspace_pressed: bool,
11}
12
13impl SignatureHelpState {
14 pub fn set_task(&mut self, task: Task<()>) {
15 self.task = Some(task);
16 self.hidden_by = None;
17 }
18
19 pub fn kill_task(&mut self) {
20 self.task = None;
21 }
22
23 pub fn popover(&self) -> Option<&SignatureHelpPopover> {
24 self.popover.as_ref()
25 }
26
27 pub fn popover_mut(&mut self) -> Option<&mut SignatureHelpPopover> {
28 self.popover.as_mut()
29 }
30
31 pub fn backspace_pressed(&self) -> bool {
32 self.backspace_pressed
33 }
34
35 pub fn set_backspace_pressed(&mut self, backspace_pressed: bool) {
36 self.backspace_pressed = backspace_pressed;
37 }
38
39 pub fn set_popover(&mut self, popover: SignatureHelpPopover) {
40 self.popover = Some(popover);
41 self.hidden_by = None;
42 }
43
44 pub fn hide(&mut self, hidden_by: SignatureHelpHiddenBy) {
45 if self.hidden_by.is_none() {
46 self.popover = None;
47 self.hidden_by = Some(hidden_by);
48 }
49 }
50
51 pub fn hidden_by_selection(&self) -> bool {
52 self.hidden_by == Some(SignatureHelpHiddenBy::Selection)
53 }
54
55 pub fn is_shown(&self) -> bool {
56 self.popover.is_some()
57 }
58}
59
60#[cfg(test)]
61impl SignatureHelpState {
62 pub fn task(&self) -> Option<&Task<()>> {
63 self.task.as_ref()
64 }
65}