Skip to content

Commit 0aa7d73

Browse files
committed
Only remove method from end of recv, indent suggestion source
Signed-off-by: Tyler Weaver <maybe@tylerjw.dev>
1 parent bd83650 commit 0aa7d73

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

clippy_lints/src/methods/case_sensitive_file_extension_comparisons.rs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use clippy_utils::diagnostics::span_lint_and_then;
2+
use clippy_utils::source::{indent_of, reindent_multiline};
23
use clippy_utils::sugg::Sugg;
34
use clippy_utils::ty::is_type_lang_item;
45
use if_chain::if_chain;
@@ -37,29 +38,36 @@ pub(super) fn check<'tcx>(
3738
"case-sensitive file extension comparison",
3839
|diag| {
3940
diag.help("consider using a case-insensitive comparison instead");
40-
let mut recv_str = Sugg::hir(cx, recv, "").to_string();
41+
let mut recv_source = Sugg::hir(cx, recv, "").to_string();
4142

4243
if is_type_lang_item(cx, recv_ty, LangItem::String) {
43-
recv_str = format!("&{recv_str}");
44+
recv_source = format!("&{recv_source}");
4445
}
4546

46-
if recv_str.contains(".to_lowercase()") {
47+
if recv_source.ends_with(".to_lowercase()") {
4748
diag.note("to_lowercase allocates memory, this can be avoided by using Path");
48-
recv_str = recv_str.replace(".to_lowercase()", "");
49+
recv_source = recv_source.strip_suffix(".to_lowercase()").unwrap().to_string();
4950
}
5051

51-
if recv_str.contains(".to_uppercase()") {
52+
if recv_source.ends_with(".to_uppercase()") {
5253
diag.note("to_uppercase allocates memory, this can be avoided by using Path");
53-
recv_str = recv_str.replace(".to_uppercase()", "");
54+
recv_source = recv_source.strip_suffix(".to_uppercase()").unwrap().to_string();
5455
}
5556

57+
let suggestion_source = reindent_multiline(
58+
format!(
59+
"std::path::Path::new({})
60+
.extension()
61+
.map_or(false, |ext| ext.eq_ignore_ascii_case(\"{}\"))",
62+
recv_source, ext_str.strip_prefix('.').unwrap()).into(),
63+
true,
64+
Some(indent_of(cx, call_span).unwrap_or(0) + 4)
65+
);
66+
5667
diag.span_suggestion(
5768
recv.span.to(call_span),
5869
"use std::path::Path",
59-
format!("std::path::Path::new({})
60-
.extension()
61-
.map_or(false, |ext| ext.eq_ignore_ascii_case(\"{}\"))",
62-
recv_str, ext_str.strip_prefix('.').unwrap()),
70+
suggestion_source,
6371
Applicability::MaybeIncorrect,
6472
);
6573
}

0 commit comments

Comments
 (0)