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); 19] = [
20 ("split_terminator", 1),
21 ("rsplit_terminator", 1),
27 ("rmatch_indices", 1),
30 ("trim_start_matches", 1),
31 ("trim_end_matches", 1),
34 /// lint for length-1 `str`s for methods in `PATTERN_METHODS`
35 pub(super) fn check(cx
: &LateContext
<'_
>, _expr
: &hir
::Expr
<'_
>, method_name
: Symbol
, args
: &[hir
::Expr
<'_
>]) {
36 for &(method
, pos
) in &PATTERN_METHODS
{
38 if let ty
::Ref(_
, ty
, _
) = cx
.typeck_results().expr_ty_adjusted(&args
[0]).kind();
39 if *ty
.kind() == ty
::Str
;
40 if method_name
.as_str() == method
&& args
.len() > pos
;
42 let mut applicability
= Applicability
::MachineApplicable
;
43 if let Some(hint
) = get_hint_if_single_char_arg(cx
, arg
, &mut applicability
);
49 "single-character string constant used as pattern",
50 "try using a `char` instead",