Skip to content

Make no_implicit_prelude not suppress tool attributes - #165377

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
mejrs:no_implicit_prelude_tool_attr
Nov 4, 2026
Merged

rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
mejrs:no_implicit_prelude_tool_attr

Conversation

@mejrs

@mejrs mejrs commented Nov 2, 2026 •

Copy link
Copy Markdown
Member

Implements part of the register_tool rfc, RFC 3808:

Today, #![no_implicit_prelude] suppresses the tool attribute prelude but does not suppress the lint prelude (e.g., #[allow(clippy::foo)] continues to work). Under this RFC, neither prelude is suppressed by #![no_implicit_prelude]. This is technically a breaking change since it can produce new ambiguity errors in stable code.

(The breaking change is already taken care of in #162597, the ambiguity error is raised regardless of whether the no_implicit_prelude attribute is used)

Currently, the following code errors. After this PR, it will start compiling.

#![no_implicit_prelude]
#![feature(register_tool)]
#![register_tool(my_tool)]

#[my_tool::attr] // ERROR cannot find module or crate `my_tool` in this scope
#[rustfmt::skip] // ERROR cannot find module or crate `rustfmt` in this scope
struct X;

Reference PR: rust-lang/reference#2404

r? petrochenkov

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Nov 2, 2026
@workingjubilee workingjubilee changed the title Make the no_implicit_prelude not suppress tool attributes Make no_implicit_prelude not suppress tool attributes Nov 3, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

@bors r+

@rust-bors

rust-bors Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

📌 Commit dbbdb56 has been approved by petrochenkov

It is now in the queue for this repository.

@rust-bors rust-bors Bot 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 3, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Nov 3, 2026
…r, r=petrochenkov

Make `no_implicit_prelude` not suppress tool attributes

Implements part of the `register_tool` rfc, [RFC 3808](https://rust-lang.github.io/rfcs/3808-register-tool.html):
> Today, #![no_implicit_prelude] suppresses the tool attribute prelude but does not suppress the lint prelude (e.g., #[allow(clippy::foo)] continues to work). Under this RFC, neither prelude is suppressed by #![no_implicit_prelude]. This is technically a breaking change since it can produce new ambiguity errors in stable code.

(The breaking change is already taken care of in rust-lang#162597, the ambiguity error is raised regardless of whether the `no_implicit_prelude` attribute is used)

Currently, the following code errors. After this PR, it will start compiling.
```rust
#![no_implicit_prelude]
#![feature(register_tool)]
#![register_tool(my_tool)]

#[my_tool::attr] // ERROR cannot find module or crate `my_tool` in this scope
#[rustfmt::skip] // ERROR cannot find module or crate `rustfmt` in this scope
struct X;
```

Reference PR: rust-lang/reference#2404

r? petrochenkov
rust-bors Bot pushed a commit that referenced this pull request Nov 3, 2026
…uwer

Rollup of 20 pull requests

Successful merges:

 - #149245 (Make inline attributes apply to the generated `poll` in async fn)
 - #163495 (Parallelize AST -> HIR lowering)
 - #164304 ([perf] Reuse CanonicalVarKinds if no new variables were added)
 - #165109 (Avoid building a region map when erasing bound regions)
 - #163393 (std: Use getexecpath() for current_exe() on OpenBSD)
 - #163625 (Add a lint helper attribute namespace )
 - #164414 (Add `let_underscore_drop_guard` lint.)
 - #165342 (Avoid unnecessary MIR traversals in CheckPackedRef lint)
 - #165351 (delegation: insert probing adjustments before args check adjustments)
 - #165358 (Reenable some cg_gcc tests that were disabled)
 - #165377 (Make `no_implicit_prelude` not suppress tool attributes)
 - #165397 (Add codegen test for unused match arms removed after inlining)
 - #165398 (Rework parallel reproducibility tests)
 - #162608 (Avoid oscillating line wrapping due to symbol indices)
 - #164241 (make the safety documentation consistent in Ptr module)
 - #165029 (Use `MalformedLintAttributeInput` in more places)
 - #165203 (AIX: Implement TLS destructor guard in std and update dynamic-loading-cdylib test)
 - #165230 (Fix rigidity assertion ICE)
 - #165293 (unstable-book: update default-visibility.md to link to tracking issue)
 - #165374 (Refactorings in preparation for the move trait)
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Nov 3, 2026
…r, r=petrochenkov

Make `no_implicit_prelude` not suppress tool attributes

Implements part of the `register_tool` rfc, [RFC 3808](https://rust-lang.github.io/rfcs/3808-register-tool.html):
> Today, #![no_implicit_prelude] suppresses the tool attribute prelude but does not suppress the lint prelude (e.g., #[allow(clippy::foo)] continues to work). Under this RFC, neither prelude is suppressed by #![no_implicit_prelude]. This is technically a breaking change since it can produce new ambiguity errors in stable code.

(The breaking change is already taken care of in rust-lang#162597, the ambiguity error is raised regardless of whether the `no_implicit_prelude` attribute is used)

Currently, the following code errors. After this PR, it will start compiling.
```rust
#![no_implicit_prelude]
#![feature(register_tool)]
#![register_tool(my_tool)]

#[my_tool::attr] // ERROR cannot find module or crate `my_tool` in this scope
#[rustfmt::skip] // ERROR cannot find module or crate `rustfmt` in this scope
struct X;
```

Reference PR: rust-lang/reference#2404

r? petrochenkov
rust-bors Bot pushed a commit that referenced this pull request Nov 3, 2026
…uwer

Rollup of 21 pull requests

Successful merges:

 - #165416 (fix unsoundness when compiling `[diverging_const; 0]`)
 - #149245 (Make inline attributes apply to the generated `poll` in async fn)
 - #163495 (Parallelize AST -> HIR lowering)
 - #164304 ([perf] Reuse CanonicalVarKinds if no new variables were added)
 - #165109 (Avoid building a region map when erasing bound regions)
 - #163393 (std: Use getexecpath() for current_exe() on OpenBSD)
 - #163625 (Add a lint helper attribute namespace )
 - #164414 (Add `let_underscore_drop_guard` lint.)
 - #165342 (Avoid unnecessary MIR traversals in CheckPackedRef lint)
 - #165351 (delegation: insert probing adjustments before args check adjustments)
 - #165358 (Reenable some cg_gcc tests that were disabled)
 - #165377 (Make `no_implicit_prelude` not suppress tool attributes)
 - #165397 (Add codegen test for unused match arms removed after inlining)
 - #165398 (Rework parallel reproducibility tests)
 - #162608 (Avoid oscillating line wrapping due to symbol indices)
 - #164241 (make the safety documentation consistent in Ptr module)
 - #165029 (Use `MalformedLintAttributeInput` in more places)
 - #165203 (AIX: Implement TLS destructor guard in std and update dynamic-loading-cdylib test)
 - #165230 (Fix rigidity assertion ICE)
 - #165293 (unstable-book: update default-visibility.md to link to tracking issue)
 - #165374 (Refactorings in preparation for the move trait)
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Nov 3, 2026
…r, r=petrochenkov

Make `no_implicit_prelude` not suppress tool attributes

Implements part of the `register_tool` rfc, [RFC 3808](https://rust-lang.github.io/rfcs/3808-register-tool.html):
> Today, #![no_implicit_prelude] suppresses the tool attribute prelude but does not suppress the lint prelude (e.g., #[allow(clippy::foo)] continues to work). Under this RFC, neither prelude is suppressed by #![no_implicit_prelude]. This is technically a breaking change since it can produce new ambiguity errors in stable code.

(The breaking change is already taken care of in rust-lang#162597, the ambiguity error is raised regardless of whether the `no_implicit_prelude` attribute is used)

Currently, the following code errors. After this PR, it will start compiling.
```rust
#![no_implicit_prelude]
#![feature(register_tool)]
#![register_tool(my_tool)]

#[my_tool::attr] // ERROR cannot find module or crate `my_tool` in this scope
#[rustfmt::skip] // ERROR cannot find module or crate `rustfmt` in this scope
struct X;
```

Reference PR: rust-lang/reference#2404

r? petrochenkov
rust-bors Bot pushed a commit that referenced this pull request Nov 3, 2026
…uwer

Rollup of 20 pull requests

Successful merges:

 - #149245 (Make inline attributes apply to the generated `poll` in async fn)
 - #163495 (Parallelize AST -> HIR lowering)
 - #164304 ([perf] Reuse CanonicalVarKinds if no new variables were added)
 - #165109 (Avoid building a region map when erasing bound regions)
 - #163393 (std: Use getexecpath() for current_exe() on OpenBSD)
 - #163625 (Add a lint helper attribute namespace )
 - #164414 (Add `let_underscore_drop_guard` lint.)
 - #165342 (Avoid unnecessary MIR traversals in CheckPackedRef lint)
 - #165351 (delegation: insert probing adjustments before args check adjustments)
 - #165358 (Reenable some cg_gcc tests that were disabled)
 - #165377 (Make `no_implicit_prelude` not suppress tool attributes)
 - #165397 (Add codegen test for unused match arms removed after inlining)
 - #165398 (Rework parallel reproducibility tests)
 - #162608 (Avoid oscillating line wrapping due to symbol indices)
 - #164241 (make the safety documentation consistent in Ptr module)
 - #165029 (Use `MalformedLintAttributeInput` in more places)
 - #165203 (AIX: Implement TLS destructor guard in std and update dynamic-loading-cdylib test)
 - #165230 (Fix rigidity assertion ICE)
 - #165293 (unstable-book: update default-visibility.md to link to tracking issue)
 - #165374 (Refactorings in preparation for the move trait)
rust-bors Bot pushed a commit that referenced this pull request Nov 3, 2026
…uwer

Rollup of 22 pull requests

Successful merges:

 - #149245 (Make inline attributes apply to the generated `poll` in async fn)
 - #164304 ([perf] Reuse CanonicalVarKinds if no new variables were added)
 - #165109 (Avoid building a region map when erasing bound regions)
 - #163393 (std: Use getexecpath() for current_exe() on OpenBSD)
 - #163625 (Add a lint helper attribute namespace )
 - #164414 (Add `let_underscore_drop_guard` lint.)
 - #165342 (Avoid unnecessary MIR traversals in CheckPackedRef lint)
 - #165351 (delegation: insert probing adjustments before args check adjustments)
 - #165358 (Reenable some cg_gcc tests that were disabled)
 - #165377 (Make `no_implicit_prelude` not suppress tool attributes)
 - #165397 (Add codegen test for unused match arms removed after inlining)
 - #165398 (Rework parallel reproducibility tests)
 - #162232 (Replace `builtin #` with `k#`)
 - #162608 (Avoid oscillating line wrapping due to symbol indices)
 - #164241 (make the safety documentation consistent in Ptr module)
 - #164258 (clarify when `Vec::into_boxed_slice()` is in-place)
 - #165029 (Use `MalformedLintAttributeInput` in more places)
 - #165203 (AIX: Implement TLS destructor guard in std and update dynamic-loading-cdylib test)
 - #165230 (Fix rigidity assertion ICE)
 - #165293 (unstable-book: update default-visibility.md to link to tracking issue)
 - #165374 (Refactorings in preparation for the move trait)
 - #165421 (another Enzyme submodule update for nested autodiff)
@rust-bors
rust-bors Bot merged commit dc538a0 into rust-lang:main Nov 4, 2026
14 checks passed
@rustbot rustbot added this to the 1.101.0 milestone Nov 4, 2026
rust-bors Bot pushed a commit that referenced this pull request Nov 4, 2026
Rollup merge of #165377 - mejrs:no_implicit_prelude_tool_attr, r=petrochenkov

Make `no_implicit_prelude` not suppress tool attributes

Implements part of the `register_tool` rfc, [RFC 3808](https://rust-lang.github.io/rfcs/3808-register-tool.html):
> Today, #![no_implicit_prelude] suppresses the tool attribute prelude but does not suppress the lint prelude (e.g., #[allow(clippy::foo)] continues to work). Under this RFC, neither prelude is suppressed by #![no_implicit_prelude]. This is technically a breaking change since it can produce new ambiguity errors in stable code.

(The breaking change is already taken care of in #162597, the ambiguity error is raised regardless of whether the `no_implicit_prelude` attribute is used)

Currently, the following code errors. After this PR, it will start compiling.
```rust
#![no_implicit_prelude]
#![feature(register_tool)]
#![register_tool(my_tool)]

#[my_tool::attr] // ERROR cannot find module or crate `my_tool` in this scope
#[rustfmt::skip] // ERROR cannot find module or crate `rustfmt` in this scope
struct X;
```

Reference PR: rust-lang/reference#2404

r? petrochenkov
RalfJung pushed a commit to RalfJung/miri that referenced this pull request Nov 4, 2026
…uwer

Rollup of 22 pull requests

Successful merges:

 - rust-lang/rust#149245 (Make inline attributes apply to the generated `poll` in async fn)
 - rust-lang/rust#164304 ([perf] Reuse CanonicalVarKinds if no new variables were added)
 - rust-lang/rust#165109 (Avoid building a region map when erasing bound regions)
 - rust-lang/rust#163393 (std: Use getexecpath() for current_exe() on OpenBSD)
 - rust-lang/rust#163625 (Add a lint helper attribute namespace )
 - rust-lang/rust#164414 (Add `let_underscore_drop_guard` lint.)
 - rust-lang/rust#165342 (Avoid unnecessary MIR traversals in CheckPackedRef lint)
 - rust-lang/rust#165351 (delegation: insert probing adjustments before args check adjustments)
 - rust-lang/rust#165358 (Reenable some cg_gcc tests that were disabled)
 - rust-lang/rust#165377 (Make `no_implicit_prelude` not suppress tool attributes)
 - rust-lang/rust#165397 (Add codegen test for unused match arms removed after inlining)
 - rust-lang/rust#165398 (Rework parallel reproducibility tests)
 - rust-lang/rust#162232 (Replace `builtin #` with `k#`)
 - rust-lang/rust#162608 (Avoid oscillating line wrapping due to symbol indices)
 - rust-lang/rust#164241 (make the safety documentation consistent in Ptr module)
 - rust-lang/rust#164258 (clarify when `Vec::into_boxed_slice()` is in-place)
 - rust-lang/rust#165029 (Use `MalformedLintAttributeInput` in more places)
 - rust-lang/rust#165203 (AIX: Implement TLS destructor guard in std and update dynamic-loading-cdylib test)
 - rust-lang/rust#165230 (Fix rigidity assertion ICE)
 - rust-lang/rust#165293 (unstable-book: update default-visibility.md to link to tracking issue)
 - rust-lang/rust#165374 (Refactorings in preparation for the move trait)
 - rust-lang/rust#165421 (another Enzyme submodule update for nested autodiff)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants