警告升级为错误
摘要
- 在 Rust 2021 中,触发
bare_trait_objects
和ellipsis_inclusive_range_patterns
lint 的代码将会报错。
详情
在 Rust 2021 中,两个现有的 lint 将会变成硬性错误,但这些 lint 在旧版本中仍然是警告。
bare_trait_objects
:
在 Rust 2021 中,使用 dyn
关键字来标识 trait 对象 将是强制性的。
例如,以下代码在 &MyTrait
中不包含 dyn
关键字,在 Rust 2021 中会产生错误,而不仅仅是 lint 警告。
#![allow(unused)] fn main() { pub trait MyTrait {} pub fn my_function(_trait_object: &MyTrait) { // should be `&dyn MyTrait` unimplemented!() } }
ellipsis_inclusive_range_patterns
:
用于包含范围模式(即,范围的结束值包含在范围内的)已弃用的 ...
语法 在 Rust 2021 中不再被接受。它已被 ..=
取代,这与表达式一致。
例如,以下在模式中使用 ...
的代码在 Rust 2021 中会产生错误,而不仅仅是 lint 警告。
#![allow(unused)] fn main() { pub fn less_or_eq_to_100(n: u8) -> bool { matches!(n, 0...100) // should be `0..=100` } }
迁移
如果您的 Rust 2015 或 2018 代码没有产生任何关于 bare_trait_objects
或 ellipsis_inclusive_range_patterns
的警告,并且您没有通过使用 #![allow()]
或其他机制来允许这些 lint,则无需进行迁移。
要自动迁移任何在模式中使用 ...
或不使用 dyn
关键字的 trait 对象的 crate,您可以运行 cargo fix --edition
。