Instead of using a depth counter and adding "../" to get to the top,
this commit makes rustdoc actually compare the path of what it's
linking from to the path that it's linking to. This makes the resulting
HTML shorter.
Here's a comparison of one of the largest (non-source) files in the
Rust standard library docs (about 4% improvement before gzipping).
$ wc -c struct.Wrapping.old.html struct.Wrapping.new.html
2387389 struct.Wrapping.old.html
2298538 struct.Wrapping.new.html
Most if it can be efficiently gzipped away.
$ wc -c struct.Wrapping.old.html.gz struct.Wrapping.new.html.gz
70679 struct.Wrapping.old.html.gz
70050 struct.Wrapping.new.html.gz
But it also makes a difference in the final DOM size, reducing it from 91MiB to 82MiB.
72 lines
2.4 KiB
Rust
72 lines
2.4 KiB
Rust
// force-host
|
|
// no-prefer-dynamic
|
|
// compile-flags: --crate-type proc-macro --document-private-items
|
|
|
|
#![crate_type="proc-macro"]
|
|
#![crate_name="some_macros"]
|
|
|
|
// @has some_macros/index.html
|
|
// @has - '//a/[@href="attr.some_proc_attr.html"]' 'some_proc_attr'
|
|
|
|
//! include a link to [some_proc_macro] to make sure it works.
|
|
|
|
extern crate proc_macro;
|
|
|
|
use proc_macro::TokenStream;
|
|
|
|
// @has some_macros/index.html
|
|
// @has - '//h2' 'Macros'
|
|
// @has - '//h2' 'Attribute Macros'
|
|
// @has - '//h2' 'Derive Macros'
|
|
// @!has - '//h2' 'Functions'
|
|
|
|
// @has some_macros/all.html
|
|
// @has - '//a[@href="macro.some_proc_macro.html"]' 'some_proc_macro'
|
|
// @has - '//a[@href="attr.some_proc_attr.html"]' 'some_proc_attr'
|
|
// @has - '//a[@href="derive.SomeDerive.html"]' 'SomeDerive'
|
|
// @!has - '//a/@href' 'fn.some_proc_macro.html'
|
|
// @!has - '//a/@href' 'fn.some_proc_attr.html'
|
|
// @!has - '//a/@href' 'fn.some_derive.html'
|
|
|
|
// @has some_macros/index.html '//a/@href' 'macro.some_proc_macro.html'
|
|
// @!has - '//a/@href' 'fn.some_proc_macro.html'
|
|
// @has some_macros/macro.some_proc_macro.html
|
|
// @!has some_macros/fn.some_proc_macro.html
|
|
/// a proc-macro that swallows its input and does nothing.
|
|
#[proc_macro]
|
|
pub fn some_proc_macro(_input: TokenStream) -> TokenStream {
|
|
TokenStream::new()
|
|
}
|
|
|
|
// @has some_macros/index.html '//a/@href' 'attr.some_proc_attr.html'
|
|
// @!has - '//a/@href' 'fn.some_proc_attr.html'
|
|
// @has some_macros/attr.some_proc_attr.html
|
|
// @!has some_macros/fn.some_proc_attr.html
|
|
/// a proc-macro attribute that passes its item through verbatim.
|
|
#[proc_macro_attribute]
|
|
pub fn some_proc_attr(_attr: TokenStream, item: TokenStream) -> TokenStream {
|
|
item
|
|
}
|
|
|
|
// @has some_macros/index.html '//a/@href' 'derive.SomeDerive.html'
|
|
// @!has - '//a/@href' 'fn.some_derive.html'
|
|
// @has some_macros/derive.SomeDerive.html
|
|
// @!has some_macros/fn.some_derive.html
|
|
/// a derive attribute that adds nothing to its input.
|
|
#[proc_macro_derive(SomeDerive)]
|
|
pub fn some_derive(_item: TokenStream) -> TokenStream {
|
|
TokenStream::new()
|
|
}
|
|
|
|
// @has some_macros/foo/index.html
|
|
mod foo {
|
|
// @has - '//code' 'pub use some_proc_macro;'
|
|
// @has - '//a/@href' '../macro.some_proc_macro.html'
|
|
pub use some_proc_macro;
|
|
// @has - '//code' 'pub use some_proc_attr;'
|
|
// @has - '//a/@href' '../attr.some_proc_attr.html'
|
|
pub use some_proc_attr;
|
|
// @has - '//code' 'pub use some_derive;'
|
|
// @has - '//a/@href' '../derive.SomeDerive.html'
|
|
pub use some_derive;
|
|
}
|