forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of rust-lang#125219 - Urgau:check-cfg-cargo-config, r=fmease
Update `unexpected_cfgs` lint for Cargo new `check-cfg` config This PR updates the diagnostics output of the `unexpected_cfgs` lint for Cargo new `check-cfg` config. It's a simple and cost-less alternative to the build-script `cargo::rustc-check-cfg` instruction. ```toml [lints.rust] unexpected_cfgs = { level = "warn", check-cfg = ['cfg(foo, values("bar"))'] } ``` This PR also adds a Cargo specific section regarding check-cfg and Cargo inside rustc's book (motivation is described inside the file, but mainly check-cfg is a rustc feature not a Cargo one, Cargo only enabled the feature, it does not own it; T-cargo even considers the `check-cfg` lint config to be an implementation detail). This PR also updates the links to refer to that sub-page when using Cargo from rustc. As well as updating the lint doc to refer to the check-cfg docs. ~**Not to be merged before rust-lang/cargo#13913 reaches master!**~ (EDIT: merged in rust-lang#125237) `@rustbot` label +F-check-cfg r? `@fmease` *(feel free to roll)* Fixes rust-lang#124800 cc `@epage` `@weihanglo`
- Loading branch information
Showing
9 changed files
with
210 additions
and
58 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
# Cargo Specifics - Checking Conditional Configurations | ||
|
||
<!-- | ||
This page is currently (as of May 2024) the canonical place for describing the interaction | ||
between Cargo and --check-cfg. It is placed in the rustc book rather than the Cargo book | ||
since check-cfg is primarely a Rust/rustc feature and is therefor consider by T-cargo to | ||
be an implementation detail, at least --check-cfg and the unexpected_cfgs are owned by | ||
rustc, not Cargo. | ||
--> | ||
|
||
This document is intented to summarize the principal ways Cargo interacts with | ||
the `unexpected_cfgs` lint and `--check-cfg` flag. It is not intended to provide | ||
individual details, for that refer to the [`--check-cfg` documentation](../check-cfg.md) and | ||
to the [Cargo book](../../cargo/index.html). | ||
|
||
## Cargo feature | ||
|
||
*See the [`[features]` section in the Cargo book][cargo-features] for more details.* | ||
|
||
With the `[features]` table Cargo provides a mechanism to express conditional compilation and | ||
optional dependencies. Cargo *automatically* declares corresponding cfgs for every feature as | ||
expected. | ||
|
||
`Cargo.toml`: | ||
```toml | ||
[features] | ||
serde = ["dep:serde"] | ||
my_feature = [] | ||
``` | ||
|
||
[cargo-features]: ../../cargo/reference/features.html | ||
|
||
## `check-cfg` in `[lints.rust]` table | ||
|
||
<!-- Note that T-Cargo considers `[lints.rust.unexpected_cfgs.check-cfg]` to be an | ||
implementation detail and is therefor not documented in Cargo, we therefor do that ourself --> | ||
|
||
*See the [`[lints]` section in the Cargo book][cargo-lints-table] for more details.* | ||
|
||
When using a staticlly known custom config (ie. not dependant on a build-script), Cargo provides | ||
the custom lint config `check-cfg` under `[lints.rust.unexpected_cfgs]`. | ||
|
||
It can be used to set custom static [`--check-cfg`](../check-cfg.md) args, it is mainly useful when | ||
the list of expected cfgs is known is advance. | ||
|
||
`Cargo.toml`: | ||
```toml | ||
[lints.rust] | ||
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(has_foo)'] } | ||
``` | ||
|
||
[cargo-lints-table]: ../../cargo/reference/manifest.html#the-lints-section | ||
|
||
## `cargo::rustc-check-cfg` for `build.rs`/build-script | ||
|
||
*See the [`cargo::rustc-check-cfg` section in the Cargo book][cargo-rustc-check-cfg] for more details.* | ||
|
||
When setting a custom config with [`cargo::rustc-cfg`][cargo-rustc-cfg], Cargo provides the | ||
corollary instruction: [`cargo::rustc-check-cfg`][cargo-rustc-check-cfg] to expect custom configs. | ||
|
||
`build.rs`: | ||
```rust,ignore (cannot-test-this-because-has_foo-isnt-declared) | ||
fn main() { | ||
println!("cargo::rustc-check-cfg=cfg(has_foo)"); | ||
// ^^^^^^^^^^^^^^^^^^^^^^ new with Cargo 1.80 | ||
if has_foo() { | ||
println!("cargo::rustc-cfg=has_foo"); | ||
} | ||
} | ||
``` | ||
|
||
[cargo-rustc-cfg]: ../../cargo/reference/build-scripts.html#rustc-cfg | ||
[cargo-rustc-check-cfg]: ../../cargo/reference/build-scripts.html#rustc-check-cfg |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.