mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
remove TyS::same_type
it ignored regions and constants in adts, but didn't do so for references or any other types. This seemed quite weird
This commit is contained in:
parent
25862ffc8d
commit
7ebd48d006
@ -2833,7 +2833,7 @@ impl ClashingExternDeclarations {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
let tcx = cx.tcx;
|
let tcx = cx.tcx;
|
||||||
if a == b || rustc_middle::ty::TyS::same_type(a, b) {
|
if a == b {
|
||||||
// All nominally-same types are structurally same, too.
|
// All nominally-same types are structurally same, too.
|
||||||
true
|
true
|
||||||
} else {
|
} else {
|
||||||
|
@ -893,19 +893,6 @@ impl<'tcx> ty::TyS<'tcx> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn same_type(a: Ty<'tcx>, b: Ty<'tcx>) -> bool {
|
|
||||||
match (&a.kind(), &b.kind()) {
|
|
||||||
(&Adt(did_a, substs_a), &Adt(did_b, substs_b)) => {
|
|
||||||
if did_a != did_b {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
substs_a.types().zip(substs_b.types()).all(|(a, b)| Self::same_type(a, b))
|
|
||||||
}
|
|
||||||
_ => a == b,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Peel off all reference types in this type until there are none left.
|
/// Peel off all reference types in this type until there are none left.
|
||||||
///
|
///
|
||||||
/// This method is idempotent, i.e. `ty.peel_refs().peel_refs() == ty.peel_refs()`.
|
/// This method is idempotent, i.e. `ty.peel_refs().peel_refs() == ty.peel_refs()`.
|
||||||
|
@ -6,7 +6,7 @@ use rustc_middle::mir::*;
|
|||||||
use rustc_middle::ty::{
|
use rustc_middle::ty::{
|
||||||
self,
|
self,
|
||||||
subst::{GenericArgKind, Subst, SubstsRef},
|
subst::{GenericArgKind, Subst, SubstsRef},
|
||||||
PredicateKind, Ty, TyCtxt, TyS,
|
PredicateKind, Ty, TyCtxt,
|
||||||
};
|
};
|
||||||
use rustc_session::lint::builtin::FUNCTION_ITEM_REFERENCES;
|
use rustc_session::lint::builtin::FUNCTION_ITEM_REFERENCES;
|
||||||
use rustc_span::{symbol::sym, Span};
|
use rustc_span::{symbol::sym, Span};
|
||||||
@ -88,7 +88,7 @@ impl<'tcx> FunctionItemRefChecker<'_, 'tcx> {
|
|||||||
for generic_inner_ty in arg_def.walk() {
|
for generic_inner_ty in arg_def.walk() {
|
||||||
if let GenericArgKind::Type(inner_ty) = generic_inner_ty.unpack() {
|
if let GenericArgKind::Type(inner_ty) = generic_inner_ty.unpack() {
|
||||||
// If the inner type matches the type bound by `Pointer`
|
// If the inner type matches the type bound by `Pointer`
|
||||||
if TyS::same_type(inner_ty, bound_ty) {
|
if inner_ty == bound_ty {
|
||||||
// Do a substitution using the parameters from the callsite
|
// Do a substitution using the parameters from the callsite
|
||||||
let subst_ty = inner_ty.subst(self.tcx, substs_ref);
|
let subst_ty = inner_ty.subst(self.tcx, substs_ref);
|
||||||
if let Some((fn_id, fn_substs)) =
|
if let Some((fn_id, fn_substs)) =
|
||||||
|
@ -1555,7 +1555,7 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> {
|
|||||||
// `erase_late_bound_regions`.
|
// `erase_late_bound_regions`.
|
||||||
let ty_erased = self.tcx.erase_late_bound_regions(ty);
|
let ty_erased = self.tcx.erase_late_bound_regions(ty);
|
||||||
let ty_erased = self.tcx.erase_regions(ty_erased);
|
let ty_erased = self.tcx.erase_regions(ty_erased);
|
||||||
let eq = ty::TyS::same_type(ty_erased, target_ty_erased);
|
let eq = ty_erased == target_ty_erased;
|
||||||
debug!(
|
debug!(
|
||||||
"maybe_note_obligation_cause_for_async_await: ty_erased={:?} \
|
"maybe_note_obligation_cause_for_async_await: ty_erased={:?} \
|
||||||
target_ty_erased={:?} eq={:?}",
|
target_ty_erased={:?} eq={:?}",
|
||||||
|
@ -322,7 +322,7 @@ fn is_type_structurally_recursive_inner<'tcx>(
|
|||||||
// struct Foo { Option<Option<Foo>> }
|
// struct Foo { Option<Option<Foo>> }
|
||||||
|
|
||||||
for &seen_adt in iter {
|
for &seen_adt in iter {
|
||||||
if ty::TyS::same_type(ty, seen_adt) {
|
if ty == seen_adt {
|
||||||
debug!("ContainsRecursive: {:?} contains {:?}", seen_adt, ty);
|
debug!("ContainsRecursive: {:?} contains {:?}", seen_adt, ty);
|
||||||
return Representability::ContainsRecursive;
|
return Representability::ContainsRecursive;
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ use rustc_hir::{
|
|||||||
};
|
};
|
||||||
use rustc_lint::{LateContext, LateLintPass};
|
use rustc_lint::{LateContext, LateLintPass};
|
||||||
use rustc_middle::ty::adjustment::{Adjust, Adjustment, AutoBorrow, AutoBorrowMutability};
|
use rustc_middle::ty::adjustment::{Adjust, Adjustment, AutoBorrow, AutoBorrowMutability};
|
||||||
use rustc_middle::ty::{self, Ty, TyCtxt, TyS, TypeckResults};
|
use rustc_middle::ty::{self, Ty, TyCtxt, TypeckResults};
|
||||||
use rustc_session::{declare_tool_lint, impl_lint_pass};
|
use rustc_session::{declare_tool_lint, impl_lint_pass};
|
||||||
use rustc_span::{symbol::sym, Span};
|
use rustc_span::{symbol::sym, Span};
|
||||||
|
|
||||||
@ -448,7 +448,7 @@ fn try_parse_ref_op<'tcx>(
|
|||||||
// the reference.
|
// the reference.
|
||||||
fn deref_method_same_type(result_ty: Ty<'_>, arg_ty: Ty<'_>) -> bool {
|
fn deref_method_same_type(result_ty: Ty<'_>, arg_ty: Ty<'_>) -> bool {
|
||||||
match (result_ty.kind(), arg_ty.kind()) {
|
match (result_ty.kind(), arg_ty.kind()) {
|
||||||
(ty::Ref(_, result_ty, _), ty::Ref(_, arg_ty, _)) => TyS::same_type(result_ty, arg_ty),
|
(ty::Ref(_, result_ty, _), ty::Ref(_, arg_ty, _)) => result_ty == arg_ty,
|
||||||
|
|
||||||
// The result type for a deref method is always a reference
|
// The result type for a deref method is always a reference
|
||||||
// Not matching the previous pattern means the argument type is not a reference
|
// Not matching the previous pattern means the argument type is not a reference
|
||||||
|
@ -8,7 +8,7 @@ use rustc_hir::{Body, Expr, ExprKind, GenericArg, Item, ItemKind, QPath, TyKind}
|
|||||||
use rustc_lint::{LateContext, LateLintPass, LintContext};
|
use rustc_lint::{LateContext, LateLintPass, LintContext};
|
||||||
use rustc_middle::hir::nested_filter;
|
use rustc_middle::hir::nested_filter;
|
||||||
use rustc_middle::lint::in_external_macro;
|
use rustc_middle::lint::in_external_macro;
|
||||||
use rustc_middle::ty::{Ty, TyS, TypeckResults};
|
use rustc_middle::ty::{Ty, TypeckResults};
|
||||||
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
||||||
use rustc_span::source_map::Span;
|
use rustc_span::source_map::Span;
|
||||||
use rustc_span::symbol::sym;
|
use rustc_span::symbol::sym;
|
||||||
@ -346,7 +346,7 @@ impl<'a, 'b, 'tcx> Visitor<'tcx> for ImplicitHasherConstructorVisitor<'a, 'b, 't
|
|||||||
if let TyKind::Path(QPath::Resolved(None, ty_path)) = ty.kind;
|
if let TyKind::Path(QPath::Resolved(None, ty_path)) = ty.kind;
|
||||||
if let Some(ty_did) = ty_path.res.opt_def_id();
|
if let Some(ty_did) = ty_path.res.opt_def_id();
|
||||||
then {
|
then {
|
||||||
if !TyS::same_type(self.target.ty(), self.maybe_typeck_results.unwrap().expr_ty(e)) {
|
if self.target.ty() != self.maybe_typeck_results.unwrap().expr_ty(e) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ use rustc_hir::{
|
|||||||
ItemKind, Mutability, Node, TraitItemRef, TyKind,
|
ItemKind, Mutability, Node, TraitItemRef, TyKind,
|
||||||
};
|
};
|
||||||
use rustc_lint::{LateContext, LateLintPass};
|
use rustc_lint::{LateContext, LateLintPass};
|
||||||
use rustc_middle::ty::{self, AssocKind, FnSig, Ty, TyS};
|
use rustc_middle::ty::{self, AssocKind, FnSig, Ty};
|
||||||
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
||||||
use rustc_span::{
|
use rustc_span::{
|
||||||
source_map::{Span, Spanned, Symbol},
|
source_map::{Span, Spanned, Symbol},
|
||||||
@ -265,7 +265,7 @@ impl LenOutput<'_> {
|
|||||||
(_, &ty::Bool) => true,
|
(_, &ty::Bool) => true,
|
||||||
(Self::Option(id), &ty::Adt(adt, subs)) if id == adt.did => subs.type_at(0).is_bool(),
|
(Self::Option(id), &ty::Adt(adt, subs)) if id == adt.did => subs.type_at(0).is_bool(),
|
||||||
(Self::Result(id, err_ty), &ty::Adt(adt, subs)) if id == adt.did => {
|
(Self::Result(id, err_ty), &ty::Adt(adt, subs)) if id == adt.did => {
|
||||||
subs.type_at(0).is_bool() && TyS::same_type(subs.type_at(1), err_ty)
|
subs.type_at(0).is_bool() && subs.type_at(1) == err_ty
|
||||||
},
|
},
|
||||||
_ => false,
|
_ => false,
|
||||||
}
|
}
|
||||||
|
@ -5,13 +5,12 @@ use clippy_utils::source::snippet_with_applicability;
|
|||||||
use rustc_errors::Applicability;
|
use rustc_errors::Applicability;
|
||||||
use rustc_hir::Expr;
|
use rustc_hir::Expr;
|
||||||
use rustc_lint::LateContext;
|
use rustc_lint::LateContext;
|
||||||
use rustc_middle::ty::TyS;
|
|
||||||
use rustc_span::symbol::sym;
|
use rustc_span::symbol::sym;
|
||||||
|
|
||||||
pub(super) fn check(cx: &LateContext<'_>, self_arg: &Expr<'_>, call_expr: &Expr<'_>) {
|
pub(super) fn check(cx: &LateContext<'_>, self_arg: &Expr<'_>, call_expr: &Expr<'_>) {
|
||||||
let self_ty = cx.typeck_results().expr_ty(self_arg);
|
let self_ty = cx.typeck_results().expr_ty(self_arg);
|
||||||
let self_ty_adjusted = cx.typeck_results().expr_ty_adjusted(self_arg);
|
let self_ty_adjusted = cx.typeck_results().expr_ty_adjusted(self_arg);
|
||||||
if !(TyS::same_type(self_ty, self_ty_adjusted) && is_trait_method(cx, call_expr, sym::IntoIterator)) {
|
if !(self_ty == self_ty_adjusted && is_trait_method(cx, call_expr, sym::IntoIterator)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ use clippy_utils::ty::is_type_diagnostic_item;
|
|||||||
use rustc_errors::Applicability;
|
use rustc_errors::Applicability;
|
||||||
use rustc_hir::{Expr, Mutability};
|
use rustc_hir::{Expr, Mutability};
|
||||||
use rustc_lint::LateContext;
|
use rustc_lint::LateContext;
|
||||||
use rustc_middle::ty::{self, Ty, TyS};
|
use rustc_middle::ty::{self, Ty};
|
||||||
use rustc_span::sym;
|
use rustc_span::sym;
|
||||||
|
|
||||||
pub(super) fn check(cx: &LateContext<'_>, self_arg: &Expr<'_>, arg: &Expr<'_>, method_name: &str) {
|
pub(super) fn check(cx: &LateContext<'_>, self_arg: &Expr<'_>, arg: &Expr<'_>, method_name: &str) {
|
||||||
@ -22,7 +22,7 @@ pub(super) fn check(cx: &LateContext<'_>, self_arg: &Expr<'_>, arg: &Expr<'_>, m
|
|||||||
mutbl: Mutability::Not,
|
mutbl: Mutability::Not,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
TyS::same_type(receiver_ty_adjusted, ref_receiver_ty)
|
receiver_ty_adjusted == ref_receiver_ty
|
||||||
},
|
},
|
||||||
_ => false,
|
_ => false,
|
||||||
};
|
};
|
||||||
|
@ -26,7 +26,7 @@ use rustc_hir::{
|
|||||||
};
|
};
|
||||||
use rustc_hir::{HirIdMap, HirIdSet};
|
use rustc_hir::{HirIdMap, HirIdSet};
|
||||||
use rustc_lint::{LateContext, LateLintPass};
|
use rustc_lint::{LateContext, LateLintPass};
|
||||||
use rustc_middle::ty::{self, Ty, TyS, VariantDef};
|
use rustc_middle::ty::{self, Ty, VariantDef};
|
||||||
use rustc_semver::RustcVersion;
|
use rustc_semver::RustcVersion;
|
||||||
use rustc_session::{declare_tool_lint, impl_lint_pass};
|
use rustc_session::{declare_tool_lint, impl_lint_pass};
|
||||||
use rustc_span::source_map::{Span, Spanned};
|
use rustc_span::source_map::{Span, Spanned};
|
||||||
@ -2262,7 +2262,7 @@ fn lint_match_arms<'tcx>(cx: &LateContext<'tcx>, expr: &Expr<'_>) {
|
|||||||
};
|
};
|
||||||
// the names technically don't have to match; this makes the lint more conservative
|
// the names technically don't have to match; this makes the lint more conservative
|
||||||
if cx.tcx.hir().name(a_id) == cx.tcx.hir().name(b_id);
|
if cx.tcx.hir().name(a_id) == cx.tcx.hir().name(b_id);
|
||||||
if TyS::same_type(cx.typeck_results().expr_ty(a), cx.typeck_results().expr_ty(b));
|
if cx.typeck_results().expr_ty(a) == cx.typeck_results().expr_ty(b);
|
||||||
if pat_contains_local(lhs.pat, a_id);
|
if pat_contains_local(lhs.pat, a_id);
|
||||||
if pat_contains_local(rhs.pat, b_id);
|
if pat_contains_local(rhs.pat, b_id);
|
||||||
then {
|
then {
|
||||||
|
@ -8,7 +8,6 @@ use rustc_hir as hir;
|
|||||||
use rustc_hir::def::Res;
|
use rustc_hir::def::Res;
|
||||||
use rustc_hir::{Expr, ExprKind, PatKind, QPath, UnOp};
|
use rustc_hir::{Expr, ExprKind, PatKind, QPath, UnOp};
|
||||||
use rustc_lint::LateContext;
|
use rustc_lint::LateContext;
|
||||||
use rustc_middle::ty::TyS;
|
|
||||||
use rustc_span::source_map::Span;
|
use rustc_span::source_map::Span;
|
||||||
use rustc_span::symbol::{sym, Symbol};
|
use rustc_span::symbol::{sym, Symbol};
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
@ -149,7 +148,7 @@ pub(super) fn check<'tcx>(
|
|||||||
if_chain! {
|
if_chain! {
|
||||||
if path_to_local_id(a_path, filter_param_id);
|
if path_to_local_id(a_path, filter_param_id);
|
||||||
if path_to_local_id(b, map_param_id);
|
if path_to_local_id(b, map_param_id);
|
||||||
if TyS::same_type(cx.typeck_results().expr_ty_adjusted(a), cx.typeck_results().expr_ty_adjusted(b));
|
if cx.typeck_results().expr_ty_adjusted(a) == cx.typeck_results().expr_ty_adjusted(b);
|
||||||
then {
|
then {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ use if_chain::if_chain;
|
|||||||
use rustc_errors::Applicability;
|
use rustc_errors::Applicability;
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_lint::LateContext;
|
use rustc_lint::LateContext;
|
||||||
use rustc_middle::ty::TyS;
|
|
||||||
use rustc_span::sym;
|
use rustc_span::sym;
|
||||||
|
|
||||||
use super::IMPLICIT_CLONE;
|
use super::IMPLICIT_CLONE;
|
||||||
@ -19,7 +18,7 @@ pub fn check(cx: &LateContext<'_>, method_name: &str, expr: &hir::Expr<'_>, recv
|
|||||||
let input_type = cx.typeck_results().expr_ty(recv);
|
let input_type = cx.typeck_results().expr_ty(recv);
|
||||||
let (input_type, ref_count) = peel_mid_ty_refs(input_type);
|
let (input_type, ref_count) = peel_mid_ty_refs(input_type);
|
||||||
if let Some(ty_name) = input_type.ty_adt_def().map(|adt_def| cx.tcx.item_name(adt_def.did));
|
if let Some(ty_name) = input_type.ty_adt_def().map(|adt_def| cx.tcx.item_name(adt_def.did));
|
||||||
if TyS::same_type(return_type, input_type);
|
if return_type == input_type;
|
||||||
then {
|
then {
|
||||||
let mut app = Applicability::MachineApplicable;
|
let mut app = Applicability::MachineApplicable;
|
||||||
let recv_snip = snippet_with_context(cx, recv.span, expr.span.ctxt(), "..", &mut app).0;
|
let recv_snip = snippet_with_context(cx, recv.span, expr.span.ctxt(), "..", &mut app).0;
|
||||||
|
@ -78,7 +78,7 @@ use rustc_hir::def::Res;
|
|||||||
use rustc_hir::{Expr, ExprKind, PrimTy, QPath, TraitItem, TraitItemKind};
|
use rustc_hir::{Expr, ExprKind, PrimTy, QPath, TraitItem, TraitItemKind};
|
||||||
use rustc_lint::{LateContext, LateLintPass, LintContext};
|
use rustc_lint::{LateContext, LateLintPass, LintContext};
|
||||||
use rustc_middle::lint::in_external_macro;
|
use rustc_middle::lint::in_external_macro;
|
||||||
use rustc_middle::ty::{self, TraitRef, Ty, TyS};
|
use rustc_middle::ty::{self, TraitRef, Ty};
|
||||||
use rustc_semver::RustcVersion;
|
use rustc_semver::RustcVersion;
|
||||||
use rustc_session::{declare_tool_lint, impl_lint_pass};
|
use rustc_session::{declare_tool_lint, impl_lint_pass};
|
||||||
use rustc_span::{sym, Span};
|
use rustc_span::{sym, Span};
|
||||||
@ -2195,7 +2195,7 @@ impl<'tcx> LateLintPass<'tcx> for Methods {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if name == "new" && !TyS::same_type(ret_ty, self_ty) {
|
if name == "new" && ret_ty != self_ty {
|
||||||
span_lint(
|
span_lint(
|
||||||
cx,
|
cx,
|
||||||
NEW_RET_NO_SELF,
|
NEW_RET_NO_SELF,
|
||||||
|
@ -5,7 +5,7 @@ use rustc_hir as hir;
|
|||||||
use rustc_hir::intravisit::{walk_expr, Visitor};
|
use rustc_hir::intravisit::{walk_expr, Visitor};
|
||||||
use rustc_hir::LangItem::{OptionNone, OptionSome};
|
use rustc_hir::LangItem::{OptionNone, OptionSome};
|
||||||
use rustc_lint::LateContext;
|
use rustc_lint::LateContext;
|
||||||
use rustc_middle::ty::{self, TyS};
|
use rustc_middle::ty;
|
||||||
use rustc_span::sym;
|
use rustc_span::sym;
|
||||||
|
|
||||||
use super::UNNECESSARY_FILTER_MAP;
|
use super::UNNECESSARY_FILTER_MAP;
|
||||||
@ -34,7 +34,7 @@ pub(super) fn check(cx: &LateContext<'_>, expr: &hir::Expr<'_>, arg: &hir::Expr<
|
|||||||
let in_ty = cx.typeck_results().node_type(body.params[0].hir_id);
|
let in_ty = cx.typeck_results().node_type(body.params[0].hir_id);
|
||||||
match cx.typeck_results().expr_ty(&body.value).kind() {
|
match cx.typeck_results().expr_ty(&body.value).kind() {
|
||||||
ty::Adt(adt, subst)
|
ty::Adt(adt, subst)
|
||||||
if cx.tcx.is_diagnostic_item(sym::Option, adt.did) && TyS::same_type(in_ty, subst.type_at(0)) =>
|
if cx.tcx.is_diagnostic_item(sym::Option, adt.did) && in_ty == subst.type_at(0) =>
|
||||||
{
|
{
|
||||||
"filter"
|
"filter"
|
||||||
},
|
},
|
||||||
|
@ -4,7 +4,6 @@ use clippy_utils::ty::is_type_diagnostic_item;
|
|||||||
use rustc_errors::Applicability;
|
use rustc_errors::Applicability;
|
||||||
use rustc_hir::{Expr, ExprKind};
|
use rustc_hir::{Expr, ExprKind};
|
||||||
use rustc_lint::{LateContext, LateLintPass};
|
use rustc_lint::{LateContext, LateLintPass};
|
||||||
use rustc_middle::ty::TyS;
|
|
||||||
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
||||||
use rustc_span::symbol::sym;
|
use rustc_span::symbol::sym;
|
||||||
|
|
||||||
@ -49,7 +48,7 @@ impl<'tcx> LateLintPass<'tcx> for OptionNeedlessDeref {
|
|||||||
if let ExprKind::MethodCall(path, [sub_expr], _) = expr.kind;
|
if let ExprKind::MethodCall(path, [sub_expr], _) = expr.kind;
|
||||||
let symbol = path.ident.as_str();
|
let symbol = path.ident.as_str();
|
||||||
if symbol == "as_deref" || symbol == "as_deref_mut";
|
if symbol == "as_deref" || symbol == "as_deref_mut";
|
||||||
if TyS::same_type( outer_ty, typeck.expr_ty(sub_expr) );
|
if outer_ty == typeck.expr_ty(sub_expr);
|
||||||
then{
|
then{
|
||||||
span_lint_and_sugg(
|
span_lint_and_sugg(
|
||||||
cx,
|
cx,
|
||||||
|
@ -6,7 +6,6 @@ use rustc_errors::Applicability;
|
|||||||
use rustc_hir::LangItem::{OptionSome, ResultOk};
|
use rustc_hir::LangItem::{OptionSome, ResultOk};
|
||||||
use rustc_hir::{AsyncGeneratorKind, Block, Body, Expr, ExprKind, GeneratorKind, LangItem, MatchSource, QPath};
|
use rustc_hir::{AsyncGeneratorKind, Block, Body, Expr, ExprKind, GeneratorKind, LangItem, MatchSource, QPath};
|
||||||
use rustc_lint::{LateContext, LateLintPass};
|
use rustc_lint::{LateContext, LateLintPass};
|
||||||
use rustc_middle::ty::TyS;
|
|
||||||
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
||||||
|
|
||||||
declare_clippy_lint! {
|
declare_clippy_lint! {
|
||||||
@ -128,7 +127,7 @@ fn check(cx: &LateContext<'_>, expr: &Expr<'_>) {
|
|||||||
if expr.span.ctxt() == inner_expr.span.ctxt();
|
if expr.span.ctxt() == inner_expr.span.ctxt();
|
||||||
let expr_ty = cx.typeck_results().expr_ty(expr);
|
let expr_ty = cx.typeck_results().expr_ty(expr);
|
||||||
let inner_ty = cx.typeck_results().expr_ty(inner_expr);
|
let inner_ty = cx.typeck_results().expr_ty(inner_expr);
|
||||||
if TyS::same_type(expr_ty, inner_ty);
|
if expr_ty == inner_ty;
|
||||||
then {
|
then {
|
||||||
span_lint_and_sugg(
|
span_lint_and_sugg(
|
||||||
cx,
|
cx,
|
||||||
|
@ -8,7 +8,6 @@ use rustc_hir as hir;
|
|||||||
use rustc_hir::HirIdSet;
|
use rustc_hir::HirIdSet;
|
||||||
use rustc_lint::{LateContext, LateLintPass, LintContext};
|
use rustc_lint::{LateContext, LateLintPass, LintContext};
|
||||||
use rustc_middle::lint::in_external_macro;
|
use rustc_middle::lint::in_external_macro;
|
||||||
use rustc_middle::ty::TyS;
|
|
||||||
use rustc_session::{declare_tool_lint, impl_lint_pass};
|
use rustc_session::{declare_tool_lint, impl_lint_pass};
|
||||||
use rustc_span::sym;
|
use rustc_span::sym;
|
||||||
|
|
||||||
@ -103,7 +102,7 @@ impl<'tcx> LateLintPass<'tcx> for NewWithoutDefault {
|
|||||||
if cx.access_levels.is_reachable(impl_item.def_id);
|
if cx.access_levels.is_reachable(impl_item.def_id);
|
||||||
let self_def_id = cx.tcx.hir().get_parent_item(id);
|
let self_def_id = cx.tcx.hir().get_parent_item(id);
|
||||||
let self_ty = cx.tcx.type_of(self_def_id);
|
let self_ty = cx.tcx.type_of(self_def_id);
|
||||||
if TyS::same_type(self_ty, return_ty(cx, id));
|
if self_ty == return_ty(cx, id);
|
||||||
if let Some(default_trait_id) = cx.tcx.get_diagnostic_item(sym::Default);
|
if let Some(default_trait_id) = cx.tcx.get_diagnostic_item(sym::Default);
|
||||||
then {
|
then {
|
||||||
if self.impling_types.is_none() {
|
if self.impling_types.is_none() {
|
||||||
|
@ -6,7 +6,6 @@ use if_chain::if_chain;
|
|||||||
use rustc_errors::Applicability;
|
use rustc_errors::Applicability;
|
||||||
use rustc_hir::{BorrowKind, Expr, ExprKind, LangItem, Mutability};
|
use rustc_hir::{BorrowKind, Expr, ExprKind, LangItem, Mutability};
|
||||||
use rustc_lint::{LateContext, LateLintPass};
|
use rustc_lint::{LateContext, LateLintPass};
|
||||||
use rustc_middle::ty::TyS;
|
|
||||||
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
||||||
|
|
||||||
declare_clippy_lint! {
|
declare_clippy_lint! {
|
||||||
@ -54,7 +53,7 @@ impl<'tcx> LateLintPass<'tcx> for RedundantSlicing {
|
|||||||
if addressee.span.ctxt() == ctxt;
|
if addressee.span.ctxt() == ctxt;
|
||||||
if let ExprKind::Index(indexed, range) = addressee.kind;
|
if let ExprKind::Index(indexed, range) = addressee.kind;
|
||||||
if is_type_lang_item(cx, cx.typeck_results().expr_ty_adjusted(range), LangItem::RangeFull);
|
if is_type_lang_item(cx, cx.typeck_results().expr_ty_adjusted(range), LangItem::RangeFull);
|
||||||
if TyS::same_type(cx.typeck_results().expr_ty(expr), cx.typeck_results().expr_ty(indexed));
|
if cx.typeck_results().expr_ty(expr) == cx.typeck_results().expr_ty(indexed);
|
||||||
then {
|
then {
|
||||||
let mut app = Applicability::MachineApplicable;
|
let mut app = Applicability::MachineApplicable;
|
||||||
let snip = snippet_with_context(cx, indexed.span, ctxt, "..", &mut app).0;
|
let snip = snippet_with_context(cx, indexed.span, ctxt, "..", &mut app).0;
|
||||||
|
@ -7,7 +7,7 @@ use if_chain::if_chain;
|
|||||||
use rustc_hir::BinOpKind;
|
use rustc_hir::BinOpKind;
|
||||||
use rustc_hir::{Expr, ExprKind};
|
use rustc_hir::{Expr, ExprKind};
|
||||||
use rustc_lint::{LateContext, LateLintPass};
|
use rustc_lint::{LateContext, LateLintPass};
|
||||||
use rustc_middle::ty::{self, Ty, TyS, TypeAndMut};
|
use rustc_middle::ty::{self, Ty, TypeAndMut};
|
||||||
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
||||||
|
|
||||||
declare_clippy_lint! {
|
declare_clippy_lint! {
|
||||||
@ -138,7 +138,7 @@ impl<'tcx> LateLintPass<'tcx> for SizeOfInElementCount {
|
|||||||
// Find a size_of call in the count parameter expression and
|
// Find a size_of call in the count parameter expression and
|
||||||
// check that it's the same type
|
// check that it's the same type
|
||||||
if let Some(ty_used_for_size_of) = get_size_of_ty(cx, count_expr, false);
|
if let Some(ty_used_for_size_of) = get_size_of_ty(cx, count_expr, false);
|
||||||
if TyS::same_type(pointee_ty, ty_used_for_size_of);
|
if pointee_ty == ty_used_for_size_of;
|
||||||
then {
|
then {
|
||||||
span_lint_and_help(
|
span_lint_and_help(
|
||||||
cx,
|
cx,
|
||||||
|
@ -102,7 +102,7 @@ impl HirEqInterExpr<'_, '_, '_> {
|
|||||||
if let Some(typeck) = self.inner.maybe_typeck_results {
|
if let Some(typeck) = self.inner.maybe_typeck_results {
|
||||||
let l_ty = typeck.pat_ty(l.pat);
|
let l_ty = typeck.pat_ty(l.pat);
|
||||||
let r_ty = typeck.pat_ty(r.pat);
|
let r_ty = typeck.pat_ty(r.pat);
|
||||||
if !rustc_middle::ty::TyS::same_type(l_ty, r_ty) {
|
if l_ty != r_ty {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ pub fn can_partially_move_ty<'tcx>(cx: &LateContext<'tcx>, ty: Ty<'tcx>) -> bool
|
|||||||
/// Walks into `ty` and returns `true` if any inner type is the same as `other_ty`
|
/// Walks into `ty` and returns `true` if any inner type is the same as `other_ty`
|
||||||
pub fn contains_ty(ty: Ty<'_>, other_ty: Ty<'_>) -> bool {
|
pub fn contains_ty(ty: Ty<'_>, other_ty: Ty<'_>) -> bool {
|
||||||
ty.walk().any(|inner| match inner.unpack() {
|
ty.walk().any(|inner| match inner.unpack() {
|
||||||
GenericArgKind::Type(inner_ty) => ty::TyS::same_type(other_ty, inner_ty),
|
GenericArgKind::Type(inner_ty) => other_ty == inner_ty,
|
||||||
GenericArgKind::Lifetime(_) | GenericArgKind::Const(_) => false,
|
GenericArgKind::Lifetime(_) | GenericArgKind::Const(_) => false,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user