diff options
Diffstat (limited to 'crates/project_model/src/project_json.rs')
-rw-r--r-- | crates/project_model/src/project_json.rs | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/crates/project_model/src/project_json.rs b/crates/project_model/src/project_json.rs index ae14e5126..5a0fe749a 100644 --- a/crates/project_model/src/project_json.rs +++ b/crates/project_model/src/project_json.rs | |||
@@ -7,11 +7,12 @@ use paths::{AbsPath, AbsPathBuf}; | |||
7 | use rustc_hash::FxHashMap; | 7 | use rustc_hash::FxHashMap; |
8 | use serde::{de, Deserialize}; | 8 | use serde::{de, Deserialize}; |
9 | 9 | ||
10 | use crate::cfg_flag::CfgFlag; | 10 | use crate::{cfg_flag::CfgFlag, Sysroot}; |
11 | 11 | ||
12 | /// Roots and crates that compose this Rust project. | 12 | /// Roots and crates that compose this Rust project. |
13 | #[derive(Clone, Debug, Eq, PartialEq)] | 13 | #[derive(Clone, Debug, Eq, PartialEq)] |
14 | pub struct ProjectJson { | 14 | pub struct ProjectJson { |
15 | pub(crate) sysroot: Option<Sysroot>, | ||
15 | crates: Vec<Crate>, | 16 | crates: Vec<Crate>, |
16 | } | 17 | } |
17 | 18 | ||
@@ -34,6 +35,7 @@ pub struct Crate { | |||
34 | impl ProjectJson { | 35 | impl ProjectJson { |
35 | pub fn new(base: &AbsPath, data: ProjectJsonData) -> ProjectJson { | 36 | pub fn new(base: &AbsPath, data: ProjectJsonData) -> ProjectJson { |
36 | ProjectJson { | 37 | ProjectJson { |
38 | sysroot: data.sysroot_src.map(|it| base.join(it)).map(|it| Sysroot::load(&it)), | ||
37 | crates: data | 39 | crates: data |
38 | .crates | 40 | .crates |
39 | .into_iter() | 41 | .into_iter() |
@@ -43,11 +45,13 @@ impl ProjectJson { | |||
43 | && !crate_data.root_module.starts_with("..") | 45 | && !crate_data.root_module.starts_with("..") |
44 | || crate_data.root_module.starts_with(base) | 46 | || crate_data.root_module.starts_with(base) |
45 | }); | 47 | }); |
46 | let root_module = base.join(crate_data.root_module); | 48 | let root_module = base.join(crate_data.root_module).normalize(); |
47 | let (include, exclude) = match crate_data.source { | 49 | let (include, exclude) = match crate_data.source { |
48 | Some(src) => { | 50 | Some(src) => { |
49 | let absolutize = |dirs: Vec<PathBuf>| { | 51 | let absolutize = |dirs: Vec<PathBuf>| { |
50 | dirs.into_iter().map(|it| base.join(it)).collect::<Vec<_>>() | 52 | dirs.into_iter() |
53 | .map(|it| base.join(it).normalize()) | ||
54 | .collect::<Vec<_>>() | ||
51 | }; | 55 | }; |
52 | (absolutize(src.include_dirs), absolutize(src.exclude_dirs)) | 56 | (absolutize(src.include_dirs), absolutize(src.exclude_dirs)) |
53 | } | 57 | } |
@@ -89,6 +93,7 @@ impl ProjectJson { | |||
89 | 93 | ||
90 | #[derive(Deserialize)] | 94 | #[derive(Deserialize)] |
91 | pub struct ProjectJsonData { | 95 | pub struct ProjectJsonData { |
96 | sysroot_src: Option<PathBuf>, | ||
92 | crates: Vec<CrateData>, | 97 | crates: Vec<CrateData>, |
93 | } | 98 | } |
94 | 99 | ||