警告からエラーへの格上げ
概要
bare_trait_objects
リントかellipsis_inclusive_range_patterns
リントが出るコードは、Rust 2021 ではエラーになります。
詳細
現存する2つのリントが 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` // `&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_objects
や ellipsis_inclusive_range_patterns
といったエラーが出ず、#![allow()]
などを使ってこれらのリントを許可する設定をしていなければ、移行の際にやることはありません。
...
をパターンに使用していたり、トレイトオブジェクトに dyn
を使っていないクレートがある場合は、
cargo fix --edition
を実行すればよいです。