结合 doctests 和 `extern crate`
Combining doctests and `extern crate`
在 Rust 2018 中,我可以使用 extern self as crate_name
然后使用完全限定的语法,例如
extern crate self as crate_name; //set our crate name
pub struct Member;
fn test() {
::crate_name::Member; //use fully-qualified name
}
但是我似乎无法让它在 doctest 中工作:
/// ```
/// extern crate self as crate_name; //set the crate name
/// pub struct Member;
/// fn test() {
/// ::crate_name::Member; //use fully-qualified name
/// }
/// ```
fn example() { }
error[E0425]: cannot find value Member
in module crate_name
我应该提一下,我实际上是在对 procmacro 进行文档测试。也就是说,a) 测试需要包含完全限定的语法,因为 procmacro 扩展到那个,b) 我需要调整测试前奏以便扩展能够编译。基本上 doctest 应该模拟 types/paths 所以 procmacro 可以工作。
这是因为 as described here 如果 fn main()
没有出现在 doctest 中,rustdoc 会将测试包装在 main
中,所以模拟类型实际上是在这个函数中声明的..
在测试中包含一个 main
函数可以选择退出此功能并允许控制声明类型的位置
/// ```
/// extern crate self as crate_name; //pretend we're some crate
/// pub struct Member;
/// fn main() { ::crate_name::Member; //demo fully-qualified name
/// }
/// ```
fn example() { }
在 Rust 2018 中,我可以使用 extern self as crate_name
然后使用完全限定的语法,例如
extern crate self as crate_name; //set our crate name
pub struct Member;
fn test() {
::crate_name::Member; //use fully-qualified name
}
但是我似乎无法让它在 doctest 中工作:
/// ```
/// extern crate self as crate_name; //set the crate name
/// pub struct Member;
/// fn test() {
/// ::crate_name::Member; //use fully-qualified name
/// }
/// ```
fn example() { }
error[E0425]: cannot find value
Member
in modulecrate_name
我应该提一下,我实际上是在对 procmacro 进行文档测试。也就是说,a) 测试需要包含完全限定的语法,因为 procmacro 扩展到那个,b) 我需要调整测试前奏以便扩展能够编译。基本上 doctest 应该模拟 types/paths 所以 procmacro 可以工作。
这是因为 as described here 如果 fn main()
没有出现在 doctest 中,rustdoc 会将测试包装在 main
中,所以模拟类型实际上是在这个函数中声明的..
在测试中包含一个 main
函数可以选择退出此功能并允许控制声明类型的位置
/// ```
/// extern crate self as crate_name; //pretend we're some crate
/// pub struct Member;
/// fn main() { ::crate_name::Member; //demo fully-qualified name
/// }
/// ```
fn example() { }