binarycat
dca86a9521
rustdoc: sort stable items first
2026-02-13 14:44:41 -06:00
bors
7b9905edb4
Auto merge of #149370 - Zalathar:rollup-6fkk5x4, r=Zalathar
...
Rollup of 8 pull requests
Successful merges:
- rust-lang/rust#149238 (float:🗜️ make treatment of signed zeros unspecified)
- rust-lang/rust#149270 (implement `Iterator::{exactly_one, collect_array}`)
- rust-lang/rust#149295 (Suggest _bytes versions of endian-converting methods)
- rust-lang/rust#149332 (fix rustdoc search says “Consider searching for "null" instead.” rust-lang/rust#149324 )
- rust-lang/rust#149349 (Fix typo in comment.)
- rust-lang/rust#149353 (Tidying up UI tests [3/N])
- rust-lang/rust#149355 (Document that `build.description` affects symbol mangling and crate IDs)
- rust-lang/rust#149360 (Enable CI download for windows-gnullvm)
r? `@ghost`
`@rustbot` modify labels: rollup
2025-11-27 07:30:25 +00:00
Asuka Minato
48bd321a71
fix
2025-11-26 07:09:42 +09:00
binarycat
93526103ea
rustdoc: add regression test for #140968
2025-11-25 12:38:36 -06:00
Stuart Cook
c3171d19d5
Rollup merge of #147701 - lolbinarycat:rustdoc-search-alias-fix, r=GuillaumeGomez
...
rustdoc: don't ignore path distance for doc aliases
Ran into a bit of an issue due to the overloading of space (it needs to be a metachar for most searches, but not for doc aliases that have space in them). Not sure if I need to also need to account for other whitespace chars.
<img width="1778" height="494" alt="screenshot" src="https://github.com/user-attachments/assets/041e76f1-3b29-4de5-a72b-1431021fb676 " />
fixes https://github.com/rust-lang/rust/issues/146214
r? `@GuillaumeGomez`
2025-11-13 11:57:07 +11:00
binarycat
3ba87c4b33
rustdoc: expand regression test for #146214
2025-11-11 11:53:46 -06:00
Michael Howell
c8b2a9af2b
rustdoc-search: remove broken index special case
2025-11-05 23:41:43 -07:00
Guillaume Gomez
2a1595e2fe
Add regression test for including extern crates in import filtering
2025-11-01 00:13:19 +01:00
Michael Howell
978fd435ae
rustdoc-search: add an integration test for CCI
...
Part of https://github.com/rust-lang/rust/issues/130676
2025-10-27 11:57:32 -07:00
binarycat
07072812ca
rustdoc: account for path distance in doc aliases
2025-10-15 18:57:49 -05:00
binarycat
7a6274373c
rustdoc: add regression test for #140968
2025-10-14 14:38:07 -05:00
binarycat
28724dc541
rustdoc: add regression test for #146216
2025-10-14 14:36:01 -05:00
binarycat
d0dc603c39
rustdoc: add testcase for traitParent deduplication
2025-10-02 15:29:22 -05:00
Guillaume Gomez
04a1dd1c17
Add regression test for literal search on paths
2025-09-11 18:05:21 +02:00
binarycat
3501e4f3f2
rustdoc: add tests for raw pointers in type-based search
2025-08-21 17:50:12 -05:00
Michael Howell
8511e40e72
rustdoc-search: search backend with partitioned suffix tree
2025-08-15 10:26:03 -07:00
Guillaume Gomez
a195cf63b8
Revert "rustdoc search: prefer stable items in search results"
...
This reverts commit 1140e90074 .
2025-08-14 13:06:05 +02:00
Stuart Cook
cd1e82ac72
Rollup merge of #145100 - GuillaumeGomez:rank-doc-alias-lower, r=lolbinarycat
...
Rank doc aliases lower than equivalently matched items
Follow-up of https://github.com/rust-lang/rust/pull/143988 .
cc `@lolbinarycat`
2025-08-09 13:58:52 +10:00
Stuart Cook
48f5929604
Rollup merge of #141658 - lolbinarycat:rustdoc-search-stability-rank-138067, r=GuillaumeGomez
...
rustdoc search: prefer stable items in search results
fixes https://github.com/rust-lang/rust/issues/138067
this does add a new field to the search index, but since we're only listing unstable items instead of adding a boolean flag to every item, it should only increase the search index size of sysroot crates, since those are the only ones using the `staged_api` feature, at least as far as the rust project is concerned.
2025-08-09 13:58:42 +10:00
Guillaume Gomez
a34bd2baf5
Add regression test for doc alias matching vs equivalently matched items
2025-08-09 01:23:10 +02:00
Guillaume Gomez
c079c96877
Add test for aliases partial match
2025-07-16 14:27:22 +02:00
Trevor Gross
f8ab9343b8
Migrate some tests away from concat-idents
...
`concat_idents!` is in the process of being removed, but a few things it
is used to test will still be relevant. Migrate these tests to something
other than `concat_idents`.
2025-06-24 10:54:54 +00:00
binarycat
1140e90074
rustdoc search: prefer stable items in search results
...
fixes https://github.com/rust-lang/rust/issues/138067
2025-06-10 12:56:58 -05:00
lcnr
326b7e9a6b
yeet CanonicalVarInfo
2025-05-23 12:10:53 +00:00
Michael Howell
e013cf8afc
rustdoc-search: add unbox flag to Result aliases
...
Fixes #139665
2025-04-11 11:36:40 -07:00
Matthias Krüger
d9ba4bf6fe
Rollup merge of #134277 - notriddle:notriddle/inline-into, r=GuillaumeGomez
...
rustdoc-search: handle `impl Into<X>` better
This PR fixes two bugs I ran into while searching the compiler docs:
- It omitted an `impl Trait` entry in the type signature field, producing `TyCtxt, , Symbol -> bool`
- It didn't let me search for `TyCtxt, DefId, Symbol -> bool` even though that's a perfectly good description of the function I was looking for (the function actually used `impl Into<DefId>`
r? ``@GuillaumeGomez`` cc ``@lolbinarycat``
2024-12-16 20:00:20 +01:00
Michael Howell
246835eda4
rustdoc-search: let From and Into be unboxed
2024-12-13 11:05:30 -07:00
Michael Howell
f068d8b809
rustdoc-search: show impl Trait inline when unhighlighted
...
While normal generics can be skipped in this case, no-names need
something to show here.
Before: `TyCtxt, , Symbol -> bool`
After: `TyCtxt, Into<DefId>, Symbol -> bool`
2024-12-13 10:47:20 -07:00
Michael Howell
8200c1e52e
rustdoc-search: fix mismatched path when parent re-exported twice
2024-12-12 13:29:18 -07:00
Michael Howell
fa2e214a43
rustdoc-search: add standalone trailing :: test
...
Follow up for #132569
2024-11-17 08:07:16 -07:00
bors
e84902d35a
Auto merge of #133047 - matthiaskrgr:rollup-9se1vth, r=matthiaskrgr
...
Rollup of 4 pull requests
Successful merges:
- #128197 (Skip locking span interner for some syntax context checks)
- #133040 ([rustdoc] Fix handling of footnote reference in footnote definition)
- #133043 (rustdoc-search: case-sensitive only when capitals are used)
- #133046 (Clippy subtree update)
r? `@ghost`
`@rustbot` modify labels: rollup
2024-11-14 21:09:28 +00:00
Michael Howell
32500aa8e0
rustdoc-search: case-sensitive only when capitals are used
...
This is the "smartcase" behavior, described by vim and dtolnay.
2024-11-14 11:10:14 -07:00
Michael Howell
86da4be47f
rustdoc: use a trie for name-based search
...
Preview and profiler results
----------------------------
Here's some quick profiling in Firefox done on the rust compiler docs:
- Before: https://share.firefox.dev/3UPm3M8
- After: https://share.firefox.dev/40LXvYb
Here's the results for the node.js profiler:
- https://notriddle.com/rustdoc-html-demo-15/trie-perf/index.html
Here's a copy that you can use to try it out. Compare it with [the nightly].
Try typing `typecheckercontext` one character at a time, slowly.
- https://notriddle.com/rustdoc-html-demo-15/compiler-doc-trie/index.html
[the nightly]: https://doc.rust-lang.org/nightly/nightly-rustc/
The fuzzy match algo is based on [Fast String Correction with
Levenshtein-Automata] and the corresponding implementation code in [moman]
and [Lucene]; the bit-packing representation comes from Lucene, but the
actual matcher is more based on `fsc.py`. As suggested in the paper, a
trie is used to represent the FSA dictionary.
The same trie is used for prefix matching. Substring matching is done with a
side table of three-character[^1] windows that point into the trie.
[Fast String Correction with Levenshtein-Automata]: https://github.com/tpn/pdfs/blob/master/Fast%20String%20Correction%20with%20Levenshtein-Automata%20(2002)%20(10.1.1.16.652).pdf
[Lucene]: https://fossies.org/linux/lucene/lucene/core/src/java/org/apache/lucene/util/automaton/Lev1TParametricDescription.java
[moman]: https://gitlab.com/notriddle/moman-rustdoc
User-visible changes
--------------------
I don't expect anybody to notice anything, but it does cause two changes:
- Substring matches, in the middle of a name, only apply if there's three
or more characters in the search query.
- Levenshtein distance limit now maxes out at two. In the old version,
the limit was w/3, so you could get looser matches for queries with
9 or more characters[^1] in them.
[^1]: technically utf-16 code units
2024-11-13 12:04:46 -07:00
Michael Howell
9900ea48b5
Adjust ranking so that duplicates count against rank
2024-10-31 13:12:14 -07:00
Michael Howell
12dc24f460
rustdoc-search: simplify rules for generics and type params
...
This commit is a response to feedback on the displayed type
signatures results, by making generics act stricter.
Generics are tightened by making order significant. This means
`Vec<Allocator>` now matches only with a true vector of allocators,
instead of matching the second type param. It also makes unboxing
within generics stricter, so `Result<A, B>` only matches if `B`
is in the error type and `A` is in the success type. The top level
of the function search is unaffected.
Find the discussion on:
* <https://rust-lang.zulipchat.com/#narrow/stream/393423-t-rustdoc.2Fmeetings/topic/meeting.202024-07-08/near/449965149 >
* <https://github.com/rust-lang/rust/pull/124544#issuecomment-2204272265 >
* <https://rust-lang.zulipchat.com/#narrow/channel/266220-t-rustdoc/topic/deciding.20on.20semantics.20of.20generics.20in.20rustdoc.20search/near/476841363 >
2024-10-30 12:27:48 -07:00
Michael Howell
20a4b4fea1
rustdoc-search: show types signatures in results
2024-10-30 10:35:39 -07:00
Michael Howell
5c7e7dfe10
rustdoc-search: pass original names through AST
2024-10-30 10:35:38 -07:00
binarycat
09773b4f24
allow type-based search on foreign functions
...
fixes https://github.com/rust-lang/rust/issues/131804
2024-10-25 12:19:04 -05:00
Michael Howell
3699e939e8
rustdoc-search: allow trailing Foo -> arg search
2024-09-05 17:58:05 -07:00
Noah Lev
dac7f20e13
Add test for Self not being a generic in search index
2024-08-04 12:49:28 -07:00
Michael Howell
8865b8c639
rustdoc-search: use lowercase, non-normalized name for type search
...
The type name ID map has underscores in its names, so the query
element should have them, too.
2024-06-09 11:56:52 -07:00
Sunshine
ceaa42b817
Update tests
2024-06-07 11:55:52 +08:00
Sunshine
f9f51839e5
Tidying
2024-06-07 06:09:30 +08:00
Sunshine
dd5103bb68
Add test for PR #126057
2024-06-07 05:49:46 +08:00
Nicholas Nethercote
c6fb703c05
rustfmt tests/rustdoc-js/.
2024-06-04 14:15:06 +10:00
Michael Howell
3c4e180e68
rustdoc-search: add parser for & syntax
2024-04-19 14:31:21 -07:00
Michael Howell
8b47f67817
rustdoc-search: add index of borrow references
2024-04-19 14:31:21 -07:00
Michael Howell
f36c5af359
rustdoc-search: single result for items with multiple paths
...
This change uses the same "exact" paths as trait implementors
and type alias inlining to track items with multiple
reachable paths. This way, if you search for `vec`, you get
only the `std` exports of it, and not the one from `alloc`.
It still includes all the items in the search index so that
you can search for them by all available paths. For example,
try `core::option` and `std::option`, and notice that the
results page doesn't show duplicates, but still shows all
the items in their respective crates.
2024-04-08 17:07:14 -07:00
Matthias Krüger
a95e2f999a
Rollup merge of #122247 - notriddle:notriddle/search-unbox-limit, r=GuillaumeGomez
...
rustdoc-search: depth limit `T<U>` -> `U` unboxing
Profiler output:
https://notriddle.com/rustdoc-html-demo-9/search-unbox-limit/ (the only significant change is that one of the `rust` tests went from 378416ms to 16ms).
This is a performance enhancement aimed at a problem I found while using type-driven search on the Rust compiler. It is caused by [`Interner`], a trait with 41 associated types, many of which recurse back to `Self` again.
This caused search.js to struggle. It eventually terminates, after about 10 minutes of turning my PC into a space header, but it's doing `41!` unifications and that's too slow.
[`Interner`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/trait.Interner.html
2024-03-14 15:44:32 +01:00
Michael Howell
7b926555b7
rustdoc-search: add search query syntax Fn(T) -> U
...
This is implemented, in addition to the ML-style one,
because Rust does it. If we don't, we'll never hear the end of it.
This commit also refactors some duplicate parts of the parser
into a dedicated function.
2024-03-11 22:27:22 -07:00