Commit graph

5510 commits

Author SHA1 Message Date
Guillaume Gomez
9202caaec5 Fix indentation for where clause in rustdoc pages 2023-06-22 17:38:19 +02:00
Guillaume Gomez
6f48526963 Fix union fields display 2023-06-21 17:25:19 +02:00
Matthias Krüger
63799ba549
Rollup merge of #112707 - GuillaumeGomez:back-in-history-fix, r=notriddle
[rustdoc] Fix invalid handling of "going back in history" when "go to only search result" setting is enabled

You can test the fix [here](https://rustdoc.crud.net/imperio/back-in-history-fix/lib2/index.html). Enable "Directly go to item in search if there is only one result", then search for `HasALongTraitWithParams` and finally go back to previous page. It should be back on the `index.html` page.

The reason for this bug is that the JS state is cached as is, so when we go back to the page, it resumes where it was left, somewhat (very weird), meaning the search is run again etc. The best way to handle this is to force the JS re-execution in this case so that it doesn't try to resume from where it left and then lead us back to the current page.

r? ``@notriddle``
2023-06-17 12:43:31 +02:00
Guillaume Gomez
f4316392a7 Fix invalid handling of "going back in history" when "Directly go to item in search if there is only one result" setting is set to true 2023-06-16 20:38:48 +02:00
bors
6a94e87a54 Auto merge of #110688 - GuillaumeGomez:result-search-type, r=notriddle,jsha
rustdoc: Add search result item types after their name

Here what it looks like:

![Screenshot from 2023-04-22 15-16-58](https://user-images.githubusercontent.com/3050060/233789566-b5f3f625-3b78-4c56-a7ee-0a4f2d62e667.png)

The idea is to improve accessibility by providing this information directly in the text and not only in the text color. Currently we already use it for doc aliases and for primitive types, so I extended it to all types.

r? `@notriddle`
2023-06-16 15:02:22 +00:00
Guillaume Gomez
9f509429cd Unify history interactions in search 2023-06-16 13:43:55 +02:00
bors
314c39d2ea Auto merge of #112233 - notriddle:notriddle/search-unify, r=GuillaumeGomez
rustdoc-search: clean up type unification and "unboxing"

This PR redesigns parameter matching, return matching, and generics matching to use a single function that compares two lists of types.

It also makes the algorithms more consistent, so the "unboxing" behavior where `Vec<i32>` is considered a match for `i32` works inside generics, and not just at the top level.
2023-06-15 03:04:46 +00:00
Matthias Krüger
623b1d4b62
Rollup merge of #112581 - TumoiYorozu:fix_url_encoding_of_percent_sign, r=notriddle
[rustdoc] Fix URL encoding of % sign

Fix #112580

The % is encoded as %%, but the correct encoding is %25.
2023-06-14 06:25:50 +02:00
TumoiYorozu
7b55f08516 Fix URL encoding of % sign in Rust Doc. 2023-06-13 20:14:50 +09:00
Michael Howell
db277f5284 rustdoc-search: search never type with !
This feature extends rustdoc to support the syntax that most users will
naturally attempt to use to search for diverging functions.
Part of #60485

It's already possible to do this search with `primitive:never`, but
that's not what the Rust language itself uses, so nobody will try it if
they aren't told or helped along.
2023-06-12 17:30:23 -07:00
Guillaume Gomez
810c5176ad Revert "List matching impls on type aliases"
This reverts commit 4b1d13d984.
2023-06-12 11:27:56 +02:00
Michael Howell
94badbe599 rustdoc-search: fix order-independence bug 2023-06-11 18:57:33 -07:00
Michael Howell
9946d67579 rustdoc-search: build args, return, and generics on one unifier
This enhances generics with the "unboxing" behavior where A<T>
matches T. It makes this unboxing transitive over generics.
2023-06-11 18:19:37 -07:00
Michael Howell
04f4493722 rustdoc-search: simplify JS in checkGenerics 2023-06-11 17:34:35 -07:00
bors
81c02da94e Auto merge of #111958 - notriddle:notriddle/type-search-slice-array, r=GuillaumeGomez
rustdoc: search for slices and arrays by type with `[]`

This feature extends rustdoc to support the syntax that most users will naturally attempt to use to search for slices and arrays. Part of #60485

Function signature searches already support arrays and slices. The explicit name `primitive:slice<u8>` and `primitive:array<u8>` can be used to match a slice or array of bytes, while square brackets `[u8]` will match either one. Empty square brackets, `[]`, will match any slice regardless of what it contains.

Preview:

* [`option -> []`](https://notriddle.com/rustdoc-demo-html-3/search-slice-array/std/index.html?search=option%20-%3E%20%5B%5D)
* [`[u8] -> str`](https://notriddle.com/rustdoc-demo-html-3/search-slice-array/std/index.html?search=%5Bu8%5D%20-%3E%20str)
* [`Box<[u8]> -> str`](https://notriddle.com/rustdoc-demo-html-3/search-slice-array/std/index.html?search=Box%3C%5Bu8%5D%3E%20-%3E%20str)

Motivation:

When type-based search was first landed, it was directly described as "incomplete". Here's [a comment] from the discussion thread:

[a comment]: https://github.com/rust-lang/rust/pull/23289#issuecomment-79437386

> This is looking really great, nice work! I can think of a number of cases that aren't quite covered by this, but I feel like this is a great improvement regardless and it can always be iterated on so I'm fine landing with a few known cases where it may not work :)

Filling out the missing functionality is going to mean adding support for more of Rust's [type expression] syntax, such as slices (in this PR), tuples, references, raw pointers, function pointers, and generics.

[type expression]: https://doc.rust-lang.org/reference/types.html#type-expressions

There does seem to be demand for this sort of thing, such as [this Discord message](https://discord.com/channels/442252698964721669/443150878111694848/1042145740065099796) expressing regret at rustdoc not supporting tuples in search queries.
2023-06-11 14:48:58 +00:00
Nicky Lim
e240dab0c8 Add item_template macro 2023-06-11 18:06:34 +08:00
Michael Howell
d3a4cd6813 rustdoc: add note about slice/array searches to help popup 2023-06-10 14:08:26 -07:00
Michael Howell
2e569274d3 rustdoc: search for slices and arrays by type with []
Part of #60485
2023-06-10 13:52:54 -07:00
Guillaume Gomez
4b1d13d984 List matching impls on type aliases 2023-06-09 10:36:21 +02:00
Guillaume Gomez
e7059f103b
Rollup merge of #112034 - sladyn98:migrate-opaque-ty, r=GuillaumeGomez
Migrate `item_opaque_ty` to Askama

This PR migrates `item_opaque_ty` to Askama

Refers: https://github.com/rust-lang/rust/issues/108868
2023-06-08 10:15:09 +02:00
sladynnunes
29a51e14d9 Migrate item_opaque_type to Askama
Migrate item_opaque_type to Askama

Fix wrap_item parameters

Fix to write
2023-06-08 00:09:15 -07:00
Guillaume Gomez
aabffef06d
Rollup merge of #112243 - GuillaumeGomez:rm-unneeded-buffer-creations, r=notriddle
Remove unneeded `Buffer` allocations when `&mut fmt::Write` can be used directly

With the recent changes, `wrap_item` can now directly take `&mut Write`, which makes some `Buffer` creations unneeded.

r? `@notriddle`
2023-06-05 17:02:50 +02:00
Guillaume Gomez
48c46f275b Move write! arguments directly into the string 2023-06-05 15:31:18 +02:00
bors
51f714c8c5 Auto merge of #110945 - wackbyte:doc-vis-on-inherent-assoc-types, r=jsha
rustdoc: render visibility on associated types

This should only affect inherent associated types (#8995).
2023-06-05 04:54:21 +00:00
Guillaume Gomez
5c77a0d7a7 Remove unneeded Buffer allocations when &mut fmt::Write can be used directly 2023-06-03 17:23:02 +02:00
Guillaume Gomez
de85f7ff36 Move type name directly into the same DOM element 2023-06-03 16:37:43 +02:00
bors
2f5e6bb817 Auto merge of #112032 - sladyn98:migrate-item-primitive, r=GuillaumeGomez
Migrate  `item_primitive` to Askama

This PR migrates `item_primitive` to Askama

Refers https://github.com/rust-lang/rust/issues/108868
2023-06-03 14:37:23 +00:00
Guillaume Gomez
f92cd67711 Improve new search result display on mobile 2023-06-02 23:56:10 +02:00
Guillaume Gomez
8a35cc3ddc Move item kind before the item name 2023-06-02 23:56:10 +02:00
Guillaume Gomez
741d210c44 Add search result item types after their name 2023-06-02 23:56:10 +02:00
Michael Goulet
8ceb283c92
Rollup merge of #112030 - sladyn98:item-trait-alias, r=GuillaumeGomez
Migrate `item_trait_alias` to Askama

This PR migrates `item_trait_alias` to Askama

Refers https://github.com/rust-lang/rust/issues/108868
2023-06-01 23:07:37 -07:00
sladynnunes
780719b2dc Migrate to Askama
Implemented wrap_item_write

Update wrap_item
2023-06-01 12:07:58 -07:00
Dylan DPC
453fc03597
Rollup merge of #111892 - notriddle:notriddle/timeout-tooltip, r=me,GuillaumeGomez,Manishearth
rustdoc: add interaction delays for tooltip popovers

Preview:

* [notable traits](http://notriddle.com/rustdoc-demo-html-3/delay-tooltip/testing/struct.Vec.html#method.iter)
* [panicking code block](http://notriddle.com/rustdoc-demo-html-3/delay-tooltip/testing/struct.Vec.html#indexing)

Designing a good hover microinteraction is a matter of guessing user intent from what are, literally, vague gestures. In this case, guessing if hovering in our out of the tooltip base is intentional or not.

To figure this out, a few different techniques are used:

* When the mouse pointer enters a tooltip anchor point, its hitbox is grown on the bottom, where the popover is/will appear. This was already there before this commit: search "hover tunnel" in rustdoc.css for the implementation.

* This commit adds a delay when the mouse pointer enters the base anchor, in case the mouse pointer was just passing through and the user didn't want to open it.

* This commit also adds a delay when the mouse pointer exits the tooltip's base anchor or its popover, before hiding it.

* A fade-out animation is layered onto the pointer exit delay to immediately inform the user that they successfully dismissed the popover, while still providing a way for them to cancel it if it was a mistake and they still wanted to interact with it.

* No animation is used for revealing it, because we don't want people to try to interact with an element while it's in the middle of fading in: either they're allowed to interact with it while it's fading in, meaning it can't serve as mistake- proofing for opening the popover, or they can't, but they might try and be frustrated.

See also:

* https://www.nngroup.com/articles/timing-exposing-content/
* https://www.nngroup.com/articles/tooltip-guidelines/
* https://bjk5.com/post/44698559168/breaking-down-amazons-mega-dropdown
2023-06-01 11:09:43 +05:30
Dylan DPC
0baa30129b
Rollup merge of #108459 - benediktwerner:rustdoc-fix-link-match, r=GuillaumeGomez
rustdoc: Fix LinkReplacer link matching

It currently just uses the first link with the same href which might not necessarily be the matching one.

This fixes replacements when there are several links to the same item but with different text (e.g. `[X] and [struct@X]`). It also fixes replacements in summaries since those use a links list with empty hrefs, so currently all links would always match the first link by href but then not match its text. This could also lead to a panic in the `original_lext[1..len() - 1]` part when the first link only has a single character, which is why the new code uses `.get(..)` instead.
2023-06-01 11:09:42 +05:30
Michael Howell
d7d497a3c1 rustdoc: add jsdoc comments for complex functions 2023-05-31 17:25:06 -07:00
Matthias Krüger
77bbfbcdec
Rollup merge of #112113 - notriddle:notriddle/rm-fnretty, r=GuillaumeGomez
rustdoc: simplify `clean` by removing `FnRetTy`

The default fn ret ty is always unit. Just use that.

Looking back at the time when `FnRetTy` (then called `FunctionRetTy`) was first added to rustdoc, it seems to originally be there because `-> !` was a special form: the never type didn't exist back then.

eb01b17b06 (diff-384affc1b4190940f114f3fcebbf969e7e18657a71ef9001da6b223a036687d9L921-L924)

`DefaultReturn` was later added to rustdoc to mirror a change in HIR, which added a variant for DefaultReturn because it makes `Span` management easier. This isn't needed in rustdoc, since it doesn't carry spans.

3f0cc8011a (diff-384affc1b4190940f114f3fcebbf969e7e18657a71ef9001da6b223a036687d9R1144)
2023-05-31 07:07:03 +02:00
Matthias Krüger
fdd62cfe7d
Rollup merge of #112031 - sladyn98:migrate-proc-macro, r=GuillaumeGomez
Migrate  `item_proc_macro` to Askama

This PR migrates `item_proc_macro` to Askama

Refers https://github.com/rust-lang/rust/issues/108868
2023-05-31 07:07:00 +02:00
benediktwerner
9968f3ce55
rustdoc: Fix LinkReplacer link matching 2023-05-30 21:22:30 +02:00
Michael Howell
1862fcb1df rustdoc: simplify clean by removing FnRetTy
The default fn ret ty is always unit. Just use that.

Looking back at the time when `FnRetTy` (then called
`FunctionRetTy`) was first added to rustdoc, it seems to originally
be there because `-> !` was a special form: the never type didn't
exist back then.

eb01b17b06 (diff-384affc1b4190940f114f3fcebbf969e7e18657a71ef9001da6b223a036687d9L921-L924)
2023-05-30 12:22:14 -07:00
Nicholas Nethercote
781111ef35 Use Cow in {D,Subd}iagnosticMessage.
Each of `{D,Subd}iagnosticMessage::{Str,Eager}` has a comment:
```
// FIXME(davidtwco): can a `Cow<'static, str>` be used here?
```
This commit answers that question in the affirmative. It's not the most
compelling change ever, but it might be worth merging.

This requires changing the `impl<'a> From<&'a str>` impls to `impl
From<&'static str>`, which involves a bunch of knock-on changes that
require/result in call sites being a little more precise about exactly
what kind of string they use to create errors, and not just `&str`. This
will result in fewer unnecessary allocations, though this will not have
any notable perf effects given that these are error paths.

Note that I was lazy within Clippy, using `to_string` in a few places to
preserve the existing string imprecision. I could have used `impl
Into<{D,Subd}iagnosticMessage>` in various places as is done in the
compiler, but that would have required changes to *many* call sites
(mostly changing `&format("...")` to `format!("...")`) which didn't seem
worthwhile.
2023-05-29 09:23:43 +10:00
sladynnunes
c5e5d6958c Migrate to Askama 2023-05-28 01:51:55 -07:00
sladynnunes
5c780d9926 Migrate to Askama 2023-05-28 01:37:25 -07:00
fee1-dead
5a191132bb
Rollup merge of #112005 - sladyn98:item-foreign-types, r=GuillaumeGomez
Migrate `item_foreign_type` to Askama

This PR continues the migration of `print_item.rs` functions to Askama. This piece of work migrates the function `item_foreign_type`

Refers https://github.com/rust-lang/rust/issues/108868
2023-05-28 06:29:36 +00:00
sladynnunes
a7329cd66b Migrate to Askama
Fix formatting

Fix CI
2023-05-27 12:19:48 -07:00
Matthias Krüger
9f5dce7d75
Rollup merge of #112018 - GuillaumeGomez:cleanup-tcx, r=notriddle
Clean up usage of `cx.tcx` when `tcx` is already set into a variable

I discovered a few cases where `cx.tcx` (and equivalents) was used whereas `tcx` was already stored into a variable. In those cases, better to just use `tcx` directly.

r? `@notriddle`
2023-05-27 20:40:29 +02:00
Matthias Krüger
9a4fce978d
Rollup merge of #111946 - nicklimmm:askama-item-template-trait, r=GuillaumeGomez
rustdoc: Add `ItemTemplate` trait and related functions to avoid repetitively wrapping existing functions

Context: https://github.com/rust-lang/rust/pull/111430#discussion_r1200672507

This trait will be used extensively in performing migrations to Askama templates (tracking issue: https://github.com/rust-lang/rust/issues/108868)
2023-05-27 20:40:29 +02:00
Guillaume Gomez
b7db3de8d5 Clean up usage of cx.tcx when tcx is already set into a variable 2023-05-27 14:46:54 +02:00
Guillaume Gomez
30896536f3
Rollup merge of #112014 - notriddle:notriddle/intra-doc-weird-syntax, r=GuillaumeGomez,fmease
rustdoc: get unnormalized link destination for suggestions

Fixes #110111

This bug, and the workaround in this PR, is closely linked to [raphlinus/pulldown-cmark#441], getting offsets of link components. In particular, pulldown-cmark doesn't provide the offsets of the contents of a link.

To work around this, rustdoc parser parts of a link definition itself.

[raphlinus/pulldown-cmark#441]: https://github.com/raphlinus/pulldown-cmark/issues/441
2023-05-27 13:38:33 +02:00
Michael Howell
1a77d9a54d rustdoc: get unnormalized link destination for suggestions
Fixes #110111

This bug, and the workaround in this commit, is closely linked to
[raphlinus/pulldown-cmark#441], getting offsets of link
components. In particular, pulldown-cmark doesn't provide the
offsets of the contents of a link.

To work around this, rustdoc parser parts of a link definition
itself.

[raphlinus/pulldown-cmark#441]: https://github.com/raphlinus/pulldown-cmark/issues/441
2023-05-26 18:38:46 -07:00
Matthias Krüger
1e766bfd2a
Rollup merge of #111927 - sladyn98:item-static, r=GuillaumeGomez
Migrate `item_static` to Askama

This pull request addresses the type signature of the item_static function in our codebase. Previously, this function accepted a mutable reference to a Buffer for writing output. The current changes modify this to instead accept a mutable reference to any type that implements the Write trait.

Referes https://github.com/rust-lang/rust/issues/108868
2023-05-27 00:23:58 +02:00