1 use clippy_utils::consts::{constant_context, Constant};
2 use clippy_utils::diagnostics::span_lint_and_sugg;
3 use clippy_utils::source::snippet;
4 use clippy_utils::ty::is_type_diagnostic_item;
5 use rustc_errors::Applicability;
7 use rustc_lint::LateContext;
10 use super::REPEAT_ONCE;
12 pub(super) fn check<'tcx>(
13 cx: &LateContext<'tcx>,
16 repeat_arg: &'tcx Expr<'_>,
18 if constant_context(cx, cx.typeck_results()).expr(repeat_arg) == Some(Constant::Int(1)) {
19 let ty = cx.typeck_results().expr_ty(recv).peel_refs();
25 "calling `repeat(1)` on str",
26 "consider using `.to_string()` instead",
27 format!("{}.to_string()", snippet(cx, recv.span, r#""...""#)),
28 Applicability::MachineApplicable,
30 } else if ty.builtin_index().is_some() {
35 "calling `repeat(1)` on slice",
36 "consider using `.to_vec()` instead",
37 format!("{}.to_vec()", snippet(cx, recv.span, r#""...""#)),
38 Applicability::MachineApplicable,
40 } else if is_type_diagnostic_item(cx, ty, sym::String) {
45 "calling `repeat(1)` on a string literal",
46 "consider using `.clone()` instead",
47 format!("{}.clone()", snippet(cx, recv.span, r#""...""#)),
48 Applicability::MachineApplicable,