Skip to content

Commit

Permalink
Auto merge of rust-lang#8843 - Serial-ATA:collect-renamed, r=xFrednet
Browse files Browse the repository at this point in the history
Collect renamed lints

changelog: Display past names of renamed lints on Clippy's lint list

cc rust-lang#7172

r? `@xFrednet`
  • Loading branch information
bors committed Jun 4, 2022
2 parents b1a3e7e + 45be175 commit 8ef4908
Showing 1 changed file with 52 additions and 3 deletions.
55 changes: 52 additions & 3 deletions clippy_lints/src/utils/internal_lints/metadata_collector.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
//! during any comparison or mapping. (Please take care of this, it's not fun to spend time on such
//! a simple mistake)

use crate::renamed_lints::RENAMED_LINTS;
use crate::utils::internal_lints::{extract_clippy_version_value, is_lint_ref_type};

use clippy_utils::diagnostics::span_lint;
Expand All @@ -26,6 +27,7 @@ use rustc_span::{sym, Loc, Span, Symbol};
use serde::{ser::SerializeStruct, Serialize, Serializer};
use std::collections::BinaryHeap;
use std::fmt;
use std::fmt::Write as _;
use std::fs::{self, OpenOptions};
use std::io::prelude::*;
use std::path::Path;
Expand Down Expand Up @@ -85,6 +87,21 @@ macro_rules! CONFIGURATION_VALUE_TEMPLATE {
};
}

macro_rules! RENAMES_SECTION_TEMPLATE {
() => {
r#"
### Past names
{names}
"#
};
}
macro_rules! RENAME_VALUE_TEMPLATE {
() => {
"* `{name}`\n"
};
}

const LINT_EMISSION_FUNCTIONS: [&[&str]; 8] = [
&["clippy_utils", "diagnostics", "span_lint"],
&["clippy_utils", "diagnostics", "span_lint_and_help"],
Expand Down Expand Up @@ -198,9 +215,10 @@ impl Drop for MetadataCollector {

// Mapping the final data
let mut lints = std::mem::take(&mut self.lints).into_sorted_vec();
lints
.iter_mut()
.for_each(|x| x.applicability = Some(applicability_info.remove(&x.id).unwrap_or_default()));
collect_renames(&mut lints);
for x in &mut lints {
x.applicability = Some(applicability_info.remove(&x.id).unwrap_or_default());
}

// Outputting
if Path::new(OUTPUT_FILE).exists() {
Expand Down Expand Up @@ -642,6 +660,37 @@ fn is_deprecated_lint(cx: &LateContext<'_>, ty: &hir::Ty<'_>) -> bool {
false
}

fn collect_renames(lints: &mut Vec<LintMetadata>) {
for lint in lints {
let mut collected = String::new();
let mut names = vec![lint.id.clone()];

loop {
if let Some(lint_name) = names.pop() {
for (k, v) in RENAMED_LINTS {
if_chain! {
if let Some(name) = v.strip_prefix(CLIPPY_LINT_GROUP_PREFIX);
if name == lint_name;
if let Some(past_name) = k.strip_prefix(CLIPPY_LINT_GROUP_PREFIX);
then {
write!(collected, RENAME_VALUE_TEMPLATE!(), name = past_name).unwrap();
names.push(past_name.to_string());
}
}
}

continue;
}

break;
}

if !collected.is_empty() {
write!(&mut lint.docs, RENAMES_SECTION_TEMPLATE!(), names = collected).unwrap();
}
}
}

// ==================================================================
// Lint emission
// ==================================================================
Expand Down

0 comments on commit 8ef4908

Please sign in to comment.