Skip to content

Commit

Permalink
rust-project: Fix including targets in buildfile
Browse files Browse the repository at this point in the history
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
  • Loading branch information
darichey authored and facebook-github-bot committed Jun 3, 2024
1 parent 071221f commit fdac95c
Showing 1 changed file with 35 additions and 18 deletions.
53 changes: 35 additions & 18 deletions integrations/rust-project/src/cli/develop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<Vec<Target>, 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::<Vec<_>>(),
));
let direct_owning_targets = dedupe_unittest(&self.resolve_file_targets(files));

let unique_owning_targets = direct_owning_targets
.iter()
Expand Down Expand Up @@ -168,34 +162,57 @@ impl Develop {
Ok(targets)
}

fn resolve_file_targets(&self, files: &[PathBuf]) -> Vec<Target> {
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::<Vec<_>>()
}
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<PathBuf, Vec<Target>> {
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<Target>) -> Result<JsonProject, anyhow::Error> {
Expand Down

0 comments on commit fdac95c

Please sign in to comment.