From 6baabb086d00dd78c55c9202b0cb186b2f35814d Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 2 Dec 2024 14:28:12 +0800 Subject: [PATCH] Avoid intermediate vectors --- .../src/rules/airflow/rules/removal_in_3.rs | 58 ++++++++++--------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/crates/ruff_linter/src/rules/airflow/rules/removal_in_3.rs b/crates/ruff_linter/src/rules/airflow/rules/removal_in_3.rs index 6ed8d898beace4..73498402faa5b7 100644 --- a/crates/ruff_linter/src/rules/airflow/rules/removal_in_3.rs +++ b/crates/ruff_linter/src/rules/airflow/rules/removal_in_3.rs @@ -57,37 +57,41 @@ impl Violation for Airflow3Removal { } } -struct DeprecatedArgument(Vec<&'static str>, Option<&'static str>); +fn diagnostic_for_argument( + arguments: &Arguments, + deprecated_names: &[&str], + replacement: Option<&str>, +) -> Option { + for deprecated in deprecated_names { + if let Some(keyword) = arguments.find_keyword(deprecated) { + return Some(Diagnostic::new( + Airflow3Removal { + deprecated: (*deprecated).to_string(), + replacement: match replacement { + Some(name) => Replacement::Name(name.to_owned()), + None => Replacement::None, + }, + }, + keyword + .arg + .as_ref() + .map_or_else(|| keyword.range(), Ranged::range), + )); + } + } + None +} fn removed_argument(checker: &mut Checker, qualname: &QualifiedName, arguments: &Arguments) { - let deprecations = match qualname.segments() { - ["airflow", .., "DAG" | "dag"] => vec![DeprecatedArgument( - vec!["timetable", "schedule_interval"], + let diagnostic = match qualname.segments() { + ["airflow", .., "DAG" | "dag"] => diagnostic_for_argument( + arguments, + &["timetable", "schedule_interval"], Some("schedule"), - )], - _ => { - return; - } + ), + _ => None, }; - for deprecation in deprecations { - for arg in deprecation.0 { - if let Some(keyword) = arguments.find_keyword(arg) { - checker.diagnostics.push(Diagnostic::new( - Airflow3Removal { - deprecated: arg.to_string(), - replacement: match deprecation.1 { - Some(name) => Replacement::Name(name.to_owned()), - None => Replacement::None, - }, - }, - keyword - .arg - .as_ref() - .map_or_else(|| keyword.range(), Ranged::range), - )); - }; - } - } + checker.diagnostics.extend(diagnostic); } fn removed_name(checker: &mut Checker, expr: &Expr, ranged: impl Ranged) {