mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-11-14 17:07:26 +00:00
Add crate versions when running cargo -p commands.
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.
This commit is contained in:
parent
668980d865
commit
331d1db317
2 changed files with 15 additions and 1 deletions
|
@ -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>,
|
||||
|
@ -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,
|
||||
|
@ -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)]
|
||||
|
|
|
@ -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,
|
||||
})
|
||||
|
|
Loading…
Reference in a new issue