]> git.lizzy.rs Git - rust.git/blob - clippy_lints/src/methods/single_char_insert_string.rs
Auto merge of #82122 - bstrie:dep4real, r=dtolnay
[rust.git] / clippy_lints / src / methods / single_char_insert_string.rs
1 use crate::methods::get_hint_if_single_char_arg;
2 use crate::utils::{snippet_with_applicability, span_lint_and_sugg};
3 use rustc_errors::Applicability;
4 use rustc_hir as hir;
5 use rustc_lint::LateContext;
6
7 use super::SINGLE_CHAR_ADD_STR;
8
9 /// lint for length-1 `str`s as argument for `insert_str`
10 pub(super) fn check(cx: &LateContext<'_>, expr: &hir::Expr<'_>, args: &[hir::Expr<'_>]) {
11     let mut applicability = Applicability::MachineApplicable;
12     if let Some(extension_string) = get_hint_if_single_char_arg(cx, &args[2], &mut applicability) {
13         let base_string_snippet =
14             snippet_with_applicability(cx, args[0].span.source_callsite(), "_", &mut applicability);
15         let pos_arg = snippet_with_applicability(cx, args[1].span, "..", &mut applicability);
16         let sugg = format!("{}.insert({}, {})", base_string_snippet, pos_arg, extension_string);
17         span_lint_and_sugg(
18             cx,
19             SINGLE_CHAR_ADD_STR,
20             expr.span,
21             "calling `insert_str()` using a single-character string literal",
22             "consider using `insert` with a character literal",
23             sugg,
24             applicability,
25         );
26     }
27 }