fix match_like_matches_macro in clippy

This commit is contained in:
robojumper 2020-07-05 22:11:19 +02:00
parent 2e8a1be444
commit 1740dda763
27 changed files with 91 additions and 186 deletions

View file

@ -237,6 +237,7 @@ fn is_commutative(op: hir::BinOpKind) -> bool {
use rustc_hir::BinOpKind::{ use rustc_hir::BinOpKind::{
Add, And, BitAnd, BitOr, BitXor, Div, Eq, Ge, Gt, Le, Lt, Mul, Ne, Or, Rem, Shl, Shr, Sub, Add, And, BitAnd, BitOr, BitXor, Div, Eq, Ge, Gt, Le, Lt, Mul, Ne, Or, Rem, Shl, Shr, Sub,
}; };
#[allow(clippy::match_like_matches_macro)]
match op { match op {
Add | Mul | And | Or | BitXor | BitAnd | BitOr | Eq | Ne => true, Add | Mul | And | Or | BitXor | BitAnd | BitOr | Eq | Ne => true,
Sub | Div | Rem | Shl | Shr | Lt | Le | Ge | Gt => false, Sub | Div | Rem | Shl | Shr | Lt | Le | Ge | Gt => false,

View file

@ -122,8 +122,5 @@ impl<'tcx> LateLintPass<'tcx> for ComparisonChain {
} }
fn kind_is_cmp(kind: BinOpKind) -> bool { fn kind_is_cmp(kind: BinOpKind) -> bool {
match kind { matches!(kind, BinOpKind::Lt | BinOpKind::Gt | BinOpKind::Eq)
BinOpKind::Lt | BinOpKind::Gt | BinOpKind::Eq => true,
_ => false,
}
} }

View file

@ -214,20 +214,20 @@ impl<'tcx> LateLintPass<'tcx> for EqOp {
} }
fn is_valid_operator(op: BinOp) -> bool { fn is_valid_operator(op: BinOp) -> bool {
match op.node { matches!(
op.node,
BinOpKind::Sub BinOpKind::Sub
| BinOpKind::Div | BinOpKind::Div
| BinOpKind::Eq | BinOpKind::Eq
| BinOpKind::Lt | BinOpKind::Lt
| BinOpKind::Le | BinOpKind::Le
| BinOpKind::Gt | BinOpKind::Gt
| BinOpKind::Ge | BinOpKind::Ge
| BinOpKind::Ne | BinOpKind::Ne
| BinOpKind::And | BinOpKind::And
| BinOpKind::Or | BinOpKind::Or
| BinOpKind::BitXor | BinOpKind::BitXor
| BinOpKind::BitAnd | BinOpKind::BitAnd
| BinOpKind::BitOr => true, | BinOpKind::BitOr
_ => false, )
}
} }

View file

@ -105,10 +105,7 @@ fn is_argument(map: rustc_middle::hir::map::Map<'_>, id: HirId) -> bool {
_ => return false, _ => return false,
} }
match map.find(map.get_parent_node(id)) { matches!(map.find(map.get_parent_node(id)), Some(Node::Param(_)))
Some(Node::Param(_)) => true,
_ => false,
}
} }
impl<'a, 'tcx> Delegate<'tcx> for EscapeDelegate<'a, 'tcx> { impl<'a, 'tcx> Delegate<'tcx> for EscapeDelegate<'a, 'tcx> {

View file

@ -175,10 +175,7 @@ fn get_ufcs_type_name(cx: &LateContext<'_>, method_def_id: def_id::DefId, self_a
fn match_borrow_depth(lhs: Ty<'_>, rhs: Ty<'_>) -> bool { fn match_borrow_depth(lhs: Ty<'_>, rhs: Ty<'_>) -> bool {
match (&lhs.kind, &rhs.kind) { match (&lhs.kind, &rhs.kind) {
(ty::Ref(_, t1, mut1), ty::Ref(_, t2, mut2)) => mut1 == mut2 && match_borrow_depth(&t1, &t2), (ty::Ref(_, t1, mut1), ty::Ref(_, t2, mut2)) => mut1 == mut2 && match_borrow_depth(&t1, &t2),
(l, r) => match (l, r) { (l, r) => !matches!((l, r), (ty::Ref(_, _, _), _) | (_, ty::Ref(_, _, _))),
(ty::Ref(_, _, _), _) | (_, ty::Ref(_, _, _)) => false,
(_, _) => true,
},
} }
} }

View file

@ -305,18 +305,10 @@ fn check_missing_else(cx: &EarlyContext<'_>, first: &Expr, second: &Expr) {
} }
fn is_block(expr: &Expr) -> bool { fn is_block(expr: &Expr) -> bool {
if let ExprKind::Block(..) = expr.kind { matches!(expr.kind, ExprKind::Block(..))
true
} else {
false
}
} }
/// Check if the expression is an `if` or `if let` /// Check if the expression is an `if` or `if let`
fn is_if(expr: &Expr) -> bool { fn is_if(expr: &Expr) -> bool {
if let ExprKind::If(..) = expr.kind { matches!(expr.kind, ExprKind::If(..))
true
} else {
false
}
} }

View file

@ -645,13 +645,7 @@ fn is_mutated_static(cx: &LateContext<'_>, e: &hir::Expr<'_>) -> bool {
use hir::ExprKind::{Field, Index, Path}; use hir::ExprKind::{Field, Index, Path};
match e.kind { match e.kind {
Path(ref qpath) => { Path(ref qpath) => !matches!(qpath_res(cx, qpath, e.hir_id), Res::Local(_)),
if let Res::Local(_) = qpath_res(cx, qpath, e.hir_id) {
false
} else {
true
}
},
Field(ref inner, _) | Index(ref inner, _) => is_mutated_static(cx, inner), Field(ref inner, _) | Index(ref inner, _) => is_mutated_static(cx, inner),
_ => false, _ => false,
} }

View file

@ -277,7 +277,6 @@ mod question_mark;
mod ranges; mod ranges;
mod redundant_clone; mod redundant_clone;
mod redundant_field_names; mod redundant_field_names;
mod redundant_pattern_matching;
mod redundant_pub_crate; mod redundant_pub_crate;
mod redundant_static_lifetimes; mod redundant_static_lifetimes;
mod reference; mod reference;
@ -623,11 +622,13 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
&matches::INFALLIBLE_DESTRUCTURING_MATCH, &matches::INFALLIBLE_DESTRUCTURING_MATCH,
&matches::MATCH_AS_REF, &matches::MATCH_AS_REF,
&matches::MATCH_BOOL, &matches::MATCH_BOOL,
&matches::MATCH_LIKE_MATCHES_MACRO,
&matches::MATCH_OVERLAPPING_ARM, &matches::MATCH_OVERLAPPING_ARM,
&matches::MATCH_REF_PATS, &matches::MATCH_REF_PATS,
&matches::MATCH_SINGLE_BINDING, &matches::MATCH_SINGLE_BINDING,
&matches::MATCH_WILDCARD_FOR_SINGLE_VARIANTS, &matches::MATCH_WILDCARD_FOR_SINGLE_VARIANTS,
&matches::MATCH_WILD_ERR_ARM, &matches::MATCH_WILD_ERR_ARM,
&matches::REDUNDANT_PATTERN_MATCHING,
&matches::REST_PAT_IN_FULLY_BOUND_STRUCTS, &matches::REST_PAT_IN_FULLY_BOUND_STRUCTS,
&matches::SINGLE_MATCH, &matches::SINGLE_MATCH,
&matches::SINGLE_MATCH_ELSE, &matches::SINGLE_MATCH_ELSE,
@ -757,7 +758,6 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
&ranges::REVERSED_EMPTY_RANGES, &ranges::REVERSED_EMPTY_RANGES,
&redundant_clone::REDUNDANT_CLONE, &redundant_clone::REDUNDANT_CLONE,
&redundant_field_names::REDUNDANT_FIELD_NAMES, &redundant_field_names::REDUNDANT_FIELD_NAMES,
&redundant_pattern_matching::REDUNDANT_PATTERN_MATCHING,
&redundant_pub_crate::REDUNDANT_PUB_CRATE, &redundant_pub_crate::REDUNDANT_PUB_CRATE,
&redundant_static_lifetimes::REDUNDANT_STATIC_LIFETIMES, &redundant_static_lifetimes::REDUNDANT_STATIC_LIFETIMES,
&reference::DEREF_ADDROF, &reference::DEREF_ADDROF,
@ -956,7 +956,6 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
store.register_late_pass(|| box missing_doc::MissingDoc::new()); store.register_late_pass(|| box missing_doc::MissingDoc::new());
store.register_late_pass(|| box missing_inline::MissingInline); store.register_late_pass(|| box missing_inline::MissingInline);
store.register_late_pass(|| box if_let_some_result::OkIfLet); store.register_late_pass(|| box if_let_some_result::OkIfLet);
store.register_late_pass(|| box redundant_pattern_matching::RedundantPatternMatching);
store.register_late_pass(|| box partialeq_ne_impl::PartialEqNeImpl); store.register_late_pass(|| box partialeq_ne_impl::PartialEqNeImpl);
store.register_late_pass(|| box unused_io_amount::UnusedIoAmount); store.register_late_pass(|| box unused_io_amount::UnusedIoAmount);
let enum_variant_size_threshold = conf.enum_variant_size_threshold; let enum_variant_size_threshold = conf.enum_variant_size_threshold;
@ -1295,9 +1294,11 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
LintId::of(&map_unit_fn::RESULT_MAP_UNIT_FN), LintId::of(&map_unit_fn::RESULT_MAP_UNIT_FN),
LintId::of(&matches::INFALLIBLE_DESTRUCTURING_MATCH), LintId::of(&matches::INFALLIBLE_DESTRUCTURING_MATCH),
LintId::of(&matches::MATCH_AS_REF), LintId::of(&matches::MATCH_AS_REF),
LintId::of(&matches::MATCH_LIKE_MATCHES_MACRO),
LintId::of(&matches::MATCH_OVERLAPPING_ARM), LintId::of(&matches::MATCH_OVERLAPPING_ARM),
LintId::of(&matches::MATCH_REF_PATS), LintId::of(&matches::MATCH_REF_PATS),
LintId::of(&matches::MATCH_SINGLE_BINDING), LintId::of(&matches::MATCH_SINGLE_BINDING),
LintId::of(&matches::REDUNDANT_PATTERN_MATCHING),
LintId::of(&matches::SINGLE_MATCH), LintId::of(&matches::SINGLE_MATCH),
LintId::of(&matches::WILDCARD_IN_OR_PATTERNS), LintId::of(&matches::WILDCARD_IN_OR_PATTERNS),
LintId::of(&mem_discriminant::MEM_DISCRIMINANT_NON_ENUM), LintId::of(&mem_discriminant::MEM_DISCRIMINANT_NON_ENUM),
@ -1387,7 +1388,6 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
LintId::of(&ranges::REVERSED_EMPTY_RANGES), LintId::of(&ranges::REVERSED_EMPTY_RANGES),
LintId::of(&redundant_clone::REDUNDANT_CLONE), LintId::of(&redundant_clone::REDUNDANT_CLONE),
LintId::of(&redundant_field_names::REDUNDANT_FIELD_NAMES), LintId::of(&redundant_field_names::REDUNDANT_FIELD_NAMES),
LintId::of(&redundant_pattern_matching::REDUNDANT_PATTERN_MATCHING),
LintId::of(&redundant_static_lifetimes::REDUNDANT_STATIC_LIFETIMES), LintId::of(&redundant_static_lifetimes::REDUNDANT_STATIC_LIFETIMES),
LintId::of(&reference::DEREF_ADDROF), LintId::of(&reference::DEREF_ADDROF),
LintId::of(&reference::REF_IN_DEREF), LintId::of(&reference::REF_IN_DEREF),
@ -1488,8 +1488,10 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
LintId::of(&manual_non_exhaustive::MANUAL_NON_EXHAUSTIVE), LintId::of(&manual_non_exhaustive::MANUAL_NON_EXHAUSTIVE),
LintId::of(&map_clone::MAP_CLONE), LintId::of(&map_clone::MAP_CLONE),
LintId::of(&matches::INFALLIBLE_DESTRUCTURING_MATCH), LintId::of(&matches::INFALLIBLE_DESTRUCTURING_MATCH),
LintId::of(&matches::MATCH_LIKE_MATCHES_MACRO),
LintId::of(&matches::MATCH_OVERLAPPING_ARM), LintId::of(&matches::MATCH_OVERLAPPING_ARM),
LintId::of(&matches::MATCH_REF_PATS), LintId::of(&matches::MATCH_REF_PATS),
LintId::of(&matches::REDUNDANT_PATTERN_MATCHING),
LintId::of(&matches::SINGLE_MATCH), LintId::of(&matches::SINGLE_MATCH),
LintId::of(&mem_replace::MEM_REPLACE_OPTION_WITH_NONE), LintId::of(&mem_replace::MEM_REPLACE_OPTION_WITH_NONE),
LintId::of(&mem_replace::MEM_REPLACE_WITH_DEFAULT), LintId::of(&mem_replace::MEM_REPLACE_WITH_DEFAULT),
@ -1526,7 +1528,6 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
LintId::of(&ptr::PTR_ARG), LintId::of(&ptr::PTR_ARG),
LintId::of(&question_mark::QUESTION_MARK), LintId::of(&question_mark::QUESTION_MARK),
LintId::of(&redundant_field_names::REDUNDANT_FIELD_NAMES), LintId::of(&redundant_field_names::REDUNDANT_FIELD_NAMES),
LintId::of(&redundant_pattern_matching::REDUNDANT_PATTERN_MATCHING),
LintId::of(&redundant_static_lifetimes::REDUNDANT_STATIC_LIFETIMES), LintId::of(&redundant_static_lifetimes::REDUNDANT_STATIC_LIFETIMES),
LintId::of(&regex::TRIVIAL_REGEX), LintId::of(&regex::TRIVIAL_REGEX),
LintId::of(&returns::NEEDLESS_RETURN), LintId::of(&returns::NEEDLESS_RETURN),

View file

@ -129,10 +129,10 @@ fn check_fn_inner<'tcx>(
} }
let mut bounds_lts = Vec::new(); let mut bounds_lts = Vec::new();
let types = generics.params.iter().filter(|param| match param.kind { let types = generics
GenericParamKind::Type { .. } => true, .params
_ => false, .iter()
}); .filter(|param| matches!(param.kind, GenericParamKind::Type { .. }));
for typ in types { for typ in types {
for bound in typ.bounds { for bound in typ.bounds {
let mut visitor = RefVisitor::new(cx); let mut visitor = RefVisitor::new(cx);
@ -337,10 +337,10 @@ impl<'a, 'tcx> RefVisitor<'a, 'tcx> {
fn collect_anonymous_lifetimes(&mut self, qpath: &QPath<'_>, ty: &Ty<'_>) { fn collect_anonymous_lifetimes(&mut self, qpath: &QPath<'_>, ty: &Ty<'_>) {
if let Some(ref last_path_segment) = last_path_segment(qpath).args { if let Some(ref last_path_segment) = last_path_segment(qpath).args {
if !last_path_segment.parenthesized if !last_path_segment.parenthesized
&& !last_path_segment.args.iter().any(|arg| match arg { && !last_path_segment
GenericArg::Lifetime(_) => true, .args
_ => false, .iter()
}) .any(|arg| matches!(arg, GenericArg::Lifetime(_)))
{ {
let hir_id = ty.hir_id; let hir_id = ty.hir_id;
match self.cx.qpath_res(qpath, hir_id) { match self.cx.qpath_res(qpath, hir_id) {

View file

@ -2091,17 +2091,11 @@ fn var_def_id(cx: &LateContext<'_>, expr: &Expr<'_>) -> Option<HirId> {
} }
fn is_loop(expr: &Expr<'_>) -> bool { fn is_loop(expr: &Expr<'_>) -> bool {
match expr.kind { matches!(expr.kind, ExprKind::Loop(..))
ExprKind::Loop(..) => true,
_ => false,
}
} }
fn is_conditional(expr: &Expr<'_>) -> bool { fn is_conditional(expr: &Expr<'_>) -> bool {
match expr.kind { matches!(expr.kind, ExprKind::Match(..))
ExprKind::Match(..) => true,
_ => false,
}
} }
fn is_nested(cx: &LateContext<'_>, match_expr: &Expr<'_>, iter_expr: &Expr<'_>) -> bool { fn is_nested(cx: &LateContext<'_>, match_expr: &Expr<'_>, iter_expr: &Expr<'_>) -> bool {

View file

@ -1844,10 +1844,10 @@ fn lint_expect_fun_call(
ty::Ref(ty::ReStatic, ..) ty::Ref(ty::ReStatic, ..)
) )
}), }),
hir::ExprKind::Path(ref p) => match cx.qpath_res(p, arg.hir_id) { hir::ExprKind::Path(ref p) => matches!(
hir::def::Res::Def(hir::def::DefKind::Const | hir::def::DefKind::Static, _) => true, cx.qpath_res(p, arg.hir_id),
_ => false, hir::def::Res::Def(hir::def::DefKind::Const | hir::def::DefKind::Static, _)
}, ),
_ => false, _ => false,
} }
} }
@ -2028,13 +2028,7 @@ fn lint_clone_on_copy(cx: &LateContext<'_>, expr: &hir::Expr<'_>, arg: &hir::Exp
.tables() .tables()
.expr_adjustments(arg) .expr_adjustments(arg)
.iter() .iter()
.filter(|adj| { .filter(|adj| matches!(adj.kind, ty::adjustment::Adjust::Deref(_)))
if let ty::adjustment::Adjust::Deref(_) = adj.kind {
true
} else {
false
}
})
.count(); .count();
let derefs: String = iter::repeat('*').take(deref_count).collect(); let derefs: String = iter::repeat('*').take(deref_count).collect();
snip = Some(("try dereferencing it", format!("{}{}", derefs, snippet))); snip = Some(("try dereferencing it", format!("{}{}", derefs, snippet)));

View file

@ -694,12 +694,7 @@ fn in_attributes_expansion(expr: &Expr<'_>) -> bool {
use rustc_span::hygiene::MacroKind; use rustc_span::hygiene::MacroKind;
if expr.span.from_expansion() { if expr.span.from_expansion() {
let data = expr.span.ctxt().outer_expn_data(); let data = expr.span.ctxt().outer_expn_data();
matches!(data.kind, ExpnKind::Macro(MacroKind::Attr, _))
if let ExpnKind::Macro(MacroKind::Attr, _) = data.kind {
true
} else {
false
}
} else { } else {
false false
} }

View file

@ -641,28 +641,22 @@ fn check_unneeded_wildcard_pattern(cx: &EarlyContext<'_>, pat: &Pat) {
); );
} }
#[allow(clippy::trivially_copy_pass_by_ref)]
fn is_wild<P: std::ops::Deref<Target = Pat>>(pat: &&P) -> bool {
if let PatKind::Wild = pat.kind {
true
} else {
false
}
}
if let Some(rest_index) = patterns.iter().position(|pat| pat.is_rest()) { if let Some(rest_index) = patterns.iter().position(|pat| pat.is_rest()) {
if let Some((left_index, left_pat)) = patterns[..rest_index] if let Some((left_index, left_pat)) = patterns[..rest_index]
.iter() .iter()
.rev() .rev()
.take_while(is_wild) .take_while(|pat| matches!(pat.kind, PatKind::Wild))
.enumerate() .enumerate()
.last() .last()
{ {
span_lint(cx, left_pat.span.until(patterns[rest_index].span), left_index == 0); span_lint(cx, left_pat.span.until(patterns[rest_index].span), left_index == 0);
} }
if let Some((right_index, right_pat)) = if let Some((right_index, right_pat)) = patterns[rest_index + 1..]
patterns[rest_index + 1..].iter().take_while(is_wild).enumerate().last() .iter()
.take_while(|pat| matches!(pat.kind, PatKind::Wild))
.enumerate()
.last()
{ {
span_lint( span_lint(
cx, cx,

View file

@ -71,10 +71,11 @@ fn check_missing_inline_attrs(cx: &LateContext<'_>, attrs: &[ast::Attribute], sp
fn is_executable(cx: &LateContext<'_>) -> bool { fn is_executable(cx: &LateContext<'_>) -> bool {
use rustc_session::config::CrateType; use rustc_session::config::CrateType;
cx.tcx.sess.crate_types().iter().any(|t: &CrateType| match t { cx.tcx
CrateType::Executable => true, .sess
_ => false, .crate_types()
}) .iter()
.any(|t: &CrateType| matches!(t, CrateType::Executable))
} }
declare_lint_pass!(MissingInline => [MISSING_INLINE_IN_PUBLIC_ITEMS]); declare_lint_pass!(MissingInline => [MISSING_INLINE_IN_PUBLIC_ITEMS]);

View file

@ -80,10 +80,12 @@ impl<'tcx> LateLintPass<'tcx> for NewWithoutDefault {
// can't be implemented for unsafe new // can't be implemented for unsafe new
return; return;
} }
if impl_item.generics.params.iter().any(|gen| match gen.kind { if impl_item
hir::GenericParamKind::Type { .. } => true, .generics
_ => false, .params
}) { .iter()
.any(|gen| matches!(gen.kind, hir::GenericParamKind::Type { .. }))
{
// when the result of `new()` depends on a type parameter we should not require // when the result of `new()` depends on a type parameter we should not require
// an // an
// impl of `Default` // impl of `Default`

View file

@ -238,10 +238,10 @@ impl<'tcx> LateLintPass<'tcx> for NonCopyConst {
let ty = if needs_check_adjustment { let ty = if needs_check_adjustment {
let adjustments = cx.tables().expr_adjustments(dereferenced_expr); let adjustments = cx.tables().expr_adjustments(dereferenced_expr);
if let Some(i) = adjustments.iter().position(|adj| match adj.kind { if let Some(i) = adjustments
Adjust::Borrow(_) | Adjust::Deref(_) => true, .iter()
_ => false, .position(|adj| matches!(adj.kind, Adjust::Borrow(_) | Adjust::Deref(_)))
}) { {
if i == 0 { if i == 0 {
cx.tables().expr_ty(dereferenced_expr) cx.tables().expr_ty(dereferenced_expr)
} else { } else {

View file

@ -148,17 +148,11 @@ fn is_arith_expr(expr: &Expr) -> bool {
#[must_use] #[must_use]
fn is_bit_op(op: BinOpKind) -> bool { fn is_bit_op(op: BinOpKind) -> bool {
use rustc_ast::ast::BinOpKind::{BitAnd, BitOr, BitXor, Shl, Shr}; use rustc_ast::ast::BinOpKind::{BitAnd, BitOr, BitXor, Shl, Shr};
match op { matches!(op, BitXor | BitAnd | BitOr | Shl | Shr)
BitXor | BitAnd | BitOr | Shl | Shr => true,
_ => false,
}
} }
#[must_use] #[must_use]
fn is_arith_op(op: BinOpKind) -> bool { fn is_arith_op(op: BinOpKind) -> bool {
use rustc_ast::ast::BinOpKind::{Add, Div, Mul, Rem, Sub}; use rustc_ast::ast::BinOpKind::{Add, Div, Mul, Rem, Sub};
match op { matches!(op, Add | Sub | Mul | Div | Rem)
Add | Sub | Mul | Div | Rem => true,
_ => false,
}
} }

View file

@ -99,12 +99,7 @@ fn is_trivial_regex(s: &regex_syntax::hir::Hir) -> Option<&'static str> {
use regex_syntax::hir::Anchor::{EndText, StartText}; use regex_syntax::hir::Anchor::{EndText, StartText};
use regex_syntax::hir::HirKind::{Alternation, Anchor, Concat, Empty, Literal}; use regex_syntax::hir::HirKind::{Alternation, Anchor, Concat, Empty, Literal};
let is_literal = |e: &[regex_syntax::hir::Hir]| { let is_literal = |e: &[regex_syntax::hir::Hir]| e.iter().all(|e| matches!(*e.kind(), Literal(_)));
e.iter().all(|e| match *e.kind() {
Literal(_) => true,
_ => false,
})
};
match *s.kind() { match *s.kind() {
Empty | Anchor(_) => Some("the regex is unlikely to be useful as it is"), Empty | Anchor(_) => Some("the regex is unlikely to be useful as it is"),

View file

@ -165,10 +165,7 @@ fn check_local<'tcx>(cx: &LateContext<'tcx>, local: &'tcx Local<'_>, bindings: &
fn is_binding(cx: &LateContext<'_>, pat_id: HirId) -> bool { fn is_binding(cx: &LateContext<'_>, pat_id: HirId) -> bool {
let var_ty = cx.tables().node_type_opt(pat_id); let var_ty = cx.tables().node_type_opt(pat_id);
var_ty.map_or(false, |var_ty| match var_ty.kind { var_ty.map_or(false, |var_ty| !matches!(var_ty.kind, ty::Adt(..)))
ty::Adt(..) => false,
_ => true,
})
} }
fn check_pat<'tcx>( fn check_pat<'tcx>(

View file

@ -25,13 +25,7 @@ declare_clippy_lint! {
fn is_temporary(cx: &LateContext<'_>, expr: &Expr<'_>) -> bool { fn is_temporary(cx: &LateContext<'_>, expr: &Expr<'_>) -> bool {
match &expr.kind { match &expr.kind {
ExprKind::Struct(..) | ExprKind::Tup(..) => true, ExprKind::Struct(..) | ExprKind::Tup(..) => true,
ExprKind::Path(qpath) => { ExprKind::Path(qpath) => matches!(cx.qpath_res(qpath, expr.hir_id), Res::Def(DefKind::Const, ..)),
if let Res::Def(DefKind::Const, ..) = cx.qpath_res(qpath, expr.hir_id) {
true
} else {
false
}
},
_ => false, _ => false,
} }
} }

View file

@ -775,11 +775,7 @@ impl<'tcx> LateLintPass<'tcx> for UnitArg {
.iter() .iter()
.filter(|arg| { .filter(|arg| {
if is_unit(cx.tables().expr_ty(arg)) && !is_unit_literal(arg) { if is_unit(cx.tables().expr_ty(arg)) && !is_unit_literal(arg) {
if let ExprKind::Match(.., MatchSource::TryDesugar) = &arg.kind { !matches!(&arg.kind, ExprKind::Match(.., MatchSource::TryDesugar))
false
} else {
true
}
} else { } else {
false false
} }
@ -899,17 +895,11 @@ fn is_questionmark_desugar_marked_call(expr: &Expr<'_>) -> bool {
} }
fn is_unit(ty: Ty<'_>) -> bool { fn is_unit(ty: Ty<'_>) -> bool {
match ty.kind { matches!(ty.kind, ty::Tuple(slice) if slice.is_empty())
ty::Tuple(slice) if slice.is_empty() => true,
_ => false,
}
} }
fn is_unit_literal(expr: &Expr<'_>) -> bool { fn is_unit_literal(expr: &Expr<'_>) -> bool {
match expr.kind { matches!(expr.kind, ExprKind::Tup(ref slice) if slice.is_empty())
ExprKind::Tup(ref slice) if slice.is_empty() => true,
_ => false,
}
} }
declare_clippy_lint! { declare_clippy_lint! {
@ -1154,10 +1144,7 @@ fn int_ty_to_nbits(typ: Ty<'_>, tcx: TyCtxt<'_>) -> u64 {
} }
fn is_isize_or_usize(typ: Ty<'_>) -> bool { fn is_isize_or_usize(typ: Ty<'_>) -> bool {
match typ.kind { matches!(typ.kind, ty::Int(IntTy::Isize) | ty::Uint(UintTy::Usize))
ty::Int(IntTy::Isize) | ty::Uint(UintTy::Usize) => true,
_ => false,
}
} }
fn span_precision_loss_lint(cx: &LateContext<'_>, expr: &Expr<'_>, cast_from: Ty<'_>, cast_to_f64: bool) { fn span_precision_loss_lint(cx: &LateContext<'_>, expr: &Expr<'_>, cast_from: Ty<'_>, cast_to_f64: bool) {
@ -1737,10 +1724,10 @@ impl<'tcx> Visitor<'tcx> for TypeComplexityVisitor {
TyKind::TraitObject(ref param_bounds, _) => { TyKind::TraitObject(ref param_bounds, _) => {
let has_lifetime_parameters = param_bounds.iter().any(|bound| { let has_lifetime_parameters = param_bounds.iter().any(|bound| {
bound.bound_generic_params.iter().any(|gen| match gen.kind { bound
GenericParamKind::Lifetime { .. } => true, .bound_generic_params
_ => false, .iter()
}) .any(|gen| matches!(gen.kind, GenericParamKind::Lifetime { .. }))
}); });
if has_lifetime_parameters { if has_lifetime_parameters {
// complex trait bounds like A<'a, 'b> // complex trait bounds like A<'a, 'b>

View file

@ -58,10 +58,10 @@ declare_lint_pass!(UnnamedAddress => [FN_ADDRESS_COMPARISONS, VTABLE_ADDRESS_COM
impl LateLintPass<'_> for UnnamedAddress { impl LateLintPass<'_> for UnnamedAddress {
fn check_expr(&mut self, cx: &LateContext<'_>, expr: &Expr<'_>) { fn check_expr(&mut self, cx: &LateContext<'_>, expr: &Expr<'_>) {
fn is_comparison(binop: BinOpKind) -> bool { fn is_comparison(binop: BinOpKind) -> bool {
match binop { matches!(
BinOpKind::Eq | BinOpKind::Lt | BinOpKind::Le | BinOpKind::Ne | BinOpKind::Ge | BinOpKind::Gt => true, binop,
_ => false, BinOpKind::Eq | BinOpKind::Lt | BinOpKind::Le | BinOpKind::Ne | BinOpKind::Ge | BinOpKind::Gt
} )
} }
fn is_trait_ptr(cx: &LateContext<'_>, expr: &Expr<'_>) -> bool { fn is_trait_ptr(cx: &LateContext<'_>, expr: &Expr<'_>) -> bool {
@ -72,11 +72,7 @@ impl LateLintPass<'_> for UnnamedAddress {
} }
fn is_fn_def(cx: &LateContext<'_>, expr: &Expr<'_>) -> bool { fn is_fn_def(cx: &LateContext<'_>, expr: &Expr<'_>) -> bool {
if let ty::FnDef(..) = cx.tables().expr_ty(expr).kind { matches!(cx.tables().expr_ty(expr).kind, ty::FnDef(..))
true
} else {
false
}
} }
if_chain! { if_chain! {

View file

@ -169,10 +169,8 @@ impl<'tcx> LateLintPass<'tcx> for UseSelf {
let parameters = &item_path.segments.last().expect(SEGMENTS_MSG).args; let parameters = &item_path.segments.last().expect(SEGMENTS_MSG).args;
let should_check = parameters.as_ref().map_or( let should_check = parameters.as_ref().map_or(
true, true,
|params| !params.parenthesized && !params.args.iter().any(|arg| match arg { |params| !params.parenthesized
GenericArg::Lifetime(_) => true, &&!params.args.iter().any(|arg| matches!(arg, GenericArg::Lifetime(_)))
_ => false,
})
); );
if should_check { if should_check {

View file

@ -387,10 +387,7 @@ pub fn eq_use_tree_kind(l: &UseTreeKind, r: &UseTreeKind) -> bool {
} }
pub fn eq_defaultness(l: Defaultness, r: Defaultness) -> bool { pub fn eq_defaultness(l: Defaultness, r: Defaultness) -> bool {
match (l, r) { matches!((l, r), (Defaultness::Final, Defaultness::Final) | (Defaultness::Default(_), Defaultness::Default(_)))
(Defaultness::Final, Defaultness::Final) | (Defaultness::Default(_), Defaultness::Default(_)) => true,
_ => false,
}
} }
pub fn eq_vis(l: &Visibility, r: &Visibility) -> bool { pub fn eq_vis(l: &Visibility, r: &Visibility) -> bool {

View file

@ -102,11 +102,7 @@ pub fn in_constant(cx: &LateContext<'_>, id: HirId) -> bool {
#[must_use] #[must_use]
pub fn in_macro(span: Span) -> bool { pub fn in_macro(span: Span) -> bool {
if span.from_expansion() { if span.from_expansion() {
if let ExpnKind::Desugaring(..) = span.ctxt().outer_expn_data().kind { !matches!(span.ctxt().outer_expn_data().kind, ExpnKind::Desugaring(..))
false
} else {
true
}
} else { } else {
false false
} }
@ -127,10 +123,7 @@ pub fn is_present_in_source<T: LintContext>(cx: &T, span: Span) -> bool {
/// Checks if given pattern is a wildcard (`_`) /// Checks if given pattern is a wildcard (`_`)
pub fn is_wild<'tcx>(pat: &impl std::ops::Deref<Target = Pat<'tcx>>) -> bool { pub fn is_wild<'tcx>(pat: &impl std::ops::Deref<Target = Pat<'tcx>>) -> bool {
match pat.kind { matches!(pat.kind, PatKind::Wild)
PatKind::Wild => true,
_ => false,
}
} }
/// Checks if type is struct, enum or union type with the given def path. /// Checks if type is struct, enum or union type with the given def path.

View file

@ -51,7 +51,7 @@ impl<'a> NumericLiteral<'a> {
pub fn from_lit_kind(src: &'a str, lit_kind: &LitKind) -> Option<NumericLiteral<'a>> { pub fn from_lit_kind(src: &'a str, lit_kind: &LitKind) -> Option<NumericLiteral<'a>> {
if lit_kind.is_numeric() && src.chars().next().map_or(false, |c| c.is_digit(10)) { if lit_kind.is_numeric() && src.chars().next().map_or(false, |c| c.is_digit(10)) {
let (unsuffixed, suffix) = split_suffix(&src, lit_kind); let (unsuffixed, suffix) = split_suffix(&src, lit_kind);
let float = if let LitKind::Float(..) = lit_kind { true } else { false }; let float = matches!(lit_kind, LitKind::Float(..));
Some(NumericLiteral::new(unsuffixed, suffix, float)) Some(NumericLiteral::new(unsuffixed, suffix, float))
} else { } else {
None None

View file

@ -382,13 +382,8 @@ pub fn main() {
let should_describe_lints = || { let should_describe_lints = || {
let args: Vec<_> = env::args().collect(); let args: Vec<_> = env::args().collect();
args.windows(2).any(|args| { args.windows(2)
args[1] == "help" .any(|args| args[1] == "help" && matches!(args[0].as_str(), "-W" | "-A" | "-D" | "-F"))
&& match args[0].as_str() {
"-W" | "-A" | "-D" | "-F" => true,
_ => false,
}
})
}; };
if !wrapper_mode && should_describe_lints() { if !wrapper_mode && should_describe_lints() {