]> git.lizzy.rs Git - rust.git/commitdiff
Made parens addition smarter and added tests with bless
authorboolean_coercion <booleancoercion@gmail.com>
Fri, 12 Feb 2021 22:33:08 +0000 (00:33 +0200)
committerboolean_coercion <booleancoercion@gmail.com>
Fri, 12 Feb 2021 22:33:08 +0000 (00:33 +0200)
clippy_lints/src/from_str_radix_10.rs
tests/ui/from_str_radix_10.rs
tests/ui/from_str_radix_10.stderr

index de9add4b6b6b73a581ca5f94b743c4641fe7eef7..993b85ed998934a3cc2a8f679a3a0d8ecce1b88c 100644 (file)
@@ -5,6 +5,7 @@
 use rustc_session::{declare_lint_pass, declare_tool_lint};
 
 use crate::utils::span_lint_and_sugg;
+use crate::utils::sugg::Sugg;
 
 declare_clippy_lint! {
     /// **What it does:**
@@ -58,14 +59,20 @@ fn check_expr(&mut self, cx: &LateContext<'tcx>, exp: &Expr<'tcx>) {
             if let rustc_ast::ast::LitKind::Int(10, _) = lit.node;
 
             then {
-                let orig_string = crate::utils::snippet(cx, arguments[0].span, "string");
+                let sugg = Sugg::hir_with_applicability(
+                    cx,
+                    &arguments[0],
+                    "<string>",
+                    &mut Applicability::MachineApplicable
+                ).maybe_par();
+
                 span_lint_and_sugg(
                     cx,
                     FROM_STR_RADIX_10,
                     exp.span,
                     "this call to `from_str_radix` can be replaced with a call to `str::parse`",
                     "try",
-                    format!("({}).parse()", orig_string),
+                    format!("{}.parse::<{}>()", sugg, prim_ty.name_str()),
                     Applicability::MaybeIncorrect
                 );
             }
index 2d8106da7ba335d01161eb3b23f0f5ab33055a28..0a973128664393306777ccb7ddfa28971fe88bfb 100644 (file)
@@ -12,12 +12,25 @@ fn from_str_radix(_: &str, _: u32) -> Result<(), std::num::ParseIntError> {
     unimplemented!()
 }
 
+// to test parenthesis addition
+struct Test;
+
+impl std::ops::Add<Test> for Test {
+    type Output = &'static str;
+
+    fn add(self, _: Self) -> Self::Output {
+        "304"
+    }
+}
+
 fn main() -> Result<(), Box<dyn std::error::Error>> {
     // all of these should trigger the lint
     u32::from_str_radix("30", 10)?;
     i64::from_str_radix("24", 10)?;
     isize::from_str_radix("100", 10)?;
     u8::from_str_radix("7", 10)?;
+    u16::from_str_radix(&("10".to_owned() + "5"), 10)?;
+    i128::from_str_radix(Test + Test, 10)?;
 
     let string = "300";
     i32::from_str_radix(string, 10)?;
index 5557cd3b9effb73c7bc985756a25d19651c3c8bb..d666900191586c18f35614de521a52510deb6b50 100644 (file)
@@ -1,34 +1,46 @@
 error: this call to `from_str_radix` can be replaced with a call to `str::parse`
-  --> $DIR/from_str_radix_10.rs:17:5
+  --> $DIR/from_str_radix_10.rs:28:5
    |
 LL |     u32::from_str_radix("30", 10)?;
-   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `("30").parse()`
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `"30".parse::<u32>()`
    |
    = note: `-D clippy::from-str-radix-10` implied by `-D warnings`
 
 error: this call to `from_str_radix` can be replaced with a call to `str::parse`
-  --> $DIR/from_str_radix_10.rs:18:5
+  --> $DIR/from_str_radix_10.rs:29:5
    |
 LL |     i64::from_str_radix("24", 10)?;
-   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `("24").parse()`
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `"24".parse::<i64>()`
 
 error: this call to `from_str_radix` can be replaced with a call to `str::parse`
-  --> $DIR/from_str_radix_10.rs:19:5
+  --> $DIR/from_str_radix_10.rs:30:5
    |
 LL |     isize::from_str_radix("100", 10)?;
-   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `("100").parse()`
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `"100".parse::<isize>()`
 
 error: this call to `from_str_radix` can be replaced with a call to `str::parse`
-  --> $DIR/from_str_radix_10.rs:20:5
+  --> $DIR/from_str_radix_10.rs:31:5
    |
 LL |     u8::from_str_radix("7", 10)?;
-   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `("7").parse()`
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `"7".parse::<u8>()`
 
 error: this call to `from_str_radix` can be replaced with a call to `str::parse`
-  --> $DIR/from_str_radix_10.rs:23:5
+  --> $DIR/from_str_radix_10.rs:32:5
+   |
+LL |     u16::from_str_radix(&("10".to_owned() + "5"), 10)?;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(&("10".to_owned() + "5")).parse::<u16>()`
+
+error: this call to `from_str_radix` can be replaced with a call to `str::parse`
+  --> $DIR/from_str_radix_10.rs:33:5
+   |
+LL |     i128::from_str_radix(Test + Test, 10)?;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(Test + Test).parse::<i128>()`
+
+error: this call to `from_str_radix` can be replaced with a call to `str::parse`
+  --> $DIR/from_str_radix_10.rs:36:5
    |
 LL |     i32::from_str_radix(string, 10)?;
-   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(string).parse()`
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `string.parse::<i32>()`
 
-error: aborting due to 5 previous errors
+error: aborting due to 7 previous errors