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 settings = AllLanguageSettings::get_global(cx);
let globally_enabled = settings.show_inline_completions(None, cx); let globally_enabled = settings.show_inline_completions(None, cx);
menu = menu.toggleable_entry( menu = menu.toggleable_entry("All Files", globally_enabled, IconPosition::Start, None, {
"All Files", let fs = fs.clone();
globally_enabled, move |_, cx| toggle_inline_completions_globally(fs.clone(), cx)
IconPosition::Start, });
None,
move |_, cx| toggle_inline_completions_globally(fs.clone(), cx),
);
menu = menu.separator().header("Privacy Settings"); menu = menu.separator().header("Privacy Settings");
if let Some(provider) = &self.edit_prediction_provider { 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() { if let Some(editor_focus_handle) = self.editor_focus_handle.clone() {
menu = menu menu = menu
.separator() .separator()

View file

@ -250,7 +250,7 @@ pub struct AllLanguageSettingsContent {
pub features: Option<FeaturesContent>, pub features: Option<FeaturesContent>,
/// The edit prediction settings. /// The edit prediction settings.
#[serde(default)] #[serde(default)]
pub edit_predictions: Option<InlineCompletionSettingsContent>, pub edit_predictions: Option<EditPredictionSettingsContent>,
/// The default language settings. /// The default language settings.
#[serde(flatten)] #[serde(flatten)]
pub defaults: LanguageSettingsContent, pub defaults: LanguageSettingsContent,
@ -428,7 +428,7 @@ pub struct LanguageSettingsContent {
/// The contents of the edit prediction settings. /// The contents of the edit prediction settings.
#[derive(Clone, Debug, Default, Serialize, Deserialize, JsonSchema, PartialEq)] #[derive(Clone, Debug, Default, Serialize, Deserialize, JsonSchema, PartialEq)]
pub struct InlineCompletionSettingsContent { pub struct EditPredictionSettingsContent {
/// A list of globs representing files that edit predictions should be disabled for. /// A list of globs representing files that edit predictions should be disabled for.
/// This list adds to a pre-existing, sensible default set of globs. /// This list adds to a pre-existing, sensible default set of globs.
/// Any additional ones you add are combined with them. /// Any additional ones you add are combined with them.