Make inline and regular diagnostics more related (#34237)

Release Notes:

- N/A
This commit is contained in:
Kirill Bulatov 2025-07-11 00:11:49 +03:00 committed by GitHub
parent 7588280915
commit a1188848ef
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 26 additions and 9 deletions

View file

@ -110,6 +110,7 @@ impl LanguageServerHealthStatus {
impl LanguageServerState { impl LanguageServerState {
fn fill_menu(&self, mut menu: ContextMenu, cx: &mut Context<Self>) -> ContextMenu { fn fill_menu(&self, mut menu: ContextMenu, cx: &mut Context<Self>) -> ContextMenu {
menu = menu.align_popover_bottom();
let lsp_logs = cx let lsp_logs = cx
.try_global::<GlobalLogStore>() .try_global::<GlobalLogStore>()
.and_then(|lsp_logs| lsp_logs.0.upgrade()); .and_then(|lsp_logs| lsp_logs.0.upgrade());

View file

@ -159,6 +159,7 @@ pub struct ContextMenu {
keep_open_on_confirm: bool, keep_open_on_confirm: bool,
documentation_aside: Option<(usize, DocumentationAside)>, documentation_aside: Option<(usize, DocumentationAside)>,
fixed_width: Option<DefiniteLength>, fixed_width: Option<DefiniteLength>,
align_popover_top: bool,
} }
#[derive(Copy, Clone, PartialEq, Eq)] #[derive(Copy, Clone, PartialEq, Eq)]
@ -215,6 +216,7 @@ impl ContextMenu {
key_context: "menu".into(), key_context: "menu".into(),
_on_blur_subscription, _on_blur_subscription,
keep_open_on_confirm: false, keep_open_on_confirm: false,
align_popover_top: true,
documentation_aside: None, documentation_aside: None,
fixed_width: None, fixed_width: None,
end_slot_action: None, end_slot_action: None,
@ -257,6 +259,7 @@ impl ContextMenu {
key_context: "menu".into(), key_context: "menu".into(),
_on_blur_subscription, _on_blur_subscription,
keep_open_on_confirm: true, keep_open_on_confirm: true,
align_popover_top: true,
documentation_aside: None, documentation_aside: None,
fixed_width: None, fixed_width: None,
end_slot_action: None, end_slot_action: None,
@ -297,6 +300,7 @@ impl ContextMenu {
|this: &mut ContextMenu, window, cx| this.cancel(&menu::Cancel, window, cx), |this: &mut ContextMenu, window, cx| this.cancel(&menu::Cancel, window, cx),
), ),
keep_open_on_confirm: false, keep_open_on_confirm: false,
align_popover_top: true,
documentation_aside: None, documentation_aside: None,
fixed_width: None, fixed_width: None,
end_slot_action: None, end_slot_action: None,
@ -778,6 +782,11 @@ impl ContextMenu {
self self
} }
pub fn align_popover_bottom(mut self) -> Self {
self.align_popover_top = false;
self
}
fn render_menu_item( fn render_menu_item(
&self, &self,
ix: usize, ix: usize,
@ -1100,7 +1109,13 @@ impl Render for ContextMenu {
.when(is_wide_window, |this| this.flex_row()) .when(is_wide_window, |this| this.flex_row())
.when(!is_wide_window, |this| this.flex_col()) .when(!is_wide_window, |this| this.flex_col())
.w_full() .w_full()
.items_start() .map(|div| {
if self.align_popover_top {
div.items_start()
} else {
div.items_end()
}
})
.gap_1() .gap_1()
.child(div().children(aside.clone().and_then(|(_, aside)| { .child(div().children(aside.clone().and_then(|(_, aside)| {
(aside.side == DocumentationSide::Left).then(|| render_aside(aside, cx)) (aside.side == DocumentationSide::Left).then(|| render_aside(aside, cx))

View file

@ -409,12 +409,10 @@ impl Render for QuickActionBar {
); );
if supports_inline_diagnostics { if supports_inline_diagnostics {
menu = menu.toggleable_entry( let mut inline_diagnostics_item = ContextMenuEntry::new("Inline Diagnostics")
"Inline Diagnostics", .toggleable(IconPosition::Start, diagnostics_enabled && inline_diagnostics_enabled)
inline_diagnostics_enabled, .action(ToggleInlineDiagnostics.boxed_clone())
IconPosition::Start, .handler({
Some(ToggleInlineDiagnostics.boxed_clone()),
{
let editor = editor.clone(); let editor = editor.clone();
move |window, cx| { move |window, cx| {
editor editor
@ -427,8 +425,11 @@ impl Render for QuickActionBar {
}) })
.ok(); .ok();
} }
}, });
); if !diagnostics_enabled {
inline_diagnostics_item = inline_diagnostics_item.disabled(true).documentation_aside(DocumentationSide::Left, |_| Label::new("Inline diagnostics are not available until regular diagnostics are enabled.").into_any_element());
}
menu = menu.item(inline_diagnostics_item)
} }
menu = menu.separator(); menu = menu.separator();