diff options
Diffstat (limited to 'crates/ra_lsp_server')
-rw-r--r-- | crates/ra_lsp_server/src/project_model.rs | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/crates/ra_lsp_server/src/project_model.rs b/crates/ra_lsp_server/src/project_model.rs index ae2149463..ff9befe46 100644 --- a/crates/ra_lsp_server/src/project_model.rs +++ b/crates/ra_lsp_server/src/project_model.rs | |||
@@ -2,7 +2,7 @@ use std::path::{Path, PathBuf}; | |||
2 | 2 | ||
3 | use cargo_metadata::{metadata_run, CargoOpt}; | 3 | use cargo_metadata::{metadata_run, CargoOpt}; |
4 | use ra_syntax::SmolStr; | 4 | use ra_syntax::SmolStr; |
5 | use rustc_hash::{FxHashMap, FxHashSet}; | 5 | use rustc_hash::FxHashMap; |
6 | use failure::{format_err, bail}; | 6 | use failure::{format_err, bail}; |
7 | use thread_worker::{WorkerHandle, Worker}; | 7 | use thread_worker::{WorkerHandle, Worker}; |
8 | 8 | ||
@@ -109,11 +109,7 @@ impl CargoWorkspace { | |||
109 | let mut packages = Vec::new(); | 109 | let mut packages = Vec::new(); |
110 | let mut targets = Vec::new(); | 110 | let mut targets = Vec::new(); |
111 | 111 | ||
112 | let ws_members: FxHashSet<String> = meta | 112 | let ws_members = &meta.workspace_members; |
113 | .workspace_members | ||
114 | .into_iter() | ||
115 | .map(|it| it.raw) | ||
116 | .collect(); | ||
117 | 113 | ||
118 | for meta_pkg in meta.packages { | 114 | for meta_pkg in meta.packages { |
119 | let pkg = Package(packages.len()); | 115 | let pkg = Package(packages.len()); |
@@ -121,7 +117,7 @@ impl CargoWorkspace { | |||
121 | pkg_by_id.insert(meta_pkg.id.clone(), pkg); | 117 | pkg_by_id.insert(meta_pkg.id.clone(), pkg); |
122 | let mut pkg_data = PackageData { | 118 | let mut pkg_data = PackageData { |
123 | name: meta_pkg.name.into(), | 119 | name: meta_pkg.name.into(), |
124 | manifest: PathBuf::from(meta_pkg.manifest_path), | 120 | manifest: meta_pkg.manifest_path.clone(), |
125 | targets: Vec::new(), | 121 | targets: Vec::new(), |
126 | is_member, | 122 | is_member, |
127 | dependencies: Vec::new(), | 123 | dependencies: Vec::new(), |
@@ -131,7 +127,7 @@ impl CargoWorkspace { | |||
131 | targets.push(TargetData { | 127 | targets.push(TargetData { |
132 | pkg, | 128 | pkg, |
133 | name: meta_tgt.name.into(), | 129 | name: meta_tgt.name.into(), |
134 | root: PathBuf::from(meta_tgt.src_path), | 130 | root: meta_tgt.src_path.clone(), |
135 | kind: TargetKind::new(meta_tgt.kind.as_slice()), | 131 | kind: TargetKind::new(meta_tgt.kind.as_slice()), |
136 | }); | 132 | }); |
137 | pkg_data.targets.push(tgt); | 133 | pkg_data.targets.push(tgt); |
@@ -141,10 +137,11 @@ impl CargoWorkspace { | |||
141 | let resolve = meta.resolve.expect("metadata executed with deps"); | 137 | let resolve = meta.resolve.expect("metadata executed with deps"); |
142 | for node in resolve.nodes { | 138 | for node in resolve.nodes { |
143 | let source = pkg_by_id[&node.id]; | 139 | let source = pkg_by_id[&node.id]; |
144 | for id in node.dependencies { | 140 | for dep_node in node.deps { |
145 | let target = pkg_by_id[&id]; | 141 | let dep = PackageDependency { |
146 | let name: SmolStr = packages[target.0].name.replace('-', "_").into(); | 142 | name: dep_node.name.into(), |
147 | let dep = PackageDependency { name, pkg: target }; | 143 | pkg: pkg_by_id[&dep_node.pkg], |
144 | }; | ||
148 | packages[source.0].dependencies.push(dep); | 145 | packages[source.0].dependencies.push(dep); |
149 | } | 146 | } |
150 | } | 147 | } |