Rollup merge of #93217 - willcrichton:example-analyzer, r=GuillaumeGomez
Improve Rustdoc UI for scraped examples with multiline arguments, fix overflow in line numbers This PR improves a few aspects of the scrape examples feature in Rustdoc. * Only function names and not the full call expression are highlighted. * For call-sites with multiline arguments, the minimized code viewer will scroll to the top of the call-site rather than the middle if the argument is larger than the viewer size, ensuring that the function name is visible. * This fixes an issue where the line numbers column had a visible x-scroll bar. r? `@GuillaumeGomez`
This commit is contained in:
commit
db61452b7a
13 changed files with 342 additions and 88 deletions
|
|
@ -9,6 +9,7 @@
|
|||
- [Linking to items by name](write-documentation/linking-to-items-by-name.md)
|
||||
- [Documentation tests](write-documentation/documentation-tests.md)
|
||||
- [Rustdoc-specific lints](lints.md)
|
||||
- [Scraped examples](scraped-examples.md)
|
||||
- [Advanced features](advanced-features.md)
|
||||
- [Unstable features](unstable-features.md)
|
||||
- [Deprecated features](deprecated-features.md)
|
||||
|
|
|
|||
55
src/doc/rustdoc/src/scraped-examples.md
Normal file
55
src/doc/rustdoc/src/scraped-examples.md
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
# Scraped examples
|
||||
|
||||
Rustdoc has an unstable feature where it can automatically scrape examples of items being documented from the `examples/` directory of a Cargo workspace. These examples will be included within the generated documentation for that item. For example, if your library contains a public function:
|
||||
|
||||
```rust,ignore (needs-other-file)
|
||||
// a_crate/src/lib.rs
|
||||
pub fn a_func() {}
|
||||
```
|
||||
|
||||
And you have an example calling this function:
|
||||
|
||||
```rust,ignore (needs-other-file)
|
||||
// a_crate/examples/ex.rs
|
||||
fn main() {
|
||||
a_crate::a_func();
|
||||
}
|
||||
```
|
||||
|
||||
Then this code snippet will be included in the documentation for `a_func`. This documentation is inserted by Rustdoc and cannot be manually edited by the crate author.
|
||||
|
||||
|
||||
## How to use this feature
|
||||
|
||||
This feature is unstable, so you can enable it by calling Rustdoc with the unstable `rustdoc-scrape-examples` flag:
|
||||
|
||||
```bash
|
||||
cargo doc -Zunstable-options -Zrustdoc-scrape-examples=examples
|
||||
```
|
||||
|
||||
To enable this feature on [docs.rs](https://docs.rs), add this to your Cargo.toml:
|
||||
|
||||
```toml
|
||||
[package.metadata.docs.rs]
|
||||
cargo-args = ["-Zunstable-options", "-Zrustdoc-scrape-examples=examples"]
|
||||
```
|
||||
|
||||
|
||||
## How it works
|
||||
|
||||
When you run `cargo doc`, Rustdoc will analyze all the crates that match Cargo's `--examples` filter for instances of items being documented. Then Rustdoc will include the source code of these instances in the generated documentation.
|
||||
|
||||
Rustdoc has a few techniques to ensure these examples don't overwhelm documentation readers, and that it doesn't blow up the page size:
|
||||
|
||||
1. For a given item, a maximum of 5 examples are included in the page. The remaining examples are just links to source code.
|
||||
2. Only one example is shown by default, and the remaining examples are hidden behind a toggle.
|
||||
3. For a given file that contains examples, only the item containing the examples will be included in the generated documentation.
|
||||
|
||||
For a given item, Rustdoc sorts its examples based on the size of the example — smaller ones are shown first.
|
||||
|
||||
|
||||
## FAQ
|
||||
|
||||
### My example is not showing up in the documentation
|
||||
|
||||
This feature uses Cargo's convention for finding examples. You should ensure that `cargo check --examples` includes your example file.
|
||||
Loading…
Add table
Add a link
Reference in a new issue