mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-07 12:33:14 +00:00
Made parens addition smarter and added tests with bless
This commit is contained in:
parent
642efabfbb
commit
d36fe85569
@ -5,6 +5,7 @@ use rustc_lint::{LateContext, LateLintPass};
|
|||||||
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
||||||
|
|
||||||
use crate::utils::span_lint_and_sugg;
|
use crate::utils::span_lint_and_sugg;
|
||||||
|
use crate::utils::sugg::Sugg;
|
||||||
|
|
||||||
declare_clippy_lint! {
|
declare_clippy_lint! {
|
||||||
/// **What it does:**
|
/// **What it does:**
|
||||||
@ -58,14 +59,20 @@ impl LateLintPass<'tcx> for FromStrRadix10 {
|
|||||||
if let rustc_ast::ast::LitKind::Int(10, _) = lit.node;
|
if let rustc_ast::ast::LitKind::Int(10, _) = lit.node;
|
||||||
|
|
||||||
then {
|
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(
|
span_lint_and_sugg(
|
||||||
cx,
|
cx,
|
||||||
FROM_STR_RADIX_10,
|
FROM_STR_RADIX_10,
|
||||||
exp.span,
|
exp.span,
|
||||||
"this call to `from_str_radix` can be replaced with a call to `str::parse`",
|
"this call to `from_str_radix` can be replaced with a call to `str::parse`",
|
||||||
"try",
|
"try",
|
||||||
format!("({}).parse()", orig_string),
|
format!("{}.parse::<{}>()", sugg, prim_ty.name_str()),
|
||||||
Applicability::MaybeIncorrect
|
Applicability::MaybeIncorrect
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -12,12 +12,25 @@ fn from_str_radix(_: &str, _: u32) -> Result<(), std::num::ParseIntError> {
|
|||||||
unimplemented!()
|
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>> {
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
// all of these should trigger the lint
|
// all of these should trigger the lint
|
||||||
u32::from_str_radix("30", 10)?;
|
u32::from_str_radix("30", 10)?;
|
||||||
i64::from_str_radix("24", 10)?;
|
i64::from_str_radix("24", 10)?;
|
||||||
isize::from_str_radix("100", 10)?;
|
isize::from_str_radix("100", 10)?;
|
||||||
u8::from_str_radix("7", 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";
|
let string = "300";
|
||||||
i32::from_str_radix(string, 10)?;
|
i32::from_str_radix(string, 10)?;
|
||||||
|
@ -1,34 +1,46 @@
|
|||||||
error: this call to `from_str_radix` can be replaced with a call to `str::parse`
|
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)?;
|
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`
|
= 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`
|
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)?;
|
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`
|
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)?;
|
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`
|
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)?;
|
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`
|
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)?;
|
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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user