diff options
author | Metabaron <[email protected]> | 2019-11-12 10:53:31 +0000 |
---|---|---|
committer | Metabaron <[email protected]> | 2019-11-12 11:01:13 +0000 |
commit | 53b9c1c8d898a84a10b86f2fc31a7f6c2dfc46d0 (patch) | |
tree | d7dc144ff0cb0a5b4dc1bf8221cc0bf082cb15ce /crates/ra_project_model/src | |
parent | b69738590ca1c4823a030d317e7fa6e918618a4b (diff) |
return Error instead of panicking in from_cargo_metadata
Diffstat (limited to 'crates/ra_project_model/src')
-rw-r--r-- | crates/ra_project_model/src/cargo_workspace.rs | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/crates/ra_project_model/src/cargo_workspace.rs b/crates/ra_project_model/src/cargo_workspace.rs index ff96bf904..cf88911b7 100644 --- a/crates/ra_project_model/src/cargo_workspace.rs +++ b/crates/ra_project_model/src/cargo_workspace.rs | |||
@@ -141,20 +141,21 @@ impl CargoWorkspace { | |||
141 | let ws_members = &meta.workspace_members; | 141 | let ws_members = &meta.workspace_members; |
142 | 142 | ||
143 | for meta_pkg in meta.packages { | 143 | for meta_pkg in meta.packages { |
144 | let is_member = ws_members.contains(&meta_pkg.id); | 144 | let cargo_metadata::Package { id, edition, name, manifest_path, .. } = meta_pkg; |
145 | let name = meta_pkg.name; | 145 | let is_member = ws_members.contains(&id); |
146 | let edition = Edition::from_str(&edition) | ||
147 | .map_err(|e| (format!("metadata for package {} failed: {}", &name, e.msg)))?; | ||
146 | let pkg = packages.alloc(PackageData { | 148 | let pkg = packages.alloc(PackageData { |
147 | name: name.clone(), | 149 | name, |
148 | manifest: meta_pkg.manifest_path.clone(), | 150 | manifest: manifest_path, |
149 | targets: Vec::new(), | 151 | targets: Vec::new(), |
150 | is_member, | 152 | is_member, |
151 | edition: Edition::from_str(&meta_pkg.edition) | 153 | edition, |
152 | .unwrap_or_else(|e| panic!("unknown edition {} for package {:?}", e, &name)), | ||
153 | dependencies: Vec::new(), | 154 | dependencies: Vec::new(), |
154 | features: Vec::new(), | 155 | features: Vec::new(), |
155 | }); | 156 | }); |
156 | let pkg_data = &mut packages[pkg]; | 157 | let pkg_data = &mut packages[pkg]; |
157 | pkg_by_id.insert(meta_pkg.id.clone(), pkg); | 158 | pkg_by_id.insert(id, pkg); |
158 | for meta_tgt in meta_pkg.targets { | 159 | for meta_tgt in meta_pkg.targets { |
159 | let tgt = targets.alloc(TargetData { | 160 | let tgt = targets.alloc(TargetData { |
160 | pkg, | 161 | pkg, |