Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
76323c8
[draft] Link to proposed LLM policy
jyn514 Apr 17, 2026
f32e5d8
add guidance for working with LLMs
jyn514 May 23, 2026
e07d7cc
Suggest using an LLM to generate tools, rather than making the LLM th…
jyn514 Jun 6, 2026
baf98d4
add note that LLMs prefer their own output
jyn514 Jun 11, 2026
32c4dcb
extend llm guidance
jyn514 Jun 18, 2026
2685fec
extend LLM guidance with a summary of the policy
jyn514 Jul 28, 2026
7da7cd0
flesh out author guidance
jyn514 Jul 29, 2026
500f94c
more author guidance; cross-references
jyn514 Jul 29, 2026
ac6af39
change tone from policy to mentorship
jyn514 Jul 29, 2026
ef9670c
add "maintainable code" section
jyn514 Jul 29, 2026
cebbf10
split authoring and reviewing sections
jyn514 Jul 29, 2026
7cef419
be more clear about what i mean around linters
jyn514 Jul 29, 2026
49d14d6
add more links
jyn514 Jul 29, 2026
4fb41b1
move correctness suggestions to a better chapter
jyn514 Jul 29, 2026
6b52bda
address Sasha's review comments
jyn514 Jul 29, 2026
ff5a4a4
fix links
jyn514 Jul 29, 2026
df4f543
tweaks
jyn514 Jul 29, 2026
beca161
headings
jyn514 Jul 29, 2026
a2d28af
don't treat model names as a good example of disclosure
jyn514 Jul 30, 2026
daafdb5
Document `./x build --timings`
joshtriplett Aug 2, 2026
851876f
Merge pull request #2951 from joshtriplett/timings
joshtriplett Aug 2, 2026
fbaa034
document that commit messages must be human-authored
jyn514 Aug 2, 2026
f55e223
Merge pull request #2835 from jyn514/llm-policy
jyn514 Aug 5, 2026
77a8b9f
move index file up to make external links to ".../llm-guidance.html" …
steffahn Aug 5, 2026
142707e
Update relative links
steffahn Aug 5, 2026
ead361d
Merge pull request #2953 from steffahn/fix-llm-guidance-link
Kobzol Aug 5, 2026
a669f67
derive(Diagnostic): #[note] etc also work on bool fields
RalfJung Aug 6, 2026
7ed549a
Prepare for merging from rust-lang/rust
invalid-email-address Aug 10, 2026
a7b80e9
Merge ref '969b803cbe1d' from rust-lang/rust
invalid-email-address Aug 10, 2026
25c1ae6
stability.md: add missing brackets to `unstable_removed` attribute
DanielEScherzer Aug 10, 2026
a5c4966
Merge pull request #2956 from DanielEScherzer/stability-brackets
fmease Aug 10, 2026
0ece90b
Add assumptions on binders shorthand to the glossary
fallible-algebra Aug 10, 2026
882ed23
Merge pull request #2957 from fallible-algebra/glossary/assbind
BoxyUwU Aug 10, 2026
d087f53
Merge pull request #2952 from rust-lang/rustc-pull
tshepang Aug 11, 2026
3b8174d
Merge pull request #2955 from RalfJung/derive-diagnostic
tshepang Aug 11, 2026
98cb632
Prepare for merging from rust-lang/rust
invalid-email-address Aug 11, 2026
d3a2176
Merge ref 'e64c8a664d9d' from rust-lang/rust
invalid-email-address Aug 11, 2026
3b87406
Merge pull request #2960 from rust-lang/rustc-pull
tshepang Aug 11, 2026
9b06d77
fix attribute links
mejrs Aug 11, 2026
761241c
Add preferred assumptions on binders shorthand to the glossary
fallible-algebra Aug 12, 2026
c452783
Merge pull request #2961 from fallible-algebra/glossary/abby
BoxyUwU Aug 12, 2026
5cdd04f
Fix mentions of "`ai-assisted`" label in llm guidance docs
steffahn Aug 12, 2026
2b08302
Merge pull request #2962 from steffahn/llm-assisted-label
jyn514 Aug 13, 2026
ec787d8
Merge pull request #2959 from mejrs/attrs
tshepang Aug 13, 2026
adc30eb
Add `feedable` query modifier
blyxyas Jul 23, 2026
e543bab
Merge pull request #2942 from blyxyas/feedable-query-mod
tshepang Aug 13, 2026
6a823d3
sembr src/queries/incremental-compilation-in-detail.md
tshepang Aug 13, 2026
fa6c1ba
align
tshepang Aug 13, 2026
66cf603
sembr src/llm-guidance/reviewing.md
tshepang Aug 13, 2026
3aba612
sembr src/llm-guidance/writing.md
tshepang Aug 13, 2026
b011266
sembr src/opaque-types-type-alias-impl-trait.md
tshepang Aug 13, 2026
c47f10a
sembr src/hir/attribute-parsing.md
tshepang Aug 13, 2026
e8d39b8
sembr src/diagnostics/error-guaranteed.md
tshepang Aug 13, 2026
8b93983
improve src/stability.md
tshepang Aug 13, 2026
6bf26fb
sembr src/debuginfo/testing.md
tshepang Aug 13, 2026
24b66a7
sembr src/tests/stdlib-semver-check.md
tshepang Aug 13, 2026
fd1d77f
improve tests/stdlib-semver-check.md
tshepang Aug 13, 2026
c490377
reflow
tshepang Aug 13, 2026
cda814c
sembr src/profile-guided-optimization.md
tshepang Aug 13, 2026
28ff895
improve profile-guided-optimization.md
tshepang Aug 13, 2026
eee684e
sembr src/guides/editions.md
tshepang Aug 13, 2026
e8fe604
not a blog post
tshepang Aug 13, 2026
5d82d7e
sembr src/incrcomp-debugging.md
tshepang Aug 13, 2026
5f249e4
whitespace
tshepang Aug 13, 2026
84fb23f
sembr src/memory.md
tshepang Aug 13, 2026
0b6995a
improve memory.md
tshepang Aug 13, 2026
ac129e9
sembr src/return-position-impl-trait-in-trait.md
tshepang Aug 13, 2026
b4f722c
was 3 years ago
tshepang Aug 13, 2026
8f7fc50
reflow
tshepang Aug 13, 2026
499d68c
sembr src/traits/implied-bounds.md
tshepang Aug 13, 2026
9ac8fe6
improve traits/implied-bounds.md
tshepang Aug 13, 2026
1df30e6
Merge pull request #2963 from rust-lang/tshepang/misc
tshepang Aug 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/doc/rustc-dev-guide/rust-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
da86f4d0726be475afbbffe40cb2f65741c51ad3
e64c8a664d9da54fc239cd4404cbf67f0d624326
3 changes: 3 additions & 0 deletions src/doc/rustc-dev-guide/src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@
- [About the compiler team](./compiler-team.md)
- [Using Git](./git.md)
- [Mastering @rustbot](./rustbot.md)
- [Running LLMs](./llm-guidance.md)
- [Writing code with LLMs](./llm-guidance/writing.md)
- [Reviewing code with LLMs](./llm-guidance/reviewing.md)
- [Walkthrough: a typical contribution](./walkthrough.md)
- [Implementing new language features](./implementing-new-features.md)
- [Stability guarantees](./stability-guarantees.md)
Expand Down
4 changes: 3 additions & 1 deletion src/doc/rustc-dev-guide/src/about-this-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ You might also find the following sites useful:

- [rustc API docs] -- rustdoc documentation for the compiler, devtools, and internal tools
- [Forge] -- contains documentation about Rust infrastructure, team procedures, and more
- [`rust-lang/rust`]'s [LLM policy]
- [compiler-team] -- the home-base for the Rust compiler team, with description
of the team procedures, active working groups, and the team calendar.
- [std-dev-guide] -- a similar guide for developing the standard library.
Expand All @@ -95,7 +96,7 @@ You might also find the following sites useful:
For example, searching for `* -> vec` should find all functions that return a `Vec<T>`.
_Hint:_ Find more tips and keyboard shortcuts by typing `?` on any Rustdoc page!


[LLM policy]: https://forge.rust-lang.org/policies/llm-usage.html
[rustc dev guide]: about-this-guide.md
[gsearchdocs]: https://www.google.com/search?q=site:doc.rust-lang.org+your+query+here
[stddocs]: https://doc.rust-lang.org/std
Expand All @@ -115,3 +116,4 @@ You might also find the following sites useful:
[std-dev-guide]: https://std-dev-guide.rust-lang.org/
[rust-analyzer book]: https://rust-analyzer.github.io/book/
[z]: https://rust-lang.zulipchat.com/#narrow/stream/131828-t-compiler
[`rust-lang/rust`]: https://github.com/rust-lang/rust/
1 change: 1 addition & 0 deletions src/doc/rustc-dev-guide/src/appendix/glossary.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
Term | Meaning
-----------------------------------------------|--------
<span id="1zst">1-ZST</span> | A *one-aligned [zero-sized type](#zst)*. A type of size zero with an [alignment][size-align] of one.
<span id="abby">abby</span> | Short for [_assumptions on binders_](https://github.com/rust-lang/project-assumptions-on-binders). Alternatively: `a-bi`, though this is very close to ABI.
<span id="arena">arena, arena allocation</span> | An _arena_ is a large memory buffer from which other memory allocations are made. This style of allocation is called _arena allocation_. See [this chapter](../memory.md) for more info.
<span id="afidt">AFIDT</span> | Short for _async function in `dyn Trait`_. See also [AFIT](#afit).
<span id="afit">AFIT</span> | Short for _async function in trait_. They desugar to [RPITITs](#rpitit).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,7 @@ Finally, `MAGIC_EXTRA_RUSTFLAGS` bypasses the

- `RUSTDOCFLAGS`, `RUSTDOCFLAGS_BOOTSTRAP` and `RUSTDOCFLAGS_NOT_BOOTSTRAP` are
analogous to `RUSTFLAGS`, but for `rustdoc`.
- `CARGOFLAGS` will pass arguments to cargo itself (e.g. `--timings`).
- `CARGOFLAGS` will pass arguments to cargo itself.
`CARGOFLAGS_BOOTSTRAP` and `CARGOFLAGS_NOT_BOOTSTRAP` work analogously to `RUSTFLAGS_BOOTSTRAP`.
- `--test-args` will pass arguments through to the test runner.
For `tests/ui`,
Expand Down
6 changes: 6 additions & 0 deletions src/doc/rustc-dev-guide/src/contributing.md
Original file line number Diff line number Diff line change
Expand Up @@ -520,6 +520,12 @@ This is used for [RFCs], issues, and pull requests.
[rfcbot]: https://github.com/anp/rfcbot-rs/
[RFCs]: https://github.com/rust-lang/rfcs

## LLM policy

See [Forge][LLM policy].

[LLM policy]: https://forge.rust-lang.org/policies/llm-usage.html

## Helpful links and information

This section has moved to the ["About this guide"] chapter.
Expand Down
33 changes: 32 additions & 1 deletion src/doc/rustc-dev-guide/src/conventions.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,35 @@ if foo {

If you want to leave a note in the codebase, use `// FIXME` instead.

### Follow the style of surrounding code

Use existing helpers and avoid duplicating logic or validation.

### [Avoid duplicated sources of truth](https://react.dev/learn/choosing-the-state-structure)

Trying to keep data in sync between two different places is a code smell.

### Use types to enforce invariants

When practical, [make invalid states unrepresentable](https://kentcdodds.com/blog/make-impossible-states-impossible), [not just checked at construction time](https://lexi-lambda.github.io/blog/2020/11/01/names-are-not-type-safety/).

### Write useful comments

[Write comments that say *why*][mit-comment-style] you have done a thing, not *what* you have done.
It's ok to go into detail about non-obvious bugs.

[mit-comment-style]: https://mitcommlab.mit.edu/broad/commkit/coding-and-comment-style/

### Preserve existing behavior

Consider platform differences and error cases.
Look for relevant tests that exercise the edge cases.

### Work in small steps

Work in small, independently testable steps.
Run the relevant tests after every meaningful change, so you know where you first went wrong.

<a id="cio"></a>

## Using crates from crates.io
Expand All @@ -159,11 +188,13 @@ you rename a method, then put that rename into its own commit, along
with the renames of all the uses.

**More commits is usually better.** If you are doing a large change,
it's almost always better to break it up into smaller steps that can be independently understood.
it's almost always better to break it up into smaller steps that can be [independently understood][atomic commits].
The one thing to be aware of is that if
you introduce some code following one strategy, then change it
dramatically (versus adding to it) in a later commit, that 'back-and-forth' can be confusing.

[atomic commits]: https://github.blog/developer-skills/github/write-better-commits-build-better-projects/#%e2%9a%9b%ef%b8%8f-resize-and-stabilize-the-commits

**Format liberally.** While only the final commit of a PR must be correctly
formatted, it is both easier to review and less noisy to format each commit
individually using `./x fmt`.
Expand Down
4 changes: 2 additions & 2 deletions src/doc/rustc-dev-guide/src/debuginfo/testing.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Testing

The debug info test suite is undergoing a substantial rewrite. This section will be filled out as
the rewrite makes progress.
The debug info test suite is undergoing a substantial rewrite.
This section will be filled out as the rewrite makes progress.

Please see [this tracking issue][148483] for more information.

Expand Down
6 changes: 3 additions & 3 deletions src/doc/rustc-dev-guide/src/diagnostics/diagnostic-structs.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,12 +135,12 @@ tcx.dcx().emit_err(FieldAlreadyDeclared {
- `code = "..."` (_Optional_)
- Specifies the error code.
- `#[note("message")]` (_Optional_)
- _Applied to struct or struct fields of type `Span`, `Option<()>` or `()`._
- _Applied to struct or struct fields of type `Span`, `Option<()>`, `bool`, or `()`._
- Adds a note subdiagnostic.
- Value is the note's message.
- If applied to a `Span` field, creates a spanned note.
- `#[help("message")]` (_Optional_)
- _Applied to struct or struct fields of type `Span`, `Option<()>` or `()`._
- _Applied to struct or struct fields of type `Span`, `Option<()>`, `bool`, or `()`._
- Adds a help subdiagnostic.
- Value is the help message.
- If applied to a `Span` field, creates a spanned help.
Expand All @@ -149,7 +149,7 @@ tcx.dcx().emit_err(FieldAlreadyDeclared {
- Adds a label subdiagnostic.
- Value is the label's message.
- `#[warning("message")]` (_Optional_)
- _Applied to struct or struct fields of type `Span`, `Option<()>` or `()`._
- _Applied to struct or struct fields of type `Span`, `Option<()>`, `bool`, or `()`._
- Adds a warning subdiagnostic.
- Value is the warning's message.
- `#[suggestion{,_hidden,_short,_verbose}("message", code = "...", applicability = "...")]`
Expand Down
36 changes: 18 additions & 18 deletions src/doc/rustc-dev-guide/src/diagnostics/error-guaranteed.md
Original file line number Diff line number Diff line change
@@ -1,33 +1,33 @@
# `ErrorGuaranteed`
The previous sections have been about the error message that a user of the
compiler sees. But emitting an error can also have a second important side
effect within the compiler source code: it generates an
[`ErrorGuaranteed`][errorguar].

The previous sections have been about the error message that a user of the compiler sees.
But emitting an error can also have a second important side
effect within the compiler source code: it generates an [`ErrorGuaranteed`].

`ErrorGuaranteed` is a zero-sized type that is unconstructable outside of the
[`rustc_errors`][rerrors] crate. It is generated whenever an error is reported
[`rustc_errors`] crate.
It is generated whenever an error is reported
to the user, so that if your compiler code ever encounters a value of type
`ErrorGuaranteed`, the compilation is _statically guaranteed to fail_. This is
useful for avoiding unsoundness bugs because you can statically check that an
`ErrorGuaranteed`, the compilation is _statically guaranteed to fail_.
This is useful for avoiding unsoundness bugs because you can statically check that an
error code path leads to a failure.

There are some important considerations about the usage of `ErrorGuaranteed`:

* It does _not_ convey information about the _kind_ of error. For example, the
error may be due (indirectly) to a delayed bug or other compiler error.
* It does _not_ convey information about the _kind_ of error.
For example, the error may be due (indirectly) to a delayed bug or other compiler error.
Thus, you should not rely on
`ErrorGuaranteed` when deciding whether to emit an error, or what kind of error
to emit.
`ErrorGuaranteed` when deciding whether to emit an error, or what kind of error to emit.
* `ErrorGuaranteed` should not be used to indicate that a compilation _will
emit_ an error in the future. It should be used to indicate that an error
_has already been_ emitted -- that is, the [`emit()`][emit] function has
already been called. For example, if we detect that a future part of the
emit_ an error in the future.
It should be used to indicate that an error
_has already been_ emitted -- that is, the [`emit()`][emit] function has already been called.
For example, if we detect that a future part of the
compiler will error, we _cannot_ use `ErrorGuaranteed` unless we first emit
an error or delayed bug ourselves.

Thankfully, in most cases, it should be statically impossible to abuse
`ErrorGuaranteed`.
Thankfully, in most cases, it should be statically impossible to abuse `ErrorGuaranteed`.

[errorguar]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/struct.ErrorGuaranteed.html
[rerrors]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/index.html
[`ErrorGuaranteed`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/struct.ErrorGuaranteed.html
[`rustc_errors`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/index.html
[emit]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/diagnostic/struct.Diag.html#method.emit
2 changes: 2 additions & 0 deletions src/doc/rustc-dev-guide/src/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ But avoid using LLM tools that generate long, complex words.
In daily teamwork, **simple and clear words** are best for easy understanding.
Even small typos or grammar mistakes can make you seem more human, and people connect better with humans.

See also [our LLM policy](https://forge.rust-lang.org/policies/llm-usage.html).

### Experts

Not all `t-compiler` members are experts on all parts of `rustc`;
Expand Down
45 changes: 32 additions & 13 deletions src/doc/rustc-dev-guide/src/guides/editions.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ supports comparisons for doing range checks, such as `span.edition() >= Edition:
### Adding a new edition

Adding a new edition mainly involves adding a variant to the [`Edition`] enum and then fixing
everything that is broken. See [#94461](https://github.com/rust-lang/rust/pull/94461) for an
example.
everything that is broken.
See [#94461](https://github.com/rust-lang/rust/pull/94461) for an example.

### Features and Edition stability

Expand All @@ -35,7 +35,8 @@ When adding a new feature, there are two options you can choose for how to handl
future edition:

- Just check the edition of the span like `span.at_least_rust_20xx()` (see [Edition hygiene]) or the
[`Session::edition`]. This will implicitly depend on the stability of the edition itself to
[`Session::edition`].
This will implicitly depend on the stability of the edition itself to
indicate that your feature is available.
- Place your new behavior behind a [feature gate].

Expand Down Expand Up @@ -71,7 +72,8 @@ There are a few different options for doing feature checks:
or just remove the feature check altogether and just check `span.at_least_rust_20xx()`.

If you need to do the feature gating in multiple places, consider placing the check in a single
function so that there will only be a single place to update. For example:
function so that there will only be a single place to update.
For example:

```rust,ignore
// An example from Edition 2021 disjoint closure captures.
Expand All @@ -93,7 +95,8 @@ Within [`Lexer`], tokens can be modified based on edition-specific behavior.
For example, C-String literals like `c"foo"` are split into multiple tokens in editions before 2021.
This is also where things like reserved prefixes are handled for the 2021 edition.

Edition-specific parsing is relatively rare. One example is `async fn` which checks the span of the
Edition-specific parsing is relatively rare.
One example is `async fn` which checks the span of the
token to determine if it is the 2015 edition, and emits an error in that case.
This can only be done if the syntax was already invalid.

Expand Down Expand Up @@ -190,7 +193,9 @@ When a user runs `cargo fix --edition`, cargo will pass the `--force-warn rust-2
flag to force all of these lints to appear during the edition migration.
Cargo also passes `--cap-lints=allow` so that no other lints interfere with the edition migration.

Make sure that the example code sets the correct edition. The example should illustrate the previous edition, and show what the migration warning would look like. For example, this lint for a 2024 migration shows an example in 2021:
Make sure that the example code sets the correct edition.
The example should illustrate the previous edition, and show what the migration warning would look like.
For example, this lint for a 2024 migration shows an example in 2021:

```rust,ignore
declare_lint! {
Expand Down Expand Up @@ -245,14 +250,16 @@ afterwards.
This should generally be used sparingly, as there are other options:

- Small impact stylistic changes unrelated to an edition can just make the lint `Warn` on all
editions. If you want people to adopt a different way to write things, then go ahead and commit to
editions.
If you want people to adopt a different way to write things, then go ahead and commit to
having it show up for all projects.

Beware that if a new warn-by-default lint hits many projects, it can be very disruptive and
frustrating for users.

- Change the new style to be a hard error in the new edition, and use a [migration lint] to
automatically convert projects to the new style. For example,
automatically convert projects to the new style.
For example,
[`ellipsis_inclusive_range_patterns`] is a hard error in 2021, and warns in all previous editions.

Beware that these cannot be added after the edition stabilizes.
Expand Down Expand Up @@ -354,11 +361,22 @@ In general it is recommended to avoid these special cases except for very high v
Updating the edition of the standard library itself roughly involves the following process:

- Wait until the newly stabilized edition has reached beta and the bootstrap compiler has been updated.
- Apply migration lints. This can be an involved process since some code is in external submodules[^std-submodules], and the standard library makes heavy use of conditional compilation. Also, running `cargo fix --edition` can be impractical on the standard library itself. One approach is to individually add `#![warn(...)]` at the top of each crate for each lint, run `./x check library`, apply the migrations, remove the `#![warn(...)]` and commit each migration separately. You'll likely need to run `./x check` with `--target` for many different targets to get full coverage (otherwise you'll likely spend days or weeks getting CI to pass)[^ed-docker]. See also the [advanced migration guide] for more tips.
- Apply migrations to [`backtrace-rs`]. [Example for 2024](https://github.com/rust-lang/backtrace-rs/pull/700). Note that this doesn't update the edition of the crate itself because that is published independently on crates.io, and that would otherwise restrict the minimum Rust version. Consider adding some `#![deny()]` attributes to avoid regressions until its edition gets updated.
- Apply migrations to [`stdarch`], and update its edition, and formatting. [Example for 2024](https://github.com/rust-lang/stdarch/pull/1710).
- Apply migration lints.
This can be an involved process since some code is in external submodules[^std-submodules], and the standard library makes heavy use of conditional compilation.
Also, running `cargo fix --edition` can be impractical on the standard library itself.
One approach is to individually add `#![warn(...)]` at the top of each crate for each lint, run `./x check library`, apply the migrations, remove the `#![warn(...)]` and commit each migration separately.
You'll likely need to run `./x check` with `--target` for many different targets to get full coverage (otherwise you'll likely spend days or weeks getting CI to pass)[^ed-docker].
See also the [advanced migration guide] for more tips.
- Apply migrations to [`backtrace-rs`].
[Example for 2024](https://github.com/rust-lang/backtrace-rs/pull/700).
Note that this doesn't update the edition of the crate itself because that is published independently on crates.io, and that would otherwise restrict the minimum Rust version.
Consider adding some `#![deny()]` attributes to avoid regressions until its edition gets updated.
- Apply migrations to [`stdarch`], and update its edition, and formatting.
[Example for 2024](https://github.com/rust-lang/stdarch/pull/1710).
- Post PRs to update the backtrace and stdarch submodules, and wait for those to land.
- Apply migration lints to the standard library crates, and update their edition. I recommend working one crate at a time starting with `core`. [Example for 2024](https://github.com/rust-lang/rust/pull/138162).
- Apply migration lints to the standard library crates, and update their edition.
It is recommended to work one crate at a time, starting with `core`.
[Example for 2024](https://github.com/rust-lang/rust/pull/138162).

[^std-submodules]: This will hopefully change in the future to pull these submodules into `rust-lang/rust`.
[^ed-docker]: You'll also likely need to do a lot of testing for different targets, and this is where [docker testing](../tests/docker.md) comes in handy.
Expand All @@ -376,7 +394,8 @@ After the edition team has given the go-ahead, the process for stabilizing an ed
- Hunt and find any document that refers to edition by number, and update it:
- [`--edition` flag](https://github.com/rust-lang/rust/blob/HEAD/src/doc/rustc/src/command-line-arguments.md#--edition-specify-the-edition-to-use)
- [Rustdoc attributes](https://github.com/rust-lang/rust/blob/HEAD/src/doc/rustdoc/src/write-documentation/documentation-tests.md#attributes)
- Clean up any tests that use the `//@ edition` header to remove the `-Zunstable-options` flag to ensure they are indeed stable. Note: Ideally this should be automated, see [#133582].
- Clean up any tests that use the `//@ edition` header to remove the `-Zunstable-options` flag to ensure they are indeed stable.
Note: Ideally this should be automated, see [#133582].
- Bless any tests that change.
- Update `lint-docs` to default to the new edition.

Expand Down
Loading
Loading