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.rs12
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>,