diff options
| author | Mark Simulacrum <mark.simulacrum@gmail.com> | 2018-06-05 08:33:45 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-06-05 08:33:45 -0600 |
| commit | 1225faf1a410cbb6df347bd135fb3460cfd2a5ce (patch) | |
| tree | bcce48f79fc2a44e0fe75d1616c67e9f16367aa7 /src/doc/rustdoc | |
| parent | bcba3b9968acfa1f371a57026a0563c9a7954189 (diff) | |
| parent | 089da06cc437aa4764f958ff441e79d7fca6b148 (diff) | |
| download | rust-1225faf1a410cbb6df347bd135fb3460cfd2a5ce.tar.gz rust-1225faf1a410cbb6df347bd135fb3460cfd2a5ce.zip | |
Rollup merge of #51183 - teiesti:rustdoc-book-termination, r=steveklabnik
Update rustdoc book to suggest using Termination trait instead of hidden ‘foo’ function Closes #50721. I suggest that someone double-checks my English since I am not a native speaker. r? @steveklabnik
Diffstat (limited to 'src/doc/rustdoc')
| -rw-r--r-- | src/doc/rustdoc/src/documentation-tests.md | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/src/doc/rustdoc/src/documentation-tests.md b/src/doc/rustdoc/src/documentation-tests.md index 268ac37cf2c..cb233cc84cb 100644 --- a/src/doc/rustdoc/src/documentation-tests.md +++ b/src/doc/rustdoc/src/documentation-tests.md @@ -170,37 +170,56 @@ By repeating all parts of the example, you can ensure that your example still compiles, while only showing the parts that are relevant to that part of your explanation. -Another case where the use of `#` is handy is when you want to ignore -error handling. Lets say you want the following, + +## Using `?` in doc tests + +When writing an example, it is rarely useful to include a complete error +handling, as it would add significant amounts of boilerplate code. Instead, you +may want the following: ```ignore +/// ``` /// use std::io; /// let mut input = String::new(); /// io::stdin().read_line(&mut input)?; +/// ``` ``` -The problem is that `?` returns a `Result<T, E>` and test functions -don't return anything so this will give a mismatched types error. +The problem is that `?` returns a `Result<T, E>` and test functions don't +return anything, so this will give a mismatched types error. + +You can get around this limitation by manually adding a `main` that returns +`Result<T, E>`, because `Result<T, E>` implements the `Termination` trait: ```ignore /// A doc test using ? /// /// ``` /// use std::io; -/// # fn foo() -> io::Result<()> { +/// +/// fn main() -> io::Result<()> { +/// let mut input = String::new(); +/// io::stdin().read_line(&mut input)?; +/// Ok(()) +/// } +/// ``` +``` + +Together with the `# ` from the section above, you arrive at a solution that +appears to the reader as the initial idea but works with doc tests: + +```ignore +/// ``` +/// use std::io; +/// # fn main() -> io::Result<()> { /// let mut input = String::new(); /// io::stdin().read_line(&mut input)?; /// # Ok(()) /// # } /// ``` -# fn foo() {} ``` -You can get around this by wrapping the code in a function. This catches -and swallows the `Result<T, E>` when running tests on the docs. This -pattern appears regularly in the standard library. - -### Documenting macros +## Documenting macros Here’s an example of documenting a macro: |
