将警告提升为错误

总结

  • 在 Rust 2021 中,触发 bare_trait_objectsellipsis_inclusive_range_patterns 提示的代码将报错。

详情

在 Rust 2021 中,两个现有的提示将变为硬错误,但这些提示在旧版本中将保持警告。

bare_trait_objects:

在 Rust 2021 中,使用 dyn 关键字来标识特征对象将是强制性的。

例如,以下代码在 &MyTrait 中不包含 dyn 关键字,在 Rust 2021 中将产生错误而不是仅仅是警告

#![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 中将产生错误而不是仅仅是警告

#![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()] 或其他机制允许这些提示,则无需迁移。

要自动迁移任何在模式中使用 ... 或不将 dyn 与特征对象一起使用的代码库,您可以运行 cargo fix --edition