Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/project_model/src/sysroot.rs')
| -rw-r--r-- | crates/project_model/src/sysroot.rs | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/crates/project_model/src/sysroot.rs b/crates/project_model/src/sysroot.rs index fec606e729..946b79d176 100644 --- a/crates/project_model/src/sysroot.rs +++ b/crates/project_model/src/sysroot.rs @@ -12,8 +12,9 @@ use paths::{AbsPath, AbsPathBuf}; use crate::{utf8_stdout, ManifestPath}; -#[derive(Default, Debug, Clone, Eq, PartialEq)] +#[derive(Debug, Clone, Eq, PartialEq)] pub struct Sysroot { + root: AbsPathBuf, crates: Arena<SysrootCrateData>, } @@ -34,6 +35,10 @@ impl ops::Index<SysrootCrate> for Sysroot { } impl Sysroot { + pub fn root(&self) -> &AbsPath { + &self.root + } + pub fn public_deps(&self) -> impl Iterator<Item = (&'static str, SysrootCrate)> + '_ { // core is added as a dependency before std in order to // mimic rustcs dependency order @@ -52,7 +57,7 @@ impl Sysroot { log::debug!("Discovering sysroot for {}", dir.display()); let sysroot_dir = discover_sysroot_dir(dir)?; let sysroot_src_dir = discover_sysroot_src_dir(&sysroot_dir, dir)?; - let res = Sysroot::load(&sysroot_src_dir)?; + let res = Sysroot::load(sysroot_src_dir)?; Ok(res) } @@ -62,14 +67,14 @@ impl Sysroot { discover_sysroot_dir(current_dir).ok().and_then(|sysroot_dir| get_rustc_src(&sysroot_dir)) } - pub fn load(sysroot_src_dir: &AbsPath) -> Result<Sysroot> { - let mut sysroot = Sysroot { crates: Arena::default() }; + pub fn load(sysroot_src_dir: AbsPathBuf) -> Result<Sysroot> { + let mut sysroot = Sysroot { root: sysroot_src_dir, crates: Arena::default() }; for path in SYSROOT_CRATES.trim().lines() { let name = path.split('/').last().unwrap(); let root = [format!("{}/src/lib.rs", path), format!("lib{}/lib.rs", path)] .iter() - .map(|it| sysroot_src_dir.join(it)) + .map(|it| sysroot.root.join(it)) .filter_map(|it| ManifestPath::try_from(it).ok()) .find(|it| fs::metadata(it).is_ok()); @@ -110,7 +115,7 @@ impl Sysroot { }; anyhow::bail!( "could not find libcore in sysroot path `{}`{}", - sysroot_src_dir.as_ref().display(), + sysroot.root.as_path().display(), var_note, ); } |