From eaa8224076e20b5d4df70b0cf4c5b8f049fac94c Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Mon, 17 Jul 2023 12:24:56 +0300 Subject: [PATCH] Use id instead of type_id for actions Currently, both are the same thing, so the logic is not changed. --- crates/gpui/src/app.rs | 12 +++++----- crates/gpui/src/app/window.rs | 20 +++++++--------- crates/gpui/src/keymap_matcher.rs | 4 ++-- crates/gpui/src/keymap_matcher/keymap.rs | 29 +++++++++++------------- crates/gpui/src/platform/mac/platform.rs | 2 +- 5 files changed, 30 insertions(+), 37 deletions(-) diff --git a/crates/gpui/src/app.rs b/crates/gpui/src/app.rs index 640614324f..b40a67db61 100644 --- a/crates/gpui/src/app.rs +++ b/crates/gpui/src/app.rs @@ -1073,7 +1073,7 @@ impl AppContext { pub fn is_action_available(&self, action: &dyn Action) -> bool { let mut available_in_window = false; - let action_type = action.as_any().type_id(); + let action_id = action.id(); if let Some(window_id) = self.platform.main_window_id() { available_in_window = self .read_window(window_id, |cx| { @@ -1083,7 +1083,7 @@ impl AppContext { cx.views_metadata.get(&(window_id, view_id)) { if let Some(actions) = cx.actions.get(&view_metadata.type_id) { - if actions.contains_key(&action_type) { + if actions.contains_key(&action_id) { return true; } } @@ -1094,7 +1094,7 @@ impl AppContext { }) .unwrap_or(false); } - available_in_window || self.global_actions.contains_key(&action_type) + available_in_window || self.global_actions.contains_key(&action_id) } fn actions_mut( @@ -3399,7 +3399,7 @@ impl<'a, 'b, 'c, V: View> LayoutContext<'a, 'b, 'c, V> { for (i, view_id) in self.ancestors(view_id).enumerate() { if let Some(view_metadata) = self.views_metadata.get(&(window_id, view_id)) { if let Some(actions) = self.actions.get(&view_metadata.type_id) { - if actions.contains_key(&action.as_any().type_id()) { + if actions.contains_key(&action.id()) { handler_depth = Some(i); } } @@ -3407,12 +3407,12 @@ impl<'a, 'b, 'c, V: View> LayoutContext<'a, 'b, 'c, V> { } } - if self.global_actions.contains_key(&action.as_any().type_id()) { + if self.global_actions.contains_key(&action.id()) { handler_depth = Some(contexts.len()) } self.keystroke_matcher - .bindings_for_action_type(action.as_any().type_id()) + .bindings_for_action(action.id()) .find_map(|b| { let highest_handler = handler_depth?; if action.eq(b.action()) diff --git a/crates/gpui/src/app/window.rs b/crates/gpui/src/app/window.rs index 49b12d823e..1a5611f6ae 100644 --- a/crates/gpui/src/app/window.rs +++ b/crates/gpui/src/app/window.rs @@ -363,17 +363,13 @@ impl<'a> WindowContext<'a> { ) -> Vec<(&'static str, Box, SmallVec<[Binding; 1]>)> { let window_id = self.window_id; let mut contexts = Vec::new(); - let mut handler_depths_by_action_type = HashMap::::default(); + let mut handler_depths_by_action_id = HashMap::::default(); for (depth, view_id) in self.ancestors(view_id).enumerate() { if let Some(view_metadata) = self.views_metadata.get(&(window_id, view_id)) { contexts.push(view_metadata.keymap_context.clone()); if let Some(actions) = self.actions.get(&view_metadata.type_id) { - handler_depths_by_action_type.extend( - actions - .keys() - .copied() - .map(|action_type| (action_type, depth)), - ); + handler_depths_by_action_id + .extend(actions.keys().copied().map(|action_id| (action_id, depth))); } } else { log::error!( @@ -383,21 +379,21 @@ impl<'a> WindowContext<'a> { } } - handler_depths_by_action_type.extend( + handler_depths_by_action_id.extend( self.global_actions .keys() .copied() - .map(|action_type| (action_type, contexts.len())), + .map(|action_id| (action_id, contexts.len())), ); self.action_deserializers .iter() - .filter_map(move |(name, (type_id, deserialize))| { - if let Some(action_depth) = handler_depths_by_action_type.get(type_id).copied() { + .filter_map(move |(name, (action_id, deserialize))| { + if let Some(action_depth) = handler_depths_by_action_id.get(action_id).copied() { let action = deserialize(serde_json::Value::Object(Default::default())).ok()?; let bindings = self .keystroke_matcher - .bindings_for_action_type(*type_id) + .bindings_for_action(*action_id) .filter(|b| { action.eq(b.action()) && (0..=action_depth) diff --git a/crates/gpui/src/keymap_matcher.rs b/crates/gpui/src/keymap_matcher.rs index bc70638b2c..9e5d45987d 100644 --- a/crates/gpui/src/keymap_matcher.rs +++ b/crates/gpui/src/keymap_matcher.rs @@ -47,8 +47,8 @@ impl KeymapMatcher { self.keymap.clear(); } - pub fn bindings_for_action_type(&self, action_type: TypeId) -> impl Iterator { - self.keymap.bindings_for_action_type(action_type) + pub fn bindings_for_action(&self, action_id: TypeId) -> impl Iterator { + self.keymap.bindings_for_action(action_id) } pub fn clear_pending(&mut self) { diff --git a/crates/gpui/src/keymap_matcher/keymap.rs b/crates/gpui/src/keymap_matcher/keymap.rs index 6f358aad39..bc02ae10fa 100644 --- a/crates/gpui/src/keymap_matcher/keymap.rs +++ b/crates/gpui/src/keymap_matcher/keymap.rs @@ -1,39 +1,36 @@ use smallvec::SmallVec; -use std::{ - any::{Any, TypeId}, - collections::HashMap, -}; +use std::{any::TypeId, collections::HashMap}; use super::Binding; #[derive(Default)] pub struct Keymap { bindings: Vec, - binding_indices_by_action_type: HashMap>, + binding_indices_by_action_id: HashMap>, } impl Keymap { pub fn new(bindings: Vec) -> Self { - let mut binding_indices_by_action_type = HashMap::new(); + let mut binding_indices_by_action_id = HashMap::new(); for (ix, binding) in bindings.iter().enumerate() { - binding_indices_by_action_type - .entry(binding.action().type_id()) + binding_indices_by_action_id + .entry(binding.action().id()) .or_insert_with(SmallVec::new) .push(ix); } Self { - binding_indices_by_action_type, + binding_indices_by_action_id, bindings, } } - pub(crate) fn bindings_for_action_type( + pub(crate) fn bindings_for_action( &self, - action_type: TypeId, + action_id: TypeId, ) -> impl Iterator { - self.binding_indices_by_action_type - .get(&action_type) + self.binding_indices_by_action_id + .get(&action_id) .map(SmallVec::as_slice) .unwrap_or(&[]) .iter() @@ -42,8 +39,8 @@ impl Keymap { pub(crate) fn add_bindings>(&mut self, bindings: T) { for binding in bindings { - self.binding_indices_by_action_type - .entry(binding.action().as_any().type_id()) + self.binding_indices_by_action_id + .entry(binding.action().id()) .or_default() .push(self.bindings.len()); self.bindings.push(binding); @@ -52,7 +49,7 @@ impl Keymap { pub(crate) fn clear(&mut self) { self.bindings.clear(); - self.binding_indices_by_action_type.clear(); + self.binding_indices_by_action_id.clear(); } pub fn bindings(&self) -> &Vec { diff --git a/crates/gpui/src/platform/mac/platform.rs b/crates/gpui/src/platform/mac/platform.rs index e1d80fe25c..509c979b85 100644 --- a/crates/gpui/src/platform/mac/platform.rs +++ b/crates/gpui/src/platform/mac/platform.rs @@ -231,7 +231,7 @@ impl MacForegroundPlatform { } => { // TODO let keystrokes = keystroke_matcher - .bindings_for_action_type(action.as_any().type_id()) + .bindings_for_action(action.id()) .find(|binding| binding.action().eq(action.as_ref())) .map(|binding| binding.keystrokes()); let selector = match os_action {