// ignore-tidy-linelength #![crate_name = "foo"] #![allow(rustdoc::redundant_explicit_links)] //! Here's a link to [`Vec`] and one to [`Box>>`]. //! Here's a link to [`Iterator>::Item`]. //! // @has foo/index.html '//a[@href="{{channel}}/alloc/vec/struct.Vec.html"]' 'Vec' // @has foo/index.html '//a[@href="{{channel}}/alloc/boxed/struct.Box.html"]' 'Box>>' // @has foo/index.html '//a[@href="{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item"]' 'Iterator>::Item' //! And what about a link to [just `Option`](Option) and, [with the generic, `Option`](Option)? //! // @has foo/index.html '//a[@href="{{channel}}/core/option/enum.Option.html"]' 'just Option' // @has foo/index.html '//a[@href="{{channel}}/core/option/enum.Option.html"]' 'with the generic, Option' //! We should also try linking to [`Result`]; it has *two* generics! //! And [`Result`] and [`Result`]. //! // @has foo/index.html '//a[@href="{{channel}}/core/result/enum.Result.html"]' 'Result' // @has foo/index.html '//a[@href="{{channel}}/core/result/enum.Result.html"]' 'Result' // @has foo/index.html '//a[@href="{{channel}}/core/result/enum.Result.html"]' 'Result' //! Now let's test a trickier case: [`Vec::::new`], or you could write it //! [with parentheses as `Vec::::new()`][Vec::::new()]. //! And what about something even harder? That would be [`Vec::>::new()`]. //! // @has foo/index.html '//a[@href="{{channel}}/alloc/vec/struct.Vec.html#method.new"]' 'Vec::::new' // @has foo/index.html '//a[@href="{{channel}}/alloc/vec/struct.Vec.html#method.new"]' 'with parentheses as Vec::::new()' // @has foo/index.html '//a[@href="{{channel}}/alloc/vec/struct.Vec.html#method.new"]' 'Vec::>::new()' //! This is also pretty tricky: [`TypeId::of::()`]. //! And this too: [`Vec::::len`]. //! // @has foo/index.html '//a[@href="{{channel}}/core/any/struct.TypeId.html#method.of"]' 'TypeId::of::()' // @has foo/index.html '//a[@href="{{channel}}/alloc/vec/struct.Vec.html#method.len"]' 'Vec::::len' //! We unofficially and implicitly support things that aren't valid in the actual Rust syntax, like //! [`Box::new()`]. We may not support them in the future! //! // @has foo/index.html '//a[@href="{{channel}}/alloc/boxed/struct.Box.html#method.new"]' 'Box::new()' //! These will be resolved as regular links: //! - [`this is first`](https://www.rust-lang.org) //! - [`this is twice`] //! - [` thrice`](https://www.rust-lang.org) //! - [` four times`][rlo] //! - [a < b][rlo] //! - [c > d] //! //! [`this is twice`]: https://www.rust-lang.org //! [rlo]: https://www.rust-lang.org //! [c > d]: https://www.rust-lang.org //! // @has foo/index.html '//a[@href="https://www.rust-lang.org"]' 'this is first' // @has foo/index.html '//a[@href="https://www.rust-lang.org"]' 'this is twice' // @has foo/index.html '//a[@href="https://www.rust-lang.org"]' ' thrice' // @has foo/index.html '//a[@href="https://www.rust-lang.org"]' ' four times' // @has foo/index.html '//a[@href="https://www.rust-lang.org"]' 'a < b' // @has foo/index.html '//a[@href="https://www.rust-lang.org"]' 'c > d' use std::any::TypeId;