警告升级为错误

摘要

  • 在 Rust 2021 中,触发 bare_trait_objectsellipsis_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_objectsellipsis_inclusive_range_patterns 的警告,并且您没有通过使用 #![allow()] 或其他机制来允许这些 lint,则无需进行迁移。

要自动迁移任何在模式中使用 ... 或不使用 dyn 关键字的 trait 对象的 crate,您可以运行 cargo fix --edition