edit predictions: Disable "This Buffer" option when disabled for language (#25566)

![image](https://github.com/user-attachments/assets/7b888c7d-a1e9-4d0b-ba6d-9a41916acf79)


Release Notes:

- edit prediction: Disable "This Buffer" option when predictions are
disabled for its language
This commit is contained in:
Agus Zubiaga 2025-02-25 12:41:13 -03:00 committed by GitHub
parent 21fc3c07b6
commit 7075bd700f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 39 additions and 26 deletions

View file

@ -410,26 +410,39 @@ impl InlineCompletionButton {
menu = menu.header("Show Edit Predictions For"); menu = menu.header("Show Edit Predictions For");
let language_state = self.language.as_ref().map(|language| {
(
language.clone(),
language_settings::language_settings(Some(language.name()), None, cx)
.show_edit_predictions,
)
});
if let Some(editor_focus_handle) = self.editor_focus_handle.clone() { if let Some(editor_focus_handle) = self.editor_focus_handle.clone() {
menu = menu.toggleable_entry( let entry = ContextMenuEntry::new("This Buffer")
"This Buffer", .toggleable(IconPosition::Start, self.editor_show_predictions)
self.editor_show_predictions, .action(Box::new(ToggleEditPrediction))
IconPosition::Start, .handler(move |window, cx| {
Some(Box::new(ToggleEditPrediction)), editor_focus_handle.dispatch_action(&ToggleEditPrediction, window, cx);
{ });
let editor_focus_handle = editor_focus_handle.clone();
move |window, cx| { match language_state.clone() {
editor_focus_handle.dispatch_action(&ToggleEditPrediction, window, cx); Some((language, false)) => {
} menu = menu.item(
}, entry
); .disabled(true)
.documentation_aside(move |_cx| {
Label::new(format!("Edit predictions cannot be toggled for this buffer because they are disabled for {}", language.name()))
.into_any_element()
})
);
}
Some(_) | None => menu = menu.item(entry),
}
} }
if let Some(language) = self.language.clone() { if let Some((language, language_enabled)) = language_state {
let fs = fs.clone(); let fs = fs.clone();
let language_enabled =
language_settings::language_settings(Some(language.name()), None, cx)
.show_edit_predictions;
menu = menu.toggleable_entry( menu = menu.toggleable_entry(
language.name(), language.name(),

View file

@ -95,8 +95,8 @@ impl ContextMenuEntry {
self self
} }
pub fn action(mut self, action: Option<Box<dyn Action>>) -> Self { pub fn action(mut self, action: Box<dyn Action>) -> Self {
self.action = action; self.action = Some(action);
self self
} }

View file

@ -2425,10 +2425,10 @@ impl Pane {
) )
.item(ContextMenuItem::Entry( .item(ContextMenuItem::Entry(
ContextMenuEntry::new("Close Others") ContextMenuEntry::new("Close Others")
.action(Some(Box::new(CloseInactiveItems { .action(Box::new(CloseInactiveItems {
save_intent: None, save_intent: None,
close_pinned: false, close_pinned: false,
}))) }))
.disabled(total_items == 1) .disabled(total_items == 1)
.handler(window.handler_for(&pane, move |pane, window, cx| { .handler(window.handler_for(&pane, move |pane, window, cx| {
pane.close_items(window, cx, SaveIntent::Close, |id| { pane.close_items(window, cx, SaveIntent::Close, |id| {
@ -2440,9 +2440,9 @@ impl Pane {
.separator() .separator()
.item(ContextMenuItem::Entry( .item(ContextMenuItem::Entry(
ContextMenuEntry::new("Close Left") ContextMenuEntry::new("Close Left")
.action(Some(Box::new(CloseItemsToTheLeft { .action(Box::new(CloseItemsToTheLeft {
close_pinned: false, close_pinned: false,
}))) }))
.disabled(!has_items_to_left) .disabled(!has_items_to_left)
.handler(window.handler_for(&pane, move |pane, window, cx| { .handler(window.handler_for(&pane, move |pane, window, cx| {
pane.close_items_to_the_left_by_id( pane.close_items_to_the_left_by_id(
@ -2459,9 +2459,9 @@ impl Pane {
)) ))
.item(ContextMenuItem::Entry( .item(ContextMenuItem::Entry(
ContextMenuEntry::new("Close Right") ContextMenuEntry::new("Close Right")
.action(Some(Box::new(CloseItemsToTheRight { .action(Box::new(CloseItemsToTheRight {
close_pinned: false, close_pinned: false,
}))) }))
.disabled(!has_items_to_right) .disabled(!has_items_to_right)
.handler(window.handler_for(&pane, move |pane, window, cx| { .handler(window.handler_for(&pane, move |pane, window, cx| {
pane.close_items_to_the_right_by_id( pane.close_items_to_the_right_by_id(

View file

@ -307,9 +307,9 @@ impl Render for QuickActionBar {
let mut inline_completion_entry = ContextMenuEntry::new("Edit Predictions") let mut inline_completion_entry = ContextMenuEntry::new("Edit Predictions")
.toggleable(IconPosition::Start, edit_predictions_enabled_at_cursor && show_edit_predictions) .toggleable(IconPosition::Start, edit_predictions_enabled_at_cursor && show_edit_predictions)
.disabled(!edit_predictions_enabled_at_cursor) .disabled(!edit_predictions_enabled_at_cursor)
.action(Some( .action(
editor::actions::ToggleEditPrediction.boxed_clone(), editor::actions::ToggleEditPrediction.boxed_clone(),
)).handler({ ).handler({
let editor = editor.clone(); let editor = editor.clone();
move |window, cx| { move |window, cx| {
editor editor