Skip to content

Commit

Permalink
Use rule name rather than message in --statistics (#11697)
Browse files Browse the repository at this point in the history
Co-authored-by: Micha Reiser <micha@reiser.io>
Closes #11097.
  • Loading branch information
charliermarsh authored and MichaReiser committed Jun 27, 2024
1 parent dd0b8f6 commit 9b99d81
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 16 deletions.
47 changes: 32 additions & 15 deletions crates/ruff/src/printer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,9 @@ bitflags! {
}

#[derive(Serialize)]
struct ExpandedStatistics<'a> {
struct ExpandedStatistics {
code: SerializeRuleAsCode,
message: &'a str,
name: SerializeRuleAsTitle,
count: usize,
fixable: bool,
}
Expand Down Expand Up @@ -66,6 +66,29 @@ impl From<Rule> for SerializeRuleAsCode {
}
}

struct SerializeRuleAsTitle(Rule);

impl Serialize for SerializeRuleAsTitle {
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_str(self.0.as_ref())
}
}

impl Display for SerializeRuleAsTitle {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.0.as_ref())
}
}

impl From<Rule> for SerializeRuleAsTitle {
fn from(rule: Rule) -> Self {
Self(rule)
}
}

pub(crate) struct Printer {
format: OutputFormat,
log_level: LogLevel,
Expand Down Expand Up @@ -317,29 +340,23 @@ impl Printer {
let statistics: Vec<ExpandedStatistics> = diagnostics
.messages
.iter()
.map(|message| {
(
message.kind.rule(),
&message.kind.body,
message.fix.is_some(),
)
})
.map(|message| (message.kind.rule(), message.fix.is_some()))
.sorted()
.fold(vec![], |mut acc, (rule, body, fixable)| {
if let Some((prev_rule, _, _, count)) = acc.last_mut() {
.fold(vec![], |mut acc, (rule, fixable)| {
if let Some((prev_rule, _, count)) = acc.last_mut() {
if *prev_rule == rule {
*count += 1;
return acc;
}
}
acc.push((rule, body, fixable, 1));
acc.push((rule, fixable, 1));
acc
})
.iter()
.map(|(rule, message, fixable, count)| ExpandedStatistics {
.map(|(rule, fixable, count)| ExpandedStatistics {
code: (*rule).into(),
name: (*rule).into(),
count: *count,
message,
fixable: *fixable,
})
.sorted_by_key(|statistic| Reverse(statistic.count))
Expand Down Expand Up @@ -386,7 +403,7 @@ impl Printer {
} else {
""
},
statistic.message,
statistic.name,
)?;
}
return Ok(());
Expand Down
31 changes: 30 additions & 1 deletion crates/ruff/tests/integration_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -854,7 +854,36 @@ fn show_statistics() {
success: false
exit_code: 1
----- stdout -----
1 F401 [*] `sys` imported but unused
1 F401 [*] unused-import
----- stderr -----
"###);
}

#[test]
fn show_statistics_json() {
let mut cmd = RuffCheck::default()
.args([
"--select",
"F401",
"--statistics",
"--output-format",
"json",
])
.build();
assert_cmd_snapshot!(cmd
.pass_stdin("import sys\nimport os\n\nprint(os.getuid())\n"), @r###"
success: false
exit_code: 1
----- stdout -----
[
{
"code": "F401",
"name": "unused-import",
"count": 1,
"fixable": true
}
]
----- stderr -----
"###);
Expand Down

0 comments on commit 9b99d81

Please sign in to comment.