Extract `project_panel` into its own crate

Antonio Scandurra created

Change summary

Cargo.lock                      | 13 +++++++++++++
crates/project_panel/Cargo.toml | 14 ++++++++++++++
crates/project_panel/src/lib.rs | 25 ++++++++++---------------
crates/zed/Cargo.toml           |  1 +
crates/zed/src/lib.rs           |  1 -
crates/zed/src/main.rs          |  2 +-
6 files changed, 39 insertions(+), 17 deletions(-)

Detailed changes

Cargo.lock 🔗

@@ -3733,6 +3733,18 @@ dependencies = [
  "util",
 ]
 
+[[package]]
+name = "project_panel"
+version = "0.1.0"
+dependencies = [
+ "gpui",
+ "postage",
+ "project",
+ "serde_json 1.0.64",
+ "theme",
+ "workspace",
+]
+
 [[package]]
 name = "prost"
 version = "0.8.0"
@@ -6113,6 +6125,7 @@ dependencies = [
  "parking_lot",
  "postage",
  "project",
+ "project_panel",
  "rand 0.8.3",
  "rpc",
  "rsa",

crates/project_panel/Cargo.toml 🔗

@@ -0,0 +1,14 @@
+[package]
+name = "project_panel"
+version = "0.1.0"
+edition = "2018"
+
+[dependencies]
+gpui = { path = "../gpui" }
+project = { path = "../project" }
+theme = { path = "../theme" }
+workspace = { path = "../workspace" }
+postage = { version = "0.4.1", features = ["futures-traits"] }
+
+[dev-dependencies]
+serde_json = { version = "1.0.64", features = ["preserve_order"] }

crates/zed/src/project_panel.rs → crates/project_panel/src/lib.rs 🔗

@@ -1,8 +1,3 @@
-use crate::{
-    project::{self, Project, ProjectEntry, ProjectPath},
-    workspace::Workspace,
-    Settings,
-};
 use gpui::{
     action,
     elements::{
@@ -19,12 +14,13 @@ use gpui::{
     ViewContext, ViewHandle, WeakViewHandle,
 };
 use postage::watch;
-use project::Worktree;
+use project::{Project, ProjectEntry, ProjectPath, Worktree};
 use std::{
     collections::{hash_map, HashMap},
     ffi::OsStr,
     ops::Range,
 };
+use workspace::{Settings, Workspace};
 
 pub struct ProjectPanel {
     project: ModelHandle<Project>,
@@ -575,17 +571,16 @@ impl Entity for ProjectPanel {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::test::test_app_state;
     use gpui::{TestAppContext, ViewHandle};
     use serde_json::json;
     use std::{collections::HashSet, path::Path};
+    use workspace::WorkspaceParams;
 
     #[gpui::test]
     async fn test_visible_list(mut cx: gpui::TestAppContext) {
-        let app_state = cx.update(test_app_state);
-        let settings = app_state.settings.clone();
-        let fs = app_state.fs.as_fake();
-
+        let params = cx.update(WorkspaceParams::test);
+        let settings = params.settings.clone();
+        let fs = params.fs.as_fake();
         fs.insert_tree(
             "/root1",
             json!({
@@ -624,9 +619,9 @@ mod tests {
 
         let project = cx.add_model(|_| {
             Project::new(
-                app_state.languages.clone(),
-                app_state.client.clone(),
-                app_state.fs.clone(),
+                params.languages.clone(),
+                params.client.clone(),
+                params.fs.clone(),
             )
         });
         let root1 = project
@@ -648,7 +643,7 @@ mod tests {
             .read_with(&cx, |t, _| t.as_local().unwrap().scan_complete())
             .await;
 
-        let (_, workspace) = cx.add_window(|cx| Workspace::new(&app_state.as_ref().into(), cx));
+        let (_, workspace) = cx.add_window(|cx| Workspace::new(&params, cx));
         let panel = workspace.update(&mut cx, |_, cx| ProjectPanel::new(project, settings, cx));
         assert_eq!(
             visible_entry_details(&panel, 0..50, &mut cx),

crates/zed/Cargo.toml 🔗

@@ -32,6 +32,7 @@ fuzzy = { path = "../fuzzy" }
 editor = { path = "../editor" }
 gpui = { path = "../gpui" }
 project = { path = "../project" }
+project_panel = { path = "../project_panel" }
 rpc = { path = "../rpc" }
 sum_tree = { path = "../sum_tree" }
 theme = { path = "../theme" }

crates/zed/src/lib.rs 🔗

@@ -4,7 +4,6 @@ pub mod file_finder;
 pub mod language;
 pub mod menus;
 pub mod people_panel;
-pub mod project_panel;
 #[cfg(any(test, feature = "test-support"))]
 pub mod test;
 pub mod theme_selector;

crates/zed/src/main.rs 🔗

@@ -16,7 +16,7 @@ use zed::{
     client::{http, ChannelList, UserStore},
     editor, file_finder,
     fs::RealFs,
-    language, menus, people_panel, project_panel, theme_selector, AppState, OpenParams, OpenPaths,
+    language, menus, people_panel, theme_selector, AppState, OpenParams, OpenPaths,
 };
 
 fn main() {