diff options
| author | Andre Bogus <bogusandre@gmail.com> | 2019-05-28 19:10:39 +0200 |
|---|---|---|
| committer | Andre Bogus <bogusandre@gmail.com> | 2019-05-28 19:10:39 +0200 |
| commit | 6bb6c001be34d0932a014df981ee18f165c43374 (patch) | |
| tree | 566572ce7fe6ba14e58e5121c6c4ad5e0e36ef1a /src | |
| parent | 7da118581c9dc839c8bf3fbb622bab9ce32bbf38 (diff) | |
| download | rust-6bb6c001be34d0932a014df981ee18f165c43374.tar.gz rust-6bb6c001be34d0932a014df981ee18f165c43374.zip | |
implicit `Option`-returning doctests
This distinguishes `Option` and `Result`-returning doctests with implicit `main` method, where the former tests must end with `Some(())`.
Diffstat (limited to 'src')
| -rw-r--r-- | src/doc/rustdoc/src/documentation-tests.md | 13 | ||||
| -rw-r--r-- | src/librustdoc/test.rs | 7 | ||||
| -rw-r--r-- | src/test/rustdoc/process-termination.rs | 12 |
3 files changed, 31 insertions, 1 deletions
diff --git a/src/doc/rustdoc/src/documentation-tests.md b/src/doc/rustdoc/src/documentation-tests.md index c9acd3c307b..a896ce819ae 100644 --- a/src/doc/rustdoc/src/documentation-tests.md +++ b/src/doc/rustdoc/src/documentation-tests.md @@ -253,6 +253,19 @@ conversion, so type inference fails because the type is not unique. Please note that you must write the `(())` in one sequence without intermediate whitespace so that rustdoc understands you want an implicit `Result`-returning function. +As of version 1.37.0, this simplification also works with `Option`s, which can +be handy to test e.g. iterators or checked arithmetic, for example: + +```ignore +/// ``` +/// let _ = &[].iter().next()?; +///# Some(()) +/// ``` +``` + +Note that the result must be a `Some(())` and this has to be written in one go. +In this case disambiguating the result isn't required. + ## Documenting macros Here’s an example of documenting a macro: diff --git a/src/librustdoc/test.rs b/src/librustdoc/test.rs index d76d4380755..1b6460f5251 100644 --- a/src/librustdoc/test.rs +++ b/src/librustdoc/test.rs @@ -499,8 +499,13 @@ pub fn make_test(s: &str, prog.push_str(everything_else); } else { let returns_result = everything_else.trim_end().ends_with("(())"); + let returns_option = everything_else.trim_end().ends_with("Some(())"); let (main_pre, main_post) = if returns_result { - ("fn main() { fn _inner() -> Result<(), impl core::fmt::Debug> {", + (if returns_option { + "fn main() { fn _inner() -> Option<()> {" + } else { + "fn main() { fn _inner() -> Result<(), impl core::fmt::Debug> {" + }, "}\n_inner().unwrap() }") } else { ("fn main() {\n", "\n}") diff --git a/src/test/rustdoc/process-termination.rs b/src/test/rustdoc/process-termination.rs index 32258792b6e..31ae0143d47 100644 --- a/src/test/rustdoc/process-termination.rs +++ b/src/test/rustdoc/process-termination.rs @@ -21,4 +21,16 @@ /// Err("This is returned from `main`, leading to panic")?; /// Ok::<(), &'static str>(()) /// ``` +/// +/// This also works with `Option<()>`s now: +/// +/// ```rust +/// Some(()) +/// ``` +/// +/// ```rust,should_panic +/// let x: &[u32] = &[]; +/// let _ = x.iter().next()?; +/// Some(()) +/// ``` pub fn check_process_termination() {} |
