Remove the last of the major todos

Mikayla created

Change summary

crates/gpui/src/app/test_context.rs           |   5 
crates/gpui/src/platform/test/platform.rs     |   4 
crates/gpui/src/window.rs                     |   2 
crates/live_kit_client/examples/test_app.rs   |  19 +-
crates/project_symbols/src/project_symbols.rs |   1 
crates/terminal_view/src/terminal_element.rs  |  17 ---
crates/terminal_view/src/terminal_view.rs     |   6 
crates/theme/src/styles/colors.rs             |   1 
crates/theme/src/styles/players.rs            |   2 
crates/vim/src/test/vim_test_context.rs       |   8 
crates/workspace/src/dock.rs                  |  26 ----
crates/workspace/src/notifications.rs         |   2 
crates/workspace/src/pane.rs                  |  94 -----------------
crates/workspace/src/searchable.rs            |  13 +-
crates/workspace/src/workspace.rs             |  23 ----
crates/zed/src/zed.rs                         | 115 +++++++-------------
script/bundle                                 |   2 
17 files changed, 73 insertions(+), 267 deletions(-)

Detailed changes

crates/gpui/src/app/test_context.rs 🔗

@@ -111,6 +111,11 @@ impl TestAppContext {
         self.fn_name
     }
 
+    /// Checks whether there have been any new path prompts received by the platform.
+    pub fn did_prompt_for_new_path(&self) -> bool {
+        self.test_platform.did_prompt_for_new_path()
+    }
+
     /// returns a new `TestAppContext` re-using the same executors to interleave tasks.
     pub fn new_app(&self) -> TestAppContext {
         Self::new(self.dispatcher.clone(), self.fn_name)

crates/gpui/src/platform/test/platform.rs 🔗

@@ -102,6 +102,10 @@ impl TestPlatform {
             })
             .detach();
     }
+
+    pub(crate) fn did_prompt_for_new_path(&self) -> bool {
+        self.prompts.borrow().new_path.len() > 0
+    }
 }
 
 impl Platform for TestPlatform {

crates/gpui/src/window.rs 🔗

@@ -1474,9 +1474,7 @@ impl<'a> WindowContext<'a> {
                 InputEvent::MouseUp(mouse_up)
             }
             InputEvent::MouseExited(mouse_exited) => {
-                // todo!("Should we record that the mouse is outside of the window somehow? Or are these global pixels?")
                 self.window.modifiers = mouse_exited.modifiers;
-
                 InputEvent::MouseExited(mouse_exited)
             }
             InputEvent::ModifiersChanged(modifiers_changed) => {

crates/live_kit_client/examples/test_app.rs 🔗

@@ -1,7 +1,7 @@
 use std::{sync::Arc, time::Duration};
 
 use futures::StreamExt;
-use gpui::{actions, KeyBinding};
+use gpui::{actions, KeyBinding, Menu, MenuItem};
 use live_kit_client::{
     LocalAudioTrack, LocalVideoTrack, RemoteAudioTrackUpdate, RemoteVideoTrackUpdate, Room,
 };
@@ -26,15 +26,14 @@ fn main() {
         cx.on_action(quit);
         cx.bind_keys([KeyBinding::new("cmd-q", Quit, None)]);
 
-        // todo!()
-        // cx.set_menus(vec![Menu {
-        //     name: "Zed",
-        //     items: vec![MenuItem::Action {
-        //         name: "Quit",
-        //         action: Box::new(Quit),
-        //         os_action: None,
-        //     }],
-        // }]);
+        cx.set_menus(vec![Menu {
+            name: "Zed",
+            items: vec![MenuItem::Action {
+                name: "Quit",
+                action: Box::new(Quit),
+                os_action: None,
+            }],
+        }]);
 
         let live_kit_url = std::env::var("LIVE_KIT_URL").unwrap_or("http://localhost:7880".into());
         let live_kit_key = std::env::var("LIVE_KIT_KEY").unwrap_or("devkey".into());

crates/project_symbols/src/project_symbols.rs 🔗

@@ -242,7 +242,6 @@ impl PickerDelegate for ProjectSymbolsDelegate {
                 .spacing(ListItemSpacing::Sparse)
                 .selected(selected)
                 .child(
-                    // todo!() combine_syntax_and_fuzzy_match_highlights()
                     v_stack()
                         .child(
                             LabelLike::new().child(

crates/terminal_view/src/terminal_element.rs 🔗

@@ -424,7 +424,6 @@ impl TerminalElement {
             let line_height = font_pixels * line_height.to_pixels(rem_size);
             let font_id = cx.text_system().resolve_font(&text_style.font());
 
-            // todo!(do we need to keep this unwrap?)
             let cell_width = text_system
                 .advance(font_id, font_pixels, 'm')
                 .unwrap()
@@ -524,7 +523,6 @@ impl TerminalElement {
                             underline: Default::default(),
                         }],
                     )
-                    //todo!(do we need to keep this unwrap?)
                     .unwrap()
             };
 
@@ -664,21 +662,6 @@ impl TerminalElement {
                 },
             ),
         );
-        self.interactivity.on_click({
-            let terminal = terminal.clone();
-            move |e, cx| {
-                if e.down.button == MouseButton::Right {
-                    let mouse_mode = terminal.update(cx, |terminal, _cx| {
-                        terminal.mouse_mode(e.down.modifiers.shift)
-                    });
-
-                    if !mouse_mode {
-                        //todo!(context menu)
-                        // view.deploy_context_menu(e.position, cx);
-                    }
-                }
-            }
-        });
         self.interactivity.on_scroll_wheel({
             let terminal = terminal.clone();
             move |e, cx| {

crates/terminal_view/src/terminal_view.rs 🔗

@@ -651,8 +651,10 @@ impl Render for TerminalView {
             .on_mouse_down(
                 MouseButton::Right,
                 cx.listener(|this, event: &MouseDownEvent, cx| {
-                    this.deploy_context_menu(event.position, cx);
-                    cx.notify();
+                    if !this.terminal.read(cx).mouse_mode(event.modifiers.shift) {
+                        this.deploy_context_menu(event.position, cx);
+                        cx.notify();
+                    }
                 }),
             )
             .child(

crates/theme/src/styles/colors.rs 🔗

@@ -222,6 +222,7 @@ pub struct ThemeStyles {
 
     #[refineable]
     pub status: StatusColors,
+
     pub player: PlayerColors,
     pub syntax: Arc<SyntaxTheme>,
 }

crates/theme/src/styles/players.rs 🔗

@@ -122,12 +122,10 @@ impl PlayerColors {
 
 impl PlayerColors {
     pub fn local(&self) -> PlayerColor {
-        // todo!("use a valid color");
         *self.0.first().unwrap()
     }
 
     pub fn absent(&self) -> PlayerColor {
-        // todo!("use a valid color");
         *self.0.last().unwrap()
     }
 

crates/vim/src/test/vim_test_context.rs 🔗

@@ -6,7 +6,7 @@ use editor::test::{
 use futures::Future;
 use gpui::{Context, View, VisualContext};
 use lsp::request;
-use search::BufferSearchBar;
+use search::{project_search::ProjectSearchBar, BufferSearchBar};
 
 use crate::{state::Operator, *};
 
@@ -59,9 +59,9 @@ impl VimTestContext {
                 pane.toolbar().update(cx, |toolbar, cx| {
                     let buffer_search_bar = cx.new_view(BufferSearchBar::new);
                     toolbar.add_item(buffer_search_bar, cx);
-                    // todo!();
-                    // let project_search_bar = cx.add_view(|_| ProjectSearchBar::new());
-                    // toolbar.add_item(project_search_bar, cx);
+
+                    let project_search_bar = cx.new_view(|_| ProjectSearchBar::new());
+                    toolbar.add_item(project_search_bar, cx);
                 })
             });
             workspace.status_bar().update(cx, |status_bar, cx| {

crates/workspace/src/dock.rs 🔗

@@ -167,15 +167,6 @@ impl DockPosition {
         }
     }
 
-    // todo!()
-    // fn to_resize_handle_side(self) -> HandleSide {
-    //     match self {
-    //         Self::Left => HandleSide::Right,
-    //         Self::Bottom => HandleSide::Top,
-    //         Self::Right => HandleSide::Left,
-    //     }
-    // }
-
     pub fn axis(&self) -> Axis {
         match self {
             Self::Left | Self::Right => Axis::Horizontal,
@@ -186,8 +177,6 @@ impl DockPosition {
 
 struct PanelEntry {
     panel: Arc<dyn PanelHandle>,
-    // todo!()
-    // context_menu: View<ContextMenu>,
     _subscriptions: [Subscription; 2],
 }
 
@@ -265,12 +254,6 @@ impl Dock {
         self.is_open
     }
 
-    // todo!()
-    //     pub fn has_focus(&self, cx: &WindowContext) -> bool {
-    //         self.visible_panel()
-    //             .map_or(false, |panel| panel.has_focus(cx))
-    //     }
-
     pub fn panel<T: Panel>(&self) -> Option<View<T>> {
         self.panel_entries
             .iter()
@@ -417,16 +400,8 @@ impl Dock {
             }),
         ];
 
-        // todo!()
-        // let dock_view_id = cx.view_id();
         self.panel_entries.push(PanelEntry {
             panel: Arc::new(panel),
-            // todo!()
-            // context_menu: cx.add_view(|cx| {
-            //     let mut menu = ContextMenu::new(dock_view_id, cx);
-            //     menu.set_position_mode(OverlayPositionMode::Local);
-            //     menu
-            // }),
             _subscriptions: subscriptions,
         });
         cx.notify()
@@ -618,7 +593,6 @@ impl PanelButtons {
 
 impl Render for PanelButtons {
     fn render(&mut self, cx: &mut ViewContext<Self>) -> impl IntoElement {
-        // todo!()
         let dock = self.dock.read(cx);
         let active_index = dock.active_panel_index;
         let is_open = dock.is_open;

crates/workspace/src/notifications.rs 🔗

@@ -8,8 +8,6 @@ use std::{any::TypeId, ops::DerefMut};
 
 pub fn init(cx: &mut AppContext) {
     cx.set_global(NotificationTracker::new());
-    // todo!()
-    // simple_message_notification::init(cx);
 }
 
 pub trait Notification: EventEmitter<DismissEvent> + Render {}

crates/workspace/src/pane.rs 🔗

@@ -242,87 +242,6 @@ pub struct DraggedTab {
     pub is_active: bool,
 }
 
-// pub struct DraggedItem {
-//     pub handle: Box<dyn ItemHandle>,
-//     pub pane: WeakView<Pane>,
-// }
-
-// pub enum ReorderBehavior {
-//     None,
-//     MoveAfterActive,
-//     MoveToIndex(usize),
-// }
-
-// #[derive(Debug, Clone, Copy, PartialEq, Eq)]
-// enum TabBarContextMenuKind {
-//     New,
-//     Split,
-// }
-
-// struct TabBarContextMenu {
-//     kind: TabBarContextMenuKind,
-//     handle: View<ContextMenu>,
-// }
-
-// impl TabBarContextMenu {
-//     fn handle_if_kind(&self, kind: TabBarContextMenuKind) -> Option<View<ContextMenu>> {
-//         if self.kind == kind {
-//             return Some(self.handle.clone());
-//         }
-//         None
-//     }
-// }
-
-// #[allow(clippy::too_many_arguments)]
-// fn nav_button<A: Action, F: 'static + Fn(&mut Pane, &mut ViewContext<Pane>)>(
-//     svg_path: &'static str,
-//     style: theme::Interactive<theme2::IconButton>,
-//     nav_button_height: f32,
-//     tooltip_style: TooltipStyle,
-//     enabled: bool,
-//     on_click: F,
-//     tooltip_action: A,
-//     action_name: &str,
-//     cx: &mut ViewContext<Pane>,
-// ) -> AnyElement<Pane> {
-//     MouseEventHandler::new::<A, _>(0, cx, |state, _| {
-//         let style = if enabled {
-//             style.style_for(state)
-//         } else {
-//             style.disabled_style()
-//         };
-//         Svg::new(svg_path)
-//             .with_color(style.color)
-//             .constrained()
-//             .with_width(style.icon_width)
-//             .aligned()
-//             .contained()
-//             .with_style(style.container)
-//             .constrained()
-//             .with_width(style.button_width)
-//             .with_height(nav_button_height)
-//             .aligned()
-//             .top()
-//     })
-//     .with_cursor_style(if enabled {
-//         CursorStyle::PointingHand
-//     } else {
-//         CursorStyle::default()
-//     })
-//     .on_click(MouseButton::Left, move |_, toolbar, cx| {
-//         on_click(toolbar, cx)
-//     })
-//     .with_tooltip::<A>(
-//         0,
-//         action_name.to_string(),
-//         Some(Box::new(tooltip_action)),
-//         tooltip_style,
-//         cx,
-//     )
-//     .contained()
-//     .into_any_named("nav button")
-// }
-
 impl EventEmitter<Event> for Pane {}
 
 impl Pane {
@@ -333,13 +252,6 @@ impl Pane {
         can_drop_predicate: Option<Arc<dyn Fn(&dyn Any, &mut WindowContext) -> bool + 'static>>,
         cx: &mut ViewContext<Self>,
     ) -> Self {
-        // todo!("context menu")
-        // let pane_view_id = cx.view_id();
-        // let context_menu = cx.build_view(|cx| ContextMenu::new(pane_view_id, cx));
-        // context_menu.update(cx, |menu, _| {
-        //     menu.set_position_mode(OverlayPositionMode::Local)
-        // });
-        //
         let focus_handle = cx.focus_handle();
 
         let subscriptions = vec![
@@ -370,11 +282,6 @@ impl Pane {
             split_item_menu: None,
             tab_bar_scroll_handle: ScrollHandle::new(),
             drag_split_direction: None,
-            // tab_bar_context_menu: TabBarContextMenu {
-            //     kind: TabBarContextMenuKind::New,
-            //     handle: context_menu,
-            // },
-            // tab_context_menu: cx.build_view(|_| ContextMenu::new(pane_view_id, cx)),
             workspace,
             project,
             can_drop_predicate,
@@ -450,7 +357,6 @@ impl Pane {
     }
 
     pub fn has_focus(&self, cx: &WindowContext) -> bool {
-        // todo!(); // inline this manually
         self.focus_handle.contains_focused(cx)
     }
 

crates/workspace/src/searchable.rs 🔗

@@ -1,8 +1,8 @@
 use std::{any::Any, sync::Arc};
 
 use gpui::{
-    AnyView, AppContext, EventEmitter, Subscription, Task, View, ViewContext, WeakView,
-    WindowContext,
+    AnyView, AnyWeakView, AppContext, EventEmitter, Subscription, Task, View, ViewContext,
+    WeakView, WindowContext,
 };
 use project::search::SearchQuery;
 
@@ -127,7 +127,6 @@ pub trait SearchableItemHandle: ItemHandle {
     ) -> Option<usize>;
 }
 
-// todo!("here is where we need to use AnyWeakView");
 impl<T: SearchableItem> SearchableItemHandle for View<T> {
     fn downgrade(&self) -> Box<dyn WeakSearchableItemHandle> {
         Box::new(self.downgrade())
@@ -249,7 +248,7 @@ impl Eq for Box<dyn SearchableItemHandle> {}
 pub trait WeakSearchableItemHandle: WeakItemHandle {
     fn upgrade(&self, cx: &AppContext) -> Option<Box<dyn SearchableItemHandle>>;
 
-    // fn into_any(self) -> AnyWeakView;
+    fn into_any(self) -> AnyWeakView;
 }
 
 impl<T: SearchableItem> WeakSearchableItemHandle for WeakView<T> {
@@ -257,9 +256,9 @@ impl<T: SearchableItem> WeakSearchableItemHandle for WeakView<T> {
         Some(Box::new(self.upgrade()?))
     }
 
-    // fn into_any(self) -> AnyView {
-    //     self.into_any()
-    // }
+    fn into_any(self) -> AnyWeakView {
+        self.into()
+    }
 }
 
 impl PartialEq for Box<dyn WeakSearchableItemHandle> {

crates/workspace/src/workspace.rs 🔗

@@ -1143,7 +1143,6 @@ impl Workspace {
         quitting: bool,
         cx: &mut ViewContext<Self>,
     ) -> Task<Result<bool>> {
-        //todo!(saveing)
         let active_call = self.active_call().cloned();
         let window = cx.window_handle();
 
@@ -1694,28 +1693,6 @@ impl Workspace {
         None
     }
 
-    // todo!("implement zoom")
-    #[allow(unused)]
-    fn zoom_out(&mut self, cx: &mut ViewContext<Self>) {
-        for pane in &self.panes {
-            pane.update(cx, |pane, cx| pane.set_zoomed(false, cx));
-        }
-
-        self.left_dock.update(cx, |dock, cx| dock.zoom_out(cx));
-        self.bottom_dock.update(cx, |dock, cx| dock.zoom_out(cx));
-        self.right_dock.update(cx, |dock, cx| dock.zoom_out(cx));
-        self.zoomed = None;
-        self.zoomed_position = None;
-
-        cx.notify();
-    }
-
-    // todo!()
-    //     #[cfg(any(test, feature = "test-support"))]
-    //     pub fn zoomed_view(&self, cx: &AppContext) -> Option<AnyViewHandle> {
-    //         self.zoomed.and_then(|view| view.upgrade(cx))
-    //     }
-
     fn dismiss_zoomed_items_to_reveal(
         &mut self,
         dock_to_reveal: Option<DockPosition>,

crates/zed/src/zed.rs 🔗

@@ -23,7 +23,7 @@ use quick_action_bar::QuickActionBar;
 use search::project_search::ProjectSearchBar;
 use settings::{initial_local_settings_content, KeymapFile, Settings, SettingsStore};
 use std::{borrow::Cow, ops::Deref, sync::Arc};
-use terminal_view::terminal_panel::TerminalPanel;
+use terminal_view::terminal_panel::{self, TerminalPanel};
 use util::{
     asset_str,
     channel::{AppCommitSha, ReleaseChannel},
@@ -299,79 +299,42 @@ pub fn initialize_workspace(app_state: Arc<AppState>, cx: &mut AppContext) {
                     );
                 },
             )
-            //todo!()
-            // cx.add_action({
-            //     move |workspace: &mut Workspace, _: &DebugElements, cx: &mut ViewContext<Workspace>| {
-            //         let app_state = workspace.app_state().clone();
-            //         let markdown = app_state.languages.language_for_name("JSON");
-            //         let window = cx.window();
-            //         cx.spawn(|workspace, mut cx| async move {
-            //             let markdown = markdown.await.log_err();
-            //             let content = to_string_pretty(&window.debug_elements(&cx).ok_or_else(|| {
-            //                 anyhow!("could not debug elements for window {}", window.id())
-            //             })?)
-            //             .unwrap();
-            //             workspace
-            //                 .update(&mut cx, |workspace, cx| {
-            //                     workspace.with_local_workspace(cx, move |workspace, cx| {
-            //                         let project = workspace.project().clone();
-            //                         let buffer = project
-            //                             .update(cx, |project, cx| {
-            //                                 project.create_buffer(&content, markdown, cx)
-            //                             })
-            //                             .expect("creating buffers on a local workspace always succeeds");
-            //                         let buffer = cx.add_model(|cx| {
-            //                             MultiBuffer::singleton(buffer, cx)
-            //                                 .with_title("Debug Elements".into())
-            //                         });
-            //                         workspace.add_item(
-            //                             Box::new(cx.add_view(|cx| {
-            //                                 Editor::for_multibuffer(buffer, Some(project.clone()), cx)
-            //                             })),
-            //                             cx,
-            //                         );
-            //                     })
-            //                 })?
-            //                 .await
-            //         })
-            //         .detach_and_log_err(cx);
-            //     }
-            // });
-            // .register_action(
-            //     |workspace: &mut Workspace,
-            //      _: &project_panel::ToggleFocus,
-            //      cx: &mut ViewContext<Workspace>| {
-            //         workspace.toggle_panel_focus::<ProjectPanel>(cx);
-            //     },
-            // );
-            // cx.add_action(
-            //     |workspace: &mut Workspace,
-            //      _: &collab_ui::collab_panel::ToggleFocus,
-            //      cx: &mut ViewContext<Workspace>| {
-            //         workspace.toggle_panel_focus::<collab_ui::collab_panel::CollabPanel>(cx);
-            //     },
-            // );
-            // cx.add_action(
-            //     |workspace: &mut Workspace,
-            //      _: &collab_ui::chat_panel::ToggleFocus,
-            //      cx: &mut ViewContext<Workspace>| {
-            //         workspace.toggle_panel_focus::<collab_ui::chat_panel::ChatPanel>(cx);
-            //     },
-            // );
-            // cx.add_action(
-            //     |workspace: &mut Workspace,
-            //      _: &collab_ui::notification_panel::ToggleFocus,
-            //      cx: &mut ViewContext<Workspace>| {
-            //         workspace.toggle_panel_focus::<collab_ui::notification_panel::NotificationPanel>(cx);
-            //     },
-            // );
-            // cx.add_action(
-            //     |workspace: &mut Workspace,
-            //      _: &terminal_panel::ToggleFocus,
-            //      cx: &mut ViewContext<Workspace>| {
-            //         workspace.toggle_panel_focus::<TerminalPanel>(cx);
-            //     },
-            // );
+            .register_action(
+                |workspace: &mut Workspace,
+                 _: &project_panel::ToggleFocus,
+                 cx: &mut ViewContext<Workspace>| {
+                    workspace.toggle_panel_focus::<ProjectPanel>(cx);
+                },
+            )
+            .register_action(
+                |workspace: &mut Workspace,
+                 _: &collab_ui::collab_panel::ToggleFocus,
+                 cx: &mut ViewContext<Workspace>| {
+                    workspace.toggle_panel_focus::<collab_ui::collab_panel::CollabPanel>(cx);
+                },
+            )
+            .register_action(
+                |workspace: &mut Workspace,
+                 _: &collab_ui::chat_panel::ToggleFocus,
+                 cx: &mut ViewContext<Workspace>| {
+                    workspace.toggle_panel_focus::<collab_ui::chat_panel::ChatPanel>(cx);
+                },
+            )
+            .register_action(
+                |workspace: &mut Workspace,
+                 _: &collab_ui::notification_panel::ToggleFocus,
+                 cx: &mut ViewContext<Workspace>| {
+                    workspace
+                        .toggle_panel_focus::<collab_ui::notification_panel::NotificationPanel>(cx);
+                },
+            )
+            .register_action(
+                |workspace: &mut Workspace,
+                 _: &terminal_panel::ToggleFocus,
+                 cx: &mut ViewContext<Workspace>| {
+                    workspace.toggle_panel_focus::<TerminalPanel>(cx);
+                },
+            )
             .register_action({
                 let app_state = Arc::downgrade(&app_state);
                 move |_, _: &NewWindow, cx| {
@@ -1658,8 +1621,8 @@ mod tests {
             })
             .unwrap();
         save_task.await.unwrap();
-        // todo!() po
-        //assert!(!cx.did_prompt_for_new_path());
+
+        assert!(!cx.did_prompt_for_new_path());
         window
             .update(cx, |_, cx| {
                 editor.update(cx, |editor, cx| {

script/bundle 🔗

@@ -132,7 +132,7 @@ else
     cp -R target/${target_dir}/WebRTC.framework "${app_path}/Contents/Frameworks/"
 fi
 
-#todo!(The app identifier has been set to 'Dev', but the channel is nightly, RATIONALIZE ALL OF THIS MESS)
+# Note: The app identifier for our development builds is the same as the app identifier for nightly.
 cp crates/${zed_crate}/contents/$channel/embedded.provisionprofile "${app_path}/Contents/"
 
 if [[ -n $MACOS_CERTIFICATE && -n $MACOS_CERTIFICATE_PASSWORD && -n $APPLE_NOTARIZATION_USERNAME && -n $APPLE_NOTARIZATION_PASSWORD ]]; then