diff options
Diffstat (limited to 'crates/ra_project_model/src/sysroot.rs')
-rw-r--r-- | crates/ra_project_model/src/sysroot.rs | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/crates/ra_project_model/src/sysroot.rs b/crates/ra_project_model/src/sysroot.rs index c51957c1f..4ac4fa14d 100644 --- a/crates/ra_project_model/src/sysroot.rs +++ b/crates/ra_project_model/src/sysroot.rs | |||
@@ -2,7 +2,7 @@ | |||
2 | 2 | ||
3 | use anyhow::{bail, Context, Result}; | 3 | use anyhow::{bail, Context, Result}; |
4 | use std::{ | 4 | use std::{ |
5 | env, | 5 | env, ops, |
6 | path::{Path, PathBuf}, | 6 | path::{Path, PathBuf}, |
7 | process::{Command, Output}, | 7 | process::{Command, Output}, |
8 | }; | 8 | }; |
@@ -19,10 +19,17 @@ pub struct SysrootCrate(RawId); | |||
19 | impl_arena_id!(SysrootCrate); | 19 | impl_arena_id!(SysrootCrate); |
20 | 20 | ||
21 | #[derive(Debug, Clone)] | 21 | #[derive(Debug, Clone)] |
22 | struct SysrootCrateData { | 22 | pub struct SysrootCrateData { |
23 | name: String, | 23 | pub name: String, |
24 | root: PathBuf, | 24 | pub root: PathBuf, |
25 | deps: Vec<SysrootCrate>, | 25 | pub deps: Vec<SysrootCrate>, |
26 | } | ||
27 | |||
28 | impl ops::Index<SysrootCrate> for Sysroot { | ||
29 | type Output = SysrootCrateData; | ||
30 | fn index(&self, index: SysrootCrate) -> &SysrootCrateData { | ||
31 | &self.crates[index] | ||
32 | } | ||
26 | } | 33 | } |
27 | 34 | ||
28 | impl Sysroot { | 35 | impl Sysroot { |
@@ -129,18 +136,9 @@ fn get_or_install_rust_src(cargo_toml: &Path) -> Result<PathBuf> { | |||
129 | Ok(src_path) | 136 | Ok(src_path) |
130 | } | 137 | } |
131 | 138 | ||
132 | impl SysrootCrate { | 139 | impl SysrootCrateData { |
133 | pub fn name(self, sysroot: &Sysroot) -> &str { | 140 | pub fn root_dir(&self) -> &Path { |
134 | &sysroot.crates[self].name | 141 | self.root.parent().unwrap() |
135 | } | ||
136 | pub fn root(self, sysroot: &Sysroot) -> &Path { | ||
137 | sysroot.crates[self].root.as_path() | ||
138 | } | ||
139 | pub fn root_dir(self, sysroot: &Sysroot) -> &Path { | ||
140 | self.root(sysroot).parent().unwrap() | ||
141 | } | ||
142 | pub fn deps<'a>(self, sysroot: &'a Sysroot) -> impl Iterator<Item = SysrootCrate> + 'a { | ||
143 | sysroot.crates[self].deps.iter().copied() | ||
144 | } | 142 | } |
145 | } | 143 | } |
146 | 144 | ||