diff options
| author | Basavesh Shivakumar <basavesh.shivakumar@gmail.com> | 2021-04-19 17:20:21 +0200 |
|---|---|---|
| committer | Basavesh Shivakumar <basavesh.shivakumar@gmail.com> | 2021-04-19 17:20:21 +0200 |
| commit | c6b381c59bffe8ce62fcf9569fb1a39189234dcc (patch) | |
| tree | c49369746993e4bae1114c1ea29beea59baa32e7 | |
| parent | 52c8c9c520359f197b15aa6b69e7a779c9be8eb5 (diff) | |
useless use of format! should return function directly
| -rw-r--r-- | clippy_lints/src/format.rs | 11 | ||||
| -rw-r--r-- | tests/ui/format.fixed | 4 | ||||
| -rw-r--r-- | tests/ui/format.rs | 4 | ||||
| -rw-r--r-- | tests/ui/format.stderr | 8 |
4 files changed, 21 insertions, 6 deletions
diff --git a/clippy_lints/src/format.rs b/clippy_lints/src/format.rs index 4729abbd8e3..c2b055ed648 100644 --- a/clippy_lints/src/format.rs +++ b/clippy_lints/src/format.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::paths; use clippy_utils::source::{snippet, snippet_opt}; +use clippy_utils::sugg::Sugg; use clippy_utils::ty::is_type_diagnostic_item; use clippy_utils::{is_expn_of, last_path_segment, match_def_path, match_function_call}; use if_chain::if_chain; @@ -100,15 +101,15 @@ fn on_argumentv1_new<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, arms: & return Some(format!("{:?}.to_string()", s.as_str())); } } else { - let snip = snippet(cx, format_args.span, "<arg>"); + let sugg = Sugg::hir(cx, format_args, "<arg>"); if let ExprKind::MethodCall(path, _, _, _) = format_args.kind { if path.ident.name == sym!(to_string) { - return Some(format!("{}", snip)); + return Some(format!("{}", sugg)); } } else if let ExprKind::Binary(..) = format_args.kind { - return Some(format!("{}", snip)); + return Some(format!("{}", sugg)); } - return Some(format!("{}.to_string()", snip)); + return Some(format!("{}.to_string()", sugg.maybe_par())); } } } @@ -136,7 +137,7 @@ fn on_new_v1<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) -> Option<Strin if let Some(s_src) = snippet_opt(cx, lit.span) { // Simulate macro expansion, converting {{ and }} to { and }. let s_expand = s_src.replace("{{", "{").replace("}}", "}"); - return Some(format!("{}.to_string()", s_expand)) + return Some(format!("{}.to_string()", s_expand)); } } else if s.as_str().is_empty() { return on_argumentv1_new(cx, &tup[0], arms); diff --git a/tests/ui/format.fixed b/tests/ui/format.fixed index 740a22a07d7..e4cfb005fd1 100644 --- a/tests/ui/format.fixed +++ b/tests/ui/format.fixed @@ -65,4 +65,8 @@ fn main() { // False positive let a = "foo".to_string(); let _ = Some(a + "bar"); + + // Wrap it with braces + let v: Vec<String> = vec!["foo".to_string(), "bar".to_string()]; + let _s: String = (&*v.join("\n")).to_string(); } diff --git a/tests/ui/format.rs b/tests/ui/format.rs index b604d79cca3..683957f0ff0 100644 --- a/tests/ui/format.rs +++ b/tests/ui/format.rs @@ -67,4 +67,8 @@ fn main() { // False positive let a = "foo".to_string(); let _ = Some(format!("{}", a + "bar")); + + // Wrap it with braces + let v: Vec<String> = vec!["foo".to_string(), "bar".to_string()]; + let _s: String = format!("{}", &*v.join("\n")); } diff --git a/tests/ui/format.stderr b/tests/ui/format.stderr index 96df7f37f77..2017eb2b383 100644 --- a/tests/ui/format.stderr +++ b/tests/ui/format.stderr @@ -87,5 +87,11 @@ error: useless use of `format!` LL | let _ = Some(format!("{}", a + "bar")); | ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `a + "bar"` -error: aborting due to 13 previous errors +error: useless use of `format!` + --> $DIR/format.rs:73:22 + | +LL | let _s: String = format!("{}", &*v.join("/n")); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `(&*v.join("/n")).to_string()` + +error: aborting due to 14 previous errors |
