Skip to content

Commit 4d3dce6

Browse files
committed
Rename sysroot src/lib related things
1 parent 8a8ff99 commit 4d3dce6

File tree

6 files changed

+119
-102
lines changed

6 files changed

+119
-102
lines changed

crates/project-model/src/lib.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -260,19 +260,19 @@ fn parse_cfg(s: &str) -> Result<cfg::CfgAtom, String> {
260260
}
261261

262262
#[derive(Clone, Debug, PartialEq, Eq)]
263-
pub enum SysrootSourceWorkspaceConfig {
263+
pub enum RustSourceWorkspaceConfig {
264264
CargoMetadata(CargoMetadataConfig),
265265
Stitched,
266266
}
267267

268-
impl Default for SysrootSourceWorkspaceConfig {
268+
impl Default for RustSourceWorkspaceConfig {
269269
fn default() -> Self {
270-
SysrootSourceWorkspaceConfig::default_cargo()
270+
RustSourceWorkspaceConfig::default_cargo()
271271
}
272272
}
273273

274-
impl SysrootSourceWorkspaceConfig {
274+
impl RustSourceWorkspaceConfig {
275275
pub fn default_cargo() -> Self {
276-
SysrootSourceWorkspaceConfig::CargoMetadata(Default::default())
276+
RustSourceWorkspaceConfig::CargoMetadata(Default::default())
277277
}
278278
}

crates/project-model/src/sysroot.rs

+85-73
Original file line numberDiff line numberDiff line change
@@ -22,38 +22,40 @@ use toolchain::{probe_for_binary, Tool};
2222

2323
use crate::{
2424
cargo_workspace::CargoMetadataConfig, utf8_stdout, CargoWorkspace, ManifestPath,
25-
SysrootSourceWorkspaceConfig,
25+
RustSourceWorkspaceConfig,
2626
};
2727

2828
#[derive(Debug, Clone, PartialEq, Eq)]
2929
pub struct Sysroot {
3030
root: Option<AbsPathBuf>,
31-
src_root: Option<AbsPathBuf>,
32-
workspace: SysrootWorkspace,
31+
rust_lib_src_root: Option<AbsPathBuf>,
32+
workspace: RustLibSrcWorkspace,
3333
error: Option<String>,
3434
}
3535

3636
#[derive(Debug, Clone, Eq, PartialEq)]
37-
pub enum SysrootWorkspace {
37+
pub enum RustLibSrcWorkspace {
3838
Workspace(CargoWorkspace),
3939
Stitched(Stitched),
4040
Empty,
4141
}
4242

4343
#[derive(Debug, Clone, Eq, PartialEq)]
4444
pub struct Stitched {
45-
crates: Arena<SysrootCrateData>,
45+
crates: Arena<RustLibSrcCrateData>,
4646
}
4747

48-
impl ops::Index<SysrootCrate> for Stitched {
49-
type Output = SysrootCrateData;
50-
fn index(&self, index: SysrootCrate) -> &SysrootCrateData {
48+
impl ops::Index<RustLibSrcCrate> for Stitched {
49+
type Output = RustLibSrcCrateData;
50+
fn index(&self, index: RustLibSrcCrate) -> &RustLibSrcCrateData {
5151
&self.crates[index]
5252
}
5353
}
5454

5555
impl Stitched {
56-
pub(crate) fn public_deps(&self) -> impl Iterator<Item = (CrateName, SysrootCrate, bool)> + '_ {
56+
pub(crate) fn public_deps(
57+
&self,
58+
) -> impl Iterator<Item = (CrateName, RustLibSrcCrate, bool)> + '_ {
5759
// core is added as a dependency before std in order to
5860
// mimic rustcs dependency order
5961
[("core", true), ("alloc", false), ("std", true), ("test", false)].into_iter().filter_map(
@@ -63,32 +65,37 @@ impl Stitched {
6365
)
6466
}
6567

66-
pub(crate) fn proc_macro(&self) -> Option<SysrootCrate> {
68+
pub(crate) fn proc_macro(&self) -> Option<RustLibSrcCrate> {
6769
self.by_name("proc_macro")
6870
}
6971

70-
pub(crate) fn crates(&self) -> impl ExactSizeIterator<Item = SysrootCrate> + '_ {
72+
pub(crate) fn crates(&self) -> impl ExactSizeIterator<Item = RustLibSrcCrate> + '_ {
7173
self.crates.iter().map(|(id, _data)| id)
7274
}
7375

74-
fn by_name(&self, name: &str) -> Option<SysrootCrate> {
76+
fn by_name(&self, name: &str) -> Option<RustLibSrcCrate> {
7577
let (id, _data) = self.crates.iter().find(|(_id, data)| data.name == name)?;
7678
Some(id)
7779
}
7880
}
7981

80-
pub(crate) type SysrootCrate = Idx<SysrootCrateData>;
82+
pub(crate) type RustLibSrcCrate = Idx<RustLibSrcCrateData>;
8183

8284
#[derive(Debug, Clone, Eq, PartialEq)]
83-
pub(crate) struct SysrootCrateData {
85+
pub(crate) struct RustLibSrcCrateData {
8486
pub(crate) name: String,
8587
pub(crate) root: ManifestPath,
86-
pub(crate) deps: Vec<SysrootCrate>,
88+
pub(crate) deps: Vec<RustLibSrcCrate>,
8789
}
8890

8991
impl Sysroot {
9092
pub const fn empty() -> Sysroot {
91-
Sysroot { root: None, src_root: None, workspace: SysrootWorkspace::Empty, error: None }
93+
Sysroot {
94+
root: None,
95+
rust_lib_src_root: None,
96+
workspace: RustLibSrcWorkspace::Empty,
97+
error: None,
98+
}
9299
}
93100

94101
/// Returns sysroot "root" directory, where `bin/`, `etc/`, `lib/`, `libexec/`
@@ -100,15 +107,15 @@ impl Sysroot {
100107

101108
/// Returns the sysroot "source" directory, where stdlib sources are located, like:
102109
/// `$HOME/.rustup/toolchains/nightly-2022-07-23-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library`
103-
pub fn src_root(&self) -> Option<&AbsPath> {
104-
self.src_root.as_deref()
110+
pub fn rust_lib_src_root(&self) -> Option<&AbsPath> {
111+
self.rust_lib_src_root.as_deref()
105112
}
106113

107-
pub fn is_empty(&self) -> bool {
114+
pub fn is_rust_lib_src_empty(&self) -> bool {
108115
match &self.workspace {
109-
SysrootWorkspace::Workspace(ws) => ws.packages().next().is_none(),
110-
SysrootWorkspace::Stitched(stitched) => stitched.crates.is_empty(),
111-
SysrootWorkspace::Empty => true,
116+
RustLibSrcWorkspace::Workspace(ws) => ws.packages().next().is_none(),
117+
RustLibSrcWorkspace::Stitched(stitched) => stitched.crates.is_empty(),
118+
RustLibSrcWorkspace::Empty => true,
112119
}
113120
}
114121

@@ -118,13 +125,13 @@ impl Sysroot {
118125

119126
pub fn num_packages(&self) -> usize {
120127
match &self.workspace {
121-
SysrootWorkspace::Workspace(ws) => ws.packages().count(),
122-
SysrootWorkspace::Stitched(c) => c.crates().count(),
123-
SysrootWorkspace::Empty => 0,
128+
RustLibSrcWorkspace::Workspace(ws) => ws.packages().count(),
129+
RustLibSrcWorkspace::Stitched(c) => c.crates().count(),
130+
RustLibSrcWorkspace::Empty => 0,
124131
}
125132
}
126133

127-
pub(crate) fn workspace(&self) -> &SysrootWorkspace {
134+
pub(crate) fn workspace(&self) -> &RustLibSrcWorkspace {
128135
&self.workspace
129136
}
130137
}
@@ -133,33 +140,33 @@ impl Sysroot {
133140
/// Attempts to discover the toolchain's sysroot from the given `dir`.
134141
pub fn discover(dir: &AbsPath, extra_env: &FxHashMap<String, String>) -> Sysroot {
135142
let sysroot_dir = discover_sysroot_dir(dir, extra_env);
136-
let sysroot_src_dir = sysroot_dir.as_ref().ok().map(|sysroot_dir| {
137-
discover_sysroot_src_dir_or_add_component(sysroot_dir, dir, extra_env)
143+
let rust_lib_src_dir = sysroot_dir.as_ref().ok().map(|sysroot_dir| {
144+
discover_rust_lib_src_dir_or_add_component(sysroot_dir, dir, extra_env)
138145
});
139-
Sysroot::assemble(Some(sysroot_dir), sysroot_src_dir)
146+
Sysroot::assemble(Some(sysroot_dir), rust_lib_src_dir)
140147
}
141148

142149
pub fn discover_with_src_override(
143150
current_dir: &AbsPath,
144151
extra_env: &FxHashMap<String, String>,
145-
sysroot_src_dir: AbsPathBuf,
152+
rust_lib_src_dir: AbsPathBuf,
146153
) -> Sysroot {
147154
let sysroot_dir = discover_sysroot_dir(current_dir, extra_env);
148-
Sysroot::assemble(Some(sysroot_dir), Some(Ok(sysroot_src_dir)))
155+
Sysroot::assemble(Some(sysroot_dir), Some(Ok(rust_lib_src_dir)))
149156
}
150157

151-
pub fn discover_sysroot_src_dir(sysroot_dir: AbsPathBuf) -> Sysroot {
152-
let sysroot_src_dir = discover_sysroot_src_dir(&sysroot_dir)
158+
pub fn discover_rust_lib_src_dir(sysroot_dir: AbsPathBuf) -> Sysroot {
159+
let rust_lib_src_dir = discover_rust_lib_src_dir(&sysroot_dir)
153160
.ok_or_else(|| format_err!("can't find standard library sources in {sysroot_dir}"));
154-
Sysroot::assemble(Some(Ok(sysroot_dir)), Some(sysroot_src_dir))
161+
Sysroot::assemble(Some(Ok(sysroot_dir)), Some(rust_lib_src_dir))
155162
}
156163

157164
pub fn discover_rustc_src(&self) -> Option<ManifestPath> {
158165
get_rustc_src(self.root()?)
159166
}
160167

161-
pub fn new(sysroot_dir: Option<AbsPathBuf>, sysroot_src_dir: Option<AbsPathBuf>) -> Sysroot {
162-
Self::assemble(sysroot_dir.map(Ok), sysroot_src_dir.map(Ok))
168+
pub fn new(sysroot_dir: Option<AbsPathBuf>, rust_lib_src_dir: Option<AbsPathBuf>) -> Sysroot {
169+
Self::assemble(sysroot_dir.map(Ok), rust_lib_src_dir.map(Ok))
163170
}
164171

165172
/// Returns a command to run a tool preferring the cargo proxies if the sysroot exists.
@@ -200,7 +207,7 @@ impl Sysroot {
200207

201208
fn assemble(
202209
sysroot_dir: Option<Result<AbsPathBuf, anyhow::Error>>,
203-
sysroot_src_dir: Option<Result<AbsPathBuf, anyhow::Error>>,
210+
rust_lib_src_dir: Option<Result<AbsPathBuf, anyhow::Error>>,
204211
) -> Sysroot {
205212
let mut errors = String::new();
206213
let root = match sysroot_dir {
@@ -211,8 +218,8 @@ impl Sysroot {
211218
}
212219
None => None,
213220
};
214-
let src_root = match sysroot_src_dir {
215-
Some(Ok(sysroot_src_dir)) => Some(sysroot_src_dir),
221+
let rust_lib_src_root = match rust_lib_src_dir {
222+
Some(Ok(rust_lib_src_dir)) => Some(rust_lib_src_dir),
216223
Some(Err(e)) => {
217224
format_to!(errors, "{e}\n");
218225
None
@@ -221,21 +228,22 @@ impl Sysroot {
221228
};
222229
Sysroot {
223230
root,
224-
src_root,
225-
workspace: SysrootWorkspace::Empty,
231+
rust_lib_src_root,
232+
workspace: RustLibSrcWorkspace::Empty,
226233
error: errors.is_empty().not().then_some(errors),
227234
}
228235
}
229236

230237
pub fn load_workspace(
231238
&self,
232-
sysroot_source_config: &SysrootSourceWorkspaceConfig,
233-
) -> Option<SysrootWorkspace> {
234-
assert!(matches!(self.workspace, SysrootWorkspace::Empty), "workspace already loaded");
235-
let Self { root: _, src_root: Some(src_root), workspace: _, error: _ } = self else {
239+
sysroot_source_config: &RustSourceWorkspaceConfig,
240+
) -> Option<RustLibSrcWorkspace> {
241+
assert!(matches!(self.workspace, RustLibSrcWorkspace::Empty), "workspace already loaded");
242+
let Self { root: _, rust_lib_src_root: Some(src_root), workspace: _, error: _ } = self
243+
else {
236244
return None;
237245
};
238-
if let SysrootSourceWorkspaceConfig::CargoMetadata(cargo_config) = sysroot_source_config {
246+
if let RustSourceWorkspaceConfig::CargoMetadata(cargo_config) = sysroot_source_config {
239247
let library_manifest = ManifestPath::try_from(src_root.join("Cargo.toml")).unwrap();
240248
if fs::metadata(&library_manifest).is_ok() {
241249
if let Some(loaded) =
@@ -258,7 +266,7 @@ impl Sysroot {
258266
.find(|it| fs::metadata(it).is_ok());
259267

260268
if let Some(root) = root {
261-
stitched.crates.alloc(SysrootCrateData {
269+
stitched.crates.alloc(RustLibSrcCrateData {
262270
name: name.into(),
263271
root,
264272
deps: Vec::new(),
@@ -289,21 +297,23 @@ impl Sysroot {
289297
}
290298
}
291299
}
292-
Some(SysrootWorkspace::Stitched(stitched))
300+
Some(RustLibSrcWorkspace::Stitched(stitched))
293301
}
294302

295-
pub fn set_workspace(&mut self, workspace: SysrootWorkspace) {
303+
pub fn set_workspace(&mut self, workspace: RustLibSrcWorkspace) {
296304
self.workspace = workspace;
297305
if self.error.is_none() {
298-
if let Some(src_root) = &self.src_root {
306+
if let Some(src_root) = &self.rust_lib_src_root {
299307
let has_core = match &self.workspace {
300-
SysrootWorkspace::Workspace(ws) => ws.packages().any(|p| ws[p].name == "core"),
301-
SysrootWorkspace::Stitched(stitched) => stitched.by_name("core").is_some(),
302-
SysrootWorkspace::Empty => true,
308+
RustLibSrcWorkspace::Workspace(ws) => {
309+
ws.packages().any(|p| ws[p].name == "core")
310+
}
311+
RustLibSrcWorkspace::Stitched(stitched) => stitched.by_name("core").is_some(),
312+
RustLibSrcWorkspace::Empty => true,
303313
};
304314
if !has_core {
305-
let var_note = if env::var_os("RUST_SRC_PATH").is_some() {
306-
" (env var `RUST_SRC_PATH` is set and may be incorrect, try unsetting it)"
315+
let var_note = if env::var_os("rust_lib_src_PATH").is_some() {
316+
" (env var `rust_lib_src_PATH` is set and may be incorrect, try unsetting it)"
307317
} else {
308318
", try running `rustup component add rust-src` to possibly fix this"
309319
};
@@ -317,9 +327,9 @@ impl Sysroot {
317327

318328
fn load_library_via_cargo(
319329
library_manifest: ManifestPath,
320-
sysroot_src_dir: &AbsPathBuf,
330+
rust_lib_src_dir: &AbsPathBuf,
321331
cargo_config: &CargoMetadataConfig,
322-
) -> Option<SysrootWorkspace> {
332+
) -> Option<RustLibSrcWorkspace> {
323333
tracing::debug!("Loading library metadata: {library_manifest}");
324334
let mut cargo_config = cargo_config.clone();
325335
// the sysroot uses `public-dependency`, so we make cargo think it's a nightly
@@ -330,7 +340,7 @@ impl Sysroot {
330340

331341
let (mut res, _) = match CargoWorkspace::fetch_metadata(
332342
&library_manifest,
333-
sysroot_src_dir,
343+
rust_lib_src_dir,
334344
&cargo_config,
335345
&Sysroot::empty(),
336346
// Make sure we never attempt to write to the sysroot
@@ -394,7 +404,7 @@ impl Sysroot {
394404
});
395405

396406
let cargo_workspace = CargoWorkspace::new(res, library_manifest, Default::default());
397-
Some(SysrootWorkspace::Workspace(cargo_workspace))
407+
Some(RustLibSrcWorkspace::Workspace(cargo_workspace))
398408
}
399409
}
400410

@@ -410,36 +420,38 @@ fn discover_sysroot_dir(
410420
Ok(AbsPathBuf::assert(Utf8PathBuf::from(stdout)))
411421
}
412422

413-
fn discover_sysroot_src_dir(sysroot_path: &AbsPathBuf) -> Option<AbsPathBuf> {
414-
if let Ok(path) = env::var("RUST_SRC_PATH") {
423+
fn discover_rust_lib_src_dir(sysroot_path: &AbsPathBuf) -> Option<AbsPathBuf> {
424+
if let Ok(path) = env::var("rust_lib_src_PATH") {
415425
if let Ok(path) = AbsPathBuf::try_from(path.as_str()) {
416426
let core = path.join("core");
417427
if fs::metadata(&core).is_ok() {
418-
tracing::debug!("Discovered sysroot by RUST_SRC_PATH: {path}");
428+
tracing::debug!("Discovered sysroot by rust_lib_src_PATH: {path}");
419429
return Some(path);
420430
}
421-
tracing::debug!("RUST_SRC_PATH is set, but is invalid (no core: {core:?}), ignoring");
431+
tracing::debug!(
432+
"rust_lib_src_PATH is set, but is invalid (no core: {core:?}), ignoring"
433+
);
422434
} else {
423-
tracing::debug!("RUST_SRC_PATH is set, but is invalid, ignoring");
435+
tracing::debug!("rust_lib_src_PATH is set, but is invalid, ignoring");
424436
}
425437
}
426438

427-
get_rust_src(sysroot_path)
439+
get_rust_lib_src(sysroot_path)
428440
}
429441

430-
fn discover_sysroot_src_dir_or_add_component(
442+
fn discover_rust_lib_src_dir_or_add_component(
431443
sysroot_path: &AbsPathBuf,
432444
current_dir: &AbsPath,
433445
extra_env: &FxHashMap<String, String>,
434446
) -> Result<AbsPathBuf> {
435-
discover_sysroot_src_dir(sysroot_path)
447+
discover_rust_lib_src_dir(sysroot_path)
436448
.or_else(|| {
437449
let mut rustup = toolchain::command(Tool::Rustup.prefer_proxy(), current_dir);
438450
rustup.envs(extra_env);
439451
rustup.args(["component", "add", "rust-src"]);
440452
tracing::info!("adding rust-src component by {:?}", rustup);
441453
utf8_stdout(&mut rustup).ok()?;
442-
get_rust_src(sysroot_path)
454+
get_rust_lib_src(sysroot_path)
443455
})
444456
.ok_or_else(|| {
445457
tracing::error!(%sysroot_path, "can't load standard library, try installing `rust-src`");
@@ -464,11 +476,11 @@ fn get_rustc_src(sysroot_path: &AbsPath) -> Option<ManifestPath> {
464476
}
465477
}
466478

467-
fn get_rust_src(sysroot_path: &AbsPath) -> Option<AbsPathBuf> {
468-
let rust_src = sysroot_path.join("lib/rustlib/src/rust/library");
469-
tracing::debug!("checking sysroot library: {rust_src}");
470-
if fs::metadata(&rust_src).is_ok() {
471-
Some(rust_src)
479+
fn get_rust_lib_src(sysroot_path: &AbsPath) -> Option<AbsPathBuf> {
480+
let rust_lib_src = sysroot_path.join("lib/rustlib/src/rust/library");
481+
tracing::debug!("checking sysroot library: {rust_lib_src}");
482+
if fs::metadata(&rust_lib_src).is_ok() {
483+
Some(rust_lib_src)
472484
} else {
473485
None
474486
}

0 commit comments

Comments
 (0)