use std::any::{Any, TypeId}; use command_palette_hooks::CommandPaletteFilter; use feature_flags::{ FeatureFlagAppExt as _, PredictEditsFeatureFlag, PredictEditsRateCompletionsFeatureFlag, }; use gpui::actions; use language::language_settings::{AllLanguageSettings, EditPredictionProvider}; use settings::update_settings_file; use ui::App; use workspace::Workspace; use crate::{onboarding_modal::ZedPredictModal, RateCompletionModal, RateCompletions}; actions!(edit_predictions, [ResetOnboarding]); pub fn init(cx: &mut App) { cx.observe_new(move |workspace: &mut Workspace, _, _cx| { workspace.register_action(|workspace, _: &RateCompletions, window, cx| { if cx.has_flag::() { RateCompletionModal::toggle(workspace, window, cx); } }); workspace.register_action( move |workspace, _: &zed_actions::OpenZedPredictOnboarding, window, cx| { if cx.has_flag::() { ZedPredictModal::toggle( workspace, workspace.user_store().clone(), workspace.client().clone(), workspace.app_state().fs.clone(), window, cx, ) } }, ); workspace.register_action(|workspace, _: &ResetOnboarding, _window, cx| { update_settings_file::( workspace.app_state().fs.clone(), cx, move |file, _| { file.features .get_or_insert(Default::default()) .edit_prediction_provider = Some(EditPredictionProvider::None) }, ); crate::onboarding_banner::clear_dismissed(cx); }); }) .detach(); feature_gate_predict_edits_rating_actions(cx); } fn feature_gate_predict_edits_rating_actions(cx: &mut App) { let rate_completion_action_types = [TypeId::of::()]; CommandPaletteFilter::update_global(cx, |filter, _cx| { filter.hide_action_types(&rate_completion_action_types); filter.hide_action_types(&[zed_actions::OpenZedPredictOnboarding.type_id()]); }); cx.observe_flag::(move |is_enabled, cx| { if is_enabled { CommandPaletteFilter::update_global(cx, |filter, _cx| { filter.show_action_types(rate_completion_action_types.iter()); }); } else { CommandPaletteFilter::update_global(cx, |filter, _cx| { filter.hide_action_types(&rate_completion_action_types); }); } }) .detach(); }