inline_completion_button: Add menu option to toggle "Eager Preview"s for edit predictions (#24685)

This PR adds a menu option to the edit prediction menu to toggle the
"Eager Preview" behavior:

<img width="252" alt="Screenshot 2025-02-11 at 2 44 52 PM"
src="https://github.com/user-attachments/assets/232e879b-3c11-4edd-a549-f284e2bca391"
/>

Release Notes:

- N/A
This commit is contained in:
Marshall Bowers 2025-02-11 15:02:52 -05:00 committed by GitHub
parent 12163c9b45
commit aab3e0495d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 42 additions and 9 deletions

View file

@ -438,13 +438,10 @@ impl InlineCompletionButton {
let settings = AllLanguageSettings::get_global(cx);
let globally_enabled = settings.show_inline_completions(None, cx);
menu = menu.toggleable_entry(
"All Files",
globally_enabled,
IconPosition::Start,
None,
move |_, cx| toggle_inline_completions_globally(fs.clone(), cx),
);
menu = menu.toggleable_entry("All Files", globally_enabled, IconPosition::Start, None, {
let fs = fs.clone();
move |_, cx| toggle_inline_completions_globally(fs.clone(), cx)
});
menu = menu.separator().header("Privacy Settings");
if let Some(provider) = &self.edit_prediction_provider {
@ -554,6 +551,42 @@ impl InlineCompletionButton {
);
}
let is_eager_preview_enabled = match settings.inline_completions_preview_mode() {
language::InlineCompletionPreviewMode::Auto => true,
language::InlineCompletionPreviewMode::WhenHoldingModifier => false,
};
menu = menu.separator().toggleable_entry(
"Eager Preview",
is_eager_preview_enabled,
IconPosition::Start,
None,
{
let fs = fs.clone();
move |_window, cx| {
update_settings_file::<AllLanguageSettings>(
fs.clone(),
cx,
move |settings, _cx| {
let inline_preview = match is_eager_preview_enabled {
true => language::InlineCompletionPreviewMode::WhenHoldingModifier,
false => language::InlineCompletionPreviewMode::Auto,
};
if let Some(edit_predictions) = settings.edit_predictions.as_mut() {
edit_predictions.inline_preview = inline_preview;
} else {
settings.edit_predictions =
Some(language_settings::EditPredictionSettingsContent {
inline_preview,
..Default::default()
});
}
},
);
}
},
);
if let Some(editor_focus_handle) = self.editor_focus_handle.clone() {
menu = menu
.separator()