From 9a1cbf50a73e728a2fc95683cf10763f0f8a8834 Mon Sep 17 00:00:00 2001 From: Jasper Bekkers Date: Mon, 20 Oct 2025 18:05:27 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=A9=E2=80=8D=F0=9F=8F=AB=20Add=20suppo?= =?UTF-8?q?rt=20for=20(#4811)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/cli/src/workspace.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/packages/cli/src/workspace.rs b/packages/cli/src/workspace.rs index 58aa2f46c..486a79935 100644 --- a/packages/cli/src/workspace.rs +++ b/packages/cli/src/workspace.rs @@ -302,6 +302,29 @@ impl Workspace { return Ok(self.krates.nid_for_kid(kid).unwrap()); }; + // if we have default members specified, try them first + if let Some(ws) = &self.cargo_toml.workspace { + for default in &ws.default_members { + let mut workspace_members = self.krates.workspace_members(); + let default_member_path = std::fs::canonicalize(default).unwrap(); + + let found = workspace_members.find_map(|node| { + if let krates::Node::Krate { id, krate, .. } = node { + let member_path = + std::fs::canonicalize(krate.manifest_path.parent().unwrap()).unwrap(); + if member_path == default_member_path { + return Some(id); + } + } + None + }); + + if let Some(kid) = found { + return Ok(self.krates.nid_for_kid(kid).unwrap()); + } + } + } + // Otherwise find the package that is the closest parent of the current directory let current_dir = std::env::current_dir()?; let current_dir = current_dir.as_path();