3388: RIIR update lints: Generate deprecated lints r=phansch a=phansch

The update script now also generates the 'register_removed' section in
`clippy_lints/src/lib.rs`.

Also, instead of using `let mut store ...`, I added a new identifier
line so that the replacement will continue to work in case `let mut
store ...` ever changes.

cc #2882

Co-authored-by: Philipp Hansch <dev@phansch.net>
This commit is contained in:
bors[bot] 2018-11-02 06:29:40 +00:00
commit 0ad5b9b9e0
4 changed files with 48 additions and 4 deletions

View File

@ -72,14 +72,34 @@ pub fn is_internal(&self) -> bool {
} }
} }
/// Generates the list of lint links at the bottom of the README
pub fn gen_changelog_lint_list(lints: Vec<Lint>) -> Vec<String> { pub fn gen_changelog_lint_list(lints: Vec<Lint>) -> Vec<String> {
let mut lint_list_sorted: Vec<Lint> = lints; let mut lint_list_sorted: Vec<Lint> = lints;
lint_list_sorted.sort_by_key(|l| l.name.clone()); lint_list_sorted.sort_by_key(|l| l.name.clone());
lint_list_sorted lint_list_sorted
.iter() .iter()
.filter(|l| !l.is_internal()) .filter_map(|l| {
.map(|l| { if l.is_internal() {
format!("[`{}`]: {}#{}", l.name, DOCS_LINK.clone(), l.name) None
} else {
Some(format!("[`{}`]: {}#{}", l.name, DOCS_LINK.clone(), l.name))
}
}).collect()
}
/// Generates the `register_removed` code in `./clippy_lints/src/lib.rs`.
pub fn gen_deprecated(lints: &[Lint]) -> Vec<String> {
lints.iter()
.filter_map(|l| {
l.clone().deprecation.and_then(|depr_text| {
Some(
format!(
" store.register_removed(\n \"{}\",\n \"{}\",\n );",
l.name,
depr_text
)
)
})
}) })
.collect() .collect()
} }
@ -321,3 +341,18 @@ fn test_gen_changelog_lint_list() {
]; ];
assert_eq!(expected, gen_changelog_lint_list(lints)); assert_eq!(expected, gen_changelog_lint_list(lints));
} }
#[test]
fn test_gen_deprecated() {
let lints = vec![
Lint::new("should_assert_eq", "group1", "abc", Some("has been superseeded by should_assert_eq2"), "module_name"),
Lint::new("should_assert_eq2", "group2", "abc", None, "module_name")
];
let expected: Vec<String> = vec![
r#" store.register_removed(
"should_assert_eq",
"has been superseeded by should_assert_eq2",
);"#.to_string()
];
assert_eq!(expected, gen_deprecated(&lints));
}

View File

@ -82,4 +82,12 @@ fn update_lints() {
false, false,
|| { gen_changelog_lint_list(lint_list.clone()) } || { gen_changelog_lint_list(lint_list.clone()) }
); );
replace_region_in_file(
"../clippy_lints/src/lib.rs",
"begin deprecated lints",
"end deprecated lints",
false,
|| { gen_deprecated(&lint_list) }
);
} }

View File

@ -271,6 +271,7 @@ pub fn read_conf(reg: &rustc_plugin::Registry<'_>) -> Conf {
#[rustfmt::skip] #[rustfmt::skip]
pub fn register_plugins(reg: &mut rustc_plugin::Registry<'_>, conf: &Conf) { pub fn register_plugins(reg: &mut rustc_plugin::Registry<'_>, conf: &Conf) {
let mut store = reg.sess.lint_store.borrow_mut(); let mut store = reg.sess.lint_store.borrow_mut();
// begin deprecated lints, do not remove this comment, its used in `update_lints`
store.register_removed( store.register_removed(
"should_assert_eq", "should_assert_eq",
"`assert!()` will be more flexible with RFC 2011", "`assert!()` will be more flexible with RFC 2011",

View File

@ -240,7 +240,7 @@ def main(print_only=False, check=False):
# same for "deprecated" lint collection # same for "deprecated" lint collection
changed |= replace_region( changed |= replace_region(
'clippy_lints/src/lib.rs', r'let mut store', r'end deprecated lints', 'clippy_lints/src/lib.rs', r'begin deprecated lints', r'end deprecated lints',
lambda: gen_deprecated(deprecated_lints), lambda: gen_deprecated(deprecated_lints),
replace_start=False, replace_start=False,
write_back=not check) write_back=not check)