警告からエラーへの格上げ

概要

  • bare_trait_objects リントか ellipsis_inclusive_range_patterns リントが出るコードは、Rust 2021 ではエラーになります。

詳細

現存する2つのリントが Rust 2021 ではエラーになります。古いエディションではこれらは警告のままです。

bare_trait_objects:

Rust 2021 では、トレイトオブジェクトを表すために、dyn キーワードを使用することが必須になりました。

例えば、以下のコードでは &MyTraitdyn キーワードが含まれていないため、Rust 2021 ではただのリントではなくエラーが発生します:


#![allow(unused)]
fn main() {
pub trait MyTrait {}

pub fn my_function(_trait_object: &MyTrait) { // should be `&dyn MyTrait`
                                              // `&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`
                       // `0..=100` と書かなくてはならない
}
}

移行

あなたの Rust 2015 か 2018 のコードで、bare_trait_objectsellipsis_inclusive_range_patterns といったエラーが出ず、#![allow()] などを使ってこれらのリントを許可する設定をしていなければ、移行の際にやることはありません。

... をパターンに使用していたり、トレイトオブジェクトに dyn を使っていないクレートがある場合は、 cargo fix --edition を実行すればよいです。

関連キーワード:  エラー, エディション, 警告, 格上げ, ガイド, リント, MyTrait, trait, パターン, コード