From fdac95c1aa546a16bd355f3279913e91539e7368 Mon Sep 17 00:00:00 2001 From: David Richey Date: Mon, 3 Jun 2024 15:25:00 -0700 Subject: [PATCH] rust-project: Fix including targets in buildfile Summary: D57646487 inadvertently changed `resolve_file_owners` to call `query_owner` instead of `query_owning_buildfile`. D57929395 then refactored away `resolve_file_owners` since it was now identical to `resolve_file_targets`. This diff partially reverts both commits. Reviewed By: Wilfred Differential Revision: D58102203 fbshipit-source-id: d17bb11c127cf905deac57d5df4bb3da325ebc09 --- integrations/rust-project/src/cli/develop.rs | 53 +++++++++++++------- 1 file changed, 35 insertions(+), 18 deletions(-) diff --git a/integrations/rust-project/src/cli/develop.rs b/integrations/rust-project/src/cli/develop.rs index 3d7aa797e407b..0407a5fe43a6c 100644 --- a/integrations/rust-project/src/cli/develop.rs +++ b/integrations/rust-project/src/cli/develop.rs @@ -127,13 +127,7 @@ impl Develop { /// For every Rust file, return the relevant buck targets that should be used to configure rust-analyzer. pub(crate) fn related_targets(&self, files: &[PathBuf]) -> Result, anyhow::Error> { // We always want the targets that directly own these Rust files. - let direct_owning_targets = dedupe_unittest(&dedupe_targets( - &self - .resolve_file_owners(files) - .into_values() - .flatten() - .collect::>(), - )); + let direct_owning_targets = dedupe_unittest(&self.resolve_file_targets(files)); let unique_owning_targets = direct_owning_targets .iter() @@ -168,34 +162,57 @@ impl Develop { Ok(targets) } + fn resolve_file_targets(&self, files: &[PathBuf]) -> Vec { + let file_targets = match self.buck.query_owner(files) { + Ok(targets) => { + for (file, targets) in targets.iter() { + if targets.is_empty() { + warn!(file = ?file, "Buck returned zero targets for this file."); + } + } + + targets.into_values().flatten().collect::>() + } + Err(_) => { + let mut file_targets = vec![]; + for file in files { + match self.buck.query_owner(&[file.to_path_buf()]) { + Ok(targets) => { + file_targets.extend(targets.into_values().flatten()); + } + Err(e) => { + warn!(file = ?file, "Could not find a target that owns this file: {:#}", e); + } + } + } + + file_targets + } + }; + + dedupe_targets(&file_targets) + } + pub fn resolve_file_owners(&self, files: &[PathBuf]) -> FxHashMap> { - let owners = match self.buck.query_owner(&files) { + match self.buck.query_owning_buildfile(&files) { Ok(owners) => owners, Err(_) => { let mut owners = FxHashMap::default(); for file in files { - match self.buck.query_owner(&[file.to_path_buf()]) { + match self.buck.query_owning_buildfile(&[file.to_path_buf()]) { Ok(file_owners) => { owners.extend(file_owners.into_iter()); } Err(e) => { - warn!(file = ?file, "Could not find a target that owns this file: {:#}", e); + warn!(file = ?file, "Could not find a target that owns this file: {}", e); } } } owners } - }; - - for (file, targets) in owners.iter() { - if targets.is_empty() { - warn!(file = ?file, "Buck returned zero targets for this file."); - } } - - owners } pub(crate) fn run(&self, targets: Vec) -> Result {