From 462dd647163195bbe4736c933588af3907ac6a38 Mon Sep 17 00:00:00 2001 From: Steve Klabnik Date: Mon, 12 Jan 2015 15:42:27 -0500 Subject: [PATCH] Add explanation of main to rustdoc docs Fixes #17554 --- src/doc/rustdoc.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/doc/rustdoc.md b/src/doc/rustdoc.md index 054552559db..512d49196ef 100644 --- a/src/doc/rustdoc.md +++ b/src/doc/rustdoc.md @@ -217,6 +217,35 @@ spawn(move || { fib(200); }) The documentation online would look like `spawn(move || { fib(200); })`, but when testing this code, the `fib` function will be included (so it can compile). +Rustdoc will automatically add a `main()` wrapper around your code, and in the right +place. For example: + +``` +/// ``` +/// use std::rc::Rc; +/// +/// let five = Rc::new(5); +/// ``` +# fn foo() {} +``` + +This will end up testing: + +``` +fn main() { + use std::rc::Rc; + let five = Rc::new(5); +} +``` + +Here's the full algorithm: + +1. Given a code block, if it does not contain `fn main`, it is wrapped in `fn main() { your_code }` +2. Given that result, if it contains no `extern crate` directives but it also + contains the name of the crate being tested, then `extern crate ` is + injected at the top. +3. Some common `allow` attributes are added for documentation examples at the top. + ## Running tests (advanced) Running tests often requires some special configuration to filter tests, find