不能忽略在文档中编译示例代码的失败

时间:2016-11-28 20:42:20

标签: rust rust-cargo

我正在尝试为Rust库编写示例代码,但我不需要编译示例代码。

重现的步骤:

  1. cargo new

  2. 将其添加到src/lib.rs

    //! ## How to use
    //! Validator usage:
    //! ```ignore
    //! fn validate(values: &Map) -> ValidateResults {
    //!    ValidateResults(vec!(
    //!        Validator::<String>::new(btreemap! {
    //!            "requiered".to_string() => true.to_json(),
    //!            "vtype".to_string() => "string".to_json(),
    //!        }).validate("title".to_string(), values.find(&["pages", "title"]$
    //!
    //!        Validator::<bool>::new(btreemap! {
    //!            "default".to_string() => false.to_json(),
    //!        }).validate("published".to_string(), values.find(&["published"])$
    //!    ))
    //! }
    //! ```
    pub fn main() {
        println!("Hello, world!");
    }
    
  3. cargo test

  4. 我收到错误:

    $ cargo test
        Finished debug [unoptimized + debuginfo] target(s) in 0.0 secs
         Running target/debug/deps/sample-661c50cdfb6a999f
    
    running 0 tests
    
    test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured
    
       Doc-tests sample
    
    running 1 test
    test _0 ... FAILED
    
    failures:
    
    ---- _0 stdout ----
        error: expected one of `.`, `;`, `?`, `}`, or an operator, found `,`
     --> <anon>:4:69
      |
    4 |    }).validate("published".to_string(), values.find(&["published"])),
      |                                                                     ^
    
    error: macro undefined: 'btreemap!'
     --> <anon>:2:31
      |
    2 |        Validator::<bool>::new(btreemap! {
      |                               ^^^^^^^^
    
    error: aborting due to 2 previous errors
    
    thread '_0' panicked at 'Box<Any>', ../src/librustc_errors/lib.rs:694
    note: Run with `RUST_BACKTRACE=1` for a backtrace.
    thread '_0' panicked at 'couldn't compile the test', ../src/librustdoc/test.rs:283
    
    
    failures:
        _0
    
    test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured
    
    error: test failed
    

    如何忽略编译此示例代码的失败?我使用Rust 1.13.0和Cargo 0.13.0。

1 个答案:

答案 0 :(得分:5)

你在Rust的文档解析器中点击了known issue。 Rust(Hoedown)使用的Markdown解析器似乎没有正确识别受防护的代码块(三个反引号),除非它前面有一个空行。有some dispute这是否是所需的行为,但无论哪种方式,问题都可以通过修改您的示例来解决,如下所示:

//! ## How to use
//! Validator usage:
//!
//! ```ignore
//! fn validate(values: &Map) -> ValidateResults {
//!    ValidateResults(vec!(
//!        Validator::<String>::new(btreemap! {
//!            "requiered".to_string() => true.to_json(),
//!            "vtype".to_string() => "string".to_json(),
//!        }).validate("title".to_string(), values.find(&["pages", "title"]$
//!
//!        Validator::<bool>::new(btreemap! {
//!            "default".to_string() => false.to_json(),
//!        }).validate("published".to_string(), values.find(&["published"])$
//!    ))
//! }
//! ```
pub fn main() {
    println!("Hello, world!");
}

注意代码块之前的前导//!行,它允许Hoedown成功识别代码块并适当地忽略它。