From 4f38538d7585caed83bb6a95ede130f407ca7d3f Mon Sep 17 00:00:00 2001 From: Philipp Hansch Date: Sat, 3 Nov 2018 12:59:13 +0100 Subject: [PATCH] RIIR update lints: Generate lint group registrations --- clippy_dev/src/lib.rs | 28 ++++++++++++++++++++++++++++ clippy_dev/src/main.rs | 30 ++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/clippy_dev/src/lib.rs b/clippy_dev/src/lib.rs index 28cc4600a09..f16ea14a3de 100644 --- a/clippy_dev/src/lib.rs +++ b/clippy_dev/src/lib.rs @@ -72,6 +72,19 @@ impl Lint { } } +/// Generates the Vec items for `register_lint_group` calls in `clippy_lints/src/lib.rs`. +pub fn gen_lint_group_list(lints: Vec) -> Vec { + lints.into_iter() + .filter_map(|l| { + if l.is_internal() || l.deprecation.is_some() { + None + } else { + Some(format!(" {}::{},", l.module, l.name.to_uppercase())) + } + }) + .sorted() +} + /// Generates the `pub mod module_name` list in `clippy_lints/src/lib.rs`. pub fn gen_modules_list(lints: Vec) -> Vec { lints.into_iter() @@ -390,3 +403,18 @@ fn test_gen_modules_list() { ]; assert_eq!(expected, gen_modules_list(lints)); } + +#[test] +fn test_gen_lint_group_list() { + let lints = vec![ + Lint::new("abc", "group1", "abc", None, "module_name"), + Lint::new("should_assert_eq", "group1", "abc", None, "module_name"), + Lint::new("should_assert_eq2", "group2", "abc", Some("abc"), "deprecated"), + Lint::new("incorrect_internal", "internal_style", "abc", None, "module_name"), + ]; + let expected = vec![ + " module_name::ABC,".to_string(), + " module_name::SHOULD_ASSERT_EQ,".to_string(), + ]; + assert_eq!(expected, gen_lint_group_list(lints)); +} diff --git a/clippy_dev/src/main.rs b/clippy_dev/src/main.rs index 4832b428e9c..128feaa8aea 100644 --- a/clippy_dev/src/main.rs +++ b/clippy_dev/src/main.rs @@ -98,4 +98,34 @@ fn update_lints() { false, || { gen_modules_list(lint_list.clone()) } ); + + // Generate lists of lints in the clippy::all lint group + replace_region_in_file( + "../clippy_lints/src/lib.rs", + r#"reg.register_lint_group\("clippy::all""#, + r#"\]\);"#, + false, + || { + // clippy::all should only include the following lint groups: + let all_group_lints = usable_lints.clone().into_iter().filter(|l| { + l.group == "correctness" || + l.group == "style" || + l.group == "complexity" || + l.group == "perf" + }).collect(); + + gen_lint_group_list(all_group_lints) + } + ); + + // Generate the list of lints for all other lint groups + for (lint_group, lints) in Lint::by_lint_group(&usable_lints) { + replace_region_in_file( + "../clippy_lints/src/lib.rs", + &format!("reg.register_lint_group\\(\"clippy::{}\"", lint_group), + r#"\]\);"#, + false, + || { gen_lint_group_list(lints.clone()) } + ); + } }