warning: use of deprecated method `indexmap::IndexMap::<K, V, S>::remove`: `remove` disrupts the map order -- use `swap_remove` or `shift_remove` for explicit behavior.
--> crates/voicevox_core/src/status.rs:274:19
|
274 | if self.0.remove(&model_id).is_none() {
| ^^^^^^
|
= note: `#[warn(deprecated)]` on by default
warning: use of deprecated method `indexmap::IndexMap::<K, V, S>::remove`: `remove` disrupts the map order -- use `swap_remove` or `shift_remove` for explicit behavior.
--> crates/voicevox_core/src/user_dict/dict.rs:64:56
|
64 | let Some(word) = self.with_words(|words| words.remove(&word_uuid)) else {
| ^^^^^^
内容
indexmapを新しいバージョンに上げると以下の警告が出るため、その対応です。 (このPRではindexmapのバージョンはそのままにして、アップデートはRenovateに任せます)
現在使っているindexmap v2.0.0の時点で
remove
とswap_remove
とshift_remove
の三つは存在しており、remove
はswap_remove
のエイリアスです。v2.1.0からremove
が#[deprecated]
になって上記の警告が出るようになったようです。swap_remove
とshift_remove
の違いは何なのかと言うと、[a, b, c, d, e]
のようなキーの並びからswap_remove
でb
を抜き取ると[a, e, c, d]
のような並びになります。shift_remove
はPythonのdict.__delitem__
のような一般的な挙動です。UserDict::remove_word
とかのパブリックAPIの挙動にも関わってくるため、一般的な挙動の方がよいかと思いswap_remove
ではなくshift_remove
の方にしました。これが本PRのcommit prefixを"improve:"にしている理由です。 ("fix:"にしようか迷ったのですが、ドキュメント上で順序の保証はしてなかったかなと思ったので"improve:"にしてしまいました) [追記] いや書いてた!!ということで、"fix:"にしました。関連 Issue
841
その他