diff --git a/Cargo.lock b/Cargo.lock index c84fa0c02d0..949a58e86e5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -113,7 +113,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "cargo_metadata" version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" +source = "git+https://github.com/matklad/cargo_metadata.git?branch=well-typed#2f125128c38beeef34e0bfc1bc27861a24753dfe" dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -724,7 +724,7 @@ dependencies = [ name = "ra_lsp_server" version = "0.1.0" dependencies = [ - "cargo_metadata 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cargo_metadata 0.6.4 (git+https://github.com/matklad/cargo_metadata.git?branch=well-typed)", "crossbeam-channel 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "drop_bomb 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1489,7 +1489,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum block-buffer 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a076c298b9ecdb530ed9d967e74a6027d6a7478924520acddcddc24c1c8ab3ab" "checksum byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40" "checksum byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "94f88df23a25417badc922ab0f5716cc1330e87f71ddd9203b3a3ccd9cedf75d" -"checksum cargo_metadata 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e5d1b4d380e1bab994591a24c2bdd1b054f64b60bef483a8c598c7c345bc3bbe" +"checksum cargo_metadata 0.6.4 (git+https://github.com/matklad/cargo_metadata.git?branch=well-typed)" = "" "checksum cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4a8b715cb4597106ea87c7c84b2f1d452c7492033765df7f32651e66fcf749" "checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4" "checksum chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "45912881121cb26fad7c38c17ba7daa18764771836b34fab7d3fbd93ed633878" diff --git a/Cargo.toml b/Cargo.toml index c5155e89960..82b08ab40c8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,3 +6,4 @@ incremental = true debug = true [patch.'crates-io'] +cargo_metadata = { git = "https://github.com/matklad/cargo_metadata.git", branch = "well-typed" } diff --git a/crates/ra_lsp_server/src/project_model.rs b/crates/ra_lsp_server/src/project_model.rs index ae214946334..ff9befe4691 100644 --- a/crates/ra_lsp_server/src/project_model.rs +++ b/crates/ra_lsp_server/src/project_model.rs @@ -2,7 +2,7 @@ use cargo_metadata::{metadata_run, CargoOpt}; use ra_syntax::SmolStr; -use rustc_hash::{FxHashMap, FxHashSet}; +use rustc_hash::FxHashMap; use failure::{format_err, bail}; use thread_worker::{WorkerHandle, Worker}; @@ -109,11 +109,7 @@ pub fn from_cargo_metadata(path: &Path) -> Result { let mut packages = Vec::new(); let mut targets = Vec::new(); - let ws_members: FxHashSet = meta - .workspace_members - .into_iter() - .map(|it| it.raw) - .collect(); + let ws_members = &meta.workspace_members; for meta_pkg in meta.packages { let pkg = Package(packages.len()); @@ -121,7 +117,7 @@ pub fn from_cargo_metadata(path: &Path) -> Result { pkg_by_id.insert(meta_pkg.id.clone(), pkg); let mut pkg_data = PackageData { name: meta_pkg.name.into(), - manifest: PathBuf::from(meta_pkg.manifest_path), + manifest: meta_pkg.manifest_path.clone(), targets: Vec::new(), is_member, dependencies: Vec::new(), @@ -131,7 +127,7 @@ pub fn from_cargo_metadata(path: &Path) -> Result { targets.push(TargetData { pkg, name: meta_tgt.name.into(), - root: PathBuf::from(meta_tgt.src_path), + root: meta_tgt.src_path.clone(), kind: TargetKind::new(meta_tgt.kind.as_slice()), }); pkg_data.targets.push(tgt); @@ -141,10 +137,11 @@ pub fn from_cargo_metadata(path: &Path) -> Result { let resolve = meta.resolve.expect("metadata executed with deps"); for node in resolve.nodes { let source = pkg_by_id[&node.id]; - for id in node.dependencies { - let target = pkg_by_id[&id]; - let name: SmolStr = packages[target.0].name.replace('-', "_").into(); - let dep = PackageDependency { name, pkg: target }; + for dep_node in node.deps { + let dep = PackageDependency { + name: dep_node.name.into(), + pkg: pkg_by_id[&dep_node.pkg], + }; packages[source.0].dependencies.push(dep); } }