Clean up AttributeLintKind and refactor diagnostic attribute linting - #155215

Merged
rust-bors[bot] merged 8 commits into
rust-lang:mainfrom
mejrs:condense_diag_lints
Apr 16, 2026
Merged

Clean up AttributeLintKind and refactor diagnostic attribute linting#155215
rust-bors[bot] merged 8 commits into
rust-lang:mainfrom
mejrs:condense_diag_lints

Conversation

@mejrs

Copy link
Copy Markdown
Member

There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.

@rustbot

Copy link
Copy Markdown
Collaborator

Some changes occurred in compiler/rustc_attr_parsing

cc @jdonszelmann, @JonathanBrouwer

@rustbotrustbot added A-attributes Area: Attributes (`#[…]`, `#![…]`) 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 Apr 12, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @JohnTitor

rustbot has assigned @JohnTitor.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 69 candidates
  • Random selection from 12 candidates

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 0dd591a to a4e8640CompareApril 12, 2026 21:54
@rustbot

Copy link
Copy Markdown
Collaborator

The Miri subtree was changed

cc @rust-lang/miri

@rustbotrustbot added the WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) label Apr 12, 2026
@rustbot

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from a4e8640 to 0dd591aCompareApril 12, 2026 22:00
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@mejrs

Copy link
Copy Markdown
MemberAuthor

@rustbot label -WG-trait-system-refactor

@rustbotrustbot removed the WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) label Apr 13, 2026
span,
);
}
if matches!(mode, Mode::RustcOnUnimplemented) {

@JonathanBrouwerJonathanBrouwerApr 14, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't really like matches! here because if we ever add another rustc diagnostic attribute, we could forget to check it. How about a method mode.should_error(), that has an exhaustive match in it?

View changes since the review

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It doesn't actually matter, assuming we don't ship a std that compiles with warnings?

So far my decisions on whether rustc_on_unimplemented errors or issues a diagnostic namespace lint have been largely focused on keeping the implementation simple:

  • erroring is easier than adding AttributeLintKind variants
  • so hard error in rustc_on_unimplemented-only paths to simplify there
  • issue lints in shared paths so you don't have to care about which attr it is

In fact, maybe this should just be a warning regardless?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That mentality also sounds reasonable to me, lets make this a warning to keep the implementation simple

@mejrsmejrsApr 14, 2026

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I remember why it is this way, I applied the suggestion and then I got annoyed because

LL | #[rustc_on_unimplemented(lorem = "")]
| ^^^^^^^^^^ invalid option found here
|
= help: only `message`, `note` and `label` are allowed as options

is not quite right.

The last commit fixes that by letting you customize the "allowed options" list per attribute. Note that I'm inclined to have an attribute with only "note" allowed, (#155200 (comment)) so we will need some kind of customization (or more lint variants) anyway.

Let me know what you think about the last few commits, idm backing it out if you prefer.

@JonathanBrouwerJonathanBrouwerApr 15, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems reasonable, especially since we need this in the future :)

@JonathanBrouwerJonathanBrouwer left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

r=me with nit fixed
@bors delegate

View changes since this review

@rust-bors

rust-borsBot commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

✌️ @mejrs, you can now approve this pull request!

If @JonathanBrouwer told you to "r=me" after making some further change, then please make that change and post @bors r=JonathanBrouwer.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 79d2d9a to 103adaaCompareApril 15, 2026 10:36
@rust-log-analyzer

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 103adaa to d6bccacCompareApril 15, 2026 11:50
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors r+ rollup

@rust-bors

rust-borsBot commented Apr 15, 2026

Copy link
Copy Markdown
Contributor

📌 Commit d6bccac has been approved by JonathanBrouwer

It is now in the queue for this repository.

@rust-borsrust-borsBot 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 Apr 15, 2026
jhpratt added a commit to jhpratt/rust that referenced this pull request Apr 16, 2026
…hanBrouwer
Clean up `AttributeLintKind` and refactor diagnostic attribute linting
There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.
@jhprattjhpratt mentioned this pull request Apr 16, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 16, 2026
Rollup of 18 pull requests
Successful merges:
- #154595 (Emit fatal on invalid const args with nested defs)
- #154599 (report the `varargs_without_pattern` lint in deps)
- #154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- #155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- #155357 (Add `--remap-path-scope` as unstable in rustdoc)
- #150649 (clippy fix: non_canonical_clone_impl)
- #154604 (abort in core)
- #154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- #154970 (rustdoc: preserve `doc(cfg)` on locally re-exported type aliases)
- #155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- #155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- #155266 (Adjust release notes for post-merge feedback)
- #155326 (Disallow ZST allocations with `TypedArena`.)
- #155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- #155340 (Handle nonnull pattern types in size skeleton)
- #155347 (Add push_mut and new Layout methods to release notes)
- #155356 (remove calls to AliasTyKind::def_id)
- #155364 (Reduce diagnostic type visibilities.)
@jhprattjhpratt mentioned this pull request Apr 16, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 16, 2026
Rollup of 18 pull requests
Successful merges:
- #154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- #154595 (Emit fatal on invalid const args with nested defs)
- #154599 (report the `varargs_without_pattern` lint in deps)
- #154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- #155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- #155357 (Add `--remap-path-scope` as unstable in rustdoc)
- #150649 (clippy fix: non_canonical_clone_impl)
- #154604 (abort in core)
- #154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- #155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- #155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- #155266 (Adjust release notes for post-merge feedback)
- #155326 (Disallow ZST allocations with `TypedArena`.)
- #155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- #155340 (Handle nonnull pattern types in size skeleton)
- #155347 (Add push_mut and new Layout methods to release notes)
- #155356 (remove calls to AliasTyKind::def_id)
- #155364 (Reduce diagnostic type visibilities.)
@rust-bors
rust-borsBot merged commit 0d98e0d into rust-lang:mainApr 16, 2026
11 checks passed
rust-timer added a commit that referenced this pull request Apr 16, 2026
Rollup merge of #155215 - mejrs:condense_diag_lints, r=JonathanBrouwer
Clean up `AttributeLintKind` and refactor diagnostic attribute linting
There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.
zihan0822 pushed a commit to zihan0822/rust-clippy that referenced this pull request Apr 30, 2026
Rollup of 18 pull requests
Successful merges:
- rust-lang/rust#154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- rust-lang/rust#154595 (Emit fatal on invalid const args with nested defs)
- rust-lang/rust#154599 (report the `varargs_without_pattern` lint in deps)
- rust-lang/rust#154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- rust-lang/rust#155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- rust-lang/rust#155357 (Add `--remap-path-scope` as unstable in rustdoc)
- rust-lang/rust#150649 (clippy fix: non_canonical_clone_impl)
- rust-lang/rust#154604 (abort in core)
- rust-lang/rust#154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- rust-lang/rust#155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- rust-lang/rust#155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- rust-lang/rust#155266 (Adjust release notes for post-merge feedback)
- rust-lang/rust#155326 (Disallow ZST allocations with `TypedArena`.)
- rust-lang/rust#155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- rust-lang/rust#155340 (Handle nonnull pattern types in size skeleton)
- rust-lang/rust#155347 (Add push_mut and new Layout methods to release notes)
- rust-lang/rust#155356 (remove calls to AliasTyKind::def_id)
- rust-lang/rust#155364 (Reduce diagnostic type visibilities.)
@cuvipercuviper added this to the 1.97.0 milestone Apr 30, 2026
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
Rollup of 18 pull requests
Successful merges:
- rust-lang/rust#154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- rust-lang/rust#154595 (Emit fatal on invalid const args with nested defs)
- rust-lang/rust#154599 (report the `varargs_without_pattern` lint in deps)
- rust-lang/rust#154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- rust-lang/rust#155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- rust-lang/rust#155357 (Add `--remap-path-scope` as unstable in rustdoc)
- rust-lang/rust#150649 (clippy fix: non_canonical_clone_impl)
- rust-lang/rust#154604 (abort in core)
- rust-lang/rust#154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- rust-lang/rust#155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- rust-lang/rust#155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- rust-lang/rust#155266 (Adjust release notes for post-merge feedback)
- rust-lang/rust#155326 (Disallow ZST allocations with `TypedArena`.)
- rust-lang/rust#155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- rust-lang/rust#155340 (Handle nonnull pattern types in size skeleton)
- rust-lang/rust#155347 (Add push_mut and new Layout methods to release notes)
- rust-lang/rust#155356 (remove calls to AliasTyKind::def_id)
- rust-lang/rust#155364 (Reduce diagnostic type visibilities.)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-attributesArea: Attributes (`#[…]`, `#![…]`)S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant 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.

6 participants

@mejrs@rustbot@rust-log-analyzer@JonathanBrouwer@cuviper@JohnTitor
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Clean up AttributeLintKind and refactor diagnostic attribute linting - #155215

Merged
rust-bors[bot] merged 8 commits into
rust-lang:mainfrom
mejrs:condense_diag_lints
Apr 16, 2026
Merged

Clean up AttributeLintKind and refactor diagnostic attribute linting#155215
rust-bors[bot] merged 8 commits into
rust-lang:mainfrom
mejrs:condense_diag_lints

Conversation

@mejrs

Copy link
Copy Markdown
Member

There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.

@rustbot

Copy link
Copy Markdown
Collaborator

Some changes occurred in compiler/rustc_attr_parsing

cc @jdonszelmann, @JonathanBrouwer

@rustbotrustbot added A-attributes Area: Attributes (`#[…]`, `#![…]`) 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 Apr 12, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @JohnTitor

rustbot has assigned @JohnTitor.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 69 candidates
  • Random selection from 12 candidates

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 0dd591a to a4e8640CompareApril 12, 2026 21:54
@rustbot

Copy link
Copy Markdown
Collaborator

The Miri subtree was changed

cc @rust-lang/miri

@rustbotrustbot added the WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) label Apr 12, 2026
@rustbot

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from a4e8640 to 0dd591aCompareApril 12, 2026 22:00
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@mejrs

Copy link
Copy Markdown
MemberAuthor

@rustbot label -WG-trait-system-refactor

@rustbotrustbot removed the WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) label Apr 13, 2026
span,
);
}
if matches!(mode, Mode::RustcOnUnimplemented) {

@JonathanBrouwerJonathanBrouwerApr 14, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't really like matches! here because if we ever add another rustc diagnostic attribute, we could forget to check it. How about a method mode.should_error(), that has an exhaustive match in it?

View changes since the review

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It doesn't actually matter, assuming we don't ship a std that compiles with warnings?

So far my decisions on whether rustc_on_unimplemented errors or issues a diagnostic namespace lint have been largely focused on keeping the implementation simple:

  • erroring is easier than adding AttributeLintKind variants
  • so hard error in rustc_on_unimplemented-only paths to simplify there
  • issue lints in shared paths so you don't have to care about which attr it is

In fact, maybe this should just be a warning regardless?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That mentality also sounds reasonable to me, lets make this a warning to keep the implementation simple

@mejrsmejrsApr 14, 2026

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I remember why it is this way, I applied the suggestion and then I got annoyed because

LL | #[rustc_on_unimplemented(lorem = "")]
| ^^^^^^^^^^ invalid option found here
|
= help: only `message`, `note` and `label` are allowed as options

is not quite right.

The last commit fixes that by letting you customize the "allowed options" list per attribute. Note that I'm inclined to have an attribute with only "note" allowed, (#155200 (comment)) so we will need some kind of customization (or more lint variants) anyway.

Let me know what you think about the last few commits, idm backing it out if you prefer.

@JonathanBrouwerJonathanBrouwerApr 15, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems reasonable, especially since we need this in the future :)

@JonathanBrouwerJonathanBrouwer left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

r=me with nit fixed
@bors delegate

View changes since this review

@rust-bors

rust-borsBot commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

✌️ @mejrs, you can now approve this pull request!

If @JonathanBrouwer told you to "r=me" after making some further change, then please make that change and post @bors r=JonathanBrouwer.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 79d2d9a to 103adaaCompareApril 15, 2026 10:36
@rust-log-analyzer

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 103adaa to d6bccacCompareApril 15, 2026 11:50
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors r+ rollup

@rust-bors

rust-borsBot commented Apr 15, 2026

Copy link
Copy Markdown
Contributor

📌 Commit d6bccac has been approved by JonathanBrouwer

It is now in the queue for this repository.

@rust-borsrust-borsBot 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 Apr 15, 2026
jhpratt added a commit to jhpratt/rust that referenced this pull request Apr 16, 2026
…hanBrouwer
Clean up `AttributeLintKind` and refactor diagnostic attribute linting
There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.
@jhprattjhpratt mentioned this pull request Apr 16, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 16, 2026
Rollup of 18 pull requests
Successful merges:
- #154595 (Emit fatal on invalid const args with nested defs)
- #154599 (report the `varargs_without_pattern` lint in deps)
- #154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- #155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- #155357 (Add `--remap-path-scope` as unstable in rustdoc)
- #150649 (clippy fix: non_canonical_clone_impl)
- #154604 (abort in core)
- #154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- #154970 (rustdoc: preserve `doc(cfg)` on locally re-exported type aliases)
- #155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- #155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- #155266 (Adjust release notes for post-merge feedback)
- #155326 (Disallow ZST allocations with `TypedArena`.)
- #155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- #155340 (Handle nonnull pattern types in size skeleton)
- #155347 (Add push_mut and new Layout methods to release notes)
- #155356 (remove calls to AliasTyKind::def_id)
- #155364 (Reduce diagnostic type visibilities.)
@jhprattjhpratt mentioned this pull request Apr 16, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 16, 2026
Rollup of 18 pull requests
Successful merges:
- #154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- #154595 (Emit fatal on invalid const args with nested defs)
- #154599 (report the `varargs_without_pattern` lint in deps)
- #154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- #155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- #155357 (Add `--remap-path-scope` as unstable in rustdoc)
- #150649 (clippy fix: non_canonical_clone_impl)
- #154604 (abort in core)
- #154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- #155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- #155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- #155266 (Adjust release notes for post-merge feedback)
- #155326 (Disallow ZST allocations with `TypedArena`.)
- #155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- #155340 (Handle nonnull pattern types in size skeleton)
- #155347 (Add push_mut and new Layout methods to release notes)
- #155356 (remove calls to AliasTyKind::def_id)
- #155364 (Reduce diagnostic type visibilities.)
@rust-bors
rust-borsBot merged commit 0d98e0d into rust-lang:mainApr 16, 2026
11 checks passed
rust-timer added a commit that referenced this pull request Apr 16, 2026
Rollup merge of #155215 - mejrs:condense_diag_lints, r=JonathanBrouwer
Clean up `AttributeLintKind` and refactor diagnostic attribute linting
There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.
zihan0822 pushed a commit to zihan0822/rust-clippy that referenced this pull request Apr 30, 2026
Rollup of 18 pull requests
Successful merges:
- rust-lang/rust#154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- rust-lang/rust#154595 (Emit fatal on invalid const args with nested defs)
- rust-lang/rust#154599 (report the `varargs_without_pattern` lint in deps)
- rust-lang/rust#154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- rust-lang/rust#155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- rust-lang/rust#155357 (Add `--remap-path-scope` as unstable in rustdoc)
- rust-lang/rust#150649 (clippy fix: non_canonical_clone_impl)
- rust-lang/rust#154604 (abort in core)
- rust-lang/rust#154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- rust-lang/rust#155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- rust-lang/rust#155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- rust-lang/rust#155266 (Adjust release notes for post-merge feedback)
- rust-lang/rust#155326 (Disallow ZST allocations with `TypedArena`.)
- rust-lang/rust#155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- rust-lang/rust#155340 (Handle nonnull pattern types in size skeleton)
- rust-lang/rust#155347 (Add push_mut and new Layout methods to release notes)
- rust-lang/rust#155356 (remove calls to AliasTyKind::def_id)
- rust-lang/rust#155364 (Reduce diagnostic type visibilities.)
@cuvipercuviper added this to the 1.97.0 milestone Apr 30, 2026
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
Rollup of 18 pull requests
Successful merges:
- rust-lang/rust#154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- rust-lang/rust#154595 (Emit fatal on invalid const args with nested defs)
- rust-lang/rust#154599 (report the `varargs_without_pattern` lint in deps)
- rust-lang/rust#154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- rust-lang/rust#155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- rust-lang/rust#155357 (Add `--remap-path-scope` as unstable in rustdoc)
- rust-lang/rust#150649 (clippy fix: non_canonical_clone_impl)
- rust-lang/rust#154604 (abort in core)
- rust-lang/rust#154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- rust-lang/rust#155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- rust-lang/rust#155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- rust-lang/rust#155266 (Adjust release notes for post-merge feedback)
- rust-lang/rust#155326 (Disallow ZST allocations with `TypedArena`.)
- rust-lang/rust#155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- rust-lang/rust#155340 (Handle nonnull pattern types in size skeleton)
- rust-lang/rust#155347 (Add push_mut and new Layout methods to release notes)
- rust-lang/rust#155356 (remove calls to AliasTyKind::def_id)
- rust-lang/rust#155364 (Reduce diagnostic type visibilities.)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-attributesArea: Attributes (`#[…]`, `#![…]`)S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant 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.

6 participants

@mejrs@rustbot@rust-log-analyzer@JonathanBrouwer@cuviper@JohnTitor
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Clean up AttributeLintKind and refactor diagnostic attribute linting - #155215

Merged
rust-bors[bot] merged 8 commits into
rust-lang:mainfrom
mejrs:condense_diag_lints
Apr 16, 2026
Merged

Clean up AttributeLintKind and refactor diagnostic attribute linting#155215
rust-bors[bot] merged 8 commits into
rust-lang:mainfrom
mejrs:condense_diag_lints

Conversation

@mejrs

Copy link
Copy Markdown
Member

There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.

@rustbot

Copy link
Copy Markdown
Collaborator

Some changes occurred in compiler/rustc_attr_parsing

cc @jdonszelmann, @JonathanBrouwer

@rustbotrustbot added A-attributes Area: Attributes (`#[…]`, `#![…]`) 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 Apr 12, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @JohnTitor

rustbot has assigned @JohnTitor.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 69 candidates
  • Random selection from 12 candidates

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 0dd591a to a4e8640CompareApril 12, 2026 21:54
@rustbot

Copy link
Copy Markdown
Collaborator

The Miri subtree was changed

cc @rust-lang/miri

@rustbotrustbot added the WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) label Apr 12, 2026
@rustbot

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from a4e8640 to 0dd591aCompareApril 12, 2026 22:00
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@mejrs

Copy link
Copy Markdown
MemberAuthor

@rustbot label -WG-trait-system-refactor

@rustbotrustbot removed the WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) label Apr 13, 2026
span,
);
}
if matches!(mode, Mode::RustcOnUnimplemented) {

@JonathanBrouwerJonathanBrouwerApr 14, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't really like matches! here because if we ever add another rustc diagnostic attribute, we could forget to check it. How about a method mode.should_error(), that has an exhaustive match in it?

View changes since the review

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It doesn't actually matter, assuming we don't ship a std that compiles with warnings?

So far my decisions on whether rustc_on_unimplemented errors or issues a diagnostic namespace lint have been largely focused on keeping the implementation simple:

  • erroring is easier than adding AttributeLintKind variants
  • so hard error in rustc_on_unimplemented-only paths to simplify there
  • issue lints in shared paths so you don't have to care about which attr it is

In fact, maybe this should just be a warning regardless?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That mentality also sounds reasonable to me, lets make this a warning to keep the implementation simple

@mejrsmejrsApr 14, 2026

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I remember why it is this way, I applied the suggestion and then I got annoyed because

LL | #[rustc_on_unimplemented(lorem = "")]
| ^^^^^^^^^^ invalid option found here
|
= help: only `message`, `note` and `label` are allowed as options

is not quite right.

The last commit fixes that by letting you customize the "allowed options" list per attribute. Note that I'm inclined to have an attribute with only "note" allowed, (#155200 (comment)) so we will need some kind of customization (or more lint variants) anyway.

Let me know what you think about the last few commits, idm backing it out if you prefer.

@JonathanBrouwerJonathanBrouwerApr 15, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems reasonable, especially since we need this in the future :)

@JonathanBrouwerJonathanBrouwer left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

r=me with nit fixed
@bors delegate

View changes since this review

@rust-bors

rust-borsBot commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

✌️ @mejrs, you can now approve this pull request!

If @JonathanBrouwer told you to "r=me" after making some further change, then please make that change and post @bors r=JonathanBrouwer.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 79d2d9a to 103adaaCompareApril 15, 2026 10:36
@rust-log-analyzer

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 103adaa to d6bccacCompareApril 15, 2026 11:50
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors r+ rollup

@rust-bors

rust-borsBot commented Apr 15, 2026

Copy link
Copy Markdown
Contributor

📌 Commit d6bccac has been approved by JonathanBrouwer

It is now in the queue for this repository.

@rust-borsrust-borsBot 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 Apr 15, 2026
jhpratt added a commit to jhpratt/rust that referenced this pull request Apr 16, 2026
…hanBrouwer
Clean up `AttributeLintKind` and refactor diagnostic attribute linting
There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.
@jhprattjhpratt mentioned this pull request Apr 16, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 16, 2026
Rollup of 18 pull requests
Successful merges:
- #154595 (Emit fatal on invalid const args with nested defs)
- #154599 (report the `varargs_without_pattern` lint in deps)
- #154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- #155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- #155357 (Add `--remap-path-scope` as unstable in rustdoc)
- #150649 (clippy fix: non_canonical_clone_impl)
- #154604 (abort in core)
- #154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- #154970 (rustdoc: preserve `doc(cfg)` on locally re-exported type aliases)
- #155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- #155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- #155266 (Adjust release notes for post-merge feedback)
- #155326 (Disallow ZST allocations with `TypedArena`.)
- #155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- #155340 (Handle nonnull pattern types in size skeleton)
- #155347 (Add push_mut and new Layout methods to release notes)
- #155356 (remove calls to AliasTyKind::def_id)
- #155364 (Reduce diagnostic type visibilities.)
@jhprattjhpratt mentioned this pull request Apr 16, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 16, 2026
Rollup of 18 pull requests
Successful merges:
- #154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- #154595 (Emit fatal on invalid const args with nested defs)
- #154599 (report the `varargs_without_pattern` lint in deps)
- #154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- #155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- #155357 (Add `--remap-path-scope` as unstable in rustdoc)
- #150649 (clippy fix: non_canonical_clone_impl)
- #154604 (abort in core)
- #154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- #155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- #155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- #155266 (Adjust release notes for post-merge feedback)
- #155326 (Disallow ZST allocations with `TypedArena`.)
- #155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- #155340 (Handle nonnull pattern types in size skeleton)
- #155347 (Add push_mut and new Layout methods to release notes)
- #155356 (remove calls to AliasTyKind::def_id)
- #155364 (Reduce diagnostic type visibilities.)
@rust-bors
rust-borsBot merged commit 0d98e0d into rust-lang:mainApr 16, 2026
11 checks passed
rust-timer added a commit that referenced this pull request Apr 16, 2026
Rollup merge of #155215 - mejrs:condense_diag_lints, r=JonathanBrouwer
Clean up `AttributeLintKind` and refactor diagnostic attribute linting
There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.
zihan0822 pushed a commit to zihan0822/rust-clippy that referenced this pull request Apr 30, 2026
Rollup of 18 pull requests
Successful merges:
- rust-lang/rust#154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- rust-lang/rust#154595 (Emit fatal on invalid const args with nested defs)
- rust-lang/rust#154599 (report the `varargs_without_pattern` lint in deps)
- rust-lang/rust#154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- rust-lang/rust#155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- rust-lang/rust#155357 (Add `--remap-path-scope` as unstable in rustdoc)
- rust-lang/rust#150649 (clippy fix: non_canonical_clone_impl)
- rust-lang/rust#154604 (abort in core)
- rust-lang/rust#154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- rust-lang/rust#155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- rust-lang/rust#155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- rust-lang/rust#155266 (Adjust release notes for post-merge feedback)
- rust-lang/rust#155326 (Disallow ZST allocations with `TypedArena`.)
- rust-lang/rust#155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- rust-lang/rust#155340 (Handle nonnull pattern types in size skeleton)
- rust-lang/rust#155347 (Add push_mut and new Layout methods to release notes)
- rust-lang/rust#155356 (remove calls to AliasTyKind::def_id)
- rust-lang/rust#155364 (Reduce diagnostic type visibilities.)
@cuvipercuviper added this to the 1.97.0 milestone Apr 30, 2026
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
Rollup of 18 pull requests
Successful merges:
- rust-lang/rust#154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- rust-lang/rust#154595 (Emit fatal on invalid const args with nested defs)
- rust-lang/rust#154599 (report the `varargs_without_pattern` lint in deps)
- rust-lang/rust#154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- rust-lang/rust#155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- rust-lang/rust#155357 (Add `--remap-path-scope` as unstable in rustdoc)
- rust-lang/rust#150649 (clippy fix: non_canonical_clone_impl)
- rust-lang/rust#154604 (abort in core)
- rust-lang/rust#154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- rust-lang/rust#155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- rust-lang/rust#155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- rust-lang/rust#155266 (Adjust release notes for post-merge feedback)
- rust-lang/rust#155326 (Disallow ZST allocations with `TypedArena`.)
- rust-lang/rust#155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- rust-lang/rust#155340 (Handle nonnull pattern types in size skeleton)
- rust-lang/rust#155347 (Add push_mut and new Layout methods to release notes)
- rust-lang/rust#155356 (remove calls to AliasTyKind::def_id)
- rust-lang/rust#155364 (Reduce diagnostic type visibilities.)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-attributesArea: Attributes (`#[…]`, `#![…]`)S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant 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.

6 participants

@mejrs@rustbot@rust-log-analyzer@JonathanBrouwer@cuviper@JohnTitor
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Clean up AttributeLintKind and refactor diagnostic attribute linting - #155215

Merged
rust-bors[bot] merged 8 commits into
rust-lang:mainfrom
mejrs:condense_diag_lints
Apr 16, 2026
Merged

Clean up AttributeLintKind and refactor diagnostic attribute linting#155215
rust-bors[bot] merged 8 commits into
rust-lang:mainfrom
mejrs:condense_diag_lints

Conversation

@mejrs

Copy link
Copy Markdown
Member

There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.

@rustbot

Copy link
Copy Markdown
Collaborator

Some changes occurred in compiler/rustc_attr_parsing

cc @jdonszelmann, @JonathanBrouwer

@rustbotrustbot added A-attributes Area: Attributes (`#[…]`, `#![…]`) 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 Apr 12, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @JohnTitor

rustbot has assigned @JohnTitor.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 69 candidates
  • Random selection from 12 candidates

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 0dd591a to a4e8640CompareApril 12, 2026 21:54
@rustbot

Copy link
Copy Markdown
Collaborator

The Miri subtree was changed

cc @rust-lang/miri

@rustbotrustbot added the WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) label Apr 12, 2026
@rustbot

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from a4e8640 to 0dd591aCompareApril 12, 2026 22:00
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@mejrs

Copy link
Copy Markdown
MemberAuthor

@rustbot label -WG-trait-system-refactor

@rustbotrustbot removed the WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) label Apr 13, 2026
span,
);
}
if matches!(mode, Mode::RustcOnUnimplemented) {

@JonathanBrouwerJonathanBrouwerApr 14, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't really like matches! here because if we ever add another rustc diagnostic attribute, we could forget to check it. How about a method mode.should_error(), that has an exhaustive match in it?

View changes since the review

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It doesn't actually matter, assuming we don't ship a std that compiles with warnings?

So far my decisions on whether rustc_on_unimplemented errors or issues a diagnostic namespace lint have been largely focused on keeping the implementation simple:

  • erroring is easier than adding AttributeLintKind variants
  • so hard error in rustc_on_unimplemented-only paths to simplify there
  • issue lints in shared paths so you don't have to care about which attr it is

In fact, maybe this should just be a warning regardless?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That mentality also sounds reasonable to me, lets make this a warning to keep the implementation simple

@mejrsmejrsApr 14, 2026

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I remember why it is this way, I applied the suggestion and then I got annoyed because

LL | #[rustc_on_unimplemented(lorem = "")]
| ^^^^^^^^^^ invalid option found here
|
= help: only `message`, `note` and `label` are allowed as options

is not quite right.

The last commit fixes that by letting you customize the "allowed options" list per attribute. Note that I'm inclined to have an attribute with only "note" allowed, (#155200 (comment)) so we will need some kind of customization (or more lint variants) anyway.

Let me know what you think about the last few commits, idm backing it out if you prefer.

@JonathanBrouwerJonathanBrouwerApr 15, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems reasonable, especially since we need this in the future :)

@JonathanBrouwerJonathanBrouwer left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

r=me with nit fixed
@bors delegate

View changes since this review

@rust-bors

rust-borsBot commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

✌️ @mejrs, you can now approve this pull request!

If @JonathanBrouwer told you to "r=me" after making some further change, then please make that change and post @bors r=JonathanBrouwer.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 79d2d9a to 103adaaCompareApril 15, 2026 10:36
@rust-log-analyzer

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 103adaa to d6bccacCompareApril 15, 2026 11:50
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors r+ rollup

@rust-bors

rust-borsBot commented Apr 15, 2026

Copy link
Copy Markdown
Contributor

📌 Commit d6bccac has been approved by JonathanBrouwer

It is now in the queue for this repository.

@rust-borsrust-borsBot 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 Apr 15, 2026
jhpratt added a commit to jhpratt/rust that referenced this pull request Apr 16, 2026
…hanBrouwer
Clean up `AttributeLintKind` and refactor diagnostic attribute linting
There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.
@jhprattjhpratt mentioned this pull request Apr 16, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 16, 2026
Rollup of 18 pull requests
Successful merges:
- #154595 (Emit fatal on invalid const args with nested defs)
- #154599 (report the `varargs_without_pattern` lint in deps)
- #154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- #155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- #155357 (Add `--remap-path-scope` as unstable in rustdoc)
- #150649 (clippy fix: non_canonical_clone_impl)
- #154604 (abort in core)
- #154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- #154970 (rustdoc: preserve `doc(cfg)` on locally re-exported type aliases)
- #155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- #155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- #155266 (Adjust release notes for post-merge feedback)
- #155326 (Disallow ZST allocations with `TypedArena`.)
- #155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- #155340 (Handle nonnull pattern types in size skeleton)
- #155347 (Add push_mut and new Layout methods to release notes)
- #155356 (remove calls to AliasTyKind::def_id)
- #155364 (Reduce diagnostic type visibilities.)
@jhprattjhpratt mentioned this pull request Apr 16, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 16, 2026
Rollup of 18 pull requests
Successful merges:
- #154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- #154595 (Emit fatal on invalid const args with nested defs)
- #154599 (report the `varargs_without_pattern` lint in deps)
- #154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- #155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- #155357 (Add `--remap-path-scope` as unstable in rustdoc)
- #150649 (clippy fix: non_canonical_clone_impl)
- #154604 (abort in core)
- #154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- #155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- #155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- #155266 (Adjust release notes for post-merge feedback)
- #155326 (Disallow ZST allocations with `TypedArena`.)
- #155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- #155340 (Handle nonnull pattern types in size skeleton)
- #155347 (Add push_mut and new Layout methods to release notes)
- #155356 (remove calls to AliasTyKind::def_id)
- #155364 (Reduce diagnostic type visibilities.)
@rust-bors
rust-borsBot merged commit 0d98e0d into rust-lang:mainApr 16, 2026
11 checks passed
rust-timer added a commit that referenced this pull request Apr 16, 2026
Rollup merge of #155215 - mejrs:condense_diag_lints, r=JonathanBrouwer
Clean up `AttributeLintKind` and refactor diagnostic attribute linting
There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.
zihan0822 pushed a commit to zihan0822/rust-clippy that referenced this pull request Apr 30, 2026
Rollup of 18 pull requests
Successful merges:
- rust-lang/rust#154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- rust-lang/rust#154595 (Emit fatal on invalid const args with nested defs)
- rust-lang/rust#154599 (report the `varargs_without_pattern` lint in deps)
- rust-lang/rust#154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- rust-lang/rust#155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- rust-lang/rust#155357 (Add `--remap-path-scope` as unstable in rustdoc)
- rust-lang/rust#150649 (clippy fix: non_canonical_clone_impl)
- rust-lang/rust#154604 (abort in core)
- rust-lang/rust#154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- rust-lang/rust#155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- rust-lang/rust#155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- rust-lang/rust#155266 (Adjust release notes for post-merge feedback)
- rust-lang/rust#155326 (Disallow ZST allocations with `TypedArena`.)
- rust-lang/rust#155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- rust-lang/rust#155340 (Handle nonnull pattern types in size skeleton)
- rust-lang/rust#155347 (Add push_mut and new Layout methods to release notes)
- rust-lang/rust#155356 (remove calls to AliasTyKind::def_id)
- rust-lang/rust#155364 (Reduce diagnostic type visibilities.)
@cuvipercuviper added this to the 1.97.0 milestone Apr 30, 2026
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
Rollup of 18 pull requests
Successful merges:
- rust-lang/rust#154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- rust-lang/rust#154595 (Emit fatal on invalid const args with nested defs)
- rust-lang/rust#154599 (report the `varargs_without_pattern` lint in deps)
- rust-lang/rust#154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- rust-lang/rust#155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- rust-lang/rust#155357 (Add `--remap-path-scope` as unstable in rustdoc)
- rust-lang/rust#150649 (clippy fix: non_canonical_clone_impl)
- rust-lang/rust#154604 (abort in core)
- rust-lang/rust#154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- rust-lang/rust#155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- rust-lang/rust#155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- rust-lang/rust#155266 (Adjust release notes for post-merge feedback)
- rust-lang/rust#155326 (Disallow ZST allocations with `TypedArena`.)
- rust-lang/rust#155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- rust-lang/rust#155340 (Handle nonnull pattern types in size skeleton)
- rust-lang/rust#155347 (Add push_mut and new Layout methods to release notes)
- rust-lang/rust#155356 (remove calls to AliasTyKind::def_id)
- rust-lang/rust#155364 (Reduce diagnostic type visibilities.)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-attributesArea: Attributes (`#[…]`, `#![…]`)S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant 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.

6 participants

@mejrs@rustbot@rust-log-analyzer@JonathanBrouwer@cuviper@JohnTitor
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Clean up AttributeLintKind and refactor diagnostic attribute linting - #155215

Merged
rust-bors[bot] merged 8 commits into
rust-lang:mainfrom
mejrs:condense_diag_lints
Apr 16, 2026
Merged

Clean up AttributeLintKind and refactor diagnostic attribute linting#155215
rust-bors[bot] merged 8 commits into
rust-lang:mainfrom
mejrs:condense_diag_lints

Conversation

@mejrs

Copy link
Copy Markdown
Member

There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.

@rustbot

Copy link
Copy Markdown
Collaborator

Some changes occurred in compiler/rustc_attr_parsing

cc @jdonszelmann, @JonathanBrouwer

@rustbotrustbot added A-attributes Area: Attributes (`#[…]`, `#![…]`) 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 Apr 12, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @JohnTitor

rustbot has assigned @JohnTitor.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 69 candidates
  • Random selection from 12 candidates

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 0dd591a to a4e8640CompareApril 12, 2026 21:54
@rustbot

Copy link
Copy Markdown
Collaborator

The Miri subtree was changed

cc @rust-lang/miri

@rustbotrustbot added the WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) label Apr 12, 2026
@rustbot

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from a4e8640 to 0dd591aCompareApril 12, 2026 22:00
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@mejrs

Copy link
Copy Markdown
MemberAuthor

@rustbot label -WG-trait-system-refactor

@rustbotrustbot removed the WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) label Apr 13, 2026
span,
);
}
if matches!(mode, Mode::RustcOnUnimplemented) {

@JonathanBrouwerJonathanBrouwerApr 14, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't really like matches! here because if we ever add another rustc diagnostic attribute, we could forget to check it. How about a method mode.should_error(), that has an exhaustive match in it?

View changes since the review

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It doesn't actually matter, assuming we don't ship a std that compiles with warnings?

So far my decisions on whether rustc_on_unimplemented errors or issues a diagnostic namespace lint have been largely focused on keeping the implementation simple:

  • erroring is easier than adding AttributeLintKind variants
  • so hard error in rustc_on_unimplemented-only paths to simplify there
  • issue lints in shared paths so you don't have to care about which attr it is

In fact, maybe this should just be a warning regardless?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That mentality also sounds reasonable to me, lets make this a warning to keep the implementation simple

@mejrsmejrsApr 14, 2026

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I remember why it is this way, I applied the suggestion and then I got annoyed because

LL | #[rustc_on_unimplemented(lorem = "")]
| ^^^^^^^^^^ invalid option found here
|
= help: only `message`, `note` and `label` are allowed as options

is not quite right.

The last commit fixes that by letting you customize the "allowed options" list per attribute. Note that I'm inclined to have an attribute with only "note" allowed, (#155200 (comment)) so we will need some kind of customization (or more lint variants) anyway.

Let me know what you think about the last few commits, idm backing it out if you prefer.

@JonathanBrouwerJonathanBrouwerApr 15, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems reasonable, especially since we need this in the future :)

@JonathanBrouwerJonathanBrouwer left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

r=me with nit fixed
@bors delegate

View changes since this review

@rust-bors

rust-borsBot commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

✌️ @mejrs, you can now approve this pull request!

If @JonathanBrouwer told you to "r=me" after making some further change, then please make that change and post @bors r=JonathanBrouwer.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 79d2d9a to 103adaaCompareApril 15, 2026 10:36
@rust-log-analyzer

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 103adaa to d6bccacCompareApril 15, 2026 11:50
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors r+ rollup

@rust-bors

rust-borsBot commented Apr 15, 2026

Copy link
Copy Markdown
Contributor

📌 Commit d6bccac has been approved by JonathanBrouwer

It is now in the queue for this repository.

@rust-borsrust-borsBot 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 Apr 15, 2026
jhpratt added a commit to jhpratt/rust that referenced this pull request Apr 16, 2026
…hanBrouwer
Clean up `AttributeLintKind` and refactor diagnostic attribute linting
There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.
@jhprattjhpratt mentioned this pull request Apr 16, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 16, 2026
Rollup of 18 pull requests
Successful merges:
- #154595 (Emit fatal on invalid const args with nested defs)
- #154599 (report the `varargs_without_pattern` lint in deps)
- #154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- #155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- #155357 (Add `--remap-path-scope` as unstable in rustdoc)
- #150649 (clippy fix: non_canonical_clone_impl)
- #154604 (abort in core)
- #154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- #154970 (rustdoc: preserve `doc(cfg)` on locally re-exported type aliases)
- #155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- #155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- #155266 (Adjust release notes for post-merge feedback)
- #155326 (Disallow ZST allocations with `TypedArena`.)
- #155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- #155340 (Handle nonnull pattern types in size skeleton)
- #155347 (Add push_mut and new Layout methods to release notes)
- #155356 (remove calls to AliasTyKind::def_id)
- #155364 (Reduce diagnostic type visibilities.)
@jhprattjhpratt mentioned this pull request Apr 16, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 16, 2026
Rollup of 18 pull requests
Successful merges:
- #154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- #154595 (Emit fatal on invalid const args with nested defs)
- #154599 (report the `varargs_without_pattern` lint in deps)
- #154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- #155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- #155357 (Add `--remap-path-scope` as unstable in rustdoc)
- #150649 (clippy fix: non_canonical_clone_impl)
- #154604 (abort in core)
- #154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- #155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- #155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- #155266 (Adjust release notes for post-merge feedback)
- #155326 (Disallow ZST allocations with `TypedArena`.)
- #155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- #155340 (Handle nonnull pattern types in size skeleton)
- #155347 (Add push_mut and new Layout methods to release notes)
- #155356 (remove calls to AliasTyKind::def_id)
- #155364 (Reduce diagnostic type visibilities.)
@rust-bors
rust-borsBot merged commit 0d98e0d into rust-lang:mainApr 16, 2026
11 checks passed
rust-timer added a commit that referenced this pull request Apr 16, 2026
Rollup merge of #155215 - mejrs:condense_diag_lints, r=JonathanBrouwer
Clean up `AttributeLintKind` and refactor diagnostic attribute linting
There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.
zihan0822 pushed a commit to zihan0822/rust-clippy that referenced this pull request Apr 30, 2026
Rollup of 18 pull requests
Successful merges:
- rust-lang/rust#154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- rust-lang/rust#154595 (Emit fatal on invalid const args with nested defs)
- rust-lang/rust#154599 (report the `varargs_without_pattern` lint in deps)
- rust-lang/rust#154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- rust-lang/rust#155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- rust-lang/rust#155357 (Add `--remap-path-scope` as unstable in rustdoc)
- rust-lang/rust#150649 (clippy fix: non_canonical_clone_impl)
- rust-lang/rust#154604 (abort in core)
- rust-lang/rust#154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- rust-lang/rust#155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- rust-lang/rust#155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- rust-lang/rust#155266 (Adjust release notes for post-merge feedback)
- rust-lang/rust#155326 (Disallow ZST allocations with `TypedArena`.)
- rust-lang/rust#155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- rust-lang/rust#155340 (Handle nonnull pattern types in size skeleton)
- rust-lang/rust#155347 (Add push_mut and new Layout methods to release notes)
- rust-lang/rust#155356 (remove calls to AliasTyKind::def_id)
- rust-lang/rust#155364 (Reduce diagnostic type visibilities.)
@cuvipercuviper added this to the 1.97.0 milestone Apr 30, 2026
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
Rollup of 18 pull requests
Successful merges:
- rust-lang/rust#154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- rust-lang/rust#154595 (Emit fatal on invalid const args with nested defs)
- rust-lang/rust#154599 (report the `varargs_without_pattern` lint in deps)
- rust-lang/rust#154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- rust-lang/rust#155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- rust-lang/rust#155357 (Add `--remap-path-scope` as unstable in rustdoc)
- rust-lang/rust#150649 (clippy fix: non_canonical_clone_impl)
- rust-lang/rust#154604 (abort in core)
- rust-lang/rust#154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- rust-lang/rust#155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- rust-lang/rust#155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- rust-lang/rust#155266 (Adjust release notes for post-merge feedback)
- rust-lang/rust#155326 (Disallow ZST allocations with `TypedArena`.)
- rust-lang/rust#155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- rust-lang/rust#155340 (Handle nonnull pattern types in size skeleton)
- rust-lang/rust#155347 (Add push_mut and new Layout methods to release notes)
- rust-lang/rust#155356 (remove calls to AliasTyKind::def_id)
- rust-lang/rust#155364 (Reduce diagnostic type visibilities.)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-attributesArea: Attributes (`#[…]`, `#![…]`)S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant 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.

6 participants

@mejrs@rustbot@rust-log-analyzer@JonathanBrouwer@cuviper@JohnTitor
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Clean up AttributeLintKind and refactor diagnostic attribute linting - #155215

Merged
rust-bors[bot] merged 8 commits into
rust-lang:mainfrom
mejrs:condense_diag_lints
Apr 16, 2026
Merged

Clean up AttributeLintKind and refactor diagnostic attribute linting#155215
rust-bors[bot] merged 8 commits into
rust-lang:mainfrom
mejrs:condense_diag_lints

Conversation

@mejrs

Copy link
Copy Markdown
Member

There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.

@rustbot

Copy link
Copy Markdown
Collaborator

Some changes occurred in compiler/rustc_attr_parsing

cc @jdonszelmann, @JonathanBrouwer

@rustbotrustbot added A-attributes Area: Attributes (`#[…]`, `#![…]`) 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 Apr 12, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @JohnTitor

rustbot has assigned @JohnTitor.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 69 candidates
  • Random selection from 12 candidates

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 0dd591a to a4e8640CompareApril 12, 2026 21:54
@rustbot

Copy link
Copy Markdown
Collaborator

The Miri subtree was changed

cc @rust-lang/miri

@rustbotrustbot added the WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) label Apr 12, 2026
@rustbot

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from a4e8640 to 0dd591aCompareApril 12, 2026 22:00
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@mejrs

Copy link
Copy Markdown
MemberAuthor

@rustbot label -WG-trait-system-refactor

@rustbotrustbot removed the WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) label Apr 13, 2026
span,
);
}
if matches!(mode, Mode::RustcOnUnimplemented) {

@JonathanBrouwerJonathanBrouwerApr 14, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't really like matches! here because if we ever add another rustc diagnostic attribute, we could forget to check it. How about a method mode.should_error(), that has an exhaustive match in it?

View changes since the review

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It doesn't actually matter, assuming we don't ship a std that compiles with warnings?

So far my decisions on whether rustc_on_unimplemented errors or issues a diagnostic namespace lint have been largely focused on keeping the implementation simple:

  • erroring is easier than adding AttributeLintKind variants
  • so hard error in rustc_on_unimplemented-only paths to simplify there
  • issue lints in shared paths so you don't have to care about which attr it is

In fact, maybe this should just be a warning regardless?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That mentality also sounds reasonable to me, lets make this a warning to keep the implementation simple

@mejrsmejrsApr 14, 2026

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I remember why it is this way, I applied the suggestion and then I got annoyed because

LL | #[rustc_on_unimplemented(lorem = "")]
| ^^^^^^^^^^ invalid option found here
|
= help: only `message`, `note` and `label` are allowed as options

is not quite right.

The last commit fixes that by letting you customize the "allowed options" list per attribute. Note that I'm inclined to have an attribute with only "note" allowed, (#155200 (comment)) so we will need some kind of customization (or more lint variants) anyway.

Let me know what you think about the last few commits, idm backing it out if you prefer.

@JonathanBrouwerJonathanBrouwerApr 15, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems reasonable, especially since we need this in the future :)

@JonathanBrouwerJonathanBrouwer left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

r=me with nit fixed
@bors delegate

View changes since this review

@rust-bors

rust-borsBot commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

✌️ @mejrs, you can now approve this pull request!

If @JonathanBrouwer told you to "r=me" after making some further change, then please make that change and post @bors r=JonathanBrouwer.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 79d2d9a to 103adaaCompareApril 15, 2026 10:36
@rust-log-analyzer

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 103adaa to d6bccacCompareApril 15, 2026 11:50
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors r+ rollup

@rust-bors

rust-borsBot commented Apr 15, 2026

Copy link
Copy Markdown
Contributor

📌 Commit d6bccac has been approved by JonathanBrouwer

It is now in the queue for this repository.

@rust-borsrust-borsBot 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 Apr 15, 2026
jhpratt added a commit to jhpratt/rust that referenced this pull request Apr 16, 2026
…hanBrouwer
Clean up `AttributeLintKind` and refactor diagnostic attribute linting
There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.
@jhprattjhpratt mentioned this pull request Apr 16, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 16, 2026
Rollup of 18 pull requests
Successful merges:
- #154595 (Emit fatal on invalid const args with nested defs)
- #154599 (report the `varargs_without_pattern` lint in deps)
- #154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- #155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- #155357 (Add `--remap-path-scope` as unstable in rustdoc)
- #150649 (clippy fix: non_canonical_clone_impl)
- #154604 (abort in core)
- #154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- #154970 (rustdoc: preserve `doc(cfg)` on locally re-exported type aliases)
- #155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- #155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- #155266 (Adjust release notes for post-merge feedback)
- #155326 (Disallow ZST allocations with `TypedArena`.)
- #155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- #155340 (Handle nonnull pattern types in size skeleton)
- #155347 (Add push_mut and new Layout methods to release notes)
- #155356 (remove calls to AliasTyKind::def_id)
- #155364 (Reduce diagnostic type visibilities.)
@jhprattjhpratt mentioned this pull request Apr 16, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 16, 2026
Rollup of 18 pull requests
Successful merges:
- #154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- #154595 (Emit fatal on invalid const args with nested defs)
- #154599 (report the `varargs_without_pattern` lint in deps)
- #154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- #155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- #155357 (Add `--remap-path-scope` as unstable in rustdoc)
- #150649 (clippy fix: non_canonical_clone_impl)
- #154604 (abort in core)
- #154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- #155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- #155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- #155266 (Adjust release notes for post-merge feedback)
- #155326 (Disallow ZST allocations with `TypedArena`.)
- #155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- #155340 (Handle nonnull pattern types in size skeleton)
- #155347 (Add push_mut and new Layout methods to release notes)
- #155356 (remove calls to AliasTyKind::def_id)
- #155364 (Reduce diagnostic type visibilities.)
@rust-bors
rust-borsBot merged commit 0d98e0d into rust-lang:mainApr 16, 2026
11 checks passed
rust-timer added a commit that referenced this pull request Apr 16, 2026
Rollup merge of #155215 - mejrs:condense_diag_lints, r=JonathanBrouwer
Clean up `AttributeLintKind` and refactor diagnostic attribute linting
There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.
zihan0822 pushed a commit to zihan0822/rust-clippy that referenced this pull request Apr 30, 2026
Rollup of 18 pull requests
Successful merges:
- rust-lang/rust#154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- rust-lang/rust#154595 (Emit fatal on invalid const args with nested defs)
- rust-lang/rust#154599 (report the `varargs_without_pattern` lint in deps)
- rust-lang/rust#154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- rust-lang/rust#155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- rust-lang/rust#155357 (Add `--remap-path-scope` as unstable in rustdoc)
- rust-lang/rust#150649 (clippy fix: non_canonical_clone_impl)
- rust-lang/rust#154604 (abort in core)
- rust-lang/rust#154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- rust-lang/rust#155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- rust-lang/rust#155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- rust-lang/rust#155266 (Adjust release notes for post-merge feedback)
- rust-lang/rust#155326 (Disallow ZST allocations with `TypedArena`.)
- rust-lang/rust#155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- rust-lang/rust#155340 (Handle nonnull pattern types in size skeleton)
- rust-lang/rust#155347 (Add push_mut and new Layout methods to release notes)
- rust-lang/rust#155356 (remove calls to AliasTyKind::def_id)
- rust-lang/rust#155364 (Reduce diagnostic type visibilities.)
@cuvipercuviper added this to the 1.97.0 milestone Apr 30, 2026
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
Rollup of 18 pull requests
Successful merges:
- rust-lang/rust#154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- rust-lang/rust#154595 (Emit fatal on invalid const args with nested defs)
- rust-lang/rust#154599 (report the `varargs_without_pattern` lint in deps)
- rust-lang/rust#154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- rust-lang/rust#155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- rust-lang/rust#155357 (Add `--remap-path-scope` as unstable in rustdoc)
- rust-lang/rust#150649 (clippy fix: non_canonical_clone_impl)
- rust-lang/rust#154604 (abort in core)
- rust-lang/rust#154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- rust-lang/rust#155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- rust-lang/rust#155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- rust-lang/rust#155266 (Adjust release notes for post-merge feedback)
- rust-lang/rust#155326 (Disallow ZST allocations with `TypedArena`.)
- rust-lang/rust#155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- rust-lang/rust#155340 (Handle nonnull pattern types in size skeleton)
- rust-lang/rust#155347 (Add push_mut and new Layout methods to release notes)
- rust-lang/rust#155356 (remove calls to AliasTyKind::def_id)
- rust-lang/rust#155364 (Reduce diagnostic type visibilities.)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-attributesArea: Attributes (`#[…]`, `#![…]`)S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant 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.

6 participants

@mejrs@rustbot@rust-log-analyzer@JonathanBrouwer@cuviper@JohnTitor
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Clean up AttributeLintKind and refactor diagnostic attribute linting - #155215

Merged
rust-bors[bot] merged 8 commits into
rust-lang:mainfrom
mejrs:condense_diag_lints
Apr 16, 2026
Merged

Clean up AttributeLintKind and refactor diagnostic attribute linting#155215
rust-bors[bot] merged 8 commits into
rust-lang:mainfrom
mejrs:condense_diag_lints

Conversation

@mejrs

Copy link
Copy Markdown
Member

There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.

@rustbot

Copy link
Copy Markdown
Collaborator

Some changes occurred in compiler/rustc_attr_parsing

cc @jdonszelmann, @JonathanBrouwer

@rustbotrustbot added A-attributes Area: Attributes (`#[…]`, `#![…]`) 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 Apr 12, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @JohnTitor

rustbot has assigned @JohnTitor.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 69 candidates
  • Random selection from 12 candidates

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 0dd591a to a4e8640CompareApril 12, 2026 21:54
@rustbot

Copy link
Copy Markdown
Collaborator

The Miri subtree was changed

cc @rust-lang/miri

@rustbotrustbot added the WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) label Apr 12, 2026
@rustbot

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from a4e8640 to 0dd591aCompareApril 12, 2026 22:00
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@mejrs

Copy link
Copy Markdown
MemberAuthor

@rustbot label -WG-trait-system-refactor

@rustbotrustbot removed the WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) label Apr 13, 2026
span,
);
}
if matches!(mode, Mode::RustcOnUnimplemented) {

@JonathanBrouwerJonathanBrouwerApr 14, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't really like matches! here because if we ever add another rustc diagnostic attribute, we could forget to check it. How about a method mode.should_error(), that has an exhaustive match in it?

View changes since the review

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It doesn't actually matter, assuming we don't ship a std that compiles with warnings?

So far my decisions on whether rustc_on_unimplemented errors or issues a diagnostic namespace lint have been largely focused on keeping the implementation simple:

  • erroring is easier than adding AttributeLintKind variants
  • so hard error in rustc_on_unimplemented-only paths to simplify there
  • issue lints in shared paths so you don't have to care about which attr it is

In fact, maybe this should just be a warning regardless?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That mentality also sounds reasonable to me, lets make this a warning to keep the implementation simple

@mejrsmejrsApr 14, 2026

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I remember why it is this way, I applied the suggestion and then I got annoyed because

LL | #[rustc_on_unimplemented(lorem = "")]
| ^^^^^^^^^^ invalid option found here
|
= help: only `message`, `note` and `label` are allowed as options

is not quite right.

The last commit fixes that by letting you customize the "allowed options" list per attribute. Note that I'm inclined to have an attribute with only "note" allowed, (#155200 (comment)) so we will need some kind of customization (or more lint variants) anyway.

Let me know what you think about the last few commits, idm backing it out if you prefer.

@JonathanBrouwerJonathanBrouwerApr 15, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems reasonable, especially since we need this in the future :)

@JonathanBrouwerJonathanBrouwer left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

r=me with nit fixed
@bors delegate

View changes since this review

@rust-bors

rust-borsBot commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

✌️ @mejrs, you can now approve this pull request!

If @JonathanBrouwer told you to "r=me" after making some further change, then please make that change and post @bors r=JonathanBrouwer.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 79d2d9a to 103adaaCompareApril 15, 2026 10:36
@rust-log-analyzer

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 103adaa to d6bccacCompareApril 15, 2026 11:50
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors r+ rollup

@rust-bors

rust-borsBot commented Apr 15, 2026

Copy link
Copy Markdown
Contributor

📌 Commit d6bccac has been approved by JonathanBrouwer

It is now in the queue for this repository.

@rust-borsrust-borsBot 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 Apr 15, 2026
jhpratt added a commit to jhpratt/rust that referenced this pull request Apr 16, 2026
…hanBrouwer
Clean up `AttributeLintKind` and refactor diagnostic attribute linting
There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.
@jhprattjhpratt mentioned this pull request Apr 16, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 16, 2026
Rollup of 18 pull requests
Successful merges:
- #154595 (Emit fatal on invalid const args with nested defs)
- #154599 (report the `varargs_without_pattern` lint in deps)
- #154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- #155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- #155357 (Add `--remap-path-scope` as unstable in rustdoc)
- #150649 (clippy fix: non_canonical_clone_impl)
- #154604 (abort in core)
- #154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- #154970 (rustdoc: preserve `doc(cfg)` on locally re-exported type aliases)
- #155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- #155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- #155266 (Adjust release notes for post-merge feedback)
- #155326 (Disallow ZST allocations with `TypedArena`.)
- #155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- #155340 (Handle nonnull pattern types in size skeleton)
- #155347 (Add push_mut and new Layout methods to release notes)
- #155356 (remove calls to AliasTyKind::def_id)
- #155364 (Reduce diagnostic type visibilities.)
@jhprattjhpratt mentioned this pull request Apr 16, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 16, 2026
Rollup of 18 pull requests
Successful merges:
- #154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- #154595 (Emit fatal on invalid const args with nested defs)
- #154599 (report the `varargs_without_pattern` lint in deps)
- #154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- #155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- #155357 (Add `--remap-path-scope` as unstable in rustdoc)
- #150649 (clippy fix: non_canonical_clone_impl)
- #154604 (abort in core)
- #154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- #155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- #155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- #155266 (Adjust release notes for post-merge feedback)
- #155326 (Disallow ZST allocations with `TypedArena`.)
- #155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- #155340 (Handle nonnull pattern types in size skeleton)
- #155347 (Add push_mut and new Layout methods to release notes)
- #155356 (remove calls to AliasTyKind::def_id)
- #155364 (Reduce diagnostic type visibilities.)
@rust-bors
rust-borsBot merged commit 0d98e0d into rust-lang:mainApr 16, 2026
11 checks passed
rust-timer added a commit that referenced this pull request Apr 16, 2026
Rollup merge of #155215 - mejrs:condense_diag_lints, r=JonathanBrouwer
Clean up `AttributeLintKind` and refactor diagnostic attribute linting
There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.
zihan0822 pushed a commit to zihan0822/rust-clippy that referenced this pull request Apr 30, 2026
Rollup of 18 pull requests
Successful merges:
- rust-lang/rust#154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- rust-lang/rust#154595 (Emit fatal on invalid const args with nested defs)
- rust-lang/rust#154599 (report the `varargs_without_pattern` lint in deps)
- rust-lang/rust#154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- rust-lang/rust#155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- rust-lang/rust#155357 (Add `--remap-path-scope` as unstable in rustdoc)
- rust-lang/rust#150649 (clippy fix: non_canonical_clone_impl)
- rust-lang/rust#154604 (abort in core)
- rust-lang/rust#154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- rust-lang/rust#155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- rust-lang/rust#155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- rust-lang/rust#155266 (Adjust release notes for post-merge feedback)
- rust-lang/rust#155326 (Disallow ZST allocations with `TypedArena`.)
- rust-lang/rust#155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- rust-lang/rust#155340 (Handle nonnull pattern types in size skeleton)
- rust-lang/rust#155347 (Add push_mut and new Layout methods to release notes)
- rust-lang/rust#155356 (remove calls to AliasTyKind::def_id)
- rust-lang/rust#155364 (Reduce diagnostic type visibilities.)
@cuvipercuviper added this to the 1.97.0 milestone Apr 30, 2026
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
Rollup of 18 pull requests
Successful merges:
- rust-lang/rust#154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- rust-lang/rust#154595 (Emit fatal on invalid const args with nested defs)
- rust-lang/rust#154599 (report the `varargs_without_pattern` lint in deps)
- rust-lang/rust#154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- rust-lang/rust#155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- rust-lang/rust#155357 (Add `--remap-path-scope` as unstable in rustdoc)
- rust-lang/rust#150649 (clippy fix: non_canonical_clone_impl)
- rust-lang/rust#154604 (abort in core)
- rust-lang/rust#154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- rust-lang/rust#155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- rust-lang/rust#155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- rust-lang/rust#155266 (Adjust release notes for post-merge feedback)
- rust-lang/rust#155326 (Disallow ZST allocations with `TypedArena`.)
- rust-lang/rust#155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- rust-lang/rust#155340 (Handle nonnull pattern types in size skeleton)
- rust-lang/rust#155347 (Add push_mut and new Layout methods to release notes)
- rust-lang/rust#155356 (remove calls to AliasTyKind::def_id)
- rust-lang/rust#155364 (Reduce diagnostic type visibilities.)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-attributesArea: Attributes (`#[…]`, `#![…]`)S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant 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.

6 participants

@mejrs@rustbot@rust-log-analyzer@JonathanBrouwer@cuviper@JohnTitor
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Clean up AttributeLintKind and refactor diagnostic attribute linting - #155215

Merged
rust-bors[bot] merged 8 commits into
rust-lang:mainfrom
mejrs:condense_diag_lints
Apr 16, 2026
Merged

Clean up AttributeLintKind and refactor diagnostic attribute linting#155215
rust-bors[bot] merged 8 commits into
rust-lang:mainfrom
mejrs:condense_diag_lints

Conversation

@mejrs

Copy link
Copy Markdown
Member

There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.

@rustbot

Copy link
Copy Markdown
Collaborator

Some changes occurred in compiler/rustc_attr_parsing

cc @jdonszelmann, @JonathanBrouwer

@rustbotrustbot added A-attributes Area: Attributes (`#[…]`, `#![…]`) 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 Apr 12, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @JohnTitor

rustbot has assigned @JohnTitor.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 69 candidates
  • Random selection from 12 candidates

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 0dd591a to a4e8640CompareApril 12, 2026 21:54
@rustbot

Copy link
Copy Markdown
Collaborator

The Miri subtree was changed

cc @rust-lang/miri

@rustbotrustbot added the WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) label Apr 12, 2026
@rustbot

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from a4e8640 to 0dd591aCompareApril 12, 2026 22:00
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@mejrs

Copy link
Copy Markdown
MemberAuthor

@rustbot label -WG-trait-system-refactor

@rustbotrustbot removed the WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) label Apr 13, 2026
span,
);
}
if matches!(mode, Mode::RustcOnUnimplemented) {

@JonathanBrouwerJonathanBrouwerApr 14, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't really like matches! here because if we ever add another rustc diagnostic attribute, we could forget to check it. How about a method mode.should_error(), that has an exhaustive match in it?

View changes since the review

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It doesn't actually matter, assuming we don't ship a std that compiles with warnings?

So far my decisions on whether rustc_on_unimplemented errors or issues a diagnostic namespace lint have been largely focused on keeping the implementation simple:

  • erroring is easier than adding AttributeLintKind variants
  • so hard error in rustc_on_unimplemented-only paths to simplify there
  • issue lints in shared paths so you don't have to care about which attr it is

In fact, maybe this should just be a warning regardless?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That mentality also sounds reasonable to me, lets make this a warning to keep the implementation simple

@mejrsmejrsApr 14, 2026

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I remember why it is this way, I applied the suggestion and then I got annoyed because

LL | #[rustc_on_unimplemented(lorem = "")]
| ^^^^^^^^^^ invalid option found here
|
= help: only `message`, `note` and `label` are allowed as options

is not quite right.

The last commit fixes that by letting you customize the "allowed options" list per attribute. Note that I'm inclined to have an attribute with only "note" allowed, (#155200 (comment)) so we will need some kind of customization (or more lint variants) anyway.

Let me know what you think about the last few commits, idm backing it out if you prefer.

@JonathanBrouwerJonathanBrouwerApr 15, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems reasonable, especially since we need this in the future :)

@JonathanBrouwerJonathanBrouwer left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

r=me with nit fixed
@bors delegate

View changes since this review

@rust-bors

rust-borsBot commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

✌️ @mejrs, you can now approve this pull request!

If @JonathanBrouwer told you to "r=me" after making some further change, then please make that change and post @bors r=JonathanBrouwer.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 79d2d9a to 103adaaCompareApril 15, 2026 10:36
@rust-log-analyzer

This comment has been minimized.

@mejrs
mejrsforce-pushed the condense_diag_lints branch from 103adaa to d6bccacCompareApril 15, 2026 11:50
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors r+ rollup

@rust-bors

rust-borsBot commented Apr 15, 2026

Copy link
Copy Markdown
Contributor

📌 Commit d6bccac has been approved by JonathanBrouwer

It is now in the queue for this repository.

@rust-borsrust-borsBot 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 Apr 15, 2026
jhpratt added a commit to jhpratt/rust that referenced this pull request Apr 16, 2026
…hanBrouwer
Clean up `AttributeLintKind` and refactor diagnostic attribute linting
There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.
@jhprattjhpratt mentioned this pull request Apr 16, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 16, 2026
Rollup of 18 pull requests
Successful merges:
- #154595 (Emit fatal on invalid const args with nested defs)
- #154599 (report the `varargs_without_pattern` lint in deps)
- #154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- #155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- #155357 (Add `--remap-path-scope` as unstable in rustdoc)
- #150649 (clippy fix: non_canonical_clone_impl)
- #154604 (abort in core)
- #154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- #154970 (rustdoc: preserve `doc(cfg)` on locally re-exported type aliases)
- #155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- #155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- #155266 (Adjust release notes for post-merge feedback)
- #155326 (Disallow ZST allocations with `TypedArena`.)
- #155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- #155340 (Handle nonnull pattern types in size skeleton)
- #155347 (Add push_mut and new Layout methods to release notes)
- #155356 (remove calls to AliasTyKind::def_id)
- #155364 (Reduce diagnostic type visibilities.)
@jhprattjhpratt mentioned this pull request Apr 16, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 16, 2026
Rollup of 18 pull requests
Successful merges:
- #154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- #154595 (Emit fatal on invalid const args with nested defs)
- #154599 (report the `varargs_without_pattern` lint in deps)
- #154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- #155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- #155357 (Add `--remap-path-scope` as unstable in rustdoc)
- #150649 (clippy fix: non_canonical_clone_impl)
- #154604 (abort in core)
- #154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- #155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- #155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- #155266 (Adjust release notes for post-merge feedback)
- #155326 (Disallow ZST allocations with `TypedArena`.)
- #155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- #155340 (Handle nonnull pattern types in size skeleton)
- #155347 (Add push_mut and new Layout methods to release notes)
- #155356 (remove calls to AliasTyKind::def_id)
- #155364 (Reduce diagnostic type visibilities.)
@rust-bors
rust-borsBot merged commit 0d98e0d into rust-lang:mainApr 16, 2026
11 checks passed
rust-timer added a commit that referenced this pull request Apr 16, 2026
Rollup merge of #155215 - mejrs:condense_diag_lints, r=JonathanBrouwer
Clean up `AttributeLintKind` and refactor diagnostic attribute linting
There was a fair amount of duplication here, and thanks to the proliferation of new diagnostic attributes these days, it was threatening to grow bigger.
zihan0822 pushed a commit to zihan0822/rust-clippy that referenced this pull request Apr 30, 2026
Rollup of 18 pull requests
Successful merges:
- rust-lang/rust#154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- rust-lang/rust#154595 (Emit fatal on invalid const args with nested defs)
- rust-lang/rust#154599 (report the `varargs_without_pattern` lint in deps)
- rust-lang/rust#154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- rust-lang/rust#155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- rust-lang/rust#155357 (Add `--remap-path-scope` as unstable in rustdoc)
- rust-lang/rust#150649 (clippy fix: non_canonical_clone_impl)
- rust-lang/rust#154604 (abort in core)
- rust-lang/rust#154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- rust-lang/rust#155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- rust-lang/rust#155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- rust-lang/rust#155266 (Adjust release notes for post-merge feedback)
- rust-lang/rust#155326 (Disallow ZST allocations with `TypedArena`.)
- rust-lang/rust#155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- rust-lang/rust#155340 (Handle nonnull pattern types in size skeleton)
- rust-lang/rust#155347 (Add push_mut and new Layout methods to release notes)
- rust-lang/rust#155356 (remove calls to AliasTyKind::def_id)
- rust-lang/rust#155364 (Reduce diagnostic type visibilities.)
@cuvipercuviper added this to the 1.97.0 milestone Apr 30, 2026
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
Rollup of 18 pull requests
Successful merges:
- rust-lang/rust#154451 (Require that a `<_ as Try>::Residual` implement the `Residual` trait)
- rust-lang/rust#154595 (Emit fatal on invalid const args with nested defs)
- rust-lang/rust#154599 (report the `varargs_without_pattern` lint in deps)
- rust-lang/rust#154699 (`core::unicode`: Replace `Cased` table with `Lt`)
- rust-lang/rust#155353 (resolve: Remove `inaccessible_ctor_reexport` resolver field)
- rust-lang/rust#155357 (Add `--remap-path-scope` as unstable in rustdoc)
- rust-lang/rust#150649 (clippy fix: non_canonical_clone_impl)
- rust-lang/rust#154604 (abort in core)
- rust-lang/rust#154616 (Add `--quiet` flag to x.py and bootstrap to suppress output)
- rust-lang/rust#155215 (Clean up `AttributeLintKind` and refactor diagnostic attribute linting)
- rust-lang/rust#155228 (Check diagnostic output in incremental `cpass` and `rpass` revisions)
- rust-lang/rust#155266 (Adjust release notes for post-merge feedback)
- rust-lang/rust#155326 (Disallow ZST allocations with `TypedArena`.)
- rust-lang/rust#155334 (docs: Use `0b1` instead of `NonZero::MIN` in `NonZero::bit_width` doctests)
- rust-lang/rust#155340 (Handle nonnull pattern types in size skeleton)
- rust-lang/rust#155347 (Add push_mut and new Layout methods to release notes)
- rust-lang/rust#155356 (remove calls to AliasTyKind::def_id)
- rust-lang/rust#155364 (Reduce diagnostic type visibilities.)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-attributesArea: Attributes (`#[…]`, `#![…]`)S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant 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.

6 participants

@mejrs@rustbot@rust-log-analyzer@JonathanBrouwer@cuviper@JohnTitor