Skip to content

Commit

Permalink
Add crate versions when running cargo -p commands.
Browse files Browse the repository at this point in the history
Until now cargo commands with the -p flag would pass the package name only.
It doesn't play super well with the toml Renaming dependencies feature.
This commit specifies the package name and version when a cargo command is run with the -p flag,
to avoid ambiguities.
  • Loading branch information
o0Ignition0o committed Mar 31, 2020
1 parent 668980d commit 331d1db
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 1 deletion.
14 changes: 14 additions & 0 deletions crates/ra_project_model/src/cargo_workspace.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ pub type Target = Idx<TargetData>;

#[derive(Debug, Clone)]
pub struct PackageData {
pub id: String,
pub name: String,
pub manifest: PathBuf,
pub targets: Vec<Target>,
Expand Down Expand Up @@ -180,6 +181,7 @@ impl CargoWorkspace {
.with_context(|| format!("Failed to parse edition {}", edition))?;
let pkg = packages.alloc(PackageData {
name,
id: id.to_string(),
manifest: manifest_path,
targets: Vec::new(),
is_member,
Expand Down Expand Up @@ -249,6 +251,18 @@ impl CargoWorkspace {
pub fn workspace_root(&self) -> &Path {
&self.workspace_root
}

pub fn package_flag(&self, package: &PackageData) -> String {
if self.is_unique(&*package.name) {
package.name.clone()
} else {
package.id.clone()
}
}

fn is_unique(&self, name: &str) -> bool {
self.packages.iter().filter(|(_, v)| v.name == name).count() == 1
}
}

#[derive(Debug, Clone, Default)]
Expand Down
2 changes: 1 addition & 1 deletion crates/rust-analyzer/src/cargo_target_spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ impl CargoTargetSpec {
ProjectWorkspace::Cargo { cargo, .. } => {
let tgt = cargo.target_by_root(&path)?;
Some(CargoTargetSpec {
package: cargo[cargo[tgt].package].name.clone(),
package: cargo.package_flag(&cargo[cargo[tgt].package]),
target: cargo[tgt].name.clone(),
target_kind: cargo[tgt].kind,
})
Expand Down

0 comments on commit 331d1db

Please sign in to comment.