Commit graph

154 commits

Author SHA1 Message Date
Michael Howell
7e86fd61e8 rustdoc: merge theme css into rustdoc.css
Based on
https://github.com/rust-lang/rust/pull/115812#issuecomment-1717960119

Having them in separate files used to make more sense, before the
migration to CSS variables made the theme files as small as they are
nowadays. This is already how docs.rs and mdBook do it.
2023-09-15 07:40:17 -07:00
Guillaume Gomez
9944f01c66 Merge settings.css into rustdoc.css 2023-09-13 13:59:43 +02:00
Michael Howell
c79b960747
rustdoc: filter before storing in vec 2023-09-10 09:17:24 -07:00
Michael Howell
c3e5ad448b rustdoc: factor all-impls-for-item out into its own method 2023-09-09 18:29:00 -07:00
Guillaume Gomez
7ab27c5ed5 Add unstable --no-html-source rustdoc flag 2023-08-23 15:53:48 +02:00
Guillaume Gomez
16b34bfae3 Use more named format args 2023-08-16 16:35:23 +02:00
Guillaume Gomez
a1a94b1c0f Improve code readability by moving fmt args directly into the string 2023-08-16 16:35:23 +02:00
Guillaume Gomez
148a0c1673 Remove some unneeded clone() calls 2023-07-30 13:26:36 +02:00
bors
ec362f0ae8 Auto merge of #113574 - GuillaumeGomez:rustdoc-json-strip-hidden-impl, r=aDotInTheVoid,notriddle
Strip impl if not re-exported and is doc(hidden)

Part of #112852.

r? `@aDotInTheVoid`
2023-07-18 02:47:03 +00:00
Guillaume Gomez
ab80b36452 Correctly handle --document-hidden-items 2023-07-14 17:25:09 +02:00
Guillaume Gomez
1fa8b9aa56 Remove unneeded handling for ExternalLocation::Unknown in rustdoc render context 2023-07-14 17:04:29 +02:00
Matthias Krüger
361461150b
Rollup merge of #113623 - GuillaumeGomez:add-jump-to-doc, r=notriddle
Add jump to doc

I'm using the source code pages of the compiler quite a lot, but one thing missing is the possibility to jump back from the source code to the item documentation. Since I also got a few others complaining about it, I think it's fine to add it since this option is nightly only.

This PR adds a link to jump back to item's documentation on the item definition (so on `Bar` in `struct Bar {... }`, as described in the unofficial [RFC](https://github.com/GuillaumeGomez/rfcs/blob/rustdoc-jump-to-definition/text/000-rustdoc-jump-to-definition.md)).

r? ````@notriddle````
2023-07-13 22:33:24 +02:00
Mark Rousskov
cc907f80b9 Re-format let-else per rustfmt update 2023-07-12 21:49:27 -04:00
Guillaume Gomez
3fd36bc083 Add jump to doc 2023-07-12 16:45:36 +02:00
Guillaume Gomez
db95734b9d Fix invalid creation of files in rustdoc 2023-06-20 18:09:50 +02:00
Vadim Petrochenkov
4082053b00 rustdoc: Cleanup doc string collapsing 2023-05-22 19:35:35 +03:00
Nicholas Nethercote
6b62f37402 Restrict From<S> for {D,Subd}iagnosticMessage.
Currently a `{D,Subd}iagnosticMessage` can be created from any type that
impls `Into<String>`. That includes `&str`, `String`, and `Cow<'static,
str>`, which are reasonable. It also includes `&String`, which is pretty
weird, and results in many places making unnecessary allocations for
patterns like this:
```
self.fatal(&format!(...))
```
This creates a string with `format!`, takes a reference, passes the
reference to `fatal`, which does an `into()`, which clones the
reference, doing a second allocation. Two allocations for a single
string, bleh.

This commit changes the `From` impls so that you can only create a
`{D,Subd}iagnosticMessage` from `&str`, `String`, or `Cow<'static,
str>`. This requires changing all the places that currently create one
from a `&String`. Most of these are of the `&format!(...)` form
described above; each one removes an unnecessary static `&`, plus an
allocation when executed. There are also a few places where the existing
use of `&String` was more reasonable; these now just use `clone()` at
the call site.

As well as making the code nicer and more efficient, this is a step
towards possibly using `Cow<'static, str>` in
`{D,Subd}iagnosticMessage::{Str,Eager}`. That would require changing
the `From<&'a str>` impls to `From<&'static str>`, which is doable, but
I'm not yet sure if it's worthwhile.
2023-05-03 08:44:39 +10:00
Josh Soref
bb2f23c34f Spelling librustdoc
* associated
* collected
* correspondence
* inlining
* into
* javascript
* multiline
* variadic

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
2023-04-16 21:44:12 -04:00
klensy
1f01433607 clean up few alloc 2023-03-16 20:38:33 +03:00
Matthias Krüger
25794194fa
Rollup merge of #108784 - clubby789:askama-sidebar, r=jsha,GuillaumeGomez
rustdoc: Migrate sidebar rendering to Askama

cc #108757

Renders the sidebar for documentation using an Askama template
2023-03-11 12:55:43 +01:00
clubby789
2f166d1a15 Render doc sidebar using Askama 2023-03-10 20:21:45 +00:00
Matthias Krüger
83791f9de7
Rollup merge of #106915 - notriddle:notriddle/load-only-one-theme, r=GuillaumeGomez,jsha
Only load one CSS theme by default

This is a tweaked version of #103971 that uses `document.write` to create the stylesheet link at startup, avoiding a FOUC during page navigation. It also rebases the PR, making it work with the new hashed filenames.

Fixes #82614

Preview: http://notriddle.com/notriddle-rustdoc-demos/load-only-one-theme-v2/std/index.html
2023-03-09 12:11:52 +01:00
Michael Howell
f916681d8d Only load one CSS theme by default
To avoid generating a FOUC at startup, this commit uses `document.write` to
load the stylesheet initially.

Co-Authored-By: Guillaume Gomez <guillaume1.gomez@gmail.com>
2023-03-08 12:49:34 -07:00
Michael Howell
af664be423 rustdoc: include link on all.html location header
This avoids a subtle layout shift when switching from the crate page
to all items.
2023-03-04 11:54:28 -07:00
Guillaume Gomez
86fd5a1b44 Use more let chain 2023-02-15 12:00:03 +01:00
Michael Howell
72b3f46b43 rustdoc: account for intra-doc links in <meta name="description"> 2023-02-11 16:10:28 -07:00
Michael Howell
3a20cbf9fc rustdoc: remove inconsistently-present sidebar tooltips
Discussed in
https://rust-lang.zulipchat.com/#narrow/stream/266220-rustdoc/topic/Inconsistent.20sidebar.20tooltips/near/323565625
2023-01-31 10:12:13 -07:00
Michael Howell
f5bac0c4c8 rustdoc: remove meta keywords from HTML
Discussed in
<https://rust-lang.zulipchat.com/#narrow/stream/266220-rustdoc/topic/.60.3Cmeta.20name.3D.22keywords.22.3E.60>
2023-01-30 12:20:06 -07:00
Vadim Petrochenkov
68803926e0 rustdoc: Use DefId(Map,Set) instead of FxHash(Map,Set)
Not all uses are converted, a few cases iterating through maps/sets and requiring nontrivial changes are kept.
2023-01-22 02:12:05 +04:00
Matthias Krüger
bc0c816410
Rollup merge of #106855 - klensy:rd-s, r=notriddle
rustdoc: few small cleanups
2023-01-14 18:45:28 +01:00
Michael Howell
39b90a5f6e rustdoc: remove unnecessary DOM class h1.fqn
It's misleading. The main heading sometimes isn't an fully qualified name at all.

It's also redundant. It's always a child of `div.main-heading`, so just use that.
2023-01-13 10:09:25 -07:00
klensy
ffb2e84319 Playground.crate_name String -> Symbol 2023-01-13 18:05:16 +03:00
clubby789
4a68f7ecae Correctly render sidebar for relative module paths 2023-01-06 16:48:13 +00:00
Michael Howell
46b4a3b831 rustdoc: remove `type="text/css" from stylesheet links
MDN directly recommends this in <https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link>,
since "CSS is the only stylesheet language used on the web."

Like 07a243b2a4, but a few places that were
missed the first time.
2022-12-12 15:17:49 -07:00
Michael Howell
303653ef65 rustdoc: use javascript to layout notable traits popups
Fixes #102576
2022-11-07 22:45:24 -07:00
Jacob Hoffman-Andrews
bf25334066 Make --static-root-path point to static.files 2022-10-29 12:47:51 -07:00
Jacob Hoffman-Andrews
f9e1f6ffdf rustdoc: add hash to filename of toolchain files
All static files used by rustdoc are now stored in static.files/ and
include a hash of their contents. They no longer include the contents of
the --resource-suffix flag. This clarifies caching semantics. Anything
in static.files can use Cache-Control: immutable because any updates
will show up as a new URL.

Invocation-specific files like crates-NN.js, search-index-NN.js,
and sidebar-items-NN.js still get the resource suffix.

The --disable-minification flag is removed because it would vary the
output of static files based on invocation flags. Instead, for
rustdoc development purposes it's preferable to symlink static files
to a non-minified copy for quick iteration.
2022-10-29 12:47:48 -07:00
Nicholas Nethercote
ca2561a07b Avoid cloning RenderOptions.
By moving `RenderOptions` out of `Option`, because the two structs' uses
are almost entirely separate.

The only complication is that `unstable_features` is needed in both
structs, but it's a tiny `Copy` type so its duplication seems fine.
2022-10-19 08:09:40 +11:00
Michael Howell
ae4ad9adb6 rustdoc: make the help button a link to a page
This allows you to open the help section in a new browser tab, which is a
pretty reasonable thing to want for a documentation page.
2022-10-15 11:38:42 -07:00
Michael Howell
3cb03cb342 rustdoc: remove unused CSS class in-band
Since a7c25b2957 removed `in-band` from code
headers, the only remaining uses of the `in-band` class are:

02cd79afb8/src/librustdoc/html/render/write_shared.rs (L520-L521)

02cd79afb8/src/librustdoc/html/templates/print_item.html (L2-L3)

02cd79afb8/src/librustdoc/html/render/context.rs (L637-L638)

02cd79afb8/src/librustdoc/html/render/mod.rs (L368-L369)

02cd79afb8/src/librustdoc/html/render/mod.rs (L401-L402)

02cd79afb8/src/librustdoc/html/static/js/main.js (L525)

Since all of these uses are nested below `h1.fqn`, we can get rid of it,
and the support code that was used for when `in-band` was part of item
rendering.
2022-10-05 16:56:07 -07:00
Guillaume Gomez
5343dc7c99 Generate sidebar elements for the "All items" page 2022-09-20 17:10:21 +02:00
Michael Howell
ef24747703 rustdoc: use more precise URLs for jump-to-definition links
As an example, this cuts down
<https://doc.rust-lang.org/nightly/nightly-rustc/src/rustc_middle/ty/mod.rs.html>
by about 11%.

    $ du -h new_mod.rs.html old_mod.rs.html
    296K	new_mod.rs.html
    332K	old_mod.rs.html
2022-09-15 13:03:04 -07:00
bors
25ea5a36c6 Auto merge of #96869 - sunfishcode:main, r=joshtriplett
Optimize `Wtf8Buf::into_string` for the case where it contains UTF-8.

Add a `is_known_utf8` flag to `Wtf8Buf`, which tracks whether the
string is known to contain UTF-8. This is efficiently computed in many
common situations, such as when a `Wtf8Buf` is constructed from a `String`
or `&str`, or with `Wtf8Buf::from_wide` which is already doing UTF-16
decoding and already checking for surrogates.

This makes `OsString::into_string` O(1) rather than O(N) on Windows in
common cases.

And, it eliminates the need to scan through the string for surrogates in
`Args::next` and `Vars::next`, because the strings are already being
translated with `Wtf8Buf::from_wide`.

Many things on Windows construct `OsString`s with `Wtf8Buf::from_wide`,
such as `DirEntry::file_name` and `fs::read_link`, so with this patch,
users of those functions can subsequently call `.into_string()` without
paying for an extra scan through the string for surrogates.

r? `@ghost`
2022-08-24 01:17:52 +00:00
Michael Goulet
752b0e0672 make clean::Item::span return option instead of dummy span 2022-08-13 22:03:47 +00:00
Noah Lev
be0b1121e9 Replace sort_modules_alphabetically boolean with enum
This fixes the long-standing FIXME there and makes the code easier to
understand. The reference to modules in both the old and new names seems
potentially wrong since I believe it applies to all items.
2022-06-29 13:04:43 -07:00
Dan Gohman
ddeb936c6d Don't test the rustdoc rendering context size on Windows.
This assert is just making sure the size of `Context` doens't grow
unexpectedly, and it's already not being checked on every platform.

`PathBuf` now has a different size on Windows, so adjust this to
avoid checking the size on Windows.
2022-06-23 13:11:24 -07:00
Jacob Hoffman-Andrews
27dcebeb3e Improve loading of crates.js and sidebar-items.js
Now that the "All Crates" dropdown is only rendered on the search results page,
there is no need to load crates.js on most pages. Load it only on crate pages.
Also, add the `defer` attribute so it does not block page rendering.

For sidebar-items.js, move the script tag to `<head>`. Since it already has the
defer attribute it won't block loading. The defer attribute does preserve
ordering between scripts, so instead of the callback on load, it can set a
global variable on load, which is slightly simpler. Also, since it is required
to finish rendering the page, beginning its load earlier is better.

Remove generation and handling of sidebar-vars. Everything there can be computed
with information available in JS via other means.

Remove the "other" wrapper in the sidebar. It was unnecessary.

Remove excess script fields
2022-06-20 11:12:55 -07:00
Guillaume Gomez
e297bbf4c7 Improve settings page display with disabled javascript 2022-05-28 17:54:47 +02:00
Guillaume Gomez
6ab8edb931 Pass Context as a &mut to allow to remove RefCell fields 2022-05-27 22:16:24 +02:00
klensy
678059f7d0 fix simple clippy lints 2022-05-24 12:24:41 -04:00