Kcov сообщает о 100% для Rust lib, хотя некоторые методы не рассматриваются

Я пытаюсь добавить покрытие кода в мою библиотеку ржавчины. Он сообщает, что он покрыт на 100%, но когда я смотрю на отчет, многие строки не учитываются: https://codecov.io/gh/JelteF/defaultmap/src/c878e108c61f270718c909e1500c4c2e865a33d1/src/lib.rs#L93...106

В чем причина и можно ли это исправить? Я уже пытался установить RUSTFLAGS в "-C link-dead-code", как это предлагается в этом ответе: /questions/3703289/pochemu-kcov-vyichislyaet-nevernuyu-statistiku-pokryitiya-koda-dlya-programm-rust/3703291#3703291 Это не помогло, однако.

1 ответ

Решение

Это известная проблема ( https://github.com/rust-lang/rust/issues/39293), решения которой еще не реализованы. Обобщения в Rust похожи на шаблоны в C++, если вы не используете обобщенную функцию, код вообще не будет сгенерирован. На самом деле этих функций нет:

$ nm target/debug/defaultmap-2fd0c3085042f647 | grep DefaultHashMap | cargo demangle
000000000002c350 t <defaultmap::hashmap::DefaultHashMap<K, V> as core::ops::Index<KB>>::index::h14fb5e24128b7e47
000000000002c390 t <defaultmap::hashmap::DefaultHashMap<K, V> as core::ops::Index<KB>>::index::h5c00e602e45f6925
000000000002c3d0 t <defaultmap::hashmap::DefaultHashMap<K, V> as core::ops::Index<KB>>::index::hc5dfb7b3478d945a
000000000002c420 t <defaultmap::hashmap::DefaultHashMap<K, V> as core::ops::IndexMut<K>>::index_mut::h8b298bf16464a070
000000000002c470 t <defaultmap::hashmap::DefaultHashMap<K, V> as core::ops::IndexMut<K>>::index_mut::hcc509def35f89759
000000000002bfc0 t <defaultmap::hashmap::DefaultHashMap<K, V>>::get::h6a0f4cb5c61c67e8
000000000002c060 t <defaultmap::hashmap::DefaultHashMap<K, V>>::get::ha5fdb528b5dd94a5
000000000002c110 t <defaultmap::hashmap::DefaultHashMap<K, V>>::get::hc1a5643986209ba6
000000000002c1b0 t <defaultmap::hashmap::DefaultHashMap<K, V>>::get_mut::h14f0ded6ba3206f3
000000000002c2a0 t <defaultmap::hashmap::DefaultHashMap<K, V>>::get_mut::h6ea36d917e778099
000000000002eaf0 t <defaultmap::hashmap::DefaultHashMap<K, V> as core::fmt::Debug>::fmt::h2cefa624bd18fcfe
000000000002e9e0 t <defaultmap::hashmap::DefaultHashMap<K, V> as core::default::Default>::default::h0b736edcd6ac228a
000000000002ea60 t <defaultmap::hashmap::DefaultHashMap<K, V> as core::default::Default>::default::hd09b7abe1e63b94f

Я думаю, что пока единственное практическое решение - это вручную проверить отчет о покрытии и добавить обратно недостающие тесты для игнорируемых функций.

Другие вопросы по тегам