Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup of 6 pull requests #115960

Merged
merged 21 commits into from
Sep 19, 2023
Merged

Rollup of 6 pull requests #115960

merged 21 commits into from
Sep 19, 2023

Commits on Sep 3, 2023

  1. rustdoc-search: null, not -1, for missing id

    This allows us to use negative numbers for others purposes.
    notriddle committed Sep 3, 2023
    Configuration menu
    Copy the full SHA
    217fe24 View commit details
    Browse the repository at this point in the history
  2. rustdoc-search: add support for type parameters

    When writing a type-driven search query in rustdoc, specifically one
    with more than one query element, non-existent types become generic
    parameters instead of auto-correcting (which is currently only done
    for single-element queries) or giving no result. You can also force a
    generic type parameter by writing `generic:T` (and can force it to not
    use a generic type parameter with something like `struct:T` or whatever,
    though if this happens it means the thing you're looking for doesn't
    exist and will give you no results).
    
    There is no syntax provided for specifying type constraints
    for generic type parameters.
    
    When you have a generic type parameter in a search query, it will only
    match up with generic type parameters in the actual function, not
    concrete types that match, not concrete types that implement a trait.
    It also strictly matches based on when they're the same or different,
    so `option<T>, option<U> -> option<U>` matches `Option::and`, but not
    `Option::or`. Similarly, `option<T>, option<T> -> option<T>`` matches
    `Option::or`, but not `Option::and`.
    notriddle committed Sep 3, 2023
    Configuration menu
    Copy the full SHA
    0b3c617 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    b6bb06c View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    89a4c7f View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    6068850 View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    f42f357 View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    9ccb217 View commit details
    Browse the repository at this point in the history

Commits on Sep 9, 2023

  1. Configuration menu
    Copy the full SHA
    269cb57 View commit details
    Browse the repository at this point in the history

Commits on Sep 10, 2023

  1. rustdoc-doc: add next_chunk to list of vec::intoiter<T> -> [T]

    This didn't show up before, because of some unification bugs
    that were fixed in 269cb57
    notriddle committed Sep 10, 2023
    Configuration menu
    Copy the full SHA
    4cf06e8 View commit details
    Browse the repository at this point in the history

Commits on Sep 14, 2023

  1. Bump libc to 0.2.148

    Dirreke committed Sep 14, 2023
    Configuration menu
    Copy the full SHA
    b804477 View commit details
    Browse the repository at this point in the history

Commits on Sep 18, 2023

  1. Configuration menu
    Copy the full SHA
    a6d8724 View commit details
    Browse the repository at this point in the history

Commits on Sep 19, 2023

  1. Failing test

    compiler-errors committed Sep 19, 2023
    Configuration menu
    Copy the full SHA
    55ce976 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    976d377 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    a30ad3a View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    fd36553 View commit details
    Browse the repository at this point in the history
  5. Rollup merge of rust-lang#112725 - notriddle:notriddle/advanced-searc…

    …h, r=GuillaumeGomez
    
    rustdoc-search: add support for type parameters
    
    r? `@GuillaumeGomez`
    
    ## Preview
    
    * https://notriddle.com/rustdoc-html-demo-4/advanced-search/rustdoc/read-documentation/search.html
    * https://notriddle.com/rustdoc-html-demo-4/advanced-search/std/index.html?search=option%3Coption%3CT%3E%3E%20-%3E%20option%3CT%3E
    * https://notriddle.com/rustdoc-html-demo-4/advanced-search/std/index.html?search=option%3CT%3E,%20E%20-%3E%20result%3CT,%20E%3E
    * https://notriddle.com/rustdoc-html-demo-4/advanced-search/std/index.html?search=-%3E%20option%3CT%3E
    
    ## Description
    
    When writing a type-driven search query in rustdoc, specifically one with more than one query element, non-existent types become generic parameters instead of auto-correcting (which is currently only done for single-element queries) or giving no result. You can also force a generic type parameter by writing `generic:T` (and can force it to not use a generic type parameter with something like `struct:T` or whatever, though if this happens it means the thing you're looking for doesn't exist and will give you no results).
    
    There is no syntax provided for specifying type constraints for generic type parameters.
    
    When you have a generic type parameter in a search query, it will only match up with generic type parameters in the actual function, not concrete types that match, not concrete types that implement a trait. It also strictly matches based on when they're the same or different, so `option<T>, option<U> -> option<U>` matches `Option::and`, but not `Option::or`. Similarly, `option<T>, option<T> -> option<T>` matches `Option::or`, but not `Option::and`.
    
    ## Motivation
    
    This feature is motivated by the many "combinitor"-type functions found in generic libraries, such as Option, Future, Iterator, and Entry. These highly-generic functions have names that are almost completely arbitrary, and a type signature that tells you what it actually does.
    
    This PR is a major step towards[^closure] being able to easily search for generic functions by their type signature instead of by name. Some examples of combinators that can be found using this PR (try them out in the preview):
    
    * `option<option<T>> -> option<T>` returns Option::flatten
    * `option<T> -> result<T>` returns Option::ok_or
    * `option<result<T>> -> result<option<T>>` returns Option::transpose
    * `entry<K, V>, FnOnce -> V` returns `Entry::or_insert_with` (and `or_insert_with_key`, since there's no way to specify the generics on FnOnce)
    
    [^closure]:
    
        For this feature to be as useful as it ought to be, you should be able to search for *trait-associated types* and *closures*. This PR does not implement either of these: they are **Future possibilities**.
    
        Trait-associated types would allow queries like `option<T> -> iterator<item=T>` to return `Option::iter`. We should also allow `option<T> -> iterator<T>` to match the associated type version.
    
        Closures would make a good way to query for things like `Option::map`. Closure support needs associated types to be represented in the search index, since `FnOnce() -> i32` desugars to `FnOnce<Output=i32, ()>`, so associated trait types should be implemented first. Also, we'd want to expose an easy way to query closures without specifying which of the three traits you want.
    GuillaumeGomez committed Sep 19, 2023
    Configuration menu
    Copy the full SHA
    3f68468 View commit details
    Browse the repository at this point in the history
  6. Rollup merge of rust-lang#114941 - compiler-errors:inline-shadowed-by…

    …-dyn, r=lcnr
    
    Don't resolve generic impls that may be shadowed by dyn built-in impls
    
    **NOTE:** This is a hack. This is not trying to be a general fix for the issue that we've allowed overlapping built-in trait object impls and user-written impls for quite a long time, and traits like `Any` rely on this (rust-lang#57893) -- this PR specifically aims to mitigate a new unsoundness that is uncovered by the MIR inliner (rust-lang#114928) that interacts with this pre-existing issue.
    
    Builtin `dyn Trait` impls may overlap with user-provided blanket impls (`impl<T: ?Sized> Trait for T`) in generic contexts. This leads to bugs when instances are resolved in polymorphic contexts, since we typically prefer object candidates over impl candidates.
    
    This PR implements a (hacky) heuristic to `resolve_associated_item` to account for that unfortunate hole in the type system -- we now bail with ambiguity if we try to resolve a non-rigid instance whose self type is not known to be sized. This makes sure we can still inline instances like `impl<T: Sized> Trait for T`, which can never overlap with `dyn Trait`'s built-in impl, but we avoid inlining an impl that may be shadowed by a `dyn Trait`.
    
    Fixes rust-lang#114928
    GuillaumeGomez committed Sep 19, 2023
    Configuration menu
    Copy the full SHA
    66b7bdf View commit details
    Browse the repository at this point in the history
  7. Rollup merge of rust-lang#115625 - compiler-errors:hrtb-infer-err, r=…

    …b-naber
    
    Explain HRTB + infer limitations of old solver
    
    Add a helpful message when we hit the limitation of the old trait solver where we don't properly normalize GATs with infer vars + bound vars, leading to too-eagerly reporting trait errors that would be later satisfied due to inference.
    GuillaumeGomez committed Sep 19, 2023
    Configuration menu
    Copy the full SHA
    c452090 View commit details
    Browse the repository at this point in the history
  8. Rollup merge of rust-lang#115839 - Dirreke:bump-libc, r=dtolnay

    Bump libc to 0.2.148
    GuillaumeGomez committed Sep 19, 2023
    Configuration menu
    Copy the full SHA
    6cfc6a8 View commit details
    Browse the repository at this point in the history
  9. Rollup merge of rust-lang#115924 - compiler-errors:non-exhaustive-1-z…

    …st, r=RalfJung
    
    Don't complain on a single non-exhaustive 1-ZST
    
    r? RalfJung, though you mentioned being busy, so feel free to reassign.
    
    This doesn't actually attempt to make the diagnostic better, so when we have two non-exhaustive 1-ZSTs in a struct, we still just point to one. 🤷
    
    Fixes rust-lang#115922
    GuillaumeGomez committed Sep 19, 2023
    Configuration menu
    Copy the full SHA
    f1edecf View commit details
    Browse the repository at this point in the history
  10. Rollup merge of rust-lang#115946 - the8472:panic-on-sched_getaffinity…

    …-bug, r=Mark-Simulacrum
    
    panic when encountering an illegal cpumask in thread::available_parallelism
    
    Fixes rust-lang#115868 by panicking instead of returning an invalid `NonZeroUsize`
    GuillaumeGomez committed Sep 19, 2023
    Configuration menu
    Copy the full SHA
    57f1f91 View commit details
    Browse the repository at this point in the history