Make exhaustive_enums only warn on exported items
This commit is contained in:
parent
dc93188805
commit
f6cb96ef07
@ -7,7 +7,7 @@
|
||||
use rustc_span::sym;
|
||||
|
||||
declare_clippy_lint! {
|
||||
/// **What it does:** Warns on any `enum`s that are not tagged `#[non_exhaustive]`
|
||||
/// **What it does:** Warns on any exported `enum`s that are not tagged `#[non_exhaustive]`
|
||||
///
|
||||
/// **Why is this bad?** Exhaustive enums are typically fine, but a project which does
|
||||
/// not wish to make a stability commitment around enums may wish to disable them by default.
|
||||
@ -40,6 +40,7 @@ impl LateLintPass<'_> for ExhaustiveEnums {
|
||||
fn check_item(&mut self, cx: &LateContext<'_>, item: &Item<'_>) {
|
||||
if_chain! {
|
||||
if let ItemKind::Enum(..) = item.kind;
|
||||
if cx.access_levels.is_exported(item.hir_id);
|
||||
if !item.attrs.iter().any(|a| a.has_name(sym::non_exhaustive));
|
||||
then {
|
||||
if let Some(snippet) = snippet_opt(cx, item.span) {
|
||||
|
@ -8,15 +8,33 @@ fn main() {
|
||||
}
|
||||
|
||||
#[non_exhaustive]
|
||||
enum Exhaustive {
|
||||
pub enum Exhaustive {
|
||||
Foo,
|
||||
Bar,
|
||||
Baz,
|
||||
Quux(String),
|
||||
}
|
||||
|
||||
// no warning, already non_exhaustive
|
||||
#[non_exhaustive]
|
||||
enum NonExhaustive {
|
||||
pub enum NonExhaustive {
|
||||
Foo,
|
||||
Bar,
|
||||
Baz,
|
||||
Quux(String),
|
||||
}
|
||||
|
||||
// no warning, private
|
||||
enum ExhaustivePrivate {
|
||||
Foo,
|
||||
Bar,
|
||||
Baz,
|
||||
Quux(String),
|
||||
}
|
||||
|
||||
// no warning, private
|
||||
#[non_exhaustive]
|
||||
enum NonExhaustivePrivate {
|
||||
Foo,
|
||||
Bar,
|
||||
Baz,
|
||||
|
@ -7,15 +7,33 @@ fn main() {
|
||||
// nop
|
||||
}
|
||||
|
||||
enum Exhaustive {
|
||||
pub enum Exhaustive {
|
||||
Foo,
|
||||
Bar,
|
||||
Baz,
|
||||
Quux(String),
|
||||
}
|
||||
|
||||
// no warning, already non_exhaustive
|
||||
#[non_exhaustive]
|
||||
enum NonExhaustive {
|
||||
pub enum NonExhaustive {
|
||||
Foo,
|
||||
Bar,
|
||||
Baz,
|
||||
Quux(String),
|
||||
}
|
||||
|
||||
// no warning, private
|
||||
enum ExhaustivePrivate {
|
||||
Foo,
|
||||
Bar,
|
||||
Baz,
|
||||
Quux(String),
|
||||
}
|
||||
|
||||
// no warning, private
|
||||
#[non_exhaustive]
|
||||
enum NonExhaustivePrivate {
|
||||
Foo,
|
||||
Bar,
|
||||
Baz,
|
||||
|
@ -1,7 +1,7 @@
|
||||
error: enums should not be exhaustive
|
||||
--> $DIR/exhaustive_enums.rs:10:1
|
||||
|
|
||||
LL | / enum Exhaustive {
|
||||
LL | / pub enum Exhaustive {
|
||||
LL | | Foo,
|
||||
LL | | Bar,
|
||||
LL | | Baz,
|
||||
@ -17,7 +17,7 @@ LL | #![deny(clippy::exhaustive_enums)]
|
||||
help: try adding #[non_exhaustive]
|
||||
|
|
||||
LL | #[non_exhaustive]
|
||||
LL | enum Exhaustive {
|
||||
LL | pub enum Exhaustive {
|
||||
LL | Foo,
|
||||
LL | Bar,
|
||||
LL | Baz,
|
||||
|
Loading…
Reference in New Issue
Block a user