Repository: astral-sh/ruff
File: crates/ruff_linter/src/checkers/ast/analyze/expression.rs (Rust)

Code before:
            if checker.is_rule_enabled(Rule::IntOnSlicedStr) {
                refurb::rules::int_on_sliced_str(checker, call);
            }
            if checker.is_rule_enabled(Rule::UnsafeMarkupUse) {
                flake8_bandit::rules::unsafe_markup_call(checker, call);
            }
            if checker.is_rule_enabled(Rule::MapIntVersionParsing) {
                ruff::rules::map_int_version_parsing(checker, call);
            }
            if checker.is_rule_enabled(Rule::UnrawRePattern) {
                ruff::rules::unraw_re_pattern(checker, call);
            }
            if checker.is_rule_enabled(Rule::AirflowDagNoScheduleArgument) {
                airflow::rules::dag_no_schedule_argument(checker, expr);
            }
            if checker.is_rule_enabled(Rule::UnnecessaryRegularExpression) {
                ruff::rules::unnecessary_regular_expression(checker, call);
            }
            if checker.is_rule_enabled(Rule::Airflow3Removal) {
                airflow::rules::airflow_3_removal_expr(checker, expr);
            }
            if checker.is_rule_enabled(Rule::Airflow3SuggestedUpdate) {
                airflow::rules::airflow_3_0_suggested_update_expr(checker, expr);
            }
            if checker.is_rule_enabled(Rule::Airflow3FunctionSignatureChange) {
                airflow::rules::airflow_3_keyword_args_only_function(checker, expr);
            }
            if checker.is_rule_enabled(Rule::UnnecessaryCastToInt) {
                ruff::rules::unnecessary_cast_to_int(checker, call);
            }
            if checker.is_rule_enabled(Rule::InvalidPathlibWithSuffix) {
                flake8_use_pathlib::rules::invalid_pathlib_with_suffix(checker, call);
            }
            if checker.is_rule_enabled(Rule::BatchedWithoutExplicitStrict) {
                flake8_bugbear::rules::batched_without_explicit_strict(checker, call);
            }
            if checker.is_rule_enabled(Rule::PytestRaisesAmbiguousPattern) {
                ruff::rules::pytest_raises_ambiguous_pattern(checker, call);
            }
            if checker.is_rule_enabled(Rule::FalsyDictGetFallback) {
                ruff::rules::falsy_dict_get_fallback(checker, expr);
            }
            if checker.is_rule_enabled(Rule::UnnecessaryRound) {
                ruff::rules::unnecessary_round(checker, call);
            }
            if checker.is_rule_enabled(Rule::UnnecessaryEmptyIterableWithinDequeCall) {
                ruff::rules::unnecessary_literal_within_deque_call(checker, call);
            }
            if checker.is_rule_enabled(Rule::LoggingEagerConversion) {
                ruff::rules::logging_eager_conversion(checker, call);
            }

Review comment (suggestion):
We probably can make a parent function like `airflow_3_function_signature_change_expr` and call `airflow_3_keyword_args_only_function` inside. IIRC, there're come other cases as well

Code after:
            }
            if checker.is_rule_enabled(Rule::UnnecessaryIterableAllocationForFirstElement) {
                ruff::rules::unnecessary_iterable_allocation_for_first_element(checker, expr);
            }
            if checker.is_rule_enabled(Rule::DecimalFromFloatLiteral) {
                ruff::rules::decimal_from_float_literal_syntax(checker, call);
            }
            if checker.is_rule_enabled(Rule::IntOnSlicedStr) {
                refurb::rules::int_on_sliced_str(checker, call);
            }
            if checker.is_rule_enabled(Rule::UnsafeMarkupUse) {
                flake8_bandit::rules::unsafe_markup_call(checker, call);
            }
            if checker.is_rule_enabled(Rule::MapIntVersionParsing) {
                ruff::rules::map_int_version_parsing(checker, call);
            }
            if checker.is_rule_enabled(Rule::UnrawRePattern) {
                ruff::rules::unraw_re_pattern(checker, call);
            }
            if checker.is_rule_enabled(Rule::AirflowDagNoScheduleArgument) {
                airflow::rules::dag_no_schedule_argument(checker, expr);
            }
            if checker.is_rule_enabled(Rule::UnnecessaryRegularExpression) {
                ruff::rules::unnecessary_regular_expression(checker, call);
            }
            if checker.is_rule_enabled(Rule::Airflow3Removal) {
                airflow::rules::airflow_3_removal_expr(checker, expr);
            }
            if checker.is_rule_enabled(Rule::Airflow3SuggestedUpdate) {
                airflow::rules::airflow_3_0_suggested_update_expr(checker, expr);
            }
            if checker.is_rule_enabled(Rule::Airflow3IncompatibleFunctionSignature) {
                airflow::rules::airflow_3_incompatible_function_signature(checker, expr);
            }
            if checker.is_rule_enabled(Rule::UnnecessaryCastToInt) {
                ruff::rules::unnecessary_cast_to_int(checker, call);
            }
            if checker.is_rule_enabled(Rule::InvalidPathlibWithSuffix) {
                flake8_use_pathlib::rules::invalid_pathlib_with_suffix(checker, call);
            }
            if checker.is_rule_enabled(Rule::BatchedWithoutExplicitStrict) {
                flake8_bugbear::rules::batched_without_explicit_strict(checker, call);
            }
            if checker.is_rule_enabled(Rule::PytestRaisesAmbiguousPattern) {
                ruff::rules::pytest_raises_ambiguous_pattern(checker, call);
            }
            if checker.is_rule_enabled(Rule::FalsyDictGetFallback) {
                ruff::rules::falsy_dict_get_fallback(checker, expr);
            }
            if checker.is_rule_enabled(Rule::UnnecessaryRound) {
                ruff::rules::unnecessary_round(checker, call);