diff --git a/crates/ruff_dev/src/generate_docs.rs b/crates/ruff_dev/src/generate_docs.rs index 90c88cda5c2be5..6f275e1a4231e2 100644 --- a/crates/ruff_dev/src/generate_docs.rs +++ b/crates/ruff_dev/src/generate_docs.rs @@ -8,6 +8,7 @@ use std::path::PathBuf; use anyhow::Result; use regex::{Captures, Regex}; use strum::IntoEnumIterator; +use itertools::Itertools; use ruff_diagnostics::FixAvailability; use ruff_linter::registry::{Linter, Rule, RuleNamespace}; @@ -33,7 +34,18 @@ pub(crate) fn main(args: &Args) -> Result<()> { let (linter, _) = Linter::parse_code(&rule.noqa_code().to_string()).unwrap(); if linter.url().is_some() { - output.push_str(&format!("Derived from the **{}** linter.", linter.name())); + let codes_dsv: String = match linter.common_prefix() { + "" => linter + .upstream_categories() + .unwrap() + .iter() + .map(|c| c.prefix) + .join("-"), + prefix => prefix.to_string(), + }; + let anchor = format!("{}-{}", linter.name().to_lowercase(), codes_dsv.to_lowercase()); + + output.push_str(&format!("Derived from the **[{}](../rules.md#{})** linter.", linter.name(), anchor)); output.push('\n'); output.push('\n'); }