From a4432102f14f7a7d658194b32de8b3d57209bf43 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Sun, 21 May 2023 12:40:25 -0400 Subject: [PATCH] Theres enough here for a proposal --- crates/ruff/src/checkers/ast/mod.rs | 29 +++++-------------- crates/ruff/src/checkers/ast/traits.rs | 8 +++-- .../rules/locals_in_render_function.rs | 4 +-- 3 files changed, 16 insertions(+), 25 deletions(-) diff --git a/crates/ruff/src/checkers/ast/mod.rs b/crates/ruff/src/checkers/ast/mod.rs index faa3a99742..78336f9171 100644 --- a/crates/ruff/src/checkers/ast/mod.rs +++ b/crates/ruff/src/checkers/ast/mod.rs @@ -154,19 +154,6 @@ impl<'a> Checker<'a> { rules.push(pyupgrade::rules::type_of_primitive); } - // This is closest to Rome. - let mut analysis_rules: Vec> = vec![]; - - // flake8-django - if settings.rules.enabled(Rule::DjangoLocalsInRenderFunction) { - analysis_rules.push(RegisteredAstRule::new::()); - } - - // pyupgrade - if settings.rules.enabled(Rule::TypeOfPrimitive) { - analysis_rules.push(RegisteredAstRule::new::()); - } - let mut _analysis_rules: Vec> = vec![]; // flake8-django @@ -175,17 +162,17 @@ impl<'a> Checker<'a> { } // We _can_ do this which is nice. - for (rule, analyzer) in [ - ( + + // This is closest to Rome. + let mut analysis_rules: Vec> = vec![]; + + for analyzer in [ + RegisteredAstRule::new::( Rule::DjangoLocalsInRenderFunction, - RegisteredAstRule::new::(), - ), - ( - Rule::TypeOfPrimitive, - RegisteredAstRule::new::(), ), + RegisteredAstRule::new::(Rule::TypeOfPrimitive), ] { - if settings.rules.enabled(rule) { + if settings.rules.enabled(analyzer.rule) { analysis_rules.push(analyzer); } } diff --git a/crates/ruff/src/checkers/ast/traits.rs b/crates/ruff/src/checkers/ast/traits.rs index bfe4330ba7..e7f13a0c25 100644 --- a/crates/ruff/src/checkers/ast/traits.rs +++ b/crates/ruff/src/checkers/ast/traits.rs @@ -1,14 +1,18 @@ use ruff_diagnostics::Diagnostic; use crate::checkers::ast::RuleContext; +use crate::registry::Rule; pub(crate) struct RegisteredAstRule { pub(crate) run: AstRuleExecutor, + 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 RegisteredAstRule { - pub(crate) fn new + 'static>() -> Self { - Self { run: R::run } + pub(crate) fn new + 'static>(rule: Rule) -> Self { + Self { run: R::run, rule } } } diff --git a/crates/ruff/src/rules/flake8_django/rules/locals_in_render_function.rs b/crates/ruff/src/rules/flake8_django/rules/locals_in_render_function.rs index c2b0be1c19..02f82de857 100644 --- a/crates/ruff/src/rules/flake8_django/rules/locals_in_render_function.rs +++ b/crates/ruff/src/rules/flake8_django/rules/locals_in_render_function.rs @@ -44,8 +44,8 @@ impl Violation for DjangoLocalsInRenderFunction { } impl AstRule for DjangoLocalsInRenderFunction { - fn run(diagnostics: &mut Vec, checker: &RuleContext, node: &ast::ExprCall) { - locals_in_render_function(diagnostics, checker, node) + fn run(diagnostics: &mut Vec, context: &RuleContext, node: &ast::ExprCall) { + locals_in_render_function(diagnostics, context, node) } }