Skip to content

feat(diag): Stabilize cargo-lints - #17298

Open
epage wants to merge 4 commits into
rust-lang:masterfrom
epage:stable-lints
Open

feat(diag): Stabilize cargo-lints #17298
epage wants to merge 4 commits into
rust-lang:masterfrom
epage:stable-lints

Conversation

@epage

@epage epage commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

View all comments

What does this PR try to resolve?

Fixes #12235

Unstable feature docs: https://doc.rust-lang.org/stable/cargo/reference/unstable.html#lintscargo

We are adding a linting system to workspaces and packages controlled by [lints.cargo].

As the presence of [lints.cargo] was a hard error before 1.79, by-default warn/deny lints are ignored when package.rust-version is set below that.

Workspace lints are controlled by [workspace.lints] if present, otherwise [lints]. This was inspired by workspace.resolver.
The rust-version used for the workspace is the lowest among the workspace members.

In vetting the design, we have a fully general parse-pass that runs during build operations as well as cargo fetxh (matching deferred warnings and errors from manifest parsing). We also have a one-off lint that runs against the completed build units.

The initial batch of lints being stabilized is documented at https://doc.rust-lang.org/nightly/cargo/reference/lints.html

For more on the behavior of these lints, see https://github.com/rust-lang/cargo/tree/master/tests/testsuite/lints

Relevant docs:

How to test and review this PR?

At #t-cargo > Last items for linting system: `unused_dependencies`, I raised concern over unused_dependencies name in case we want to add other kinds of unused dependencies (like artifacts) as separate lints. No one expressed interest in that, so I kept it as a general lint name. I didn't add package to the name since our existing dept tables don't have that and the intent is likely clear.

@rustbot rustbot added A-build-execution Area: anything dealing with executing the compiler A-documenting-cargo-itself Area: Cargo's documentation A-manifest Area: Cargo.toml issues A-unstable Area: nightly unstable support S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Aug 1, 2026
@rustbot

rustbot commented Aug 1, 2026

Copy link
Copy Markdown
Collaborator

r? @weihanglo

rustbot has assigned @weihanglo.
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: @epage, @weihanglo
  • @epage, @weihanglo expanded to epage, weihanglo

@weihanglo weihanglo Aug 2, 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.

Just thought about this: Do we dogfood this yet? Maybe before stabilization we can do it in rust-lang/cargo and rust-lang/rust and get an sense of how it looks like in real world.

Not a blocker btw

View changes since the review

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I have tried it out a couple times on Cargo. I have not on rust-lang/rust.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I just tried in rustc

  • several cargo::manual_readme
  • several cargo::non_kebab_case_bins
  • A warning about #![expect(unused_crate_dependencies)] being unfulfilled.

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.

Thanks for the info!

Should we configure our CI to adopt that?

@epage
epage force-pushed the stable-lints branch 2 times, most recently from e7f3786 to 424ad37 Compare August 4, 2026 15:17
@rustbot

This comment has been minimized.

@epage
epage force-pushed the stable-lints branch 2 times, most recently from 5d91e48 to 426df5f Compare August 4, 2026 20:26
@rustbot

This comment has been minimized.

Comment thread tests/testsuite/script/cargo.rs
Comment thread crates/xtask-lint-docs/src/main.rs

@weihanglo weihanglo Aug 4, 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.

Could you share why we need to allow cargo::default here for many tests? Were they got lint warnings for the same reason, or case by case?

View changes since the review

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Most test have unused dependencies. There were a smattering of others. I figured it would be easier to do this globally than resolving lints, allowing on a case-by-case basis, etc.

@weihanglo weihanglo added the T-cargo Team: Cargo label Aug 4, 2026
@weihanglo

This comment was marked as duplicate.

1 similar comment
@weihanglo

Copy link
Copy Markdown
Member

@rfcbot fcp merge T-cargo

We have discussed this during the sync weekly meeting. Ed has written a good review guide. Would be appreciated if people find a time reviewing them.

@rust-rfcbot

rust-rfcbot commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator

@weihanglo has proposed to merge this. The next step is review by the rest of the tagged team members:

Concerns:

Once a majority of reviewers approve (and at most 2 approvals are outstanding), this will enter its final comment period. If you spot a major issue that hasn't been raised at any point in this process, please speak up!

See this document for info about what commands tagged team members can give me.

@rust-rfcbot rust-rfcbot added proposed-final-comment-period An FCP proposal has started, but not yet signed off. disposition-merge FCP with intent to merge labels Aug 4, 2026
@weihanglo

Copy link
Copy Markdown
Member

@rfcbot concern blanket_hint_mostly_unused

Should this be behind -Zprofile-hint-mostly-unused?

@epage

epage commented Aug 4, 2026

Copy link
Copy Markdown
Contributor Author

I believe so.

@epage

epage commented Aug 5, 2026

Copy link
Copy Markdown
Contributor Author

Since I won the race for blanket_hint_mostly_unused, I posted #17313 to update the feature gate

@weihanglo

Copy link
Copy Markdown
Member

@rfcbot resolve blanket_hint_mostly_unused

#17313

epage added 3 commits August 5, 2026 13:43
This test is trying to assert for presence and absence but can't use
exhaustive output because it is dependent on the users build
environment.

This makes it so we can check exactly what we are looking for.
@rustbot

This comment has been minimized.

@rustbot

rustbot commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different master 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-build-execution Area: anything dealing with executing the compiler A-documenting-cargo-itself Area: Cargo's documentation A-manifest Area: Cargo.toml issues A-unstable Area: nightly unstable support disposition-merge FCP with intent to merge proposed-final-comment-period An FCP proposal has started, but not yet signed off. S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-cargo Team: Cargo

Projects

Status: FCP blocked

Development

Successfully merging this pull request may close these issues.

User control over cargo warnings

4 participants