extract conditions for single_char_pattern into its own module
This commit is contained in:
parent
7a7fcc0eda
commit
4d1f2bc565
@ -1787,17 +1787,7 @@ impl<'tcx> LateLintPass<'tcx> for Methods {
|
||||
inefficient_to_string::check(cx, expr, method_call.ident.name, args);
|
||||
single_char_add_str::check(cx, expr, args);
|
||||
into_iter_on_ref::check(cx, expr, *method_span, method_call.ident.name, args);
|
||||
|
||||
match cx.typeck_results().expr_ty_adjusted(&args[0]).kind() {
|
||||
ty::Ref(_, ty, _) if *ty.kind() == ty::Str => {
|
||||
for &(method, pos) in &PATTERN_METHODS {
|
||||
if method_call.ident.name.as_str() == method && args.len() > pos {
|
||||
single_char_pattern::check(cx, expr, &args[pos]);
|
||||
}
|
||||
}
|
||||
},
|
||||
_ => (),
|
||||
}
|
||||
single_char_pattern::check(cx, expr, method_call.ident.name, args);
|
||||
},
|
||||
hir::ExprKind::Binary(op, ref lhs, ref rhs)
|
||||
if op.node == hir::BinOpKind::Eq || op.node == hir::BinOpKind::Ne =>
|
||||
|
@ -1,23 +1,35 @@
|
||||
use crate::methods::get_hint_if_single_char_arg;
|
||||
use clippy_utils::diagnostics::span_lint_and_sugg;
|
||||
use if_chain::if_chain;
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_hir as hir;
|
||||
use rustc_lint::LateContext;
|
||||
use rustc_middle::ty;
|
||||
use rustc_span::symbol::Symbol;
|
||||
|
||||
use super::SINGLE_CHAR_PATTERN;
|
||||
|
||||
/// lint for length-1 `str`s for methods in `PATTERN_METHODS`
|
||||
pub(super) fn check(cx: &LateContext<'_>, _expr: &hir::Expr<'_>, arg: &hir::Expr<'_>) {
|
||||
let mut applicability = Applicability::MachineApplicable;
|
||||
if let Some(hint) = get_hint_if_single_char_arg(cx, arg, &mut applicability) {
|
||||
span_lint_and_sugg(
|
||||
cx,
|
||||
SINGLE_CHAR_PATTERN,
|
||||
arg.span,
|
||||
"single-character string constant used as pattern",
|
||||
"try using a `char` instead",
|
||||
hint,
|
||||
applicability,
|
||||
);
|
||||
pub(super) fn check(cx: &LateContext<'_>, _expr: &hir::Expr<'_>, method_name: Symbol, args: &[hir::Expr<'_>]) {
|
||||
for &(method, pos) in &crate::methods::PATTERN_METHODS {
|
||||
if_chain! {
|
||||
if let ty::Ref(_, ty, _) = cx.typeck_results().expr_ty_adjusted(&args[0]).kind();
|
||||
if *ty.kind() == ty::Str;
|
||||
if method_name.as_str() == method && args.len() > pos;
|
||||
let arg = &args[pos];
|
||||
let mut applicability = Applicability::MachineApplicable;
|
||||
if let Some(hint) = get_hint_if_single_char_arg(cx, arg, &mut applicability);
|
||||
then {
|
||||
span_lint_and_sugg(
|
||||
cx,
|
||||
SINGLE_CHAR_PATTERN,
|
||||
arg.span,
|
||||
"single-character string constant used as pattern",
|
||||
"try using a `char` instead",
|
||||
hint,
|
||||
applicability,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user