Use Symbol
in LateContext::get_associated_type
.
To avoid unnecessary interning.
This commit is contained in:
parent
092a284ba0
commit
abce592029
8 changed files with 16 additions and 11 deletions
|
@ -855,11 +855,16 @@ impl<'tcx> LateContext<'tcx> {
|
|||
&self,
|
||||
self_ty: Ty<'tcx>,
|
||||
trait_id: DefId,
|
||||
name: &str,
|
||||
name: Symbol,
|
||||
) -> Option<Ty<'tcx>> {
|
||||
let tcx = self.tcx;
|
||||
tcx.associated_items(trait_id)
|
||||
.find_by_ident_and_kind(tcx, Ident::from_str(name), ty::AssocKind::Type, trait_id)
|
||||
.find_by_ident_and_kind(
|
||||
tcx,
|
||||
Ident::with_dummy_span(name),
|
||||
ty::AssocKind::Type,
|
||||
trait_id,
|
||||
)
|
||||
.and_then(|assoc| {
|
||||
let proj = Ty::new_projection(tcx, assoc.def_id, [self_ty]);
|
||||
tcx.try_normalize_erasing_regions(self.typing_env(), proj).ok()
|
||||
|
|
|
@ -69,7 +69,7 @@ impl<'tcx> LateLintPass<'tcx> for DerefIntoDynSupertrait {
|
|||
&& let ty::Dynamic(data, _, ty::Dyn) = self_ty.kind()
|
||||
&& let Some(self_principal) = data.principal()
|
||||
// `<T as Deref>::Target` is `dyn target_principal`
|
||||
&& let Some(target) = cx.get_associated_type(self_ty, did, "Target")
|
||||
&& let Some(target) = cx.get_associated_type(self_ty, did, sym::Target)
|
||||
&& let ty::Dynamic(data, _, ty::Dyn) = target.kind()
|
||||
&& let Some(target_principal) = data.principal()
|
||||
// `target_principal` is a supertrait of `t_principal`
|
||||
|
|
|
@ -550,7 +550,7 @@ impl<'tcx> FormatArgsExpr<'_, 'tcx> {
|
|||
// a `Target` that is in `self.ty_msrv_map`.
|
||||
if let Some(deref_trait_id) = self.cx.tcx.lang_items().deref_trait()
|
||||
&& implements_trait(self.cx, ty, deref_trait_id, &[])
|
||||
&& let Some(target_ty) = self.cx.get_associated_type(ty, deref_trait_id, "Target")
|
||||
&& let Some(target_ty) = self.cx.get_associated_type(ty, deref_trait_id, sym::Target)
|
||||
&& let Some(msrv) = self.ty_msrv_map.get(&target_ty)
|
||||
&& msrv.is_none_or(|msrv| self.msrv.meets(self.cx, msrv))
|
||||
{
|
||||
|
|
|
@ -644,7 +644,7 @@ fn has_is_empty(cx: &LateContext<'_>, expr: &Expr<'_>) -> bool {
|
|||
&& cx.tcx.get_diagnostic_item(sym::Deref).is_some_and(|deref_id| {
|
||||
implements_trait(cx, ty, deref_id, &[])
|
||||
&& cx
|
||||
.get_associated_type(ty, deref_id, "Target")
|
||||
.get_associated_type(ty, deref_id, sym::Target)
|
||||
.is_some_and(|deref_ty| ty_has_is_empty(cx, deref_ty, depth + 1))
|
||||
}))
|
||||
},
|
||||
|
|
|
@ -48,7 +48,7 @@ pub(super) fn check<'tcx>(
|
|||
&& let Some(method_id) = typeck.type_dependent_def_id(cloned_call.hir_id)
|
||||
&& cx.tcx.trait_of_item(method_id) == Some(iter_id)
|
||||
&& let cloned_recv_ty = typeck.expr_ty_adjusted(cloned_recv)
|
||||
&& let Some(iter_assoc_ty) = cx.get_associated_type(cloned_recv_ty, iter_id, "Item")
|
||||
&& let Some(iter_assoc_ty) = cx.get_associated_type(cloned_recv_ty, iter_id, sym::Item)
|
||||
&& matches!(*iter_assoc_ty.kind(), ty::Ref(_, ty, _) if !is_copy(cx, ty))
|
||||
{
|
||||
if needs_into_iter
|
||||
|
|
|
@ -99,7 +99,7 @@ pub fn check_for_loop_iter(
|
|||
&& let Some(into_iterator_trait_id) = cx.tcx.get_diagnostic_item(sym::IntoIterator)
|
||||
&& let collection_ty = cx.typeck_results().expr_ty(collection)
|
||||
&& implements_trait(cx, collection_ty, into_iterator_trait_id, &[])
|
||||
&& let Some(into_iter_item_ty) = cx.get_associated_type(collection_ty, into_iterator_trait_id, "Item")
|
||||
&& let Some(into_iter_item_ty) = cx.get_associated_type(collection_ty, into_iterator_trait_id, sym::Item)
|
||||
&& iter_item_ty == into_iter_item_ty
|
||||
&& let Some(collection_snippet) = collection.span.get_source_text(cx)
|
||||
{
|
||||
|
|
|
@ -153,7 +153,7 @@ fn check_addr_of_expr(
|
|||
}
|
||||
if let Some(deref_trait_id) = cx.tcx.get_diagnostic_item(sym::Deref)
|
||||
&& implements_trait(cx, receiver_ty, deref_trait_id, &[])
|
||||
&& cx.get_associated_type(receiver_ty, deref_trait_id, "Target") == Some(target_ty)
|
||||
&& cx.get_associated_type(receiver_ty, deref_trait_id, sym::Target) == Some(target_ty)
|
||||
// Make sure that it's actually calling the right `.to_string()`, (#10033)
|
||||
// *or* this is a `Cow::into_owned()` call (which would be the wrong into_owned receiver (str != Cow)
|
||||
// but that's ok for Cow::into_owned specifically)
|
||||
|
@ -322,7 +322,7 @@ fn check_split_call_arg(cx: &LateContext<'_>, expr: &Expr<'_>, method_name: Symb
|
|||
// add `.as_ref()` to the suggestion.
|
||||
let as_ref = if is_type_lang_item(cx, cx.typeck_results().expr_ty(expr), LangItem::String)
|
||||
&& let Some(deref_trait_id) = cx.tcx.get_diagnostic_item(sym::Deref)
|
||||
&& cx.get_associated_type(cx.typeck_results().expr_ty(receiver), deref_trait_id, "Target")
|
||||
&& cx.get_associated_type(cx.typeck_results().expr_ty(receiver), deref_trait_id, sym::Target)
|
||||
!= Some(cx.tcx.types.str_)
|
||||
{
|
||||
".as_ref()"
|
||||
|
@ -648,7 +648,7 @@ fn is_to_string_on_string_like<'a>(
|
|||
&& let GenericArgKind::Type(ty) = generic_arg.unpack()
|
||||
&& let Some(deref_trait_id) = cx.tcx.get_diagnostic_item(sym::Deref)
|
||||
&& let Some(as_ref_trait_id) = cx.tcx.get_diagnostic_item(sym::AsRef)
|
||||
&& (cx.get_associated_type(ty, deref_trait_id, "Target") == Some(cx.tcx.types.str_)
|
||||
&& (cx.get_associated_type(ty, deref_trait_id, sym::Target) == Some(cx.tcx.types.str_)
|
||||
|| implements_trait(cx, ty, as_ref_trait_id, &[cx.tcx.types.str_.into()]))
|
||||
{
|
||||
true
|
||||
|
|
|
@ -156,7 +156,7 @@ pub fn contains_ty_adt_constructor_opaque<'tcx>(cx: &LateContext<'tcx>, ty: Ty<'
|
|||
pub fn get_iterator_item_ty<'tcx>(cx: &LateContext<'tcx>, ty: Ty<'tcx>) -> Option<Ty<'tcx>> {
|
||||
cx.tcx
|
||||
.get_diagnostic_item(sym::Iterator)
|
||||
.and_then(|iter_did| cx.get_associated_type(ty, iter_did, "Item"))
|
||||
.and_then(|iter_did| cx.get_associated_type(ty, iter_did, sym::Item))
|
||||
}
|
||||
|
||||
/// Get the diagnostic name of a type, e.g. `sym::HashMap`. To check if a type
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue