Respect allow inconsistent_struct_constructor on the type definition
This commit is contained in:
parent
8dd459d4c7
commit
5364cbea80
@ -1,4 +1,5 @@
|
||||
use clippy_utils::diagnostics::span_lint_and_sugg;
|
||||
use clippy_utils::is_lint_allowed;
|
||||
use clippy_utils::source::snippet;
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_errors::Applicability;
|
||||
@ -71,6 +72,9 @@ impl<'tcx> LateLintPass<'tcx> for InconsistentStructConstructor {
|
||||
&& let ty = cx.typeck_results().expr_ty(expr)
|
||||
&& let Some(adt_def) = ty.ty_adt_def()
|
||||
&& adt_def.is_struct()
|
||||
&& let Some(local_def_id) = adt_def.did().as_local()
|
||||
&& let ty_hir_id = cx.tcx.local_def_id_to_hir_id(local_def_id)
|
||||
&& !is_lint_allowed(cx, INCONSISTENT_STRUCT_CONSTRUCTOR, ty_hir_id)
|
||||
&& let Some(variant) = adt_def.variants().iter().next()
|
||||
{
|
||||
let mut def_order_map = FxHashMap::default();
|
||||
|
@ -15,6 +15,14 @@ struct Foo {
|
||||
z: i32,
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
#[allow(clippy::inconsistent_struct_constructor)]
|
||||
struct Bar {
|
||||
x: i32,
|
||||
y: i32,
|
||||
z: i32,
|
||||
}
|
||||
|
||||
mod without_base {
|
||||
use super::Foo;
|
||||
|
||||
@ -70,4 +78,17 @@ mod with_base {
|
||||
}
|
||||
}
|
||||
|
||||
mod with_allow_ty_def {
|
||||
use super::Bar;
|
||||
|
||||
fn test() {
|
||||
let x = 1;
|
||||
let y = 1;
|
||||
let z = 1;
|
||||
|
||||
// Should NOT lint because `Bar` is defined with `#[allow(clippy::inconsistent_struct_constructor)]`
|
||||
Bar { y, x, z };
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
@ -15,6 +15,14 @@ struct Foo {
|
||||
z: i32,
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
#[allow(clippy::inconsistent_struct_constructor)]
|
||||
struct Bar {
|
||||
x: i32,
|
||||
y: i32,
|
||||
z: i32,
|
||||
}
|
||||
|
||||
mod without_base {
|
||||
use super::Foo;
|
||||
|
||||
@ -74,4 +82,17 @@ mod with_base {
|
||||
}
|
||||
}
|
||||
|
||||
mod with_allow_ty_def {
|
||||
use super::Bar;
|
||||
|
||||
fn test() {
|
||||
let x = 1;
|
||||
let y = 1;
|
||||
let z = 1;
|
||||
|
||||
// Should NOT lint because `Bar` is defined with `#[allow(clippy::inconsistent_struct_constructor)]`
|
||||
Bar { y, x, z };
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
@ -1,5 +1,5 @@
|
||||
error: struct constructor field order is inconsistent with struct definition field order
|
||||
--> tests/ui/inconsistent_struct_constructor.rs:28:9
|
||||
--> tests/ui/inconsistent_struct_constructor.rs:36:9
|
||||
|
|
||||
LL | Foo { y, x, z };
|
||||
| ^^^^^^^^^^^^^^^ help: try: `Foo { x, y, z }`
|
||||
@ -8,7 +8,7 @@ LL | Foo { y, x, z };
|
||||
= help: to override `-D warnings` add `#[allow(clippy::inconsistent_struct_constructor)]`
|
||||
|
||||
error: struct constructor field order is inconsistent with struct definition field order
|
||||
--> tests/ui/inconsistent_struct_constructor.rs:55:9
|
||||
--> tests/ui/inconsistent_struct_constructor.rs:63:9
|
||||
|
|
||||
LL | / Foo {
|
||||
LL | | z,
|
||||
|
Loading…
x
Reference in New Issue
Block a user