diff options
| author | Alex Macleod <alex@macleod.io> | 2023-09-25 11:55:20 +0000 |
|---|---|---|
| committer | Alex Macleod <alex@macleod.io> | 2023-09-25 12:38:23 +0000 |
| commit | 1972cc89c4e9db8f325137b58f7197aeef0a49d6 (patch) | |
| tree | aa48e2c23c55d4bc3a5cb30464b7a24cda090ec2 | |
| parent | 78ddc8d17db66a41ed9c4970036edc69142b72fb (diff) | |
| download | rust-1972cc89c4e9db8f325137b58f7197aeef0a49d6.tar.gz rust-1972cc89c4e9db8f325137b58f7197aeef0a49d6.zip | |
Test that each config value exists in a test clippy.toml
| -rw-r--r-- | clippy_lints/Cargo.toml | 3 | ||||
| -rw-r--r-- | clippy_lints/src/utils/conf.rs | 41 |
2 files changed, 44 insertions, 0 deletions
diff --git a/clippy_lints/Cargo.toml b/clippy_lints/Cargo.toml index dcd9a4adcbd..834753a2301 100644 --- a/clippy_lints/Cargo.toml +++ b/clippy_lints/Cargo.toml @@ -28,6 +28,9 @@ semver = "1.0" rustc-semver = "1.1" url = "2.2" +[dev-dependencies] +walkdir = "2.3" + [features] deny-warnings = ["clippy_utils/deny-warnings"] # build clippy with internal lints enabled, off by default diff --git a/clippy_lints/src/utils/conf.rs b/clippy_lints/src/utils/conf.rs index 75c3c7a958a..c502e50d21f 100644 --- a/clippy_lints/src/utils/conf.rs +++ b/clippy_lints/src/utils/conf.rs @@ -744,3 +744,44 @@ fn calculate_dimensions(fields: &[&str]) -> (usize, Vec<usize>) { (rows, column_widths) } + +#[cfg(test)] +mod tests { + use rustc_data_structures::fx::{FxHashMap, FxHashSet}; + use serde::de::IgnoredAny; + use std::fs; + use walkdir::WalkDir; + + #[test] + fn configs_are_tested() { + let mut names: FxHashSet<String> = super::metadata::get_configuration_metadata() + .into_iter() + .map(|meta| meta.name.replace('_', "-")) + .collect(); + + let toml_files = WalkDir::new("../tests") + .into_iter() + .map(Result::unwrap) + .filter(|entry| entry.file_name() == "clippy.toml"); + + for entry in toml_files { + let file = fs::read_to_string(entry.path()).unwrap(); + #[allow(clippy::zero_sized_map_values)] + if let Ok(map) = toml::from_str::<FxHashMap<String, IgnoredAny>>(&file) { + for name in map.keys() { + names.remove(name.as_str()); + } + } + } + + assert!( + names.remove("allow-one-hash-in-raw-strings"), + "remove this when #11481 is fixed" + ); + + assert!( + names.is_empty(), + "Configuration variable lacks test: {names:?}\nAdd a test to `tests/ui-toml`" + ); + } +} |
