Theres enough here for a proposal

This commit is contained in:
Charlie Marsh 2023-05-21 12:40:25 -04:00
parent 3295ccfbc4
commit a4432102f1
3 changed files with 16 additions and 25 deletions

View File

@ -154,19 +154,6 @@ impl<'a> Checker<'a> {
rules.push(pyupgrade::rules::type_of_primitive); rules.push(pyupgrade::rules::type_of_primitive);
} }
// This is closest to Rome.
let mut analysis_rules: Vec<RegisteredAstRule<ast::ExprCall>> = vec![];
// flake8-django
if settings.rules.enabled(Rule::DjangoLocalsInRenderFunction) {
analysis_rules.push(RegisteredAstRule::new::<DjangoLocalsInRenderFunction>());
}
// pyupgrade
if settings.rules.enabled(Rule::TypeOfPrimitive) {
analysis_rules.push(RegisteredAstRule::new::<TypeOfPrimitive>());
}
let mut _analysis_rules: Vec<AstRuleExecutor<ast::ExprCall>> = vec![]; let mut _analysis_rules: Vec<AstRuleExecutor<ast::ExprCall>> = vec![];
// flake8-django // flake8-django
@ -175,17 +162,17 @@ impl<'a> Checker<'a> {
} }
// We _can_ do this which is nice. // We _can_ do this which is nice.
for (rule, analyzer) in [
( // This is closest to Rome.
let mut analysis_rules: Vec<RegisteredAstRule<ast::ExprCall>> = vec![];
for analyzer in [
RegisteredAstRule::new::<DjangoLocalsInRenderFunction>(
Rule::DjangoLocalsInRenderFunction, Rule::DjangoLocalsInRenderFunction,
RegisteredAstRule::new::<DjangoLocalsInRenderFunction>(),
),
(
Rule::TypeOfPrimitive,
RegisteredAstRule::new::<TypeOfPrimitive>(),
), ),
RegisteredAstRule::new::<TypeOfPrimitive>(Rule::TypeOfPrimitive),
] { ] {
if settings.rules.enabled(rule) { if settings.rules.enabled(analyzer.rule) {
analysis_rules.push(analyzer); analysis_rules.push(analyzer);
} }
} }

View File

@ -1,14 +1,18 @@
use ruff_diagnostics::Diagnostic; use ruff_diagnostics::Diagnostic;
use crate::checkers::ast::RuleContext; use crate::checkers::ast::RuleContext;
use crate::registry::Rule;
pub(crate) struct RegisteredAstRule<T> { pub(crate) struct RegisteredAstRule<T> {
pub(crate) run: AstRuleExecutor<T>, pub(crate) run: AstRuleExecutor<T>,
pub(crate) rule: Rule,
} }
// A nice thing about this is that we can have state that lives in this struct,
// and we can pass it to the `run` function... E.g., flake8_bugbear_seen.
impl<T> RegisteredAstRule<T> { impl<T> RegisteredAstRule<T> {
pub(crate) fn new<R: AstRule<T> + 'static>() -> Self { pub(crate) fn new<R: AstRule<T> + 'static>(rule: Rule) -> Self {
Self { run: R::run } Self { run: R::run, rule }
} }
} }

View File

@ -44,8 +44,8 @@ impl Violation for DjangoLocalsInRenderFunction {
} }
impl AstRule<ast::ExprCall> for DjangoLocalsInRenderFunction { impl AstRule<ast::ExprCall> for DjangoLocalsInRenderFunction {
fn run(diagnostics: &mut Vec<Diagnostic>, checker: &RuleContext, node: &ast::ExprCall) { fn run(diagnostics: &mut Vec<Diagnostic>, context: &RuleContext, node: &ast::ExprCall) {
locals_in_render_function(diagnostics, checker, node) locals_in_render_function(diagnostics, context, node)
} }
} }