Improve code action picker by displaying it inline
This commit is contained in:
parent
4c996f43df
commit
f7f55143a1
2 changed files with 19 additions and 3 deletions
|
@ -3482,12 +3482,17 @@ pub fn code_action(cx: &mut Context) {
|
|||
|
||||
cx.callback(
|
||||
future,
|
||||
move |_editor: &mut Editor,
|
||||
move |editor: &mut Editor,
|
||||
compositor: &mut Compositor,
|
||||
response: Option<lsp::CodeActionResponse>| {
|
||||
if let Some(actions) = response {
|
||||
if actions.is_empty() {
|
||||
editor.set_status("No code actions available".to_owned());
|
||||
return;
|
||||
}
|
||||
|
||||
let picker = Picker::new(
|
||||
true,
|
||||
false,
|
||||
actions,
|
||||
|action| match action {
|
||||
lsp::CodeActionOrCommand::CodeAction(action) => {
|
||||
|
@ -3515,7 +3520,8 @@ pub fn code_action(cx: &mut Context) {
|
|||
}
|
||||
},
|
||||
);
|
||||
compositor.push(Box::new(picker))
|
||||
let popup = Popup::new("code-action", picker);
|
||||
compositor.push(Box::new(popup))
|
||||
}
|
||||
},
|
||||
)
|
||||
|
|
|
@ -393,6 +393,16 @@ fn inner_rect(area: Rect) -> Rect {
|
|||
}
|
||||
|
||||
impl<T: 'static> Component for Picker<T> {
|
||||
fn required_size(&mut self, viewport: (u16, u16)) -> Option<(u16, u16)> {
|
||||
let max_width = 50.min(viewport.0);
|
||||
let max_height = 10.min(viewport.1.saturating_sub(2)); // add some spacing in the viewport
|
||||
|
||||
let height = (self.options.len() as u16 + 4) // add some spacing for input + padding
|
||||
.min(max_height);
|
||||
let width = max_width;
|
||||
Some((width, height))
|
||||
}
|
||||
|
||||
fn handle_event(&mut self, event: Event, cx: &mut Context) -> EventResult {
|
||||
let key_event = match event {
|
||||
Event::Key(event) => event,
|
||||
|
|
Loading…
Reference in a new issue