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

rustdoc-search: simplify rules for generics and type params #127589

Merged
merged 7 commits into from
Nov 11, 2024

Conversation

notriddle
Copy link
Contributor

@notriddle notriddle commented Jul 10, 2024

Heads up!: This PR is a follow-up that depends on #124544. It adds 12dc24f, a change to the filtering behavior, and 9900ea4, a minor ranking tweak.

Part of rust-lang/rust-project-goals#112

This PR overturns #109802

Preview

image

Description

This commit is a response to feedback on the displayed type signatures results, by making generics act stricter.

  • Order within generics is 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.
  • Generics are only "unboxed" if a type is explicitly opted into it. References and tuples are hardcoded to allow unboxing, and Box, Rc, Arc, Option, Result, and Future are opted in with an unstable attribute. Search result unboxing is the process that allows you to search for i32 -> str and get back a function with the type signature &Future<i32> -> Box<str>.
  • Instead of ranking by set overlap, it ranks by the number of items in the type signature. This makes it easier to find single type signatures like transmute.

Find the discussion on

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. labels Jul 10, 2024
@rustbot
Copy link
Collaborator

rustbot commented Jul 10, 2024

Some changes occurred in HTML/CSS/JS.

cc @GuillaumeGomez, @jsha

Some changes occurred in GUI tests.

cc @GuillaumeGomez

@rust-log-analyzer

This comment has been minimized.

@bors
Copy link
Contributor

bors commented Jul 27, 2024

☔ The latest upstream changes (presumably #128253) made this pull request unmergeable. Please resolve the merge conflicts.

@camelid
Copy link
Member

camelid commented Jul 31, 2024

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.

Excellent, this is great—thanks! Although do you mind clarifying what you mean by "The top level of the function search is unaffected"? Could you give an example?

Type params are loosened by allowing a single function type param to match multiple query params. In other words, the relationship is loosened to N:1 instead of the older 1:1 rule. This change also allows a type param to be unboxed in one spot and matched in another.

Hmm, this seems like the opposite of what we discussed in the meeting. The goal is to have a 1:1 matching, not N:1, so (using your example) Box<[A]> -> Vec<B> would return nothing because the query asks for something more powerful (transforming any A into a potentially different B). However, Box<[A]> -> Vec<A> would work because the function it describes does not transform the inner element. Functions like transmute would be the only ones matched by a query like A -> B. This is what @fmease described in his Zulip post that you linked to:

I would've expected Box<[T]> -> Vec (etc.) to return no results at all because there is no such signature. Only Box<[T]> → Vec would match.

The older rule seems to be N:1 too based on checking the nightly std docs, so I'm not sure what change this PR makes. Please correct me if I misunderstood.

One more thing: What does it mean for a generic parameter to be "unboxed" as compared to being "matched"?

@notriddle
Copy link
Contributor Author

notriddle commented Jul 31, 2024

Excellent, this is great—thanks! Although do you mind clarifying what you mean by "The top level of the function search is unaffected"? Could you give an example?

The actual function parameters can be given in any order. vec<t>, usize -> t gives you remove, swap_remove, split_off, and drain. usize, vec<t> -> t gives the exact same set of results.

The stuff within the <> is required to be in a the same order, but the function parameters themselves are order-agnostic.

Hmm, this seems like the opposite of what we discussed in the meeting. The goal is to have a 1:1 matching, not N:1, so (using your example) Box<[A]> -> Vec<B> would return nothing because the query asks for something more powerful (transforming any A into a potentially different B).

That's how it currently works in the master branch, but #124544 (comment) by @jsha asked for this change. "One last suggestion: What if we removed the feature of requiring T and Z to match distinct types?"

The older rule seems to be N:1 too based on checking the nightly std docs, so I'm not sure what change this PR makes. Please correct me if I misunderstood.

The older rule was 1:1. I suspect that almost all of the confusion about rustdoc's type-driven search comes from reordering, which is why I'm happy to remove it.

One more thing: What does it mean for a generic parameter to be "unboxed" as compared to being "matched"?

Given a function with this signature: fn run<I: Iterator<Item=u32>>(i: I) -> bool

I can search for it with this query: iterator<item=u32> -> bool

That is, the generic parameter I has been "unboxed" into its where clause.

@camelid
Copy link
Member

camelid commented Jul 31, 2024

The actual function parameters can be given in any order. vec<t>, usize -> t gives you remove, swap_remove, split_off, and drain. usize, vec<t> -> t gives the exact same set of results.

The stuff within the <> is required to be in a the same order, but the function parameters themselves are order-agnostic.

Sounds good 👍

That's how it currently works in the master branch, but #124544 (comment) by @jsha asked for this change. "One last suggestion: What if we removed the feature of requiring T and Z to match distinct types?"

Hmm, seems like we'll need to have more team discussion on this point then. It sounds like fmease and I are in favor of the stricter "T and Z are parametrically polymorphic" approach (like in Rust generics, where we must consider each to be instantiated any way the user likes), whereas jsha prefers the looser "T and Z are just placeholders" approach. I see advantages both ways, but I prefer the former because it matches the language itself better, and it also hews more closely to prior art (like Hoogle).

However, it seems that implementing the former approach properly might require rethinking some aspects of the search design and implementation. Namely, it seems that currently A is considered a placeholder for a type and may match a concrete type rather than just a parameter. I expected type-based search to behave more like Hoogle (note: the following links are to equivalent Hoogle searches), where Vec<T> -> A matches nothing (except transmute, or in Hoogle's case also a version of len that is generic over the number), Vec<T> -> T matches things like get but not len, and Vec<T> -> usize matches len.

This may all be too difficult to implement especially given the constraints of using browser JS. Or we may decide that we want a looser behavior in fact. But I wanted to lay this out to make sure we're explicit about the decision.

The older rule was 1:1. I suspect that almost all of the confusion about rustdoc's type-driven search comes from reordering, which is why I'm happy to remove it.

That is probably true, and I agree that removing reordering is the most important change. Figuring out how exactly generics are interpreted is a bigger discussion that may be best handled in a future PR.

Given a function with this signature: fn run<I: Iterator<Item=u32>>(i: I) -> bool

I can search for it with this query: iterator<item=u32> -> bool

That is, the generic parameter I has been "unboxed" into its where clause.

Thanks 👍

@camelid
Copy link
Member

camelid commented Jul 31, 2024

Btw there does seem to be a bug in the implementation of this PR since A is actually matching VecDeque<T, A>.

image

We may also consider hiding parameters that have defaults (like Vec's A) that were not matched in the query.

@camelid
Copy link
Member

camelid commented Jul 31, 2024

That's how it currently works in the master branch, but #124544 (comment) by @jsha asked for this change. "One last suggestion: What if we removed the feature of requiring T and Z to match distinct types?"

After posting my reply, I went to read @jsha's original comment, and it made me wonder if what actually bothered him was reordering. I suspect that after reordering is removed, it behaves fine in general and with defaulted type parameters. IMO, requiring them to match different types is also not unusual since it more closely matches (though definitely not completely) the normal semantics of generics in Rust. Allowing T and Z to match the same type makes them behave more like existentially-quantified types (i.e., dyn Trait) than universally-quantified types (i.e., fn foo<A>(x: A)).

One last suggestion: What if we removed the feature of requiring T and Z to match distinct types? I get that it's more expressive, but it's unusual, and it interacts poorly with other features like reordering and defaulted type parameters (like Vec's Allocator parameter, which people don't often think about).

@notriddle
Copy link
Contributor Author

Namely, it seems that currently A is considered a placeholder for a type and may match a concrete type rather than just a parameter.

It only matches parameters. For example, Arc<File> -> bool has two results, while Arc<File> -> T has none.

Btw there does seem to be a bug in the implementation of this PR since A is actually matching VecDeque<T, A>.

As it says in the where clause, "A matches T", the VecDequeue's first type parameter, not VecDequeue itself. That's also why the word "VecDequeue" is not bold.

@notriddle
Copy link
Contributor Author

Figuring out how exactly generics are interpreted is a bigger discussion that may be best handled in a future PR.

We're going to need to decide this at some point. This PR is as good a point as any, provided the other PR, adding the user-visible type signatures to the search results, isn't blocked.

@camelid
Copy link
Member

camelid commented Jul 31, 2024

It only matches parameters. For example, Arc<File> -> bool has two results, while Arc<File> -> T has none.

Ah, I think I was confused because A -> B has a lot of results that are not just transmute. This is probably because we encode Self as a generic rather than its own thing. I could open a PR to fix that if you think that'd make sense?

As it says in the where clause, "A matches T", the VecDequeue's first type parameter, not VecDequeue itself. That's also why the word "VecDequeue" is not bold.

So when we search, it can match something inside another type? That seems a bit counterintuitive to me and like it would generate excess results. Was this added so that T would show results with Option<T>? If so perhaps it might make more sense to just special-case a few types like Option and Result.

@notriddle
Copy link
Contributor Author

So when we search, it can match something inside another type? That seems a bit counterintuitive to me and like it would generate excess results. Was this added so that T would show results with Option<T>? If so perhaps it might make more sense to just special-case a few types like Option and Result.

You're basically correct about the reasoning, yes.

Hoogle mentioned it in their design docs. https://ndmitchell.com/downloads/slides-hoogle_finding_functions_from_types-16_may_2011.pdf "A note on 'boxing'". For example, Num i => [a] -> i includes a result with a Maybe return value.

However, it looks like they only do it with special-cased types? https://github.com/ndmitchell/hoogle/blob/8149c93c40a542bf8f098047e1acbc347fc9f4e6/docs/TypeSearch.md#rewrites describes a special rule, and when I try to test it, I can only see boxing with Maybe and IO.

I didn't special-case anything because it's not clear which things should be special-cased for Rust.

Ah, I think I was confused because A -> B has a lot of results that are not just transmute. This is probably because we encode Self as a generic rather than its own thing. I could open a PR to fix that if you think that'd make sense?

Yup, that's bad. The blanket impl is being translated wrong.

ChrisDenton added a commit to ChrisDenton/rust that referenced this pull request Aug 5, 2024
rustdoc: Fix handling of `Self` type in search index and refactor its representation

### Summary

- Add enum variant `clean::Type::SelfTy` and use it instead of `clean::Type::Generic(kw::SelfUpper)`.
- Stop treating `Self` as a generic in the search index.
- Remove struct formerly known as `clean::SelfTy` (constructed as representation of function receiver type). We're better off without it.

### Before

![image](https://github.com/user-attachments/assets/d257bdd8-3a62-4c71-84a5-9c950f2e4f00)

### After

![image](https://github.com/user-attachments/assets/8f6d3f22-92c1-41e3-9ab8-a881b66816c0)

r? `@notriddle`
cc rust-lang#127589 (comment)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Aug 5, 2024
rustdoc: Fix handling of `Self` type in search index and refactor its representation

### Summary

- Add enum variant `clean::Type::SelfTy` and use it instead of `clean::Type::Generic(kw::SelfUpper)`.
- Stop treating `Self` as a generic in the search index.
- Remove struct formerly known as `clean::SelfTy` (constructed as representation of function receiver type). We're better off without it.

### Before

![image](https://github.com/user-attachments/assets/d257bdd8-3a62-4c71-84a5-9c950f2e4f00)

### After

![image](https://github.com/user-attachments/assets/8f6d3f22-92c1-41e3-9ab8-a881b66816c0)

r? ``@notriddle``
cc rust-lang#127589 (comment)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Aug 5, 2024
rustdoc: Fix handling of `Self` type in search index and refactor its representation

### Summary

- Add enum variant `clean::Type::SelfTy` and use it instead of `clean::Type::Generic(kw::SelfUpper)`.
- Stop treating `Self` as a generic in the search index.
- Remove struct formerly known as `clean::SelfTy` (constructed as representation of function receiver type). We're better off without it.

### Before

![image](https://github.com/user-attachments/assets/d257bdd8-3a62-4c71-84a5-9c950f2e4f00)

### After

![image](https://github.com/user-attachments/assets/8f6d3f22-92c1-41e3-9ab8-a881b66816c0)

r? ```@notriddle```
cc rust-lang#127589 (comment)
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request Aug 5, 2024
Rollup merge of rust-lang#128471 - camelid:rustdoc-self, r=notriddle

rustdoc: Fix handling of `Self` type in search index and refactor its representation

### Summary

- Add enum variant `clean::Type::SelfTy` and use it instead of `clean::Type::Generic(kw::SelfUpper)`.
- Stop treating `Self` as a generic in the search index.
- Remove struct formerly known as `clean::SelfTy` (constructed as representation of function receiver type). We're better off without it.

### Before

![image](https://github.com/user-attachments/assets/d257bdd8-3a62-4c71-84a5-9c950f2e4f00)

### After

![image](https://github.com/user-attachments/assets/8f6d3f22-92c1-41e3-9ab8-a881b66816c0)

r? ```@notriddle```
cc rust-lang#127589 (comment)
@jsha
Copy link
Contributor

jsha commented Aug 12, 2024

To clarify my previous comment:

  • If A shows up in a search, it should match the same thing each time. For instance, Vec<A> -> Option<A> should find Vec::first but not (e.g.) Vec::as_ascii.
  • If A and B show up in a search, they should match for both A == B and A != B. For instance, Vec<A> -> Option<B> should find Vec::first and Vec::as_ascii. My understanding is that the the current logic requires A != B.

After posting my reply, I went to read @jsha's original comment, and it made me wonder if what actually bothered him was reordering. I suspect that after reordering is removed, it behaves fine in general and with defaulted type parameters.

Maybe after removing reordering, the A != B requirement doesn't wind up being that important either way. My main motivation here is to look for ways to keep the search rules simple enough for people to understand and learn easily. And also simple enough to implement correctly and keep correct even as we add features).

IMO, requiring them to match different types is also not unusual since it more closely matches (though definitely not completely) the normal semantics of generics in Rust.

I don't understand this. It seems to me the opposite is true. I wrote previously:

if I wrote struct Point<T, U>, it would be valid for T and U to be the same type.

So for instance let x: Point<u32, u32> = ... would be valid.

@rust-log-analyzer

This comment has been minimized.

@notriddle
Copy link
Contributor Author

I've added the unboxing flag feature in another commit (and also rebased onto head). It now does unboxing on Box, &, Future, Option, Result, and (Tuple), but not anything else.

As for the A != B constraint, the reason I originally wrote it that way was the broad idea that you aren't required to specify generics at all, so if you are specifying them, you probably have some specific meaning in mind.

  • If A shows up in a search, it should match the same thing each time. For instance, Vec<A> -> Option<A> should find Vec::first but not (e.g.) Vec::as_ascii.
  • If A and B show up in a search, they should match for both A == B and A != B. For instance, Vec<A> -> Option<B> should find Vec::first and Vec::as_ascii. My understanding is that the the current logic requires A != B.

It sounds like you also want type params in the search query to match with concrete types in the function, and not just with the function's own type params.

I'm not sure that's very useful. First of all, it's not how Hoogle works. If I run a search ParsecT [Tok] s m Tok, I get back pEscaped. If I turn one of the Tok into t (which turns it into a type param), making ParsecT [Tok] s m t, I get no results.

Second of all, the use case I have in mind is that someone's searching for a function because they plan to call it, so the stuff before the arrow is what they have, while the stuff after the arrow is what they want to get. If they're writing a type param, it's probably because they are themselves authoring a generic function.

@bors
Copy link
Contributor

bors commented Aug 31, 2024

☔ The latest upstream changes (presumably #129809) made this pull request unmergeable. Please resolve the merge conflicts.

@camelid
Copy link
Member

camelid commented Nov 1, 2024

@rfcbot reviewed

Thanks for the hard work! The results look great.

@rfcbot rfcbot added the final-comment-period In the final comment period and will be merged soon unless new substantive objections are raised. label Nov 1, 2024
@rfcbot
Copy link

rfcbot commented Nov 1, 2024

🔔 This is now entering its final comment period, as per the review above. 🔔

@rfcbot rfcbot removed the proposed-final-comment-period Proposed to merge/close by relevant subteam, see T-<team> label. Will enter FCP once signed off. label Nov 1, 2024
@rfcbot rfcbot added finished-final-comment-period The final comment period is finished for this PR / Issue. to-announce Announce this issue on triage meeting and removed final-comment-period In the final comment period and will be merged soon unless new substantive objections are raised. labels Nov 11, 2024
@rfcbot
Copy link

rfcbot commented Nov 11, 2024

The final comment period, with a disposition to merge, as per the review above, is now complete.

As the automated representative of the governance process, I would like to thank the author for their work and everyone else who contributed.

This will be merged soon.

@GuillaumeGomez
Copy link
Member

Thanks everyone!

@bors r+

@bors
Copy link
Contributor

bors commented Nov 11, 2024

📌 Commit 9900ea4 has been approved by GuillaumeGomez

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Nov 11, 2024
@bors
Copy link
Contributor

bors commented Nov 11, 2024

⌛ Testing commit 9900ea4 with merge d4822c2...

@bors
Copy link
Contributor

bors commented Nov 11, 2024

☀️ Test successful - checks-actions
Approved by: GuillaumeGomez
Pushing d4822c2 to master...

@bors bors added the merged-by-bors This PR was explicitly merged by bors. label Nov 11, 2024
@bors bors merged commit d4822c2 into rust-lang:master Nov 11, 2024
7 checks passed
@rustbot rustbot added this to the 1.84.0 milestone Nov 11, 2024
@rust-timer
Copy link
Collaborator

Finished benchmarking commit (d4822c2): comparison URL.

Overall result: ❌✅ regressions and improvements - please read the text below

Our benchmarks found a performance regression caused by this PR.
This might be an actual regression, but it can also be just noise.

Next Steps:

  • If the regression was expected or you think it can be justified,
    please write a comment with sufficient written justification, and add
    @rustbot label: +perf-regression-triaged to it, to mark the regression as triaged.
  • If you think that you know of a way to resolve the regression, try to create
    a new PR with a fix for the regression.
  • If you do not understand the regression or you think that it is just noise,
    you can ask the @rust-lang/wg-compiler-performance working group for help (members of this group
    were already notified of this PR).

@rustbot label: +perf-regression
cc @rust-lang/wg-compiler-performance

Instruction count

This is the most reliable metric that we have; it was used to determine the overall result at the top of this comment. However, even this metric can sometimes exhibit noise.

mean range count
Regressions ❌
(primary)
0.2% [0.1%, 0.5%] 15
Regressions ❌
(secondary)
0.4% [0.1%, 0.5%] 19
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-2.4% [-2.4%, -2.4%] 1
All ❌✅ (primary) 0.2% [0.1%, 0.5%] 15

Max RSS (memory usage)

Results (secondary 0.1%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
2.8% [0.8%, 4.7%] 4
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-1.7% [-3.7%, -0.5%] 6
All ❌✅ (primary) - - 0

Cycles

Results (secondary 1.6%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
2.7% [2.6%, 2.9%] 3
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-1.6% [-1.6%, -1.6%] 1
All ❌✅ (primary) - - 0

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 787.302s -> 785.736s (-0.20%)
Artifact size: 335.27 MiB -> 335.37 MiB (0.03%)

@rustbot rustbot added the perf-regression Performance regression. label Nov 11, 2024
mati865 pushed a commit to mati865/rust that referenced this pull request Nov 12, 2024
…GuillaumeGomez

rustdoc-search: simplify rules for generics and type params

**Heads up!**: This PR is a follow-up that depends on rust-lang#124544. It adds 12dc24f, a change to the filtering behavior, and 9900ea4, a minor ranking tweak.

Part of rust-lang/rust-project-goals#112

This PR overturns rust-lang#109802

## Preview

* no results: [`Box<[A]> -> Vec<B>`](http://notriddle.com/rustdoc-html-demo-12/search-sem-3/std/index.html?search=Box%3C%5BA%5D%3E%20-%3E%20Vec%3CB%3E)
* results: [`Box<[A]> -> Vec<A>`](http://notriddle.com/rustdoc-html-demo-12/search-sem-3/std/index.html?search=Box%3C%5BA%5D%3E%20-%3E%20Vec%3CA%3E)
* [`T -> U`](http://notriddle.com/rustdoc-html-demo-12/search-sem-3/std/index.html?search=T%20-%3E%20U)
* [`Cx -> TyCtxt`](http://notriddle.com/rustdoc-html-demo-12/search-sem-3-compiler/rustdoc/index.html?search=Cx%20-%3E%20TyCtxt)

![image](https://github.com/user-attachments/assets/015ae28c-7469-4f7f-be03-157d28d7ec97)

## Description

This commit is a response to feedback on the displayed type signatures results, by making generics act stricter.

- Order within generics is 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.
- Generics are only "unboxed" if a type is explicitly opted into it. References and tuples are hardcoded to allow unboxing, and Box, Rc, Arc, Option, Result, and Future are opted in with an unstable attribute. Search result unboxing is the process that allows you to search for `i32 -> str` and get back a function with the type signature `&Future<i32> -> Box<str>`.
- Instead of ranking by set overlap, it ranks by the number of items in the type signature. This makes it easier to find single type signatures like transmute.

## Find the discussion on

* <https://rust-lang.zulipchat.com/#narrow/stream/393423-t-rustdoc.2Fmeetings/topic/meeting.202024-07-08/near/449965149>
* <rust-lang#124544 (comment)>
* <https://rust-lang.zulipchat.com/#narrow/channel/266220-t-rustdoc/topic/deciding.20on.20semantics.20of.20generics.20in.20rustdoc.20search>
@notriddle notriddle deleted the notriddle/search-sem-3 branch November 12, 2024 16:41
@notriddle
Copy link
Contributor Author

This PR adds the name of the generic type parameter to the search index. That information takes time to gather and serialize.

@rustbot label: +perf-regression-triaged

@rustbot rustbot added the perf-regression-triaged The performance regression has been triaged. label Nov 12, 2024
celinval added a commit to celinval/rust-dev that referenced this pull request Nov 29, 2024
78fc550584d Auto merge of rust-lang#133247 - GuillaumeGomez:reduce-integer-display-impl, r=workingjubilee
db5c2c6a18f Rollup merge of rust-lang#132982 - suaviloquence:2-doc-changed-alloc-methods, r=Mark-Simulacrum
117ad4f17b0 Rollup merge of rust-lang#132533 - SUPERCILEX:patch-4, r=Mark-Simulacrum
e2aa7c108dc fix `Allocator` method names in `alloc` free function docs
6b141ee1007 Rollup merge of rust-lang#133298 - n0toose:remove-dir-all-but-not-paths, r=Noratrieb
e3691db3d70 Rollup merge of rust-lang#133260 - compiler-errors:deref, r=fee1-dead
895f290b058 Rollup merge of rust-lang#132730 - joboet:after_main_sync, r=Noratrieb
6ffa4556f46 Rollup merge of rust-lang#133389 - eduardosm:stabilize-const_float_methods, r=RalfJung
f4139353bf6 Rollup merge of rust-lang#133301 - GuillaumeGomez:add-example-wrapping-neg, r=workingjubilee
6112cfd51ba Auto merge of rust-lang#132611 - compiler-errors:async-prelude, r=ibraheemdev
23a5a0e1f54 Auto merge of rust-lang#132597 - lukas-code:btree-plug-leak, r=jhpratt
f0b0942f402 Constify Deref and DerefMut
d05e8e8e9fb Auto merge of rust-lang#133379 - jieyouxu:rollup-00jxo71, r=jieyouxu
641c1ae3978 Stabilize `const_float_methods`
256c54db000 Auto merge of rust-lang#133377 - jieyouxu:rollup-n536hzq, r=jieyouxu
dff533fc1d3 Improve code by using `unsigned_abs`
a850f7c8760 Rollup merge of rust-lang#133237 - fee1-dead-contrib:constadd, r=compiler-errors
99741dd6dcb Rollup merge of rust-lang#133332 - bjoernager:const-array-as-mut-slice, r=jhpratt
9a152e2565f Rollup merge of rust-lang#131505 - madsmtm:darwin_user_temp_dir, r=dtolnay
a12c8386f5b Auto merge of rust-lang#132994 - clubby789:cc-bisect, r=Kobzol
6548ad8c627 Auto merge of rust-lang#133360 - compiler-errors:rollup-a2o38tq, r=compiler-errors
a4f797ed7de Rollup merge of rust-lang#133264 - lolbinarycat:os-string-truncate, r=joboet
a9398015dc4 Auto merge of rust-lang#132329 - compiler-errors:fn-and-destruct, r=lcnr
30aa6db150e Add code example for `wrapping_neg` method for signed integers
bc77567dc6b Deduplicate checking drop terminator
6f3ec5caf86 Gate const drop behind const_destruct feature, and fix const_precise_live_drops post-drop-elaboration check
fb6f0c2e982 Auto merge of rust-lang#133339 - jieyouxu:rollup-gav0nvr, r=jieyouxu
c792ef3e01a Rollup merge of rust-lang#133337 - ColinFinck:thread-scoped-fix-typo, r=joboet
cfed1c696dd Rollup merge of rust-lang#133330 - RalfJung:close, r=the8472
e26edf01cab Rollup merge of rust-lang#133313 - thesummer:fix-arc4random, r=cuviper
90a85ef0042 Rollup merge of rust-lang#133288 - bjoernager:const-array-each-ref, r=jhpratt
4e6f154dba6 Rollup merge of rust-lang#133238 - heiher:loong-stdarch-rexport, r=Amanieu
23a1b31cfa4 Auto merge of rust-lang#130867 - michirakara:steps_between, r=dtolnay
9693572a6e3 Fix typo in `std::thread::Scope::spawn` documentation.
b4a50679016 Mark '<[T; N]>::as_mut_slice' as 'const';
b6b40efcac5 library: update comment around close()
6ce7e79948e Don't try to use confstr in Miri
40d6e2ca941 Auto merge of rust-lang#129238 - umgefahren:stabilize-ipv6-unique-local, r=dtolnay
276c0fc3fd1 distinguish overflow and unimplemented in Step::steps_between
8be952bbbdf Use arc4random of libc for RTEMS target
4583ddef0cd Mention that std::fs::remove_dir_all fails on files
4f6ca37539a Mark and implement 'each_ref' and 'each_mut' in '[T; N]' as const;
ec220b6b368 constify `Add`
3c558bf870d Rollup merge of rust-lang#131736 - hoodmane:emscripten-wasm-bigint, r=workingjubilee
38d4c11c3ff implement OsString::truncate
4fd2c8db81e Rollup merge of rust-lang#133226 - compiler-errors:opt-in-pointer-like, r=lcnr
3f03a0f3fcd Rollup merge of rust-lang#130800 - bjoernager:const-mut-cursor, r=joshtriplett
eea7e230c2b Rollup merge of rust-lang#129838 - Ayush1325:uefi-process-args, r=joboet
8b4995aad87 Make PointerLike opt-in as a trait
f74b38aa2b1 Reduce integer `Display` implementation size
2f179d1a7c9 Stabilize const_pin_2
b2dc297e863 re-export `is_loongarch_feature_detected`
e26c298e75c Rollup merge of rust-lang#132732 - gavincrawford:as_ptr_attribute, r=Urgau
d6ee9dbe8b0 Rollup merge of rust-lang#133183 - n0toose:improve-remove-dir-docs, r=joboet
40735d31322 Rollup merge of rust-lang#125405 - m-ou-se:thread-add-spawn-hook, r=WaffleLapkin
6c20348f356 Rollup merge of rust-lang#123947 - zopsicle:vec_deque-Iter-as_slices, r=Amanieu
2089cb3188c Update doc comments for spawn hook.
c02090d6a3a Address review comments.
79bffa90cfe Fix tracking issue.
3eff64c78b0 Add tracking issue.
15bac4f115e Use Send + Sync for spawn hooks.
a42af062212 Add thread Builder::no_hooks().
49ac15b192b Update thread spawn hooks.
2cc4b2ef6d9 Use add_spawn_hook for libtest's output capturing.
24a0765dd03 Add std::thread::add_spawn_hook.
50ac72542be Correct comments concerning updated dangling pointer lint
cdf54869ec6 Auto merge of rust-lang#133205 - matthiaskrgr:rollup-xhhhp5u, r=matthiaskrgr
543667a49e3 Rollup merge of rust-lang#133200 - RalfJung:miri-rwlock-test, r=tgross35
7430eb407e2 ignore an occasionally-failing test in Miri
607b493008b Rollup merge of rust-lang#133182 - RalfJung:const-panic-inline, r=tgross35
e6cd122d981 Rollup merge of rust-lang#132758 - nnethercote:improve-get_key_value-docs, r=cuviper
a3c95972a3b Mention std::fs::remove_dir_all in std::fs::remove_dir
bd5c1426568 Bump `stdarch` to the latest master
e84f865601d const_panic: inline in bootstrap builds to avoid f16/f128 crashes
05fecb95df2 std: allow after-main use of synchronization primitives
c1beb25002a Auto merge of rust-lang#133160 - jhpratt:rollup-wzj9q15, r=jhpratt
ce80c9f20de Rollup merge of rust-lang#133145 - kornelski:static-mutex, r=traviscross
f385ac21fee Auto merge of rust-lang#128219 - connortsui20:rwlock-downgrade, r=tgross35
86151abcc67 rename rustc_const_stable_intrinsic -> rustc_intrinsic_const_stable_indirect
a33f889e959 Improve `{BTreeMap,HashMap}::get_key_value` docs.
15e6fc0a5db Document alternatives to `static mut`
1cd1dd7c56f Auto merge of rust-lang#120370 - x17jiri:likely_unlikely_fix, r=saethlin
e475f40115f Likely unlikely fix
ddcabfe85ff Rollup merge of rust-lang#133126 - ohno418:fix-String-doc, r=jhpratt
e4eff6a5a78 Rollup merge of rust-lang#133116 - RalfJung:const-null-ptr, r=dtolnay
16e6d209ccb alloc: fix `String`'s doc
e4fb96229e0 clean up const stability around UB checks
ee78601c3ce stabilize const_ptr_is_null
1e4a9ee22cd Rollup merge of rust-lang#132449 - RalfJung:is_val_statically_known, r=compiler-errors
1dfe94c308a Rollup merge of rust-lang#131717 - tgross35:stabilize-const_atomic_from_ptr, r=RalfJung
70326e8f708 reduce threads in downgrade test
d58e4f2d08c fix `DOWNGRADED` bit unpreserved
5d683160ada fix memory ordering bug + bad test
0604b8ffc1d add safety comments for queue implementation
00255e627b7 add `downgrade` to `queue` implementation
40256c63003 modify queue implementation documentation
f8041644f07 add `downgrade` to `futex` implementation
572adedb6a0 add simple `downgrade` implementations
48bcf09d8d7 add `downgrade` method onto `RwLockWriteGuard`
5416aef6a86 add `RwLock` `downgrade` tests
40109807569 Rollup merge of rust-lang#133050 - tgross35:inline-f16-f128, r=saethlin
2ee4159af2a Rollup merge of rust-lang#133048 - cyrgani:ptr-doc-update, r=Amanieu
e1448dee6d0 Rollup merge of rust-lang#133019 - sorairolake:add-missing-period-and-colon, r=tgross35
b1d31d297f2 Rollup merge of rust-lang#132984 - sunshowers:pipe2, r=tgross35
8cef1ef708e Rollup merge of rust-lang#132977 - cberner:fix_solaris, r=tgross35
daa9c433370 Rollup merge of rust-lang#132790 - aDotInTheVoid:ioslice-asslice-rides-again, r=cuviper
cdb5ff5f6fe Pass `f16` and `f128` by value in `const_assert!`
60ef4797595 use `&raw` in `{read, write}_unaligned` documentation
d2983fffb15 Auto merge of rust-lang#132709 - programmerjake:optimize-charto_digit, r=joshtriplett
918cc8d59c8 Rollup merge of rust-lang#133027 - no1wudi:master, r=jhpratt
25f55123bf2 Auto merge of rust-lang#133026 - workingjubilee:rollup-q8ig6ah, r=workingjubilee
d8de2ccfc55 Fix a copy-paste issue in the NuttX raw type definition
c06bb349936 Rollup merge of rust-lang#133008 - onur-ozkan:update-outdated-comment, r=jieyouxu
8eaea39049a Rollup merge of rust-lang#133004 - cuviper:unrecover-btree, r=ibraheemdev
81a191a826e Rollup merge of rust-lang#133003 - zachs18:clonetouninit-dyn-compat-u8, r=dtolnay
e3e5e358c71 Rollup merge of rust-lang#132907 - BLANKatGITHUB:intrinsic, r=saethlin
f57853bc421 Rollup merge of rust-lang#131304 - RalfJung:float-core, r=tgross35
7bc04367d32 Auto merge of rust-lang#122770 - iximeow:ixi/int-formatting-optimization, r=workingjubilee
ce2e318c5d1 docs: Fix missing colon in methods for primitive types
1870e9269bf docs: Fix missing period in methods for integer types
64397743828 Auto merge of rust-lang#133006 - matthiaskrgr:rollup-dz6oiq5, r=matthiaskrgr
98dad0baf9a update outdated comment about test-float-parse
520d4fdff72 Rollup merge of rust-lang#126046 - davidzeng0:mixed_integer_ops_unsigned_sub, r=Amanieu
e3c425b74bb Auto merge of rust-lang#132662 - RalfJung:const-panic-inlining, r=tgross35
c4b77cf11ef Update core CloneToUninit tests
d4e21f55ec3 btree: simplify the backdoor between set and map
5d61cf9a7ea Bump `cc`
44f376ba0c7 Fix compilation error on Solaris due to flock usage
75609d6d329 Auto merge of rust-lang#132556 - clubby789:cargo-update, r=Mark-Simulacrum
5ba28a4d89a Run `cargo update` and update licenses
08200043034 const_panic: don't wrap it in a separate function
d30e2c0963b [illumos] use pipe2 to create anonymous pipes
7e12686e222 Auto merge of rust-lang#132883 - LaihoE:vectorized_is_sorted, r=thomcc
02e32d70d61 Auto merge of rust-lang#132972 - matthiaskrgr:rollup-456osr7, r=matthiaskrgr
157eb1c94be Rollup merge of rust-lang#132970 - tyilo:nonzero-u-div-ceil-issue, r=tgross35
03e52a50ac8 Rollup merge of rust-lang#132966 - RalfJung:const_option_ext, r=jhpratt
2f615a1c410 Rollup merge of rust-lang#132948 - RalfJung:const_unicode_case_lookup, r=Noratrieb
f00e0913f63 Rollup merge of rust-lang#132851 - chansuke:update-comment, r=thomcc
656009854a3 Auto merge of rust-lang#132870 - Noratrieb:inline-int-parsing, r=tgross35
a0c0c40eafd Add tracking issue number to unsigned_nonzero_div_ceil feature
c2296662624 Make `CloneToUninit` dyn-compatible
6ab50dd1c97 stabilize const_option_ext
27fe6c7ca46 Rollup merge of rust-lang#132541 - RalfJung:const-stable-extern-crate, r=compiler-errors
7fafe990a8b stabilize const_unicode_case_lookup
c5ed62506ae Stabilize `Ipv6Addr::is_unique_local` and `Ipv6Addr::is_unicast_link_local`
e0452c9af5e adds new declaration to codegen
33fa8701b27 Auto merge of rust-lang#132943 - matthiaskrgr:rollup-164l3ej, r=matthiaskrgr
7f12f02c6ec Rollup merge of rust-lang#132914 - rcorre:cell-grammar, r=tgross35
300a2664117 Rollup merge of rust-lang#132895 - scottmcm:generalize-nonnull-from-raw-parts, r=ibraheemdev
a461cf9310e remove no-longer-needed abs_private
170e993a781 allow rustc_private feature in force-unstable-if-unmarked crates
4a20245f4ad Rollup merge of rust-lang#132929 - cuviper:check-alloc_zeroed, r=tgross35
992bbf7c46c Rollup merge of rust-lang#132869 - lolbinarycat:library-fix-too_long_first_doc_paragraph, r=tgross35
e3925fa3b42 Rollup merge of rust-lang#132847 - RalfJung:addr-dont-expose, r=Mark-Simulacrum
327a0d7814e Auto merge of rust-lang#132919 - matthiaskrgr:rollup-ogghyvp, r=matthiaskrgr
67c3c9f8bb7 Check for null in the `alloc_zeroed` example
068537aeb72 new intrinsic declaration
b689951272e new intrinsic declaration
16fa12ebd98 Rollup merge of rust-lang#132144 - adetaylor:receiver-trait-itself, r=wesleywiser
54f699d3ee9 Rollup merge of rust-lang#120077 - SUPERCILEX:set-entry, r=Amanieu
e541a4f8204 Update dangling pointer tests
7707584415a Tag relevant functions with #[rustc_as_ptr] attribute
b541c5aebc8 Auto merge of rust-lang#132902 - matthiaskrgr:rollup-43qgg3t, r=matthiaskrgr
2d676d49a6e Update grammar in std::cell docs.
7325f33701c Emscripten: link with -sWASM_BIGINT
1c482c93dbd Rollup merge of rust-lang#130999 - cberner:flock_pr, r=joboet
4dd22707d54 Auto merge of rust-lang#127589 - notriddle:notriddle/search-sem-3, r=GuillaumeGomez
0af64b63ced Generalize `NonNull::from_raw_parts` per ACP362
2fd9ac4a7ba vectorize slice::is_sorted
737521c21f5 `#[inline]` integer parsing functions
b9be1ddefcb split up the first paragraph of doc comments for better summaries
f9063ff15cf Update the doc comment of `ASCII_CASE_MASK`
57c7b80414a elem_offset / subslice_range: use addr() instead of 'as usize'
d19aa692d4e Rollup merge of rust-lang#132136 - RalfJung:target-feature-abi-compat, r=Mark-Simulacrum
6b0bd5a6630 honor rustc_const_stable_indirect in non-staged_api crate with -Zforce-unstable-if-unmarked
070baf4fab5 Add as_slice/into_slice for IoSlice/IoSliceMut.
978a5535d35 Rollup merge of rust-lang#132778 - lolbinarycat:io-Error-into_inner-docs, r=cuviper
6d54bfe5925 update io::Error::into_inner to acknowlage io::Error::other
7c0a90c3ead Address review comments
ac66068ca8b Update library/std/src/sys/pal/windows/fs.rs
d90f8668e45 Auto merge of rust-lang#132717 - RalfJung:rustc_safe_intrinsic, r=compiler-errors
f2bf9e65116 remove support for rustc_safe_intrinsic attribute; use rustc_intrinsic functions instead
2391b4b2a0d Rollup merge of rust-lang#132738 - cuviper:channel-heap-init, r=ibraheemdev
086cfefa97e mark is_val_statically_known intrinsic as stably const-callable
dffc5e73119 Rollup merge of rust-lang#132696 - fortanix:raoul/rte-235-fix_fmodl_missing_symbol_issue, r=tgross35
f14fc562a82 Rollup merge of rust-lang#132639 - RalfJung:intrinsics, r=workingjubilee,Amanieu
6d63012a62e Initialize channel `Block`s directly on the heap
7ff251b9793 core: move intrinsics.rs into intrinsics folder
6244f4816fe Auto merge of rust-lang#132714 - mati865:update-memchr, r=tgross35
a2eaef75de6 Rollup merge of rust-lang#132715 - tabokie:fix-lazy-lock-doc, r=Noratrieb
6a77b2121f1 Rollup merge of rust-lang#132665 - tyilo:nonzero-u-div-ceil, r=joboet
79d2063e0b6 Separate f128 `%` operation to deal with missing `fmodl` symbol
8022523cc73 Auto merge of rust-lang#132705 - kornelski:inline-repeat, r=tgross35
df9f5db19d7 fix lazylock comment
7a82eb5b610 Auto merge of rust-lang#131888 - ChrisDenton:deopt, r=ibraheemdev
75b9ce3b0be unpin and update memchr
4d1c7d9526a optimize char::to_digit and assert radix is at least 2
95bff3e6b5c Inline str::repeat
52c2a459546 Rollup merge of rust-lang#132617 - uellenberg:fix-rendered-doc, r=cuviper
28f7e7bbbd9 Auto merge of rust-lang#131721 - okaneco:const_eq_ignore_ascii_case, r=m-ou-se
41b7e5f7705 Auto merge of rust-lang#132500 - RalfJung:char-is-whitespace-const, r=jhpratt
4ed08bd2262 Add new unstable feature `const_eq_ignore_ascii_case`
f4e9fe4ec00 Auto merge of rust-lang#132664 - matthiaskrgr:rollup-i27nr7i, r=matthiaskrgr
afc66fe29e2 Change some code blocks to quotes in rendered std doc
2e63cbdb695 Rollup merge of rust-lang#131261 - clarfonthey:unsafe-cell-from-mut, r=m-ou-se
ab6f663ed6a Auto merge of rust-lang#132661 - matthiaskrgr:rollup-npytbl6, r=matthiaskrgr
8b165db1e5c Implement div_ceil for NonZero<unsigned>
6bc1b1b449e Rollup merge of rust-lang#132571 - RalfJung:const_eval_select_macro, r=oli-obk
c12f4d12055 Rollup merge of rust-lang#132473 - ZhekaS:core_fmt_radix_no_panic, r=joboet
bbb927540c8 Rollup merge of rust-lang#132153 - bjoernager:const-char-encode-utf16, r=dtolnay
919de701b02 add const_eval_select macro to reduce redundancy
538f5b4cd2b Rollup merge of rust-lang#132609 - NotWearingPants:patch-1, r=Amanieu
86c6f276b21 Rollup merge of rust-lang#132606 - eduardosm:char-slice-str-pattern-doc, r=tgross35
4660d7ebef9 most const intrinsics don't need an explicit rustc_const_unstable any more
8eb30fe4b09 add new rustc_const_stable_intrinsic attribute for const-stable intrinsics
792d1646c7c convert all const-callable intrinsics into the new form (without extern block)
fad7d68d1c2 docs: fix grammar in doc comment at unix/process.rs
92bb77993bd Improve example of `impl Pattern for &[char]`
553bb181dad Add AsyncFn* to to the prelude in all editions
2ae24bf3e15 Fixed typo, rebased
47f60d7ad0d Updated SAFETY comment to address underflow
581aa8d587f Replace checked slice indexing by unchecked to support panic-free code
c5a0f6c60aa Rollup merge of rust-lang#132579 - RalfJung:rustc-std-workspace-crates, r=Amanieu
9cdbf39ba56 btree: don't leak value if destructor of key panics
4caff135a74 Stabilise 'const_char_encode_utf16';
84fae7ebfee Auto merge of rust-lang#132586 - workingjubilee:rollup-qrmn49a, r=workingjubilee
95b4127a6c8 update rustc-std-workspace crates
082b98d885c Rollup merge of rust-lang#132423 - RalfJung:const-eval-align-offset, r=dtolnay
3b40634d007 Auto merge of rust-lang#132434 - tgross35:f128-tests, r=workingjubilee
5dea8b2e41f Enable `f128` tests on all non-buggy platforms 🎉
2bb8ea389a4 Auto merge of rust-lang#132581 - workingjubilee:rollup-4wj318p, r=workingjubilee
83bd286345b Update `compiler_builtins` to 0.1.138 and pin it
699702f2a6c Rollup merge of rust-lang#132563 - frectonz:master, r=Amanieu
4390c35bcce Auto merge of rust-lang#123723 - madsmtm:apple-std-os, r=dtolnay
1e8ed9064ee Auto merge of rust-lang#132479 - compiler-errors:fx-feat-yeet, r=fee1-dead
9a3b7c0f20b Rename the FIXMEs, remove a few that dont matter anymore
ed4f110b101 Auto merge of rust-lang#132542 - RalfJung:const_panic, r=tgross35
d8bca01fc2b remove const-support for align_offset
76b866c7156 Modify `NonZero` documentation to reference the underlying integer type
9e579641927 Rollup merge of rust-lang#132511 - RalfJung:const_arguments_as_str, r=dtolnay
bfeeb7450fd Rollup merge of rust-lang#132503 - RalfJung:const-hash-map, r=Amanieu
a42fc213104 Rollup merge of rust-lang#132499 - RalfJung:unicode_data.rs, r=tgross35
0278cab1fcc Rollup merge of rust-lang#132393 - zedddie16:issue-131865-fix, r=tgross35
714115abfb6 Rollup merge of rust-lang#131377 - rick-de-water:nonzero-exp, r=dtolnay
9789c548b8c Rollup merge of rust-lang#129329 - eduardosm:rc-from-mut-slice, r=dtolnay
ff9178b1a6a add const_panic macro to make it easier to fall back to non-formatting panic in const
9ef483bbbb0 stabilize const_arguments_as_str
4c6593fe8f8 Auto merge of rust-lang#132458 - RalfJung:rustc-const-unstable, r=Amanieu
81b20e0a3dd Rustdoc: added brief colon explanation
73d9f4da9a9 Add Set entry API
e883a6074c2 Add BorrowedBuf::into_filled{,_mut} methods to allow returning buffer with original lifetime
261c5b998ad remove const_hash feature leftovers
d515da6678b const_with_hasher test: actually construct a usable HashMap
11dc6c388d9 make char::is_whitespace unstably const
1a481fd9e01 unicode_data.rs: show command for generating file
3a5b026c04a get rid of a whole bunch of unnecessary rustc_const_unstable attributes
2e24b7fba4b remove no-longer-needed attribute
ffbcba08e7f add missing safety comments
768d0cd7fe4 adjust test gating for f16/f128
6335056119f float types: move copysign, abs, signum to libcore
c353337b8d0 rustdoc-search: simplify rules for generics and type params
9d10ab71105 Implement `From<&mut {slice}>` for `Box/Rc/Arc<{slice}>`
34329c06529 Stabilize `const_atomic_from_ptr`
a2e1edf18f6 Arbitrary self types v2: (unused) Receiver trait
2d26681057c ABI compatibility: remove section on target features
f1c99041c25 Support lock() and lock_shared() on async IO Files
7f6af4dd882 Revert using `HEAP` static in Windows alloc
541bda102a0 Implement file_lock feature
d7a7b0a361b uefi: process: Add args support
14aef3d76cf Use with_capacity(0) because we're reading the capacity later on
5b16abea8d5 Prefer `target_vendor = "apple"` on confstr
bc6398107f8 use `confstr(_CS_DARWIN_USER_TEMP_DIR, ...)` as a `TMPDIR` fallback on darwin
f8dc879fa96 Add LowerExp and UpperExp implementations
50afc521a17 Stabilize UnsafeCell::from_mut
aa74e934264 Mark 'get_mut' and 'set_position' in 'std::io::Cursor' as const;
c370665e88b Make `std::os::darwin` public
797c2498600 Implement `mixed_integer_ops_unsigned_sub`
ff1212e6a22 Add vec_deque::Iter::as_slices and friends
e938deaf0f1 try adding a test that LowerHex and friends don't panic, but it doesn't work
c6d2bb7445c improve codegen of fmt_num to delete unreachable panic

git-subtree-dir: library
git-subtree-split: 78fc550584dcdf3f917cc399f8ae1f1001887f09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. finished-final-comment-period The final comment period is finished for this PR / Issue. merged-by-bors This PR was explicitly merged by bors. perf-regression Performance regression. perf-regression-triaged The performance regression has been triaged. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. to-announce Announce this issue on triage meeting
Projects
None yet
Development

Successfully merging this pull request may close these issues.