commit
cc818f578e
@ -49,6 +49,7 @@ lazy_static = "1.0"
|
||||
serde_derive = "1.0"
|
||||
clippy-mini-macro-test = { version = "0.2", path = "mini-macro" }
|
||||
serde = "1.0"
|
||||
derive-new = "0.5"
|
||||
|
||||
[features]
|
||||
debugging = []
|
||||
|
@ -1,6 +1,6 @@
|
||||
use rustc::lint::*;
|
||||
use rustc::hir::*;
|
||||
use utils::{is_range_expression, match_var, span_lint_and_sugg};
|
||||
use utils::{in_macro, is_range_expression, match_var, span_lint_and_sugg};
|
||||
|
||||
/// **What it does:** Checks for fields in struct literals where shorthands
|
||||
/// could be used.
|
||||
@ -36,10 +36,10 @@ impl LintPass for RedundantFieldNames {
|
||||
|
||||
impl<'a, 'tcx> LateLintPass<'a, 'tcx> for RedundantFieldNames {
|
||||
fn check_expr(&mut self, cx: &LateContext<'a, 'tcx>, expr: &'tcx Expr) {
|
||||
// Do not care about range expressions.
|
||||
// They could have redundant field name when desugared to structs.
|
||||
// e.g. `start..end` is desugared to `Range { start: start, end: end }`
|
||||
if is_range_expression(expr.span) {
|
||||
// Ignore all macros including range expressions.
|
||||
// They can have redundant field names when expanded.
|
||||
// e.g. range expression `start..end` is desugared to `Range { start: start, end: end }`
|
||||
if in_macro(expr.span) || is_range_expression(expr.span) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,9 @@
|
||||
#![allow(unused_variables)]
|
||||
#![feature(inclusive_range, inclusive_range_syntax)]
|
||||
|
||||
#[macro_use]
|
||||
extern crate derive_new;
|
||||
|
||||
use std::ops::{Range, RangeFrom, RangeTo, RangeInclusive, RangeToInclusive};
|
||||
|
||||
mod foo {
|
||||
@ -16,6 +19,11 @@ struct Person {
|
||||
foo: u8,
|
||||
}
|
||||
|
||||
#[derive(new)]
|
||||
pub struct S {
|
||||
v: String,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let gender: u8 = 42;
|
||||
let age = 0;
|
||||
|
@ -1,57 +1,57 @@
|
||||
error: redundant field names in struct initialization
|
||||
--> $DIR/redundant_field_names.rs:26:9
|
||||
--> $DIR/redundant_field_names.rs:34:9
|
||||
|
|
||||
26 | gender: gender,
|
||||
34 | gender: gender,
|
||||
| ^^^^^^^^^^^^^^ help: replace it with: `gender`
|
||||
|
|
||||
= note: `-D redundant-field-names` implied by `-D warnings`
|
||||
|
||||
error: redundant field names in struct initialization
|
||||
--> $DIR/redundant_field_names.rs:27:9
|
||||
--> $DIR/redundant_field_names.rs:35:9
|
||||
|
|
||||
27 | age: age,
|
||||
35 | age: age,
|
||||
| ^^^^^^^^ help: replace it with: `age`
|
||||
|
||||
error: redundant field names in struct initialization
|
||||
--> $DIR/redundant_field_names.rs:45:25
|
||||
--> $DIR/redundant_field_names.rs:53:25
|
||||
|
|
||||
45 | let _ = RangeFrom { start: start };
|
||||
53 | let _ = RangeFrom { start: start };
|
||||
| ^^^^^^^^^^^^ help: replace it with: `start`
|
||||
|
||||
error: redundant field names in struct initialization
|
||||
--> $DIR/redundant_field_names.rs:46:23
|
||||
--> $DIR/redundant_field_names.rs:54:23
|
||||
|
|
||||
46 | let _ = RangeTo { end: end };
|
||||
54 | let _ = RangeTo { end: end };
|
||||
| ^^^^^^^^ help: replace it with: `end`
|
||||
|
||||
error: redundant field names in struct initialization
|
||||
--> $DIR/redundant_field_names.rs:47:21
|
||||
--> $DIR/redundant_field_names.rs:55:21
|
||||
|
|
||||
47 | let _ = Range { start: start, end: end };
|
||||
55 | let _ = Range { start: start, end: end };
|
||||
| ^^^^^^^^^^^^ help: replace it with: `start`
|
||||
|
||||
error: redundant field names in struct initialization
|
||||
--> $DIR/redundant_field_names.rs:47:35
|
||||
--> $DIR/redundant_field_names.rs:55:35
|
||||
|
|
||||
47 | let _ = Range { start: start, end: end };
|
||||
55 | let _ = Range { start: start, end: end };
|
||||
| ^^^^^^^^ help: replace it with: `end`
|
||||
|
||||
error: redundant field names in struct initialization
|
||||
--> $DIR/redundant_field_names.rs:48:30
|
||||
--> $DIR/redundant_field_names.rs:56:30
|
||||
|
|
||||
48 | let _ = RangeInclusive { start: start, end: end };
|
||||
56 | let _ = RangeInclusive { start: start, end: end };
|
||||
| ^^^^^^^^^^^^ help: replace it with: `start`
|
||||
|
||||
error: redundant field names in struct initialization
|
||||
--> $DIR/redundant_field_names.rs:48:44
|
||||
--> $DIR/redundant_field_names.rs:56:44
|
||||
|
|
||||
48 | let _ = RangeInclusive { start: start, end: end };
|
||||
56 | let _ = RangeInclusive { start: start, end: end };
|
||||
| ^^^^^^^^ help: replace it with: `end`
|
||||
|
||||
error: redundant field names in struct initialization
|
||||
--> $DIR/redundant_field_names.rs:49:32
|
||||
--> $DIR/redundant_field_names.rs:57:32
|
||||
|
|
||||
49 | let _ = RangeToInclusive { end: end };
|
||||
57 | let _ = RangeToInclusive { end: end };
|
||||
| ^^^^^^^^ help: replace it with: `end`
|
||||
|
||||
error: aborting due to 9 previous errors
|
||||
|
Loading…
Reference in New Issue
Block a user