Do not prefer module parents which are doc(hidden)
in visibility map
This commit is contained in:
parent
6d1100fa79
commit
42a4419120
2 changed files with 18 additions and 8 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue