Commit Graph

21 Commits

Author SHA1 Message Date
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 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 9803651ee8 Update rustdoc-js* format 2023-06-09 17:00:47 +02:00
Yuki Okushi 30220be929
Rollup merge of #110780 - notriddle:notriddle/slice-index, r=GuillaumeGomez
rustdoc-search: add slices and arrays to index

This indexes them as primitives with generics, so `slice<u32>` is how you search for `[u32]`, and `array<u32>` for `[u32; 1]`. A future commit will desugar the square bracket syntax to search both arrays and slices at once.
2023-05-06 09:09:31 +09:00
Michael Howell c4e00f7bd5 rustdoc-search: add slices and arrays to index
This indexes them as primitives with generics, so `slice<u32>` is
how you search for `[u32]`, and `array<u32>` for `[u32; 1]`.
A future commit will desugar the square bracket syntax to search
both arrays and slices at once.
2023-04-24 12:14:35 -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 afee2411e3 rustdoc-search: add support for nested generics 2023-04-14 14:55:45 -07:00
Michael Howell e600c0ba0e rustdoc: add support for type filters in arguments and generics
This makes sense, since the search index has the information in it,
and it's more useful for function signature searches since a
function signature search's item type is, by definition, some type
of function (there's more than one, but not very many).
2023-03-20 22:41:57 -07:00
Michael Howell 5451fe7d7c rustdoc: implement bag semantics for function parameter search
This tweak to the function signature search engine makes things so that,
if a type is repeated in the search query, it'll only match if the
function actually includes it that many times.
2023-03-19 18:19:24 -07:00
Michael Howell 44813e038c rustdoc: fix type search when more than one `where` clause applies 2023-03-07 11:37:04 -07:00
Michael Howell a6446c53fe rustdoc: fix type search index for `fn<T>() -> &T where T: Trait` 2023-03-07 11:20:49 -07:00
Michael Howell 9d27028391 rustdoc: function signature search with traits in `where` clause 2023-03-04 09:05:57 -07:00
Michael Howell 4de9c6d491 rustdoc: search by macro when query ends with `!`
Related to #96399
2023-02-16 18:16:09 -07:00
Michael Howell 39fd4bb476 rustdoc: update test cases to match with stricter match criteria 2023-01-21 00:11:39 -07:00
Michael Howell e09e6df787 rustdoc: compute maximum Levenshtein distance based on the query
The heuristic is pretty close to the name resolver.

Fixes #103357
2023-01-21 00:11:39 -07:00
Michael Howell db558b4686 rustdoc: update search test cases 2023-01-14 12:04:12 -07:00
Albert Larsan cf2dff2b1e
Move /src/test to /tests 2023-01-11 09:32:08 +00:00