Skip to content

Commit

Permalink
Rollup merge of rust-lang#108988 - adrianheine:crate-reference-block,…
Browse files Browse the repository at this point in the history
… r=petrochenkov

rustdoc: Don't crash on `crate` references in blocks

This is a regression from rust-lang#94857.
  • Loading branch information
matthiaskrgr committed Mar 11, 2023
2 parents 8b67955 + c84c5e6 commit e12ba73
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 10 deletions.
12 changes: 2 additions & 10 deletions compiler/rustc_resolve/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1849,20 +1849,12 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
&mut self,
path_str: &str,
ns: Namespace,
mut parent_scope: ParentScope<'a>,
parent_scope: ParentScope<'a>,
) -> Option<Res> {
let mut segments =
Vec::from_iter(path_str.split("::").map(Ident::from_str).map(Segment::from_ident));
if let Some(segment) = segments.first_mut() {
if segment.ident.name == kw::Crate {
// FIXME: `resolve_path` always resolves `crate` to the current crate root, but
// rustdoc wants it to resolve to the `parent_scope`'s crate root. This trick of
// replacing `crate` with `self` and changing the current module should achieve
// the same effect.
segment.ident.name = kw::SelfLower;
parent_scope.module =
self.expect_module(parent_scope.module.def_id().krate.as_def_id());
} else if segment.ident.name == kw::Empty {
if segment.ident.name == kw::Empty {
segment.ident.name = kw::PathRoot;
}
}
Expand Down
5 changes: 5 additions & 0 deletions tests/rustdoc-ui/crate-reference-in-block-module.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// check-pass
fn main() {
/// [](crate)
struct X;
}
Empty file.

0 comments on commit e12ba73

Please sign in to comment.