Rollup merge of #139364 - Kohei316:feat/doc-hidden-suggestion, r=nnethercote
Make the compiler suggest actual paths instead of visible paths if the visible paths are through any doc hidden path. close #127011 Currently, when emitting a diagnostic about a valid trait, the compiler suggestes using visible paths of the trait even if they are through a doc hidden path. This PR updates the compiler to suggest actual paths in these cases.
This commit is contained in:
commit
7494bd9a4f
6 changed files with 59 additions and 2 deletions
|
@ -25,6 +25,7 @@ use rustc_middle::bug;
|
|||
use rustc_middle::ty::fast_reject::{DeepRejectCtxt, TreatParams, simplify_type};
|
||||
use rustc_middle::ty::print::{
|
||||
PrintTraitRefExt as _, with_crate_prefix, with_forced_trimmed_paths,
|
||||
with_no_visible_paths_if_doc_hidden,
|
||||
};
|
||||
use rustc_middle::ty::{self, GenericArgKind, IsSuggestable, Ty, TyCtxt, TypeVisitableExt};
|
||||
use rustc_span::def_id::DefIdSet;
|
||||
|
@ -3328,7 +3329,9 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
let path_strings = candidates.iter().map(|trait_did| {
|
||||
format!(
|
||||
"{prefix}{}{postfix}\n",
|
||||
with_crate_prefix!(self.tcx.def_path_str(*trait_did)),
|
||||
with_no_visible_paths_if_doc_hidden!(with_crate_prefix!(
|
||||
self.tcx.def_path_str(*trait_did)
|
||||
)),
|
||||
)
|
||||
});
|
||||
|
||||
|
@ -3336,7 +3339,9 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
let parent_did = parent_map.get(trait_did).unwrap();
|
||||
format!(
|
||||
"{prefix}{}::*{postfix} // trait {}\n",
|
||||
with_crate_prefix!(self.tcx.def_path_str(*parent_did)),
|
||||
with_no_visible_paths_if_doc_hidden!(with_crate_prefix!(
|
||||
self.tcx.def_path_str(*parent_did)
|
||||
)),
|
||||
self.tcx.item_name(*trait_did),
|
||||
)
|
||||
});
|
||||
|
|
|
@ -63,6 +63,7 @@ thread_local! {
|
|||
static FORCE_TRIMMED_PATH: Cell<bool> = const { Cell::new(false) };
|
||||
static REDUCED_QUERIES: Cell<bool> = const { Cell::new(false) };
|
||||
static NO_VISIBLE_PATH: Cell<bool> = const { Cell::new(false) };
|
||||
static NO_VISIBLE_PATH_IF_DOC_HIDDEN: Cell<bool> = const { Cell::new(false) };
|
||||
static RTN_MODE: Cell<RtnMode> = const { Cell::new(RtnMode::ForDiagnostic) };
|
||||
}
|
||||
|
||||
|
@ -134,6 +135,8 @@ define_helper!(
|
|||
/// Prevent selection of visible paths. `Display` impl of DefId will prefer
|
||||
/// visible (public) reexports of types as paths.
|
||||
fn with_no_visible_paths(NoVisibleGuard, NO_VISIBLE_PATH);
|
||||
/// Prevent selection of visible paths if the paths are through a doc hidden path.
|
||||
fn with_no_visible_paths_if_doc_hidden(NoVisibleIfDocHiddenGuard, NO_VISIBLE_PATH_IF_DOC_HIDDEN);
|
||||
);
|
||||
|
||||
#[must_use]
|
||||
|
@ -569,6 +572,10 @@ pub trait PrettyPrinter<'tcx>: Printer<'tcx> + fmt::Write {
|
|||
return Ok(false);
|
||||
};
|
||||
|
||||
if self.tcx().is_doc_hidden(visible_parent) && with_no_visible_paths_if_doc_hidden() {
|
||||
return Ok(false);
|
||||
}
|
||||
|
||||
let actual_parent = self.tcx().opt_parent(def_id);
|
||||
debug!(
|
||||
"try_print_visible_def_path: visible_parent={:?} actual_parent={:?}",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue