| use clippy_utils::diagnostics::span_lint_and_sugg; |
| use clippy_utils::method_chain_args; |
| use clippy_utils::source::snippet_with_applicability; |
| use rustc_ast::ast; |
| use rustc_errors::Applicability; |
| use rustc_hir as hir; |
| use rustc_lint::{LateContext, Lint}; |
| use rustc_span::Symbol; |
| |
| /// Wrapper fn for `CHARS_NEXT_CMP` and `CHARS_LAST_CMP` lints with `unwrap()`. |
| pub(super) fn check( |
| cx: &LateContext<'_>, |
| info: &crate::methods::BinaryExprInfo<'_>, |
| chain_methods: &[Symbol], |
| lint: &'static Lint, |
| suggest: &str, |
| ) -> bool { |
| if let Some(args) = method_chain_args(info.chain, chain_methods) |
| && let hir::ExprKind::Lit(lit) = info.other.kind |
| && let ast::LitKind::Char(c) = lit.node |
| { |
| let mut applicability = Applicability::MachineApplicable; |
| span_lint_and_sugg( |
| cx, |
| lint, |
| info.expr.span, |
| format!("you should use the `{suggest}` method"), |
| "like this", |
| format!( |
| "{}{}.{suggest}('{}')", |
| if info.eq { "" } else { "!" }, |
| snippet_with_applicability(cx, args[0].0.span, "..", &mut applicability), |
| c.escape_default() |
| ), |
| applicability, |
| ); |
| |
| true |
| } else { |
| false |
| } |
| } |