#rust #rustdoc
#Ржавчина #rustdoc
Вопрос:
У меня есть модуль, который я хотел бы использовать в блоке кода в моей документации.
Этот модуль используется только для тестов, поэтому у него есть #![cfg(test)]
атрибут, который он должен сохранить.
Однако в результате этот файл, похоже, не включается при выполнении тестов в документации.
Взгляните на MVCE:
lib.rs
//! ```
//! use example::mock::Number;
//! ```
pub mod mock;
pub fn main() {}
mock.rs
#![cfg(test)]
pub type Number = i32;
Это не удается с:
---- src/lib.rs - (line 1) stdout ----
error[E0432]: unresolved import `example::mock`
--> src/lib.rs:2:14
|
4 | use example::mock::Number;
| ^^^^ could not find `mock` in `example`
Есть ли способ заставить мой тестовый код документации использовать эти файлы, настроенные для тестов?
Ответ №1:
Это известное ограничение doctest (выпуск # 45599). К сожалению, с момента возникновения проблемы (конец 2017 года) реального прогресса нет.
В качестве обходного пути предлагается добавить функцию в свой Cargo.toml
[features]
test = []
Вместо проверки #[cfg(test)]
вы можете сделать #[cfg(feature = "test")]
.
Комментарии:
1. Спасибо за четкий ответ. К сожалению, обходной путь — это не совсем то, что мы можем сделать в нашем проекте, но приятно знать, что такой обходной путь существует, и мы не единственные, кто сталкивается с этой проблемой.