diff options
Diffstat (limited to 'crates/ra_project_model/src/lib.rs')
-rw-r--r-- | crates/ra_project_model/src/lib.rs | 58 |
1 files changed, 4 insertions, 54 deletions
diff --git a/crates/ra_project_model/src/lib.rs b/crates/ra_project_model/src/lib.rs index 49710b358..c07c54936 100644 --- a/crates/ra_project_model/src/lib.rs +++ b/crates/ra_project_model/src/lib.rs | |||
@@ -3,9 +3,9 @@ | |||
3 | mod cargo_workspace; | 3 | mod cargo_workspace; |
4 | mod json_project; | 4 | mod json_project; |
5 | mod sysroot; | 5 | mod sysroot; |
6 | mod workspace_error; | ||
6 | 7 | ||
7 | use std::{ | 8 | use std::{ |
8 | fmt, | ||
9 | fs::File, | 9 | fs::File, |
10 | io::BufReader, | 10 | io::BufReader, |
11 | path::{Path, PathBuf}, | 11 | path::{Path, PathBuf}, |
@@ -13,68 +13,18 @@ use std::{ | |||
13 | }; | 13 | }; |
14 | 14 | ||
15 | use ra_cfg::CfgOptions; | 15 | use ra_cfg::CfgOptions; |
16 | use ra_db::{CrateGraph, CrateId, Edition, Env, FileId, ParseEditionError}; | 16 | use ra_db::{CrateGraph, CrateId, Edition, Env, FileId}; |
17 | use rustc_hash::FxHashMap; | 17 | use rustc_hash::FxHashMap; |
18 | use serde_json::from_reader; | 18 | use serde_json::from_reader; |
19 | 19 | ||
20 | use crate::workspace_error::WorkspaceError; | ||
21 | |||
20 | pub use crate::{ | 22 | pub use crate::{ |
21 | cargo_workspace::{CargoFeatures, CargoWorkspace, Package, Target, TargetKind}, | 23 | cargo_workspace::{CargoFeatures, CargoWorkspace, Package, Target, TargetKind}, |
22 | json_project::JsonProject, | 24 | json_project::JsonProject, |
23 | sysroot::Sysroot, | 25 | sysroot::Sysroot, |
24 | }; | 26 | }; |
25 | 27 | ||
26 | #[derive(Debug)] | ||
27 | pub enum WorkspaceError { | ||
28 | CargoMetadataFailed(cargo_metadata::Error), | ||
29 | CargoTomlNotFound(PathBuf), | ||
30 | NoStdLib(PathBuf), | ||
31 | OpenWorkspaceError(std::io::Error), | ||
32 | ParseEditionError(ParseEditionError), | ||
33 | ReadWorkspaceError(serde_json::Error), | ||
34 | RustcCfgError, | ||
35 | RustcError(std::io::Error), | ||
36 | RustcOutputError(std::string::FromUtf8Error), | ||
37 | SysrootNotFound, | ||
38 | } | ||
39 | |||
40 | impl fmt::Display for WorkspaceError { | ||
41 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { | ||
42 | match self { | ||
43 | Self::OpenWorkspaceError(err) | Self::RustcError(err) => write!(f, "{}", err), | ||
44 | Self::ParseEditionError(err) => write!(f, "{}", err), | ||
45 | Self::ReadWorkspaceError(err) => write!(f, "{}", err), | ||
46 | Self::RustcOutputError(err) => write!(f, "{}", err), | ||
47 | Self::CargoMetadataFailed(err) => write!(f, "cargo metadata failed: {}", err), | ||
48 | Self::RustcCfgError => write!(f, "failed to get rustc cfgs"), | ||
49 | Self::SysrootNotFound => write!(f, "failed to locate sysroot"), | ||
50 | Self::CargoTomlNotFound(path) => { | ||
51 | write!(f, "can't find Cargo.toml at {}", path.display()) | ||
52 | } | ||
53 | Self::NoStdLib(sysroot) => write!( | ||
54 | f, | ||
55 | "can't load standard library from sysroot\n\ | ||
56 | {:?}\n\ | ||
57 | try running `rustup component add rust-src` or set `RUST_SRC_PATH`", | ||
58 | sysroot, | ||
59 | ), | ||
60 | } | ||
61 | } | ||
62 | } | ||
63 | |||
64 | impl std::error::Error for WorkspaceError {} | ||
65 | |||
66 | impl From<ParseEditionError> for WorkspaceError { | ||
67 | fn from(err: ParseEditionError) -> Self { | ||
68 | Self::ParseEditionError(err.into()) | ||
69 | } | ||
70 | } | ||
71 | |||
72 | impl From<cargo_metadata::Error> for WorkspaceError { | ||
73 | fn from(err: cargo_metadata::Error) -> Self { | ||
74 | Self::CargoMetadataFailed(err.into()) | ||
75 | } | ||
76 | } | ||
77 | |||
78 | #[derive(Debug, Clone)] | 28 | #[derive(Debug, Clone)] |
79 | pub enum ProjectWorkspace { | 29 | pub enum ProjectWorkspace { |
80 | /// Project workspace was discovered by running `cargo metadata` and `rustc --print sysroot`. | 30 | /// Project workspace was discovered by running `cargo metadata` and `rustc --print sysroot`. |