Require that PartialEq is implemented for Action

This commit is contained in:
Antonio Scandurra 2022-06-06 09:18:44 +02:00
parent eae7c2267c
commit 3a69943df3
19 changed files with 58 additions and 49 deletions

View File

@ -35,7 +35,7 @@ impl PartialEq for User {
impl Eq for User {}
#[derive(Debug)]
#[derive(Debug, PartialEq)]
pub struct Contact {
pub user: Arc<User>,
pub online: bool,

View File

@ -21,10 +21,10 @@ pub struct ContactNotification {
kind: client::ContactEventKind,
}
#[derive(Clone)]
#[derive(Clone, PartialEq)]
struct Dismiss(u64);
#[derive(Clone)]
#[derive(Clone, PartialEq)]
pub struct RespondToContactRequest {
pub user_id: u64,
pub accept: bool,

View File

@ -48,7 +48,7 @@ enum ContactEntry {
OfflineProject(WeakModelHandle<Project>),
}
#[derive(Clone)]
#[derive(Clone, PartialEq)]
struct ToggleExpanded(Section);
pub struct ContactsPanel {
@ -63,13 +63,13 @@ pub struct ContactsPanel {
_maintain_contacts: Subscription,
}
#[derive(Clone, Deserialize)]
#[derive(Clone, Deserialize, PartialEq)]
pub struct RequestContact(pub u64);
#[derive(Clone, Deserialize)]
#[derive(Clone, Deserialize, PartialEq)]
pub struct RemoveContact(pub u64);
#[derive(Clone, Deserialize)]
#[derive(Clone, Deserialize, PartialEq)]
pub struct RespondToContactRequest {
pub user_id: u64,
pub accept: bool,

View File

@ -60,7 +60,7 @@ struct PathState {
diagnostic_groups: Vec<DiagnosticGroupState>,
}
#[derive(Clone, Debug)]
#[derive(Clone, Debug, PartialEq)]
struct Jump {
path: ProjectPath,
position: Point,

View File

@ -65,49 +65,49 @@ const MAX_LINE_LEN: usize = 1024;
const MIN_NAVIGATION_HISTORY_ROW_DELTA: i64 = 10;
const MAX_SELECTION_HISTORY_LEN: usize = 1024;
#[derive(Clone, Deserialize)]
#[derive(Clone, Deserialize, PartialEq)]
pub struct SelectNext {
#[serde(default)]
pub replace_newest: bool,
}
#[derive(Clone)]
#[derive(Clone, PartialEq)]
pub struct GoToDiagnostic(pub Direction);
#[derive(Clone)]
#[derive(Clone, PartialEq)]
pub struct Scroll(pub Vector2F);
#[derive(Clone)]
#[derive(Clone, PartialEq)]
pub struct Select(pub SelectPhase);
#[derive(Clone, Deserialize)]
#[derive(Clone, Deserialize, PartialEq)]
pub struct Input(pub String);
#[derive(Clone, Deserialize)]
#[derive(Clone, Deserialize, PartialEq)]
pub struct SelectToBeginningOfLine {
#[serde(default)]
stop_at_soft_wraps: bool,
}
#[derive(Clone, Deserialize)]
#[derive(Clone, Deserialize, PartialEq)]
pub struct SelectToEndOfLine {
#[serde(default)]
stop_at_soft_wraps: bool,
}
#[derive(Clone, Deserialize)]
#[derive(Clone, Deserialize, PartialEq)]
pub struct ToggleCodeActions {
#[serde(default)]
pub deployed_from_indicator: bool,
}
#[derive(Clone, Default, Deserialize)]
#[derive(Clone, Default, Deserialize, PartialEq)]
pub struct ConfirmCompletion {
#[serde(default)]
pub item_ix: Option<usize>,
}
#[derive(Clone, Default, Deserialize)]
#[derive(Clone, Default, Deserialize, PartialEq)]
pub struct ConfirmCodeAction {
#[serde(default)]
pub item_ix: Option<usize>,
@ -307,7 +307,7 @@ trait InvalidationRegion {
fn ranges(&self) -> &[Range<Anchor>];
}
#[derive(Clone, Debug)]
#[derive(Clone, Debug, PartialEq)]
pub enum SelectPhase {
Begin {
position: DisplayPoint,

View File

@ -5,6 +5,7 @@ pub trait Action: 'static {
fn name(&self) -> &'static str;
fn as_any(&self) -> &dyn Any;
fn boxed_clone(&self) -> Box<dyn Action>;
fn eq(&self, other: &dyn Action) -> bool;
fn qualified_name() -> &'static str
where
@ -103,6 +104,14 @@ macro_rules! __impl_action {
Box::new(self.clone())
}
fn eq(&self, other: &dyn $crate::Action) -> bool {
if let Some(other) = other.as_any().downcast_ref::<Self>() {
self == other
} else {
false
}
}
$from_json_fn
}
};

View File

@ -27,7 +27,7 @@ pub enum ItemType {
Unselected,
}
#[derive(Clone, Deserialize)]
#[derive(Clone, Deserialize, PartialEq)]
pub struct SelectItem(pub usize);
actions!(select, [ToggleSelect]);

View File

@ -1,4 +1,4 @@
#[derive(Clone)]
#[derive(Clone, PartialEq)]
pub struct SelectIndex(pub usize);
gpui::actions!(

View File

@ -81,16 +81,16 @@ struct EntryDetails {
is_cut: bool,
}
#[derive(Clone)]
#[derive(Clone, PartialEq)]
pub struct ToggleExpanded(pub ProjectEntryId);
#[derive(Clone)]
#[derive(Clone, PartialEq)]
pub struct Open {
pub entry_id: ProjectEntryId,
pub change_focus: bool,
}
#[derive(Clone)]
#[derive(Clone, PartialEq)]
pub struct DeployContextMenu {
pub position: Vector2F,
pub entry_id: Option<ProjectEntryId>,

View File

@ -16,12 +16,12 @@ use settings::Settings;
use std::ops::Range;
use workspace::{ItemHandle, Pane, ToolbarItemLocation, ToolbarItemView};
#[derive(Clone, Deserialize)]
#[derive(Clone, Deserialize, PartialEq)]
pub struct Deploy {
pub focus: bool,
}
#[derive(Clone)]
#[derive(Clone, PartialEq)]
pub struct ToggleSearchOption(pub SearchOption);
actions!(buffer_search, [Dismiss, FocusEditor]);

View File

@ -15,13 +15,13 @@ pub fn init(cx: &mut MutableAppContext) {
project_search::init(cx);
}
#[derive(Clone)]
#[derive(Clone, PartialEq)]
pub struct ToggleSearchOption(pub SearchOption);
actions!(search, [SelectNextMatch, SelectPrevMatch]);
impl_internal_actions!(search, [ToggleSearchOption]);
#[derive(Clone, Copy)]
#[derive(Clone, Copy, PartialEq)]
pub enum SearchOption {
WholeWord,
CaseSensitive,

View File

@ -32,21 +32,21 @@ pub enum Motion {
EndOfDocument,
}
#[derive(Clone, Deserialize)]
#[derive(Clone, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
struct NextWordStart {
#[serde(default)]
ignore_punctuation: bool,
}
#[derive(Clone, Deserialize)]
#[derive(Clone, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
struct NextWordEnd {
#[serde(default)]
ignore_punctuation: bool,
}
#[derive(Clone, Deserialize)]
#[derive(Clone, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
struct PreviousWordStart {
#[serde(default)]

View File

@ -4,7 +4,7 @@ use gpui::{impl_actions, MutableAppContext, ViewContext};
use serde::Deserialize;
use workspace::Workspace;
#[derive(Clone, Deserialize)]
#[derive(Clone, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
struct ChangeWord {
#[serde(default)]

View File

@ -18,10 +18,10 @@ use settings::Settings;
use state::{Mode, Operator, VimState};
use workspace::{self, Workspace};
#[derive(Clone, Deserialize)]
#[derive(Clone, Deserialize, PartialEq)]
pub struct SwitchMode(pub Mode);
#[derive(Clone, Deserialize)]
#[derive(Clone, Deserialize, PartialEq)]
pub struct PushOperator(pub Operator);
impl_actions!(vim, [SwitchMode, PushOperator]);

View File

@ -28,25 +28,25 @@ actions!(
]
);
#[derive(Clone, Deserialize)]
#[derive(Clone, Deserialize, PartialEq)]
pub struct Split(pub SplitDirection);
#[derive(Clone)]
#[derive(Clone, PartialEq)]
pub struct CloseItem {
pub item_id: usize,
pub pane: WeakViewHandle<Pane>,
}
#[derive(Clone, Deserialize)]
#[derive(Clone, Deserialize, PartialEq)]
pub struct ActivateItem(pub usize);
#[derive(Clone, Deserialize)]
#[derive(Clone, Deserialize, PartialEq)]
pub struct GoBack {
#[serde(skip_deserializing)]
pub pane: Option<WeakViewHandle<Pane>>,
}
#[derive(Clone, Deserialize)]
#[derive(Clone, Deserialize, PartialEq)]
pub struct GoForward {
#[serde(skip_deserializing)]
pub pane: Option<WeakViewHandle<Pane>>,

View File

@ -255,7 +255,7 @@ impl PaneAxis {
}
}
#[derive(Clone, Copy, Debug, Deserialize)]
#[derive(Clone, Copy, Debug, Deserialize, PartialEq)]
pub enum SplitDirection {
Up,
Down,

View File

@ -60,7 +60,7 @@ pub struct Sidebar {
custom_width: Rc<RefCell<f32>>,
}
#[derive(Clone, Copy, Debug, Deserialize)]
#[derive(Clone, Copy, Debug, Deserialize, PartialEq)]
pub enum Side {
Left,
Right,
@ -76,13 +76,13 @@ pub struct SidebarButtons {
sidebar: ViewHandle<Sidebar>,
}
#[derive(Clone, Debug, Deserialize)]
#[derive(Clone, Debug, Deserialize, PartialEq)]
pub struct ToggleSidebarItem {
pub side: Side,
pub item_index: usize,
}
#[derive(Clone, Debug, Deserialize)]
#[derive(Clone, Debug, Deserialize, PartialEq)]
pub struct ToggleSidebarItemFocus {
pub side: Side,
pub item_index: usize,

View File

@ -73,7 +73,7 @@ type FollowableItemBuilders = HashMap<
),
>;
#[derive(Clone)]
#[derive(Clone, PartialEq)]
pub struct RemoveFolderFromProject(pub WorktreeId);
actions!(
@ -94,21 +94,21 @@ actions!(
]
);
#[derive(Clone)]
#[derive(Clone, PartialEq)]
pub struct OpenPaths {
pub paths: Vec<PathBuf>,
}
#[derive(Clone, Deserialize)]
#[derive(Clone, Deserialize, PartialEq)]
pub struct ToggleProjectOnline {
#[serde(skip_deserializing)]
pub project: Option<ModelHandle<Project>>,
}
#[derive(Clone)]
#[derive(Clone, PartialEq)]
pub struct ToggleFollow(pub PeerId);
#[derive(Clone)]
#[derive(Clone, PartialEq)]
pub struct JoinProject {
pub contact: Arc<Contact>,
pub project_index: usize,

View File

@ -35,7 +35,7 @@ use util::ResultExt;
pub use workspace;
use workspace::{AppState, Workspace};
#[derive(Deserialize, Clone)]
#[derive(Deserialize, Clone, PartialEq)]
struct OpenBrowser {
url: Arc<str>,
}