Skip to content

Commit 5e838e1

Browse files
Rollup merge of rust-lang#50617 - GuillaumeGomez:fix-extern-prelude, r=QuietMisdreavus
Fix extern prelude failure in rustdoc Fixes rust-lang#50561. r? @QuietMisdreavus
2 parents 0d76317 + 27db90a commit 5e838e1

File tree

4 files changed

+17
-3
lines changed

4 files changed

+17
-3
lines changed

src/librustc/session/config.rs

+7
Original file line numberDiff line numberDiff line change
@@ -494,6 +494,13 @@ impl Input {
494494
Input::Str { .. } => "rust_out".to_string(),
495495
}
496496
}
497+
498+
pub fn get_input(&mut self) -> Option<&mut String> {
499+
match *self {
500+
Input::File(_) => None,
501+
Input::Str { ref mut input, .. } => Some(input),
502+
}
503+
}
497504
}
498505

499506
#[derive(Clone)]

src/librustc_resolve/lib.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -1437,6 +1437,9 @@ pub struct Resolver<'a> {
14371437
current_type_ascription: Vec<Span>,
14381438

14391439
injected_crate: Option<Module<'a>>,
1440+
1441+
/// Only supposed to be used by rustdoc, otherwise should be false.
1442+
pub ignore_extern_prelude_feature: bool,
14401443
}
14411444

14421445
/// Nothing really interesting here, it just provides memory for the rest of the crate.
@@ -1718,6 +1721,7 @@ impl<'a> Resolver<'a> {
17181721
unused_macros: FxHashSet(),
17191722
current_type_ascription: Vec::new(),
17201723
injected_crate: None,
1724+
ignore_extern_prelude_feature: false,
17211725
}
17221726
}
17231727

@@ -1891,7 +1895,8 @@ impl<'a> Resolver<'a> {
18911895
if !module.no_implicit_prelude {
18921896
// `record_used` means that we don't try to load crates during speculative resolution
18931897
if record_used && ns == TypeNS && self.extern_prelude.contains(&ident.name) {
1894-
if !self.session.features_untracked().extern_prelude {
1898+
if !self.session.features_untracked().extern_prelude &&
1899+
!self.ignore_extern_prelude_feature {
18951900
feature_err(&self.session.parse_sess, "extern_prelude",
18961901
ident.span, GateIssue::Language,
18971902
"access to extern crates through prelude is experimental").emit();

src/librustdoc/clean/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1103,7 +1103,7 @@ fn resolve(cx: &DocContext, path_str: &str, is_val: bool) -> Result<(Def, Option
11031103
// early return and try looking for the trait
11041104
let value = match result.def {
11051105
Def::Method(_) | Def::AssociatedConst(_) => true,
1106-
Def::AssociatedTy(_) => false,
1106+
Def::AssociatedTy(_) => false,
11071107
Def::Variant(_) => return handle_variant(cx, result.def),
11081108
// not a trait item, just return what we found
11091109
_ => return Ok((result.def, None))

src/librustdoc/core.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -250,10 +250,12 @@ pub fn run_core(search_paths: SearchPaths,
250250
|_| Ok(()));
251251
let driver::InnerExpansionResult {
252252
mut hir_forest,
253-
resolver,
253+
mut resolver,
254254
..
255255
} = abort_on_err(result, &sess);
256256

257+
resolver.ignore_extern_prelude_feature = true;
258+
257259
// We need to hold on to the complete resolver, so we clone everything
258260
// for the analysis passes to use. Suboptimal, but necessary in the
259261
// current architecture.

0 commit comments

Comments
 (0)