G.TYP.ENM.05 对外导出的公开Enum,宜添加#[non_exhaustive]属性

【级别】 建议

【描述】

作为对外公开的 Enum,为了保持稳定性,应该使用 #[non_exhaustive]属性,避免因为将来Enum 枚举变体的变化而影响到下游的使用。

【反例】

#[non_exhaustive] 属性稳定之前,社区内还有一种约定俗成的写法来达到防止下游自定义枚举方法。


#![allow(unused)]
#![warn(clippy::exhaustive_enums)]

fn main() {
enum E {
    A,
    B,
    #[doc(hidden)]
    _C, // 不符合: 这里用 下划线作为前缀定义的变体,作为隐藏的变体,不对外展示
}
}

【正例】


#![allow(unused)]
fn main() {
// 符合
#[non_exhaustive]
enum E {
    A,
    B,
}
}

【Lint 检测】

lint nameClippy 可检测Rustc 可检测Lint Grouplevel
exhaustive_enumsyesnorestrictionallow
manual_non_exhaustiveyesnostylewarn