diff options
| author | Michael Goulet <michael@errs.io> | 2022-07-24 21:25:35 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2022-07-24 21:27:03 +0000 |
| commit | 42a44191203e43c8fa7040992715aeb17476fb47 (patch) | |
| tree | 427fa33f9d6981967037c56609374c119d7730b4 | |
| parent | 6d1100fa79e5dcd35a5af387e05135e2c716c032 (diff) | |
| download | rust-42a44191203e43c8fa7040992715aeb17476fb47.tar.gz rust-42a44191203e43c8fa7040992715aeb17476fb47.zip | |
Do not prefer module parents which are `doc(hidden)` in visibility map
| -rw-r--r-- | compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs | 20 | ||||
| -rw-r--r-- | src/test/ui/suggestions/dont-suggest-doc-hidden-variant-for-enum/hidden-parent.stderr | 6 |
2 files changed, 18 insertions, 8 deletions
diff --git a/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs b/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs index 65cae29c58d..6bf237b8ed5 100644 --- a/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs +++ b/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs @@ -375,9 +375,13 @@ pub(in crate::rmeta) fn provide(providers: &mut Providers) { use std::collections::vec_deque::VecDeque; let mut visible_parent_map: DefIdMap<DefId> = Default::default(); - // This is a secondary visible_parent_map, storing the DefId of parents that re-export - // the child as `_`. Since we prefer parents that don't do this, merge this map at the - // end, only if we're missing any keys from the former. + // This is a secondary visible_parent_map, storing the DefId of + // parents that re-export the child as `_` or module parents + // which are `#[doc(hidden)]`. Since we prefer paths that don't + // do this, merge this map at the end, only if we're missing + // keys from the former. + // This is a rudimentary check that does not catch all cases, + // just the easiest. let mut fallback_map: DefIdMap<DefId> = Default::default(); // Issue 46112: We want the map to prefer the shortest @@ -412,6 +416,11 @@ pub(in crate::rmeta) fn provide(providers: &mut Providers) { return; } + if ty::util::is_doc_hidden(tcx, parent) { + fallback_map.insert(def_id, parent); + return; + } + match visible_parent_map.entry(def_id) { Entry::Occupied(mut entry) => { // If `child` is defined in crate `cnum`, ensure @@ -439,8 +448,9 @@ pub(in crate::rmeta) fn provide(providers: &mut Providers) { } } - // Fill in any missing entries with the (less preferable) path ending in `::_`. - // We still use this path in a diagnostic that suggests importing `::*`. + // Fill in any missing entries with the less preferable path. + // If this path re-exports the child as `_`, we still use this + // path in a diagnostic that suggests importing `::*`. for (child, parent) in fallback_map { visible_parent_map.entry(child).or_insert(parent); } diff --git a/src/test/ui/suggestions/dont-suggest-doc-hidden-variant-for-enum/hidden-parent.stderr b/src/test/ui/suggestions/dont-suggest-doc-hidden-variant-for-enum/hidden-parent.stderr index ee84cf40110..d92b8127910 100644 --- a/src/test/ui/suggestions/dont-suggest-doc-hidden-variant-for-enum/hidden-parent.stderr +++ b/src/test/ui/suggestions/dont-suggest-doc-hidden-variant-for-enum/hidden-parent.stderr @@ -8,10 +8,10 @@ LL | let x: Option<i32> = 1i32; | = note: expected enum `Option<i32>` found type `i32` -help: try wrapping the expression in `hidden_parent::__private::Some` +help: try wrapping the expression in `Some` | -LL | let x: Option<i32> = hidden_parent::__private::Some(1i32); - | +++++++++++++++++++++++++++++++ + +LL | let x: Option<i32> = Some(1i32); + | +++++ + error: aborting due to previous error |
