Merge pull request #2519 from ordovicia/issue-2516

Fix #2516
This commit is contained in:
Oliver Schneider 2018-03-11 14:04:28 +01:00 committed by GitHub
commit cc818f578e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 32 additions and 23 deletions

View File

@ -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 = []

View File

@ -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;
}

View File

@ -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;

View File

@ -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