1 use super::utils::get_hint_if_single_char_arg;
2 use clippy_utils::diagnostics::span_lint_and_sugg;
3 use if_chain::if_chain;
4 use rustc_errors::Applicability;
6 use rustc_lint::LateContext;
8 use rustc_span::symbol::Symbol;
10 use super::SINGLE_CHAR_PATTERN;
12 const PATTERN_METHODS: [(&str, usize); 24] = [
19 ("split_inclusive", 1),
21 ("split_terminator", 1),
22 ("rsplit_terminator", 1),
30 ("rmatch_indices", 1),
33 ("trim_start_matches", 1),
34 ("trim_end_matches", 1),
39 /// lint for length-1 `str`s for methods in `PATTERN_METHODS`
40 pub(super) fn check(cx: &LateContext<'_>, _expr: &hir::Expr<'_>, method_name: Symbol, args: &[hir::Expr<'_>]) {
41 for &(method, pos) in &PATTERN_METHODS {
43 if let ty::Ref(_, ty, _) = cx.typeck_results().expr_ty_adjusted(&args[0]).kind();
44 if *ty.kind() == ty::Str;
45 if method_name.as_str() == method && args.len() > pos;
47 let mut applicability = Applicability::MachineApplicable;
48 if let Some(hint) = get_hint_if_single_char_arg(cx, arg, &mut applicability);
54 "single-character string constant used as pattern",
55 "try using a `char` instead",