提交 f6cb96ef 编写于 作者: M Manish Goregaokar

Make exhaustive_enums only warn on exported items

上级 dc931888
......@@ -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,
......
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,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册