Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/project-model/src/project_json.rs')
| -rw-r--r-- | crates/project-model/src/project_json.rs | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/crates/project-model/src/project_json.rs b/crates/project-model/src/project_json.rs index 2f9612e3a4..0282a71464 100644 --- a/crates/project-model/src/project_json.rs +++ b/crates/project-model/src/project_json.rs @@ -65,6 +65,8 @@ pub struct ProjectJson { pub(crate) sysroot: Option<AbsPathBuf>, /// e.g. `path/to/sysroot/lib/rustlib/src/rust/library` pub(crate) sysroot_src: Option<AbsPathBuf>, + /// A nested project describing the layout of the sysroot + pub(crate) sysroot_project: Option<Box<ProjectJson>>, project_root: AbsPathBuf, /// The path to the rust-project.json file. May be None if this /// data was generated by the discoverConfig command. @@ -91,9 +93,16 @@ impl ProjectJson { data: ProjectJsonData, ) -> ProjectJson { let absolutize_on_base = |p| base.absolutize(p); + let sysroot_src = data.sysroot_src.map(absolutize_on_base); + let sysroot_project = + data.sysroot_project.zip(sysroot_src.clone()).map(|(sysroot_data, sysroot_src)| { + Box::new(ProjectJson::new(None, &sysroot_src, *sysroot_data)) + }); + ProjectJson { sysroot: data.sysroot.map(absolutize_on_base), - sysroot_src: data.sysroot_src.map(absolutize_on_base), + sysroot_src, + sysroot_project, project_root: base.to_path_buf(), manifest, runnables: data.runnables.into_iter().map(Runnable::from).collect(), @@ -330,6 +339,7 @@ pub enum RunnableKind { pub struct ProjectJsonData { sysroot: Option<Utf8PathBuf>, sysroot_src: Option<Utf8PathBuf>, + sysroot_project: Option<Box<ProjectJsonData>>, #[serde(default)] cfg_groups: FxHashMap<String, CfgList>, crates: Vec<CrateData>, |