【问题标题】:How to put a line into the documentation which is ignored for doc tests?如何在文档测试中忽略一行?
【发布时间】:2017-07-09 22:33:10
【问题描述】:

如何在文档代码中写入一行但让编译器忽略它?

我想写

/// # Examples
///
/// To clone something, do
///
/// ```
/// IGNORE_FOR_COMPILATION_BUT_SHOW: let cloned = myValue.clone();
/// # let cloned = 5.clone();
/// ```

我想得到:

示例

要克隆某物,请执行

let cloned = myValue.clone();

但编译器仍应编译示例(克隆 5)。

编辑:我也希望 cargo 运行示例,但省略一行。

【问题讨论】:

  • 这对我来说毫无意义。为什么要这样做?
  • 认为您必须在前三个反引号后添加ignore
  • @Shepmaster 因为没有myValue(在这个例子中可以通过添加一个let来修复)。我需要它是在我不想在文档中显示的类型上使用特征的关联方法,因为它不限于那个。
  • @LukasKalbertodt no cargo 只是不会运行它,除非你使用类似 --all 的东西

标签: documentation rust rust-cargo rustdoc


【解决方案1】:

documentation 说你可以这样做:

/// ```rust,ignore
/// highlighted as rust code but ignored by rustdoc
/// ```

还有rust,no_run 编译但不运行示例代码。

或者,您可以使用与普通代码相同的解决方案:将其注释掉。

/// ```rust
/// let x=5;
/// // x = 6;  // won't be run
/// assert_eq!(x, 5);
/// ```

【讨论】:

  • 代码仍然会被编译,所以测试会失败
  • 有忽略,还是没有运行?
  • no_run; ignore 不是一个完美的解决方案,因为它适用于过于昂贵但可以在适当时运行的测试
  • 来个评论怎么样?
  • 链接不正确了,现在也没找到写的地方。
【解决方案2】:

如果您想忽略文档测试中的一部分 Rust 代码,您可能需要阅读running documentation tests 上的部分。基本上将该代码提取到不同的块中并将该块设置为rust,ignore

这将完全忽略IGNORE_FOR_COMPILATION_BUT_SHOW,但其余部分将运行:

///```rust,ignore
///IGNORE_FOR_COMPILATION_BUT_SHOW: let cloned = myValue.clone(); 
///```

///```rust
/// # let cloned = 5.clone();
/// ```

如果您希望 rustdoc 编译您的文档测试,但不运行它,您可以使用 rust,no_run

【讨论】:

  • 还有办法运行吗?所以要运行除被忽略的行之外的每一行?
  • 您可以创建几个块,一些被忽略,一些正常运行。它们总是显示出来,只是不运行等等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 2020-11-12
  • 2016-02-02
  • 2017-12-01
  • 1970-01-01
相关资源
最近更新 更多