about summary refs log tree commit diff
diff options
context:
space:
mode:
authorboolean_coercion <booleancoercion@gmail.com>2021-02-10 21:47:04 +0200
committerboolean_coercion <booleancoercion@gmail.com>2021-02-12 11:54:22 +0200
commitb80ac2af9c0939428054e7d018f19fc16b920b05 (patch)
tree60c250b0d83470e2e7740826213aaab662986e70
parent605e9ba3d7fa9e42afcdee5fd94c95f771693d07 (diff)
downloadrust-b80ac2af9c0939428054e7d018f19fc16b920b05.tar.gz
rust-b80ac2af9c0939428054e7d018f19fc16b920b05.zip
Added boilerplate
-rw-r--r--CHANGELOG.md1
-rw-r--r--clippy_lints/src/from_str_radix_10.rs34
-rw-r--r--clippy_lints/src/lib.rs4
-rw-r--r--tests/ui/from_str_radix_10.rs5
4 files changed, 44 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4dcf9c3529b..56b74a7d0ab 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2092,6 +2092,7 @@ Released 2018-09-13
 [`forget_ref`]: https://rust-lang.github.io/rust-clippy/master/index.html#forget_ref
 [`from_iter_instead_of_collect`]: https://rust-lang.github.io/rust-clippy/master/index.html#from_iter_instead_of_collect
 [`from_over_into`]: https://rust-lang.github.io/rust-clippy/master/index.html#from_over_into
+[`from_str_radix_10`]: https://rust-lang.github.io/rust-clippy/master/index.html#from_str_radix_10
 [`future_not_send`]: https://rust-lang.github.io/rust-clippy/master/index.html#future_not_send
 [`get_last_with_len`]: https://rust-lang.github.io/rust-clippy/master/index.html#get_last_with_len
 [`get_unwrap`]: https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap
diff --git a/clippy_lints/src/from_str_radix_10.rs b/clippy_lints/src/from_str_radix_10.rs
new file mode 100644
index 00000000000..ec2a60ec47c
--- /dev/null
+++ b/clippy_lints/src/from_str_radix_10.rs
@@ -0,0 +1,34 @@
+use rustc_lint::{EarlyLintPass, EarlyContext};
+use rustc_session::{declare_lint_pass, declare_tool_lint};
+use rustc_ast::ast::*;
+
+declare_clippy_lint! {
+    /// **What it does:**
+    /// Checks for function invocations of the form `primitive::from_str_radix(s, 10)`
+    ///
+    /// **Why is this bad?**
+    /// This specific common use case can be rewritten as `s.parse::<primitive>()`
+    /// (and in most cases, the turbofish can be removed), which reduces code length
+    /// and complexity.
+    ///
+    /// **Known problems:** None.
+    /// 
+    /// **Example:**
+    ///
+    /// ```rust
+    /// let input: &str = get_input();
+    /// let num = u16::from_str_radix(input, 10)?;
+    /// ```
+    /// Use instead:
+    /// ```rust
+    /// let input: &str = get_input();
+    /// let num: u16 = input.parse()?;
+    /// ```
+    pub FROM_STR_RADIX_10,
+    style,
+    "default lint description"
+}
+
+declare_lint_pass!(FromStrRadix10 => [FROM_STR_RADIX_10]);
+
+impl EarlyLintPass for FromStrRadix10 {}
diff --git a/clippy_lints/src/lib.rs b/clippy_lints/src/lib.rs
index d96911fac1a..5b84422458f 100644
--- a/clippy_lints/src/lib.rs
+++ b/clippy_lints/src/lib.rs
@@ -210,6 +210,7 @@ mod floating_point_arithmetic;
 mod format;
 mod formatting;
 mod from_over_into;
+mod from_str_radix_10;
 mod functions;
 mod future_not_send;
 mod get_last_with_len;
@@ -637,6 +638,7 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
         &formatting::SUSPICIOUS_ELSE_FORMATTING,
         &formatting::SUSPICIOUS_UNARY_OP_FORMATTING,
         &from_over_into::FROM_OVER_INTO,
+        &from_str_radix_10::FROM_STR_RADIX_10,
         &functions::DOUBLE_MUST_USE,
         &functions::MUST_USE_CANDIDATE,
         &functions::MUST_USE_UNIT,
@@ -1468,6 +1470,7 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
         LintId::of(&formatting::SUSPICIOUS_ELSE_FORMATTING),
         LintId::of(&formatting::SUSPICIOUS_UNARY_OP_FORMATTING),
         LintId::of(&from_over_into::FROM_OVER_INTO),
+        LintId::of(&from_str_radix_10::FROM_STR_RADIX_10),
         LintId::of(&functions::DOUBLE_MUST_USE),
         LintId::of(&functions::MUST_USE_UNIT),
         LintId::of(&functions::NOT_UNSAFE_PTR_ARG_DEREF),
@@ -1724,6 +1727,7 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
         LintId::of(&formatting::SUSPICIOUS_ELSE_FORMATTING),
         LintId::of(&formatting::SUSPICIOUS_UNARY_OP_FORMATTING),
         LintId::of(&from_over_into::FROM_OVER_INTO),
+        LintId::of(&from_str_radix_10::FROM_STR_RADIX_10),
         LintId::of(&functions::DOUBLE_MUST_USE),
         LintId::of(&functions::MUST_USE_UNIT),
         LintId::of(&functions::RESULT_UNIT_ERR),
diff --git a/tests/ui/from_str_radix_10.rs b/tests/ui/from_str_radix_10.rs
new file mode 100644
index 00000000000..70eaa8d666c
--- /dev/null
+++ b/tests/ui/from_str_radix_10.rs
@@ -0,0 +1,5 @@
+#![warn(clippy::from_str_radix_10)]
+
+fn main() {
+    // test code goes here
+}