Skip to content

Commit

Permalink
Fix pylint upstream categories not showing in docs (#10441)
Browse files Browse the repository at this point in the history
## Summary

The upstream category check here

https://github.com/astral-sh/ruff/blob/fd26b299865997fc9a89608d5e090f9c05360997/crates/ruff_linter/src/upstream_categories.rs#L54-L65

was not working because the code is actually "E0001" not "PLE0001", I
changed it so it will detect the upstream category correctly.

I also sorted the upstream categories alphabetically, so that the
document generation will be deterministic.

## Test Plan

I compared the diff before and after the change.
  • Loading branch information
augustelalande committed Mar 18, 2024
1 parent fd26b29 commit dc021dd
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 26 deletions.
16 changes: 15 additions & 1 deletion crates/ruff_dev/src/generate_rules_table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -180,8 +180,22 @@ pub(crate) fn generate() -> String {
.map(|rule| (rule.upstream_category(&linter), rule))
.into_group_map();

let mut rules_by_upstream_category: Vec<_> = rules_by_upstream_category.iter().collect();

// Sort the upstream categories alphabetically by prefix.
rules_by_upstream_category.sort_by(|(a, _), (b, _)| {
a.as_ref()
.map(|category| category.prefix)
.unwrap_or_default()
.cmp(
b.as_ref()
.map(|category| category.prefix)
.unwrap_or_default(),
)
});

if rules_by_upstream_category.len() > 1 {
for (opt, rules) in &rules_by_upstream_category {
for (opt, rules) in rules_by_upstream_category {
if opt.is_some() {
let UpstreamCategoryAndPrefix { category, prefix } = opt.unwrap();
table_out.push_str(&format!("#### {category} ({prefix})"));
Expand Down
40 changes: 15 additions & 25 deletions crates/ruff_linter/src/upstream_categories.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,29 +8,19 @@ pub struct UpstreamCategoryAndPrefix {
pub prefix: &'static str,
}

const PLC: UpstreamCategoryAndPrefix = UpstreamCategoryAndPrefix {
const C: UpstreamCategoryAndPrefix = UpstreamCategoryAndPrefix {
category: "Convention",
prefix: "PLC",
prefix: "C",
};

const PLE: UpstreamCategoryAndPrefix = UpstreamCategoryAndPrefix {
const E: UpstreamCategoryAndPrefix = UpstreamCategoryAndPrefix {
category: "Error",
prefix: "PLE",
prefix: "E",
};

const PLR: UpstreamCategoryAndPrefix = UpstreamCategoryAndPrefix {
const R: UpstreamCategoryAndPrefix = UpstreamCategoryAndPrefix {
category: "Refactor",
prefix: "PLR",
};

const PLW: UpstreamCategoryAndPrefix = UpstreamCategoryAndPrefix {
category: "Warning",
prefix: "PLW",
};

const E: UpstreamCategoryAndPrefix = UpstreamCategoryAndPrefix {
category: "Error",
prefix: "E",
prefix: "R",
};

const W: UpstreamCategoryAndPrefix = UpstreamCategoryAndPrefix {
Expand All @@ -52,14 +42,14 @@ impl Rule {
}
}
Linter::Pylint => {
if code.starts_with("PLC") {
Some(PLC)
} else if code.starts_with("PLE") {
Some(PLE)
} else if code.starts_with("PLR") {
Some(PLR)
} else if code.starts_with("PLW") {
Some(PLW)
if code.starts_with('C') {
Some(C)
} else if code.starts_with('E') {
Some(E)
} else if code.starts_with('R') {
Some(R)
} else if code.starts_with('W') {
Some(W)
} else {
None
}
Expand All @@ -73,7 +63,7 @@ impl Linter {
pub const fn upstream_categories(&self) -> Option<&'static [UpstreamCategoryAndPrefix]> {
match self {
Linter::Pycodestyle => Some(&[E, W]),
Linter::Pylint => Some(&[PLC, PLE, PLR, PLW]),
Linter::Pylint => Some(&[C, E, R, W]),
_ => None,
}
}
Expand Down

0 comments on commit dc021dd

Please sign in to comment.