From 4290c67b6a87724239b9e1bd55f125271c4718ed Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Sat, 9 Dec 2023 13:25:15 -0700 Subject: [PATCH] Restore namespace parameter to `actions!` This does not yet fix `derive(Action)`, but will conflict with a lot so wanted to merge quickly. --- .../src/activity_indicator.rs | 2 +- crates/assistant2/src/assistant.rs | 23 +- crates/auto_update2/src/auto_update.rs | 11 +- crates/client2/src/client2.rs | 2 +- crates/collab_ui2/src/channel_view.rs | 2 +- crates/collab_ui2/src/chat_panel.rs | 2 +- crates/collab_ui2/src/collab_panel.rs | 19 +- .../src/collab_panel/channel_modal.rs | 11 +- crates/collab_ui2/src/collab_titlebar_item.rs | 13 +- crates/collab_ui2/src/collab_ui.rs | 5 +- .../command_palette2/src/command_palette.rs | 2 +- crates/copilot2/src/copilot2.rs | 15 +- crates/diagnostics2/src/diagnostics.rs | 2 +- crates/editor2/src/editor.rs | 233 +++++++++--------- crates/editor2/src/hover_popover.rs | 2 +- crates/feedback2/src/feedback2.rs | 13 +- crates/file_finder2/src/file_finder.rs | 2 +- crates/go_to_line2/src/go_to_line.rs | 2 +- crates/gpui2/docs/key_dispatch.md | 2 +- crates/gpui2/src/action.rs | 68 ++++- crates/gpui2/src/interactive.rs | 2 +- crates/gpui2/src/keymap/context.rs | 5 +- crates/gpui2_macros/src/register_action.rs | 2 +- crates/install_cli2/src/install_cli2.rs | 2 +- .../src/language_selector.rs | 2 +- crates/menu2/src/menu2.rs | 19 +- crates/outline2/src/outline.rs | 2 +- crates/project_panel2/src/project_panel.rs | 37 +-- crates/recent_projects2/src/projects.rs | 2 +- crates/search2/src/buffer_search.rs | 2 +- crates/search2/src/search.rs | 31 +-- crates/settings2/src/keymap_file.rs | 6 +- crates/storybook2/src/stories/focus.rs | 2 +- crates/terminal2/src/terminal2.rs | 17 +- crates/terminal_view2/src/terminal_panel.rs | 2 +- crates/theme_selector2/src/theme_selector.rs | 2 +- .../src/components/stories/context_menu.rs | 2 +- .../ui2/src/components/stories/keybinding.rs | 5 +- crates/welcome2/src/base_keymap_picker.rs | 2 +- crates/workspace2/src/dock.rs | 2 +- crates/workspace2/src/pane.rs | 32 +-- crates/workspace2/src/workspace2.rs | 51 ++-- crates/zed2/src/zed2.rs | 45 ++-- 43 files changed, 400 insertions(+), 305 deletions(-) diff --git a/crates/activity_indicator2/src/activity_indicator.rs b/crates/activity_indicator2/src/activity_indicator.rs index 1ee5a6689a54d8f27e6e1fd8d509c12c81624353..e4a5b01ba6bdb276f00d20f3f7748b771c2b2ed8 100644 --- a/crates/activity_indicator2/src/activity_indicator.rs +++ b/crates/activity_indicator2/src/activity_indicator.rs @@ -14,7 +14,7 @@ use ui::h_stack; use util::ResultExt; use workspace::{item::ItemHandle, StatusItemView, Workspace}; -actions!(ShowErrorMessage); +actions!(activity_indicator, [ShowErrorMessage]); const DOWNLOAD_ICON: &str = "icons/download.svg"; const WARNING_ICON: &str = "icons/warning.svg"; diff --git a/crates/assistant2/src/assistant.rs b/crates/assistant2/src/assistant.rs index 871ab131e5f68600db81dbc3bee643d558b5e361..743c8b22e6b0518f8ac4810da3ba97c48170c1b6 100644 --- a/crates/assistant2/src/assistant.rs +++ b/crates/assistant2/src/assistant.rs @@ -19,16 +19,19 @@ use std::{cmp::Reverse, ffi::OsStr, path::PathBuf, sync::Arc}; use util::paths::CONVERSATIONS_DIR; actions!( - NewConversation, - Assist, - Split, - CycleMessageRole, - QuoteSelection, - ToggleFocus, - ResetKey, - InlineAssist, - ToggleIncludeConversation, - ToggleRetrieveContext, + assistant, + [ + NewConversation, + Assist, + Split, + CycleMessageRole, + QuoteSelection, + ToggleFocus, + ResetKey, + InlineAssist, + ToggleIncludeConversation, + ToggleRetrieveContext, + ] ); #[derive( diff --git a/crates/auto_update2/src/auto_update.rs b/crates/auto_update2/src/auto_update.rs index dbccd269b797273277ad98e34d238166fe68df1c..31e474242ac7fd9cf918a785b35620ae7764df0e 100644 --- a/crates/auto_update2/src/auto_update.rs +++ b/crates/auto_update2/src/auto_update.rs @@ -26,10 +26,13 @@ const POLL_INTERVAL: Duration = Duration::from_secs(60 * 60); //todo!(remove CheckThatAutoUpdaterWorks) actions!( - Check, - DismissErrorMessage, - ViewReleaseNotes, - CheckThatAutoUpdaterWorks + auto_update, + [ + Check, + DismissErrorMessage, + ViewReleaseNotes, + CheckThatAutoUpdaterWorks + ] ); #[derive(Serialize)] diff --git a/crates/client2/src/client2.rs b/crates/client2/src/client2.rs index 4746c9c6e4222a9c08383001525cf0f9cc55ab09..bf8d5dda771c3d9ddea8a3b8b3978318f051fdc3 100644 --- a/crates/client2/src/client2.rs +++ b/crates/client2/src/client2.rs @@ -70,7 +70,7 @@ pub const ZED_SECRET_CLIENT_TOKEN: &str = "618033988749894"; pub const INITIAL_RECONNECTION_DELAY: Duration = Duration::from_millis(100); pub const CONNECTION_TIMEOUT: Duration = Duration::from_secs(5); -actions!(SignIn, SignOut, Reconnect); +actions!(client, [SignIn, SignOut, Reconnect]); pub fn init_settings(cx: &mut AppContext) { TelemetrySettings::register(cx); diff --git a/crates/collab_ui2/src/channel_view.rs b/crates/collab_ui2/src/channel_view.rs index 8d2c037f9d3f5807e7d5375df6accb0b676377d6..fb16fb67b0004283592c598af17c896701e53382 100644 --- a/crates/collab_ui2/src/channel_view.rs +++ b/crates/collab_ui2/src/channel_view.rs @@ -26,7 +26,7 @@ use workspace::{ ItemNavHistory, Pane, SaveIntent, ViewId, Workspace, WorkspaceId, }; -actions!(Deploy); +actions!(collab, [Deploy]); pub fn init(cx: &mut AppContext) { register_followable_item::(cx) diff --git a/crates/collab_ui2/src/chat_panel.rs b/crates/collab_ui2/src/chat_panel.rs index a6736d19f264ff51c685d9225c1e5aabece181e2..c484016aae61a51d287f705ab531533bdba47042 100644 --- a/crates/collab_ui2/src/chat_panel.rs +++ b/crates/collab_ui2/src/chat_panel.rs @@ -75,7 +75,7 @@ pub enum Event { Dismissed, } -actions!(ToggleFocus); +actions!(chat_panel, [ToggleFocus]); impl ChatPanel { pub fn new(workspace: &mut Workspace, cx: &mut ViewContext) -> View { diff --git a/crates/collab_ui2/src/collab_panel.rs b/crates/collab_ui2/src/collab_panel.rs index 9dcad01acd78fa3d85c1efc59798adac6935c0b1..1892fc6fa960344e74756aab19e814cb2869314e 100644 --- a/crates/collab_ui2/src/collab_panel.rs +++ b/crates/collab_ui2/src/collab_panel.rs @@ -123,14 +123,17 @@ pub struct OpenChannelNotes { // } actions!( - ToggleFocus, - Remove, - Secondary, - CollapseSelectedChannel, - ExpandSelectedChannel, - StartMoveChannel, - MoveSelected, - InsertSpace, + collab_panel, + [ + ToggleFocus, + Remove, + Secondary, + CollapseSelectedChannel, + ExpandSelectedChannel, + StartMoveChannel, + MoveSelected, + InsertSpace, + ] ); // impl_actions!( diff --git a/crates/collab_ui2/src/collab_panel/channel_modal.rs b/crates/collab_ui2/src/collab_panel/channel_modal.rs index 3a630a1959146b58b2f3a2bdcbc57e35b0ef655c..8636dcafe467d339986bf03ff0dea06382e20782 100644 --- a/crates/collab_ui2/src/collab_panel/channel_modal.rs +++ b/crates/collab_ui2/src/collab_panel/channel_modal.rs @@ -16,10 +16,13 @@ use util::TryFutureExt; use workspace::ModalView; actions!( - SelectNextControl, - ToggleMode, - ToggleMemberAdmin, - RemoveMember + channel_modal, + [ + SelectNextControl, + ToggleMode, + ToggleMemberAdmin, + RemoveMember + ] ); // pub fn init(cx: &mut AppContext) { diff --git a/crates/collab_ui2/src/collab_titlebar_item.rs b/crates/collab_ui2/src/collab_titlebar_item.rs index d137b2195a2ea29a867b562ee006b2b9a18519b6..4940893a6cc1462ad9a3dbf1e91137912329a595 100644 --- a/crates/collab_ui2/src/collab_titlebar_item.rs +++ b/crates/collab_ui2/src/collab_titlebar_item.rs @@ -20,11 +20,14 @@ const MAX_PROJECT_NAME_LENGTH: usize = 40; const MAX_BRANCH_NAME_LENGTH: usize = 40; actions!( - ShareProject, - UnshareProject, - ToggleUserMenu, - ToggleProjectMenu, - SwitchBranch + collab, + [ + ShareProject, + UnshareProject, + ToggleUserMenu, + ToggleProjectMenu, + SwitchBranch + ] ); pub fn init(cx: &mut AppContext) { diff --git a/crates/collab_ui2/src/collab_ui.rs b/crates/collab_ui2/src/collab_ui.rs index 9e01630b46dcf6eab432ae8fc7781560e86d9bf9..b23971b3f2c494ee7e78eacdad952422f0ff04a1 100644 --- a/crates/collab_ui2/src/collab_ui.rs +++ b/crates/collab_ui2/src/collab_ui.rs @@ -24,7 +24,10 @@ use settings::Settings; use util::ResultExt; use workspace::AppState; -actions!(ToggleScreenSharing, ToggleMute, ToggleDeafen, LeaveCall); +actions!( + collab, + [ToggleScreenSharing, ToggleMute, ToggleDeafen, LeaveCall] +); pub fn init(app_state: &Arc, cx: &mut AppContext) { CollaborationPanelSettings::register(cx); diff --git a/crates/command_palette2/src/command_palette.rs b/crates/command_palette2/src/command_palette.rs index 6a3bbe56c4e33780cceb62eb813fba9f3a12cbf0..4827b137516dafe71d07f08645b1cbe7305a50f6 100644 --- a/crates/command_palette2/src/command_palette.rs +++ b/crates/command_palette2/src/command_palette.rs @@ -19,7 +19,7 @@ use util::{ use workspace::{ModalView, Workspace}; use zed_actions::OpenZedURL; -actions!(Toggle); +actions!(command_palette, [Toggle]); pub fn init(cx: &mut AppContext) { cx.set_global(HitCounts::default()); diff --git a/crates/copilot2/src/copilot2.rs b/crates/copilot2/src/copilot2.rs index 9c5483d634c201019873d9aa99fdaccd4b361cec..4fd05a9c089bceaa038c0b4478102969a27656bc 100644 --- a/crates/copilot2/src/copilot2.rs +++ b/crates/copilot2/src/copilot2.rs @@ -34,12 +34,15 @@ use util::{ }; actions!( - Suggest, - NextSuggestion, - PreviousSuggestion, - Reinstall, - SignIn, - SignOut + copilot, + [ + Suggest, + NextSuggestion, + PreviousSuggestion, + Reinstall, + SignIn, + SignOut + ] ); pub fn init( diff --git a/crates/diagnostics2/src/diagnostics.rs b/crates/diagnostics2/src/diagnostics.rs index f725fb7c4f58906f4263a5bcc86e6dd1ec24af6f..9367d2b2ecb70028f23ae0b6deceeca6d091949e 100644 --- a/crates/diagnostics2/src/diagnostics.rs +++ b/crates/diagnostics2/src/diagnostics.rs @@ -43,7 +43,7 @@ use workspace::{ ItemNavHistory, Pane, ToolbarItemLocation, Workspace, }; -actions!(Deploy, ToggleWarnings); +actions!(diagnostics, [Deploy, ToggleWarnings]); const CONTEXT_LINE_COUNT: u32 = 1; diff --git a/crates/editor2/src/editor.rs b/crates/editor2/src/editor.rs index 46d64fcf9d4c8f0860d741be8dc3016c17d18bc0..913b8993128f4a60c3a7bfe900a2a54f877f30b3 100644 --- a/crates/editor2/src/editor.rs +++ b/crates/editor2/src/editor.rs @@ -277,121 +277,124 @@ impl InlayId { } actions!( - AddSelectionAbove, - AddSelectionBelow, - Backspace, - Cancel, - ConfirmRename, - ContextMenuFirst, - ContextMenuLast, - ContextMenuNext, - ContextMenuPrev, - ConvertToKebabCase, - ConvertToLowerCamelCase, - ConvertToLowerCase, - ConvertToSnakeCase, - ConvertToTitleCase, - ConvertToUpperCamelCase, - ConvertToUpperCase, - Copy, - CopyHighlightJson, - CopyPath, - CopyRelativePath, - Cut, - CutToEndOfLine, - Delete, - DeleteLine, - DeleteToBeginningOfLine, - DeleteToEndOfLine, - DeleteToNextSubwordEnd, - DeleteToNextWordEnd, - DeleteToPreviousSubwordStart, - DeleteToPreviousWordStart, - DuplicateLine, - FindAllReferences, - Fold, - FoldSelectedRanges, - Format, - GoToDefinition, - GoToDefinitionSplit, - GoToDiagnostic, - GoToHunk, - GoToPrevDiagnostic, - GoToPrevHunk, - GoToTypeDefinition, - GoToTypeDefinitionSplit, - HalfPageDown, - HalfPageUp, - Hover, - Indent, - JoinLines, - LineDown, - LineUp, - MoveDown, - MoveLeft, - MoveLineDown, - MoveLineUp, - MoveRight, - MoveToBeginning, - MoveToBeginningOfLine, - MoveToEnclosingBracket, - MoveToEnd, - MoveToEndOfLine, - MoveToEndOfParagraph, - MoveToNextSubwordEnd, - MoveToNextWordEnd, - MoveToPreviousSubwordStart, - MoveToPreviousWordStart, - MoveToStartOfParagraph, - MoveUp, - Newline, - NewlineAbove, - NewlineBelow, - NextScreen, - OpenExcerpts, - Outdent, - PageDown, - PageUp, - Paste, - Redo, - RedoSelection, - Rename, - RestartLanguageServer, - RevealInFinder, - ReverseLines, - ScrollCursorBottom, - ScrollCursorCenter, - ScrollCursorTop, - SelectAll, - SelectDown, - SelectLargerSyntaxNode, - SelectLeft, - SelectLine, - SelectRight, - SelectSmallerSyntaxNode, - SelectToBeginning, - SelectToEnd, - SelectToEndOfParagraph, - SelectToNextSubwordEnd, - SelectToNextWordEnd, - SelectToPreviousSubwordStart, - SelectToPreviousWordStart, - SelectToStartOfParagraph, - SelectUp, - ShowCharacterPalette, - ShowCompletions, - ShuffleLines, - SortLinesCaseInsensitive, - SortLinesCaseSensitive, - SplitSelectionIntoLines, - Tab, - TabPrev, - ToggleInlayHints, - ToggleSoftWrap, - Transpose, - Undo, - UndoSelection, - UnfoldLines, + editor, + [ + AddSelectionAbove, + AddSelectionBelow, + Backspace, + Cancel, + ConfirmRename, + ContextMenuFirst, + ContextMenuLast, + ContextMenuNext, + ContextMenuPrev, + ConvertToKebabCase, + ConvertToLowerCamelCase, + ConvertToLowerCase, + ConvertToSnakeCase, + ConvertToTitleCase, + ConvertToUpperCamelCase, + ConvertToUpperCase, + Copy, + CopyHighlightJson, + CopyPath, + CopyRelativePath, + Cut, + CutToEndOfLine, + Delete, + DeleteLine, + DeleteToBeginningOfLine, + DeleteToEndOfLine, + DeleteToNextSubwordEnd, + DeleteToNextWordEnd, + DeleteToPreviousSubwordStart, + DeleteToPreviousWordStart, + DuplicateLine, + FindAllReferences, + Fold, + FoldSelectedRanges, + Format, + GoToDefinition, + GoToDefinitionSplit, + GoToDiagnostic, + GoToHunk, + GoToPrevDiagnostic, + GoToPrevHunk, + GoToTypeDefinition, + GoToTypeDefinitionSplit, + HalfPageDown, + HalfPageUp, + Hover, + Indent, + JoinLines, + LineDown, + LineUp, + MoveDown, + MoveLeft, + MoveLineDown, + MoveLineUp, + MoveRight, + MoveToBeginning, + MoveToBeginningOfLine, + MoveToEnclosingBracket, + MoveToEnd, + MoveToEndOfLine, + MoveToEndOfParagraph, + MoveToNextSubwordEnd, + MoveToNextWordEnd, + MoveToPreviousSubwordStart, + MoveToPreviousWordStart, + MoveToStartOfParagraph, + MoveUp, + Newline, + NewlineAbove, + NewlineBelow, + NextScreen, + OpenExcerpts, + Outdent, + PageDown, + PageUp, + Paste, + Redo, + RedoSelection, + Rename, + RestartLanguageServer, + RevealInFinder, + ReverseLines, + ScrollCursorBottom, + ScrollCursorCenter, + ScrollCursorTop, + SelectAll, + SelectDown, + SelectLargerSyntaxNode, + SelectLeft, + SelectLine, + SelectRight, + SelectSmallerSyntaxNode, + SelectToBeginning, + SelectToEnd, + SelectToEndOfParagraph, + SelectToNextSubwordEnd, + SelectToNextWordEnd, + SelectToPreviousSubwordStart, + SelectToPreviousWordStart, + SelectToStartOfParagraph, + SelectUp, + ShowCharacterPalette, + ShowCompletions, + ShuffleLines, + SortLinesCaseInsensitive, + SortLinesCaseSensitive, + SplitSelectionIntoLines, + Tab, + TabPrev, + ToggleInlayHints, + ToggleSoftWrap, + Transpose, + Undo, + UndoSelection, + UnfoldLines, + ] ); enum DocumentHighlightRead {} diff --git a/crates/editor2/src/hover_popover.rs b/crates/editor2/src/hover_popover.rs index 2f2e8ee93732b0cb81fcf88775208519545b330d..3a53a1bd1d6cca3e48dc3267b65b1d8d9527ac4f 100644 --- a/crates/editor2/src/hover_popover.rs +++ b/crates/editor2/src/hover_popover.rs @@ -26,7 +26,7 @@ pub const MIN_POPOVER_CHARACTER_WIDTH: f32 = 20.; pub const MIN_POPOVER_LINE_HEIGHT: Pixels = px(4.); pub const HOVER_POPOVER_GAP: Pixels = px(10.); -actions!(Hover); +actions!(editor, [Hover]); /// Bindable action which uses the most recent selection head to trigger a hover pub fn hover(editor: &mut Editor, _: &Hover, cx: &mut ViewContext) { diff --git a/crates/feedback2/src/feedback2.rs b/crates/feedback2/src/feedback2.rs index 1a1bd935267ce2509aa0b004a6040a962901361e..58e68e2197532151a0cd1dae93540a1d53c0c4fc 100644 --- a/crates/feedback2/src/feedback2.rs +++ b/crates/feedback2/src/feedback2.rs @@ -5,15 +5,18 @@ use workspace::Workspace; pub mod deploy_feedback_button; pub mod feedback_modal; -actions!(GiveFeedback, SubmitFeedback); +actions!(feedback, [GiveFeedback, SubmitFeedback]); mod system_specs; actions!( - CopySystemSpecsIntoClipboard, - FileBugReport, - RequestFeature, - OpenZedCommunityRepo + zed, + [ + CopySystemSpecsIntoClipboard, + FileBugReport, + RequestFeature, + OpenZedCommunityRepo + ] ); pub fn init(cx: &mut AppContext) { diff --git a/crates/file_finder2/src/file_finder.rs b/crates/file_finder2/src/file_finder.rs index 7324b3667a1dc0d1109510ea130da0d2591fba32..a9619530c674bee9fc05a93853d9c140469a63ab 100644 --- a/crates/file_finder2/src/file_finder.rs +++ b/crates/file_finder2/src/file_finder.rs @@ -19,7 +19,7 @@ use ui::{prelude::*, HighlightedLabel, ListItem}; use util::{paths::PathLikeWithPosition, post_inc, ResultExt}; use workspace::{ModalView, Workspace}; -actions!(Toggle); +actions!(file_finder, [Toggle]); impl ModalView for FileFinder {} diff --git a/crates/go_to_line2/src/go_to_line.rs b/crates/go_to_line2/src/go_to_line.rs index 1a64b29c4c0fdea85f1f7e4b06b65776d86002af..8d3a718ca07cc291661f6a52d9ec75f06afaec0d 100644 --- a/crates/go_to_line2/src/go_to_line.rs +++ b/crates/go_to_line2/src/go_to_line.rs @@ -10,7 +10,7 @@ use ui::{h_stack, prelude::*, v_stack, Label}; use util::paths::FILE_ROW_COLUMN_DELIMITER; use workspace::ModalView; -actions!(Toggle); +actions!(go_to_line, [Toggle]); pub fn init(cx: &mut AppContext) { cx.observe_new_views(GoToLine::register).detach(); diff --git a/crates/gpui2/docs/key_dispatch.md b/crates/gpui2/docs/key_dispatch.md index 339eb430281b5863b68bda2bd3f71117963adf8e..daf6f820cd5c98f45415c071d38518d55b269d2f 100644 --- a/crates/gpui2/docs/key_dispatch.md +++ b/crates/gpui2/docs/key_dispatch.md @@ -22,7 +22,7 @@ Actions are frequently unit structs, for which we have a macro. The above could ```rust mod menu { - actions!(MoveUp, MoveDown); + actions!(gpui, [MoveUp, MoveDown]); } ``` diff --git a/crates/gpui2/src/action.rs b/crates/gpui2/src/action.rs index 03ef2d2281876ca101e210b1d06491413e1ce027..ce01fbaf22d2140049577faf2d976e5b23111423 100644 --- a/crates/gpui2/src/action.rs +++ b/crates/gpui2/src/action.rs @@ -158,17 +158,65 @@ impl ActionRegistry { /// To use more complex data types as actions, annotate your type with the #[action] macro. #[macro_export] macro_rules! actions { - () => {}; - - ( $name:ident ) => { - #[derive(::std::cmp::PartialEq, ::std::clone::Clone, ::std::default::Default, gpui::serde_derive::Deserialize, gpui::Action)] - #[serde(crate = "gpui::serde")] - pub struct $name; + ($namespace:path, [ $($name:ident),* $(,)? ]) => { + $( + #[derive(::std::cmp::PartialEq, ::std::clone::Clone, ::std::default::Default, gpui::serde_derive::Deserialize)] + #[serde(crate = "gpui::serde")] + #[gpui::register_action] + pub struct $name; + + gpui::__impl_action!($namespace, $name, + fn build(_: gpui::serde_json::Value) -> gpui::Result<::std::boxed::Box> { + Ok(Box::new(Self)) + } + ); + )* }; +} - ( $name:ident, $($rest:tt)* ) => { - actions!($name); - actions!($($rest)*); +#[doc(hidden)] +#[macro_export] +macro_rules! __impl_action { + ($namespace:path, $name:ident, $build:item) => { + impl gpui::Action for $name { + fn name(&self) -> &'static str + { + concat!( + stringify!($namespace), + "::", + stringify!($name), + ) + } + + // todo!() why is this needed in addition to name? + fn debug_name() -> &'static str + where + Self: ::std::marker::Sized + { + concat!( + stringify!($namespace), + "::", + stringify!($name), + ) + } + + $build + + fn partial_eq(&self, action: &dyn gpui::Action) -> bool { + action + .as_any() + .downcast_ref::() + .map_or(false, |a| self == a) + } + + fn boxed_clone(&self) -> std::boxed::Box { + ::std::boxed::Box::new(self.clone()) + } + + fn as_any(&self) -> &dyn ::std::any::Any { + self + } + } }; } @@ -186,5 +234,5 @@ pub fn remove_the_2(action_name: &str) -> String { mod no_action { use crate as gpui; - actions!(NoAction); + actions!(zed, [NoAction]); } diff --git a/crates/gpui2/src/interactive.rs b/crates/gpui2/src/interactive.rs index 84636630f37b7216b94b85be68d52d1122c019b4..fee4403a028a213fa880a5571af8ab3dd6fc7a8e 100644 --- a/crates/gpui2/src/interactive.rs +++ b/crates/gpui2/src/interactive.rs @@ -302,7 +302,7 @@ mod test { focus_handle: FocusHandle, } - actions!(TestAction); + actions!(test, [TestAction]); impl Render for TestView { type Element = Stateful
; diff --git a/crates/gpui2/src/keymap/context.rs b/crates/gpui2/src/keymap/context.rs index b9cb0384ecc6036fa9ac72bd9458987a65ca53a2..057de5f71fb51cf7b1293f49426a2c5faf9e08b5 100644 --- a/crates/gpui2/src/keymap/context.rs +++ b/crates/gpui2/src/keymap/context.rs @@ -293,11 +293,13 @@ mod tests { #[test] fn test_actions_definition() { { - actions!(A, B, C, D, E, F, G); + actions!(test, [A, B, C, D, E, F, G]); } { actions!( + test, + [ A, B, C, @@ -305,6 +307,7 @@ mod tests { E, F, G, // Don't wrap, test the trailing comma + ] ); } } diff --git a/crates/gpui2_macros/src/register_action.rs b/crates/gpui2_macros/src/register_action.rs index 3d398c873c87e033d970a0f64b3af4b80ef2195b..f25f867a74e2aa1e0a44f81b2eee74cf5ff7968d 100644 --- a/crates/gpui2_macros/src/register_action.rs +++ b/crates/gpui2_macros/src/register_action.rs @@ -78,7 +78,7 @@ pub(crate) fn register_action(type_name: &Ident) -> proc_macro2::TokenStream { #[doc(hidden)] fn #action_builder_fn_name() -> gpui::ActionData { gpui::ActionData { - name: ::std::any::type_name::<#type_name>(), + name: <#type_name as gpui::Action>::debug_name(), type_id: ::std::any::TypeId::of::<#type_name>(), build: <#type_name as gpui::Action>::build, } diff --git a/crates/install_cli2/src/install_cli2.rs b/crates/install_cli2/src/install_cli2.rs index 6fd1019c3f938e0c6c9cd96476075a65572a5dc7..e1dff2c52b238583bf7034424ae2e5b7ff8c8210 100644 --- a/crates/install_cli2/src/install_cli2.rs +++ b/crates/install_cli2/src/install_cli2.rs @@ -3,7 +3,7 @@ use gpui::{actions, AsyncAppContext}; use std::path::Path; use util::ResultExt; -actions!(Install); +actions!(cli, [Install]); pub async fn install_cli(cx: &AsyncAppContext) -> Result<()> { let cli_path = cx.update(|cx| cx.path_for_auxiliary_executable("cli"))??; diff --git a/crates/language_selector2/src/language_selector.rs b/crates/language_selector2/src/language_selector.rs index 1ba989ba5dd734a5c55fe2a2325fed4fb8211f25..8b28eab11d165cf7f7a893d39232b0ee76d830e2 100644 --- a/crates/language_selector2/src/language_selector.rs +++ b/crates/language_selector2/src/language_selector.rs @@ -16,7 +16,7 @@ use ui::{prelude::*, HighlightedLabel, ListItem}; use util::ResultExt; use workspace::{ModalView, Workspace}; -actions!(Toggle); +actions!(language_selector, [Toggle]); pub fn init(cx: &mut AppContext) { cx.observe_new_views(LanguageSelector::register).detach(); diff --git a/crates/menu2/src/menu2.rs b/crates/menu2/src/menu2.rs index 6dfcce5d4f751c3e990d1a3c440ddebdf237d162..a0e8abfabd6449406c205e00a8280450f48a5451 100644 --- a/crates/menu2/src/menu2.rs +++ b/crates/menu2/src/menu2.rs @@ -10,12 +10,15 @@ use gpui::actions; pub fn init() {} actions!( - Cancel, - Confirm, - SecondaryConfirm, - SelectPrev, - SelectNext, - SelectFirst, - SelectLast, - ShowContextMenu + menu, + [ + Cancel, + Confirm, + SecondaryConfirm, + SelectPrev, + SelectNext, + SelectFirst, + SelectLast, + ShowContextMenu + ] ); diff --git a/crates/outline2/src/outline.rs b/crates/outline2/src/outline.rs index bfa93d2099798f7b066d20be0a721cafd41fab63..5fce79e4320d799fc77b73e4e1a3267cf0361597 100644 --- a/crates/outline2/src/outline.rs +++ b/crates/outline2/src/outline.rs @@ -22,7 +22,7 @@ use ui::{prelude::*, ListItem}; use util::ResultExt; use workspace::{ModalView, Workspace}; -actions!(Toggle); +actions!(outline, [Toggle]); pub fn init(cx: &mut AppContext) { cx.observe_new_views(OutlineView::register).detach(); diff --git a/crates/project_panel2/src/project_panel.rs b/crates/project_panel2/src/project_panel.rs index 41a5c544a971e90a524244e9ee381345a4d37a21..75c7d6ed85dc5b78ba1b4d5817a80d8f969315c8 100644 --- a/crates/project_panel2/src/project_panel.rs +++ b/crates/project_panel2/src/project_panel.rs @@ -103,23 +103,26 @@ pub struct EntryDetails { } actions!( - ExpandSelectedEntry, - CollapseSelectedEntry, - CollapseAllEntries, - NewDirectory, - NewFile, - Copy, - CopyPath, - CopyRelativePath, - RevealInFinder, - OpenInTerminal, - Cut, - Paste, - Delete, - Rename, - Open, - ToggleFocus, - NewSearchInDirectory, + project_panel, + [ + ExpandSelectedEntry, + CollapseSelectedEntry, + CollapseAllEntries, + NewDirectory, + NewFile, + Copy, + CopyPath, + CopyRelativePath, + RevealInFinder, + OpenInTerminal, + Cut, + Paste, + Delete, + Rename, + Open, + ToggleFocus, + NewSearchInDirectory, + ] ); pub fn init_settings(cx: &mut AppContext) { diff --git a/crates/recent_projects2/src/projects.rs b/crates/recent_projects2/src/projects.rs index 2c4809dbd7635cf619002ffcac15d5feb3a1c3c2..d9cfbd08adbdf0e0d67a6231b5b088a203c78d8c 100644 --- a/crates/recent_projects2/src/projects.rs +++ b/crates/recent_projects2/src/projects.rs @@ -1 +1 @@ -gpui::actions!(OpenRecent); +gpui::actions!(projects, [OpenRecent]); diff --git a/crates/search2/src/buffer_search.rs b/crates/search2/src/buffer_search.rs index ccbec98c5d75add8a6cabcefb3658ec002bc8c10..33f246ef35730e818208c1a6ab767d8ec270c6c1 100644 --- a/crates/search2/src/buffer_search.rs +++ b/crates/search2/src/buffer_search.rs @@ -31,7 +31,7 @@ pub struct Deploy { pub focus: bool, } -actions!(Dismiss, FocusEditor); +actions!(buffer_search, [Dismiss, FocusEditor]); pub enum Event { UpdateLocation, diff --git a/crates/search2/src/search.rs b/crates/search2/src/search.rs index c98a033c72b327115ffadd6a96a7596426be69e9..5921bb059a4a7b9f56ee1c09ba02013ba0bf0bce 100644 --- a/crates/search2/src/search.rs +++ b/crates/search2/src/search.rs @@ -22,20 +22,23 @@ pub fn init(cx: &mut AppContext) { } actions!( - CycleMode, - ToggleWholeWord, - ToggleCaseSensitive, - ToggleReplace, - SelectNextMatch, - SelectPrevMatch, - SelectAllMatches, - NextHistoryQuery, - PreviousHistoryQuery, - ActivateTextMode, - ActivateSemanticMode, - ActivateRegexMode, - ReplaceAll, - ReplaceNext, + search, + [ + CycleMode, + ToggleWholeWord, + ToggleCaseSensitive, + ToggleReplace, + SelectNextMatch, + SelectPrevMatch, + SelectAllMatches, + NextHistoryQuery, + PreviousHistoryQuery, + ActivateTextMode, + ActivateSemanticMode, + ActivateRegexMode, + ReplaceAll, + ReplaceNext, + ] ); bitflags! { diff --git a/crates/settings2/src/keymap_file.rs b/crates/settings2/src/keymap_file.rs index 93635935cbd746b7e6fc3d96294e5895ee5c01e4..79771e3e3f7e22a604d4d67c33f815949ce878eb 100644 --- a/crates/settings2/src/keymap_file.rs +++ b/crates/settings2/src/keymap_file.rs @@ -1,7 +1,7 @@ use crate::{settings_store::parse_json_with_comments, SettingsAssets}; use anyhow::{anyhow, Context, Result}; use collections::BTreeMap; -use gpui::{actions, Action, AppContext, KeyBinding, SharedString}; +use gpui::{Action, AppContext, KeyBinding, SharedString}; use schemars::{ gen::{SchemaGenerator, SchemaSettings}, schema::{InstanceType, Schema, SchemaObject, SingleOrVec, SubschemaValidation}, @@ -137,10 +137,8 @@ impl KeymapFile { } } -actions!(NoAction); - fn no_action() -> Box { - NoAction.boxed_clone() + gpui::NoAction.boxed_clone() } #[cfg(test)] diff --git a/crates/storybook2/src/stories/focus.rs b/crates/storybook2/src/stories/focus.rs index 7b375b10e36a838f4a4629d087247c8e564721bc..787de727ea6cd33179da7aefea0aef8c279ddcca 100644 --- a/crates/storybook2/src/stories/focus.rs +++ b/crates/storybook2/src/stories/focus.rs @@ -4,7 +4,7 @@ use gpui::{ }; use ui::prelude::*; -actions!(ActionA, ActionB, ActionC); +actions!(focus, [ActionA, ActionB, ActionC]); pub struct FocusStory { child_1_focus: FocusHandle, diff --git a/crates/terminal2/src/terminal2.rs b/crates/terminal2/src/terminal2.rs index b429bda710aa09d61fe26ba259353f55ab64d5ec..9d3c00d81f95a019671a74c54fb6704a03a25e9d 100644 --- a/crates/terminal2/src/terminal2.rs +++ b/crates/terminal2/src/terminal2.rs @@ -59,13 +59,16 @@ use crate::mappings::{colors::to_alac_rgb, keys::to_esc_str}; use lazy_static::lazy_static; actions!( - Clear, - Copy, - Paste, - ShowCharacterPalette, - SearchTest, - SendText, - SendKeystroke, + terminal, + [ + Clear, + Copy, + Paste, + ShowCharacterPalette, + SearchTest, + SendText, + SendKeystroke, + ] ); ///Scrolling is unbearably sluggish by default. Alacritty supports a configurable diff --git a/crates/terminal_view2/src/terminal_panel.rs b/crates/terminal_view2/src/terminal_panel.rs index b8db12381bbb3b82c46fa49444a1b2d42bc0283b..3d88b89d9b91ed3b349c35b00d43fed157e8de15 100644 --- a/crates/terminal_view2/src/terminal_panel.rs +++ b/crates/terminal_view2/src/terminal_panel.rs @@ -24,7 +24,7 @@ use anyhow::Result; const TERMINAL_PANEL_KEY: &'static str = "TerminalPanel"; -actions!(ToggleFocus); +actions!(terminal_view, [ToggleFocus]); pub fn init(cx: &mut AppContext) { cx.observe_new_views( diff --git a/crates/theme_selector2/src/theme_selector.rs b/crates/theme_selector2/src/theme_selector.rs index 6898b687a9de9b3718c054b1debea52d897806a4..e0cdc455557ed948d3f69aba1fa74809579cc794 100644 --- a/crates/theme_selector2/src/theme_selector.rs +++ b/crates/theme_selector2/src/theme_selector.rs @@ -13,7 +13,7 @@ use ui::{prelude::*, v_stack, ListItem}; use util::ResultExt; use workspace::{ui::HighlightedLabel, ModalView, Workspace}; -actions!(Toggle, Reload); +actions!(theme_selector, [Toggle, Reload]); pub fn init(cx: &mut AppContext) { cx.observe_new_views( diff --git a/crates/ui2/src/components/stories/context_menu.rs b/crates/ui2/src/components/stories/context_menu.rs index dd1fe8d565adcd479e3605c14eda6e1c5b6e4125..cae5939f2aa7f12f148adf75f0255a660f7e6f95 100644 --- a/crates/ui2/src/components/stories/context_menu.rs +++ b/crates/ui2/src/components/stories/context_menu.rs @@ -4,7 +4,7 @@ use story::Story; use crate::prelude::*; use crate::{right_click_menu, ContextMenu, Label}; -actions!(PrintCurrentDate, PrintBestFood); +actions!(context_menu, [PrintCurrentDate, PrintBestFood]); fn build_menu(cx: &mut WindowContext, header: impl Into) -> View { ContextMenu::build(cx, |menu, _| { diff --git a/crates/ui2/src/components/stories/keybinding.rs b/crates/ui2/src/components/stories/keybinding.rs index b1b3401f17f5e30f5de28c12c6d72aef53c6a25d..520749bc850be475783ee9a40046b94095cb7a5f 100644 --- a/crates/ui2/src/components/stories/keybinding.rs +++ b/crates/ui2/src/components/stories/keybinding.rs @@ -1,4 +1,5 @@ -use gpui::{actions, Div, Render}; +use gpui::NoAction; +use gpui::{Div, Render}; use itertools::Itertools; use story::Story; @@ -7,8 +8,6 @@ use crate::KeyBinding; pub struct KeybindingStory; -actions!(NoAction); - pub fn binding(key: &str) -> gpui::KeyBinding { gpui::KeyBinding::new(key, NoAction {}, None) } diff --git a/crates/welcome2/src/base_keymap_picker.rs b/crates/welcome2/src/base_keymap_picker.rs index 9e672de69d0987139576a61d59a05502adb64d83..7f799c633949dc3481c496c827909dceef658889 100644 --- a/crates/welcome2/src/base_keymap_picker.rs +++ b/crates/welcome2/src/base_keymap_picker.rs @@ -12,7 +12,7 @@ use ui::{prelude::*, ListItem}; use util::ResultExt; use workspace::{ui::HighlightedLabel, ModalView, Workspace}; -actions!(ToggleBaseKeymapSelector); +actions!(welcome, [ToggleBaseKeymapSelector]); pub fn init(cx: &mut AppContext) { cx.observe_new_views(|workspace: &mut Workspace, _cx| { diff --git a/crates/workspace2/src/dock.rs b/crates/workspace2/src/dock.rs index 7bae7bc4199631f0b538a99d45ecb6e1d7a4aaa5..5a7097b86f4434676ff6093407314058557bfb73 100644 --- a/crates/workspace2/src/dock.rs +++ b/crates/workspace2/src/dock.rs @@ -770,7 +770,7 @@ pub mod test { pub focus_handle: FocusHandle, pub size: f32, } - actions!(ToggleTestPanel); + actions!(test, [ToggleTestPanel]); impl EventEmitter for TestPanel {} diff --git a/crates/workspace2/src/pane.rs b/crates/workspace2/src/pane.rs index 713fa711adbe211d56f90f1c3569f0bddfa40839..3c81e6aa2641ca8155284be32634d5c994b9f47e 100644 --- a/crates/workspace2/src/pane.rs +++ b/crates/workspace2/src/pane.rs @@ -87,22 +87,24 @@ pub struct CloseAllItems { pub save_intent: Option, } -// todo!(These used to be under pane::{Action}. Are they now workspace::pane::{Action}?) actions!( - ActivatePrevItem, - ActivateNextItem, - ActivateLastItem, - CloseInactiveItems, - CloseCleanItems, - CloseItemsToTheLeft, - CloseItemsToTheRight, - GoBack, - GoForward, - ReopenClosedItem, - SplitLeft, - SplitUp, - SplitRight, - SplitDown, + pane, + [ + ActivatePrevItem, + ActivateNextItem, + ActivateLastItem, + CloseInactiveItems, + CloseCleanItems, + CloseItemsToTheLeft, + CloseItemsToTheRight, + GoBack, + GoForward, + ReopenClosedItem, + SplitLeft, + SplitUp, + SplitRight, + SplitDown, + ] ); const MAX_NAVIGATION_HISTORY_LEN: usize = 1024; diff --git a/crates/workspace2/src/workspace2.rs b/crates/workspace2/src/workspace2.rs index 012c881e5b1514c9e806d77558d0284cb957a948..f0f39f6f6bd632f873e9fb15002e2dccd0f4b93f 100644 --- a/crates/workspace2/src/workspace2.rs +++ b/crates/workspace2/src/workspace2.rs @@ -91,30 +91,33 @@ lazy_static! { pub struct RemoveWorktreeFromProject(pub WorktreeId); actions!( - Open, - NewFile, - NewWindow, - CloseWindow, - CloseInactiveTabsAndPanes, - AddFolderToProject, - Unfollow, - SaveAs, - ReloadActiveItem, - ActivatePreviousPane, - ActivateNextPane, - FollowNextCollaborator, - NewTerminal, - NewCenterTerminal, - ToggleTerminalFocus, - NewSearch, - Feedback, - Restart, - Welcome, - ToggleZoom, - ToggleLeftDock, - ToggleRightDock, - ToggleBottomDock, - CloseAllDocks, + workspace, + [ + Open, + NewFile, + NewWindow, + CloseWindow, + CloseInactiveTabsAndPanes, + AddFolderToProject, + Unfollow, + SaveAs, + ReloadActiveItem, + ActivatePreviousPane, + ActivateNextPane, + FollowNextCollaborator, + NewTerminal, + NewCenterTerminal, + ToggleTerminalFocus, + NewSearch, + Feedback, + Restart, + Welcome, + ToggleZoom, + ToggleLeftDock, + ToggleRightDock, + ToggleBottomDock, + CloseAllDocks, + ] ); #[derive(Clone, PartialEq)] diff --git a/crates/zed2/src/zed2.rs b/crates/zed2/src/zed2.rs index 0af5777f1788e038b86623890ee6e74cbf3a3dbf..d5edbc6f8db501c47419b62aa9f503bdced48356 100644 --- a/crates/zed2/src/zed2.rs +++ b/crates/zed2/src/zed2.rs @@ -43,27 +43,30 @@ use workspace::{ use zed_actions::{OpenBrowser, OpenZedURL}; actions!( - About, - DebugElements, - DecreaseBufferFontSize, - Hide, - HideOthers, - IncreaseBufferFontSize, - Minimize, - OpenDefaultKeymap, - OpenDefaultSettings, - OpenKeymap, - OpenLicenses, - OpenLocalSettings, - OpenLog, - OpenSettings, - OpenTelemetryLog, - Quit, - ResetBufferFontSize, - ResetDatabase, - ShowAll, - ToggleFullScreen, - Zoom, + zed, + [ + About, + DebugElements, + DecreaseBufferFontSize, + Hide, + HideOthers, + IncreaseBufferFontSize, + Minimize, + OpenDefaultKeymap, + OpenDefaultSettings, + OpenKeymap, + OpenLicenses, + OpenLocalSettings, + OpenLog, + OpenSettings, + OpenTelemetryLog, + Quit, + ResetBufferFontSize, + ResetDatabase, + ShowAll, + ToggleFullScreen, + Zoom, + ] ); pub fn build_window_options(