Skip to content

Commit 114d4fa

Browse files
committed
fix FN on unsuffixed floats that don't end with .
1 parent 83f2cd5 commit 114d4fa

File tree

4 files changed

+26
-11
lines changed

4 files changed

+26
-11
lines changed

clippy_lints/src/needless_parens_on_range_literals.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,19 +41,20 @@ declare_clippy_lint! {
4141
declare_lint_pass!(NeedlessParensOnRangeLiterals => [NEEDLESS_PARENS_ON_RANGE_LITERALS]);
4242

4343
fn check_for_parens(cx: &LateContext<'_>, e: &Expr<'_>, is_start: bool) {
44-
if is_start
45-
&& let ExprKind::Lit(literal) = e.kind
46-
&& let ast::LitKind::Float(_sym, ast::LitFloatType::Unsuffixed) = literal.node
47-
{
48-
// don't check floating point literals on the start expression of a range
49-
return;
50-
}
5144
if let ExprKind::Lit(literal) = e.kind
5245
// the indicator that parenthesis surround the literal is that the span of the expression and the literal differ
5346
&& literal.span != e.span
5447
// inspect the source code of the expression for parenthesis
5548
&& e.span.check_source_text(cx, |s| s.starts_with('(') && s.ends_with(')'))
5649
{
50+
if is_start
51+
&& let ast::LitKind::Float(_, ast::LitFloatType::Unsuffixed) = literal.node
52+
&& literal.span.check_source_text(cx, |s| s.ends_with('.'))
53+
{
54+
// don't lint `(2.)..end`, since removing the parens would result in invalid syntax
55+
return;
56+
}
57+
5758
let mut applicability = Applicability::MachineApplicable;
5859
let suggestion = snippet_with_applicability(cx, literal.span, "_", &mut applicability);
5960
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)