Skip to content

Commit de7dbf2

Browse files
committed
fix FN on unsuffixed floats that don't end with .
1 parent f302c75 commit de7dbf2

File tree

4 files changed

+28
-7
lines changed

4 files changed

+28
-7
lines changed

clippy_lints/src/needless_parens_on_range_literals.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use clippy_utils::diagnostics::span_lint_and_sugg;
2-
use clippy_utils::source::snippet_with_applicability;
2+
use clippy_utils::source::{SpanRangeExt, snippet_with_applicability};
33

44
use rustc_ast::{Expr, ExprKind};
55
use rustc_errors::Applicability;
@@ -41,9 +41,16 @@ declare_lint_pass!(NeedlessParensOnRangeLiterals => [NEEDLESS_PARENS_ON_RANGE_LI
4141
fn check_for_parens(cx: &EarlyContext<'_>, e: &Expr, is_start: bool) {
4242
if let ExprKind::Paren(literal) = &e.kind
4343
&& let ExprKind::Lit(lit) = &literal.kind
44-
// don't check floating point literals on the start expression of a range
45-
&& !(is_start && lit.kind == rustc_ast::token::LitKind::Float && lit.suffix.is_none())
4644
{
45+
if is_start
46+
&& lit.kind == rustc_ast::token::LitKind::Float
47+
&& lit.suffix.is_none()
48+
&& literal.span.check_source_text(cx, |s| s.ends_with('.'))
49+
{
50+
// don't lint `(2.)..end`, since removing the parens would result in invalid syntax
51+
return;
52+
}
53+
4754
let mut applicability = Applicability::MachineApplicable;
4855
let suggestion = snippet_with_applicability(cx, literal.span, "_", &mut applicability);
4956
span_lint_and_sugg(

tests/ui/needless_parens_on_range_literals.fixed

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,13 @@ fn main() {
77
//~| needless_parens_on_range_literals
88
let _ = 'a'..'z';
99
//~^ needless_parens_on_range_literals
10+
1011
let _ = (1.)..2.;
1112
let _ = (1.)..2.;
1213
//~^ needless_parens_on_range_literals
14+
let _ = 1.0..2.;
15+
//~^ needless_parens_on_range_literals
16+
1317
let _ = 'a'..;
1418
//~^ needless_parens_on_range_literals
1519
let _ = ..'z';

tests/ui/needless_parens_on_range_literals.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,13 @@ fn main() {
77
//~| needless_parens_on_range_literals
88
let _ = 'a'..('z');
99
//~^ needless_parens_on_range_literals
10+
1011
let _ = (1.)..2.;
1112
let _ = (1.)..(2.);
1213
//~^ needless_parens_on_range_literals
14+
let _ = (1.0)..2.;
15+
//~^ needless_parens_on_range_literals
16+
1317
let _ = ('a')..;
1418
//~^ needless_parens_on_range_literals
1519
let _ = ..('z');

tests/ui/needless_parens_on_range_literals.stderr

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,28 @@ LL | let _ = 'a'..('z');
2020
| ^^^^^ help: try: `'z'`
2121

2222
error: needless parenthesis on range literals can be removed
23-
--> tests/ui/needless_parens_on_range_literals.rs:11:19
23+
--> tests/ui/needless_parens_on_range_literals.rs:12:19
2424
|
2525
LL | let _ = (1.)..(2.);
2626
| ^^^^ help: try: `2.`
2727

2828
error: needless parenthesis on range literals can be removed
29-
--> tests/ui/needless_parens_on_range_literals.rs:13:13
29+
--> tests/ui/needless_parens_on_range_literals.rs:14:13
30+
|
31+
LL | let _ = (1.0)..2.;
32+
| ^^^^^ help: try: `1.0`
33+
34+
error: needless parenthesis on range literals can be removed
35+
--> tests/ui/needless_parens_on_range_literals.rs:17:13
3036
|
3137
LL | let _ = ('a')..;
3238
| ^^^^^ help: try: `'a'`
3339

3440
error: needless parenthesis on range literals can be removed
35-
--> tests/ui/needless_parens_on_range_literals.rs:15:15
41+
--> tests/ui/needless_parens_on_range_literals.rs:19:15
3642
|
3743
LL | let _ = ..('z');
3844
| ^^^^^ help: try: `'z'`
3945

40-
error: aborting due to 6 previous errors
46+
error: aborting due to 7 previous errors
4147

0 commit comments

Comments
 (0)