Commit graph

2343 commits

Author SHA1 Message Date
Takayuki Maeda
5871bc8486
Rollup merge of #113100 - GuillaumeGomez:search-result-long-name, r=notriddle
Fix display of long items in search results

Fixes https://github.com/rust-lang/rust/issues/113060.

You can test the result [here](https://rustdoc.crud.net/imperio/search-result-long-name/lib2/index.html).

To make it a bit better, I also reduced a bit the size of the short documentation from half to 2 fifth of the width.

r? `@notriddle`
2023-06-29 03:29:33 +09:00
Guillaume Gomez
0c10eb0b6a Fix display of long items in search results 2023-06-28 11:14:02 +02:00
Guillaume Gomez
acbfb8c3bd Replace id attribute with name for <meta> tag 2023-06-27 23:22:44 +02:00
Matthias Krüger
8816f9ee1e
Rollup merge of #112937 - camelid:align-typenames, r=notriddle,GuillaumeGomez
rustdoc: Align search results horizontally for easy scanning

The recent PR #110688 added info about an item's kind before its name in
search results. However, because the kind and name are inline with no
alignment, it's now hard to visually scan downward through the search
results, looking at item names. This PR fixes that by horizontally
aligning search results such that there are now two columns of
information.

r? `@GuillaumeGomez`
2023-06-25 02:04:20 +02:00
Noah Lev
5f433f33ed Reduce typename width to 6.25rem
This makes "existential type" look slightly cramped (though still
readable), but it makes all other typenames look better. Existential
types are currently very rare, and we can always tweak this later if
necessary.
2023-06-23 12:02:55 -07:00
Noah Lev
12de5b7ff3 Make typenames a bit wider to support "existential type" 2023-06-23 10:12:27 -07:00
Noah Lev
c4fca7202b Abbreviate long typenames so they don't get wrapped in results 2023-06-23 09:51:53 -07:00
Guillaume Gomez
2f1939ab8b Link to the corresponding channel in the help popover 2023-06-23 16:32:55 +02:00
Guillaume Gomez
2f3bed0c4c Add link to rustdoc book search chapter in help popover 2023-06-23 15:58:10 +02:00
Noah Lev
a8fa961696 Align search results horizontally for easy scanning
The recent PR #110688 added info about an item's kind before its name in
search results. However, because the kind and name are inline with no
alignment, it's now hard to visually scan downward through the search
results, looking at item names. This PR fixes that by horizontally
aligning search results such that there are now two columns of
information.
2023-06-22 12:16:48 -07:00
Alexis (Poliorcetics) Bourget
1a94b06089 rustdoc: js: change color and reduce size of typename in search result 2023-06-19 21:47:23 +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
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
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
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
de85f7ff36 Move type name directly into the same DOM element 2023-06-03 16:37:43 +02: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 Howell
d7d497a3c1 rustdoc: add jsdoc comments for complex functions 2023-05-31 17:25:06 -07:00
Michael Howell
b9302d7234 rustdoc: add hover indicator for notable trait tooltip 2023-05-23 17:19:35 -07:00
Michael Howell
c1d72de030 rustdoc: add interaction delays for tooltip popovers
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-05-23 15:56:40 -07:00
Michael Howell
24913bd768 rustdoc: remove unneeded position: relative setting CSS
This was added to control percentage sizes, in
79956b96e8

Now, the only percentage size is [`border-radius`], which is
based on the size of the box itself, not its containing block.
This leaves the property unused.

[`border-radius`]: https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius
2023-05-22 16:46:29 -07:00
Michael Howell
5570fdae88 rustdoc: merge identical CSS rules 2023-05-22 16:40:01 -07:00
Manish Goregaokar
ceef7e5ced
Rollup merge of #110371 - notriddle:notriddle/search-corrections, r=GuillaumeGomez
rustdoc: restructure type search engine to pick-and-use IDs

Fixes #110029

Preview: https://notriddle.com/rustdoc-demo-html-3/search-corrections/std/index.html?search=-%3E%20streaming

![image](https://user-images.githubusercontent.com/1593513/233494900-ae77d5b4-e395-41f8-bbac-53ee55bb4a76.png)

This change makes it so, instead of mixing string distance with type unification, function signature search works by mapping names to IDs at the start, reporting to the user any cases where it had to make corrections, and then matches with IDs when going through the items.

This only changes function searches. Name searches are left alone, and corrections are only done when there's a single item in the search query.
2023-05-03 16:42:49 -07:00
Matthias Krüger
4064bdd914
Rollup merge of #110661 - notriddle:notriddle/settings-js-handlekey, r=GuillaumeGomez
rustdoc: clean up settings.css and settings.js

`handleKey` was added in 9dc5dfb975 and 704050da23 because the browser-native checkbox was `display: none`, breaking native keyboard accessibility.

The native checkbox is now merely `appearance: none`, which does not turn off [behavior semantics], so JavaScript to reimplement it isn't needed any more.

[behavior semantics]: https://w3c.github.io/csswg-drafts/css-ui/#appearance-semantics

The other, one line change to settings.css is follow-up to #110205
2023-04-23 20:06:30 +02:00
Michael Howell
1d0f34fd77 rustdoc: remove unused CSS color: inherit
This code was added back when `border-color: currentColor` was used.
Since it was changed in ad9a89eef2, the
current color is not used any more.
2023-04-21 17:07:42 -07:00
Michael Howell
5cefe75436 rustdoc: remove unneeded handleKey from settings.js
This code was added in 9dc5dfb975
and 704050da23 because the browser-
native checkbox was `display: none`, breaking native keyboard
accessibility.

The native checkbox is now merely `appearance: none`, which does
not turn off [behavior semantics], so JavaScript to
reimplement it isn't needed any more.

[behavior semantics]: https://w3c.github.io/csswg-drafts/css-ui/#appearance-semantics
2023-04-21 16:42:23 -07:00
Michael Howell
0cd3874155 rustdoc: clean up redundant search hiding results code
* There's no need to call `history.replaceState` right before
    calling `searchState.hideResults`, which already does it.
  * There's no need to implement hiding search results when that
    is already implemented.
2023-04-21 15:09:09 -07:00
Michael Howell
9d69ee0574 rustdoc: lift constant string manipulation out of loop 2023-04-21 15:09:09 -07:00
Michael Howell
994dd696cb rustdoc: use Set for ignored crates, instead of string matching 2023-04-21 15:09:09 -07:00
Michael Howell
395840cd5e rustdoc-search: use more descriptive "x not found; y instead" message 2023-04-20 14:32:02 -07:00
Michael Howell
7529d87407 rustdoc-search: make type name correction choice deterministic 2023-04-20 12:34:17 -07:00
Michael Howell
e0a7462d2f rustdoc-search: clean up checkIfInGenerics call at end of checkType 2023-04-20 12:17:43 -07:00
Michael Howell
b6f81e0434 rustdoc-search: give longer notification for type corrections 2023-04-19 12:56:52 -07:00
Michael Howell
4c11822aeb rustdoc: restructure type search engine to pick-and-use IDs
This change makes it so, instead of mixing string distance with
type unification, function signature search works by
mapping names to IDs at the start, reporting to the user any
cases where it had to make corrections, and then matches with
IDs when going through the items.

This only changes function searches. Name searches are left alone,
and corrections are only done when there's a single item in the
search query.
2023-04-17 12:16:54 -07:00
Michael Howell
1a7132d4f8 rustdoc-search: fix incorrect doc comment 2023-04-17 10:28:28 -07:00
Matthias Krüger
ee9b804826
Rollup merge of #110341 - notriddle:notriddle/main-js-replacestate, r=GuillaumeGomez
rustdoc: stop passing a title to `replaceState` second argument

As described on [MDN's replaceState page], this parameter is not currently used, and the empty string is "safe against future changes to the method."

[MDN's replaceState page]: https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState
2023-04-17 08:09:39 +02:00
Michael Howell
0c61f58c11 rustdoc: stop passing a title to replaceState second argument
As described on [MDN's replaceState page], this parameter is not
currently used, and the empty string is "safe against future
changes to the method."

[MDN's replaceState page]: https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState
2023-04-15 13:15:48 -07:00
Michael Howell
afee2411e3 rustdoc-search: add support for nested generics 2023-04-14 14:55:45 -07:00
Michael Howell
53f499d475 rustdoc-search: use ES6 Map for Result instead of Object 2023-04-13 17:40:06 -07:00
Michael Howell
8642c96a33 rustdoc-search: use ES6 Set for deduplication instead of Object 2023-04-13 17:07:10 -07:00
Michael Howell
e34dc7f437 rustdoc-search: use ES6 Map for generic matching instead of Object 2023-04-13 17:06:50 -07:00