## Crater report analysis
*Context: The crater run enable-by-default cargo `-Zcheck-cfg` and temporarily put the `unexpected_cfgs` lint to deny-by-default, and here are the results.*
Affected projects: 6708 / 414692 (1.62%)
Total (raw) errors: 200499
### 50 most seen unexpected cfg errors
Summary: no false-positives[^false_positives], see the others section for more details.
<details>
well, ignoring `docsrs` (already fixed), `rustfmt` (deprecated/no longer in use) as well as `feature="cargo-clippy"` (and `feature="clippy"`)" which are deprecated and should be in the `[features]` table.
| name | value | comment |
|------|-------|---------|
| `docsrs` | `None` | 24472 errors in 1994 projects |
| `rustfmt` | `None` | 11084 errors in 818 projects |
| `feature` | `"cargo-clippy"` | 8038 errors in 531 projects |
| `feature` | `"dim3"` | 6714 errors in 14 projects |
| `tarpaulin_include` | `None` | 4938 errors in 212 projects |
| `feature` | `"serde"` | 4006 errors in 88 projects |
| `doc_cfg` | `None` | 3807 errors in 130 projects |
| `feature` | `"dim2"` | 3796 errors in 13 projects |
| `target_os` | `"solana"` | 3520 errors in 23 projects |
| `tarpaulin` | `None` | 3052 errors in 97 projects |
| `num` | `None` | 2842 errors in 2 projects |
| `loom` | `None` | 2700 errors in 78 projects |
| `enable_x86_avx2` | `None` | 2556 errors in 8 projects |
| `fuzzing` | `None` | 2410 errors in 103 projects |
| `nightly` | `None` | 2402 errors in 157 projects |
| `feature` | `"tracing"` | 2035 errors in 10 projects |
| `feature` | `"std"` | 1948 errors in 138 projects |
| `feature` | `"library"` | 1910 errors in 72 projects |
| `ossl110` | `None` | 1820 errors in 4 projects |
| `feature` | `"inline"` | 1786 errors in 2 projects |
| `feature` | `"inline_always"` | 1781 errors in 2 projects |
| `cpp_lib_version` | `"5.14.0"` | 1746 errors in 3 projects |
| `feature` | `"dox"` | 1701 errors in 5 projects |
| `cpp_lib_version` | `"5.13.0"` | 1667 errors in 3 projects |
| `PyPy` | `None` | 1649 errors in 5 projects |
| `riscv` | `None` | 1634 errors in 5 projects |
| `cpp_lib_version` | `"5.12.2"` | 1492 errors in 3 projects |
| `feature` | `"clippy"` | 1444 errors in 92 projects |
| `docs_rs` | `None` | 1364 errors in 31 projects |
| `track_caller` | `None` | 1314 errors in 4 projects |
| `feature` | `"inline-more"` | 1244 errors in 6 projects |
| `Py_LIMITED_API` | `None` | 1200 errors in 6 projects |
| `feature` | `"last_seen_epoch"` | 1008 errors in 252 projects |
| `feature` | `"last_seen_iso_8601"` | 1008 errors in 252 projects |
| `cpp_lib_version` | `"5.11.3"` | 988 errors in 3 projects |
| `riscv32` | `None` | 983 errors in 2 projects |
| `feature` | `"sqlx"` | 982 errors in 4 projects |
| `target_arch` | `"spirv"` | 952 errors in 11 projects |
| `feature` | `"arbitrary_precision"` | 924 errors in 4 projects |
| `ossl300` | `None` | 845 errors in 4 projects |
| `RUSTC_WITH_SPECIALIZATION` | `None` | 796 errors in 36 projects |
| `has_i128` | `None` | 788 errors in 14 projects |
| `feature` | `"unstable"` | 786 errors in 32 projects |
| `feature` | `"nightly"` | 752 errors in 92 projects |
| `feature` | `"conversion"` | 736 errors in 2 projects |
| `no_global_oom_handling` | `None` | 730 errors in 18 projects |
| `test_utilities` | `None` | 700 errors in 23 projects |
| `target_pointer_width` | `"128"` | 690 errors in 43 projects |
| `x11_platform` | `None` | 690 errors in 7 projects |
| `trybuild` | `None` | 674 errors in 2 projects |
</details>
### 50 most seen unexpected `feature` cfg
Summary: no false-positives, all of them are missing from the `[features]` table.
<details>
| name | value | comment |
|------|-------|---------|
| `feature` | `"cargo-clippy"` | 8038 errors in 531 projects |
| `feature` | `"dim3"` | 6714 errors in 14 projects |
| `feature` | `"serde"` | 4006 errors in 88 projects |
| `feature` | `"dim2"` | 3796 errors in 13 projects |
| `feature` | `"tracing"` | 2035 errors in 10 projects |
| `feature` | `"std"` | 1948 errors in 138 projects |
| `feature` | `"library"` | 1910 errors in 72 projects |
| `feature` | `"inline"` | 1786 errors in 2 projects |
| `feature` | `"inline_always"` | 1781 errors in 2 projects |
| `feature` | `"dox"` | 1701 errors in 5 projects |
| `feature` | `"clippy"` | 1444 errors in 92 projects |
| `feature` | `"inline-more"` | 1244 errors in 6 projects |
| `feature` | `"last_seen_epoch"` | 1008 errors in 252 projects |
| `feature` | `"last_seen_iso_8601"` | 1008 errors in 252 projects |
| `feature` | `"sqlx"` | 982 errors in 4 projects |
| `feature` | `"arbitrary_precision"` | 924 errors in 4 projects |
| `feature` | `"unstable"` | 786 errors in 32 projects |
| `feature` | `"nightly"` | 752 errors in 92 projects |
| `feature` | `"conversion"` | 736 errors in 2 projects |
| `feature` | `"simd"` | 654 errors in 9 projects |
| `feature` | `"dist_mode"` | 584 errors in 4 projects |
| `feature` | `"cons_mode"` | 460 errors in 3 projects |
| `feature` | `"json"` | 426 errors in 73 projects |
| `feature` | `"grpc"` | 392 errors in 4 projects |
| `feature` | `"dashu-int-TODO"` | 390 errors in 1 projects |
| `feature` | `"1.10.0"` | 372 errors in 2 projects |
| `feature` | `"1.12.0"` | 370 errors in 2 projects |
| `feature` | `"nalgebra"` | 368 errors in 2 projects |
| `feature` | `"test"` | 352 errors in 21 projects |
| `feature` | `"ffmpeg_5_0"` | 332 errors in 1 projects |
| `feature` | `"enable-tracing"` | 328 errors in 1 projects |
| `feature` | `"ffmpeg_4_3"` | 321 errors in 1 projects |
| `feature` | `"raw_value"` | 312 errors in 2 projects |
| `feature` | `"debug"` | 294 errors in 11 projects |
| `feature` | `"cgmath"` | 240 errors in 2 projects |
| `feature` | `"metrics"` | 220 errors in 6 projects |
| `feature` | `"mdns"` | 208 errors in 2 projects |
| `feature` | `"branch_mode"` | 200 errors in 3 projects |
| `feature` | `"branch_wasm_mode"` | 192 errors in 3 projects |
| `feature` | `"ffmpeg_4_2"` | 192 errors in 1 projects |
| `feature` | `"ffmpeg_4_4"` | 192 errors in 1 projects |
| `feature` | `"dev"` | 184 errors in 15 projects |
| `feature` | `"wee_alloc"` | 176 errors in 47 projects |
| `feature` | `"serde-feature"` | 172 errors in 5 projects |
| `feature` | `"ffmpeg_4_1"` | 172 errors in 1 projects |
| `feature` | `"critical-section"` | 170 errors in 43 projects |
| `feature` | `"serialize"` | 170 errors in 9 projects |
| `feature` | `"failpoints"` | 164 errors in 3 projects |
| `feature` | `"persistence"` | 164 errors in 15 projects |
| `feature` | `"jack"` | 154 errors in 12 projects |
</details>
### 50 most seen unexpected `target_*` cfg
Summary: Many typos (`target_os="unix"`, `target_arch="i686"`, ...), some reference to removed targets (`target_os="cloudabi"`, `target_arch="asmjs"`, ...), as well as some custom cfg (`target_os="solana"`, ...).
<details>
| name | value | comment |
|------|-------|---------|
| `target_os` | `"solana"` | 3520 errors in 23 projects |
| `target_arch` | `"spirv"` | 952 errors in 11 projects |
| `target_pointer_width` | `"128"` | 690 errors in 43 projects |
| `target_arch` | `"nvptx"` | 630 errors in 10 projects |
| `target_pointer_width` | `"8"` | 427 errors in 38 projects |
| `target_os` | `"bitrig"` | 384 errors in 58 projects |
| `target_os` | `"dos"` | 368 errors in 7 projects |
| `target_os` | `"unix"` | 166 errors in 22 projects |
| `target_arch` | `"i686"` | 140 errors in 14 projects |
| `target_arch` | `"mips64el"` | 114 errors in 4 projects |
| `target_os` | `"nacl"` | 86 errors in 14 projects |
| `target_env` | `"wasi"` | 84 errors in 8 projects |
| `target_arch` | `"asmjs"` | 82 errors in 14 projects |
| `target_os` | `"darwin"` | 48 errors in 13 projects |
| `target_feature` | `"1_30"` | 48 errors in 1 projects |
| `target_feature` | `"session"` | 44 errors in 1 projects |
| `target_arch` | `"wasm"` | 44 errors in 5 projects |
| `target_os` | `"wasm"` | 44 errors in 4 projects |
| `target_os` | `"dragonflybsd"` | 40 errors in 7 projects |
| `target_arch` | `"riscv"` | 34 errors in 7 projects |
| `target_arch` | `"armv7"` | 34 errors in 9 projects |
| `target_arch` | `"mipsel"` | 34 errors in 9 projects |
| `target_arch` | `"s390"` | 30 errors in 1 projects |
| `target_arch` | `"aarch"` | 28 errors in 5 projects |
| `target_os` | `"androideabi"` | 28 errors in 1 projects |
| `target_os` | `"cloudabi"` | 26 errors in 5 projects |
| `target_env` | `"kernel"` | 26 errors in 2 projects |
| `target_arch` | `"alpha"` | 24 errors in 2 projects |
| `target_arch` | `"parisc"` | 24 errors in 2 projects |
| `target_arch` | `"arm64"` | 24 errors in 2 projects |
| `target_feature` | `"iter_advance_by"` | 24 errors in 3 projects |
| `target_feature` | `"crypto"` | 20 errors in 3 projects |
| `target_os` | `"cbe"` | 20 errors in 1 projects |
| `target_arch` | `"x64_64"` | 20 errors in 3 projects |
| `target_os` | `"switch"` | 18 errors in 3 projects |
| `target_os` | `"window"` | 18 errors in 5 projects |
| `target_arch` | `"parisc2.0"` | 16 errors in 1 projects |
| `target_arch_char_unsigned` | `None` | 16 errors in 1 projects |
| `target_arch` | `"i386"` | 16 errors in 3 projects |
| `target_device` | `"esp8266"` | 16 errors in 1 projects |
| `target_is` | `"macos"` | 16 errors in 2 projects |
| `target_feature` | `"exact_size_is_empty"` | 16 errors in 3 projects |
| `target_arch` | `"x64"` | 16 errors in 2 projects |
| `target_os` | `"solarish"` | 16 errors in 1 projects |
| `target_arch` | `"amd64"` | 16 errors in 1 projects |
| `target_arch` | `"mos"` | 16 errors in 1 projects |
| `target_feature` | `"play-single-file"` | 16 errors in 1 projects |
| `target_feature` | `"f64"` | 16 errors in 1 projects |
| `target_os` | `"wasm32"` | 14 errors in 3 projects |
| `target_arch` | `"xtensa"` | 14 errors in 3 projects |
</details>
------
### Summary
There are four big outliers: `docsrs` (alread fixed)[^docsrs], `rustfmt` (deprecated/no longer in use) as well as `feature="cargo-clippy"` (and `feature="clippy"`) both of which are de-facto deprecated and no longer used. There is nothing do to for those.
Therefore (excluding the outliers) there are 188089 unexpected cfgs, of which 69897 of the are unexpected `feature` cfgs and 11125 errors are of `target_*`.
After manually checking the 3 categories above I wasn't able to find any false positive[^false_positives]; additionaly, 9649 actions would need to be taken accross 5959 projects (1.4% of all the projects tested), by either: fix the typo, removing the staled condition, marking as expected the custom cfg, adding the feature to the `features` table...
All and all, while the impact is certainly not minimal, I think it is heavily mitigated by the fact that it's warn-by-default, only affects maintainers (never the downstream users) and by it's ability to warn users on unexpected cfgs, a defitiancy of the Rust toolchain, reported many times, that will final be fixed.
[^docsrs]: `docsrs` shouldn't have pop-up in this crater run but I was trick by the off-by-one date of rustup and `rustc -V` :-|
[^false_positives]: by "false positive" I mean: missing well known names/values