Auto merge of #111076 - notriddle:notriddle/silence-private-dep-trait-impl-suggestions, r=cjgillot
diagnostics: exclude indirect private deps from trait impl suggest Fixes #88696
This commit is contained in:
commit
ad8304a0d5
21 changed files with 136 additions and 31 deletions
|
@ -15,7 +15,7 @@ use rustc_data_structures::stable_hasher::{Hash64, HashStable, StableHasher};
|
|||
use rustc_errors::ErrorGuaranteed;
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def::{CtorOf, DefKind, Res};
|
||||
use rustc_hir::def_id::{DefId, LocalDefId};
|
||||
use rustc_hir::def_id::{CrateNum, DefId, LocalDefId};
|
||||
use rustc_index::bit_set::GrowableBitSet;
|
||||
use rustc_index::{Idx, IndexVec};
|
||||
use rustc_macros::HashStable;
|
||||
|
@ -857,6 +857,26 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
_ => def_kind.article(),
|
||||
}
|
||||
}
|
||||
|
||||
/// Return `true` if the supplied `CrateNum` is "user-visible," meaning either a [public]
|
||||
/// dependency, or a [direct] private dependency. This is used to decide whether the crate can
|
||||
/// be shown in `impl` suggestions.
|
||||
///
|
||||
/// [public]: TyCtxt::is_private_dep
|
||||
/// [direct]: rustc_session::cstore::ExternCrate::is_direct
|
||||
pub fn is_user_visible_dep(self, key: CrateNum) -> bool {
|
||||
// | Private | Direct | Visible | |
|
||||
// |---------|--------|---------|--------------------|
|
||||
// | Yes | Yes | Yes | !true || true |
|
||||
// | No | Yes | Yes | !false || true |
|
||||
// | Yes | No | No | !true || false |
|
||||
// | No | No | Yes | !false || false |
|
||||
!self.is_private_dep(key)
|
||||
// If `extern_crate` is `None`, then the crate was injected (e.g., by the allocator).
|
||||
// Treat that kind of crate as "indirect", since it's an implementation detail of
|
||||
// the language.
|
||||
|| self.extern_crate(key.as_def_id()).map_or(false, |e| e.is_direct())
|
||||
}
|
||||
}
|
||||
|
||||
struct OpaqueTypeExpander<'tcx> {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue