From 2314b9aaca59d1eef1171fc3fe76b50082b22d9f Mon Sep 17 00:00:00 2001 From: Micha Reiser Date: Wed, 29 Nov 2023 13:26:25 +0900 Subject: [PATCH] Add benchmark for running all rules including preview rules (#8865) --- crates/ruff_benchmark/benches/linter.rs | 37 +++++++++++++++++++++---- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/crates/ruff_benchmark/benches/linter.rs b/crates/ruff_benchmark/benches/linter.rs index 9a5e01f2bf..a98061fc82 100644 --- a/crates/ruff_benchmark/benches/linter.rs +++ b/crates/ruff_benchmark/benches/linter.rs @@ -3,7 +3,9 @@ use ruff_benchmark::criterion::{ }; use ruff_benchmark::{TestCase, TestFile, TestFileDownloadError}; use ruff_linter::linter::lint_only; +use ruff_linter::rule_selector::PreviewOptions; use ruff_linter::settings::rule_table::RuleTable; +use ruff_linter::settings::types::PreviewMode; use ruff_linter::settings::{flags, LinterSettings}; use ruff_linter::source_kind::SourceKind; use ruff_linter::{registry::Rule, RuleSelector}; @@ -78,12 +80,21 @@ fn benchmark_default_rules(criterion: &mut Criterion) { benchmark_linter(group, &LinterSettings::default()); } -fn benchmark_all_rules(criterion: &mut Criterion) { - let mut rules: RuleTable = RuleSelector::All.all_rules().collect(); - - // Disable IO based rules because it is a source of flakiness +/// Disables IO based rules because they are a source of flakiness +fn disable_io_rules(rules: &mut RuleTable) { rules.disable(Rule::ShebangMissingExecutableFile); rules.disable(Rule::ShebangNotExecutable); +} + +fn benchmark_all_rules(criterion: &mut Criterion) { + let mut rules: RuleTable = RuleSelector::All + .rules(&PreviewOptions { + mode: PreviewMode::Disabled, + require_explicit: false, + }) + .collect(); + + disable_io_rules(&mut rules); let settings = LinterSettings { rules, @@ -94,6 +105,22 @@ fn benchmark_all_rules(criterion: &mut Criterion) { benchmark_linter(group, &settings); } +fn benchmark_preview_rules(criterion: &mut Criterion) { + let mut rules: RuleTable = RuleSelector::All.all_rules().collect(); + + disable_io_rules(&mut rules); + + let settings = LinterSettings { + rules, + preview: PreviewMode::Enabled, + ..LinterSettings::default() + }; + + let group = criterion.benchmark_group("linter/all-with-preview-rules"); + benchmark_linter(group, &settings); +} + criterion_group!(default_rules, benchmark_default_rules); criterion_group!(all_rules, benchmark_all_rules); -criterion_main!(default_rules, all_rules); +criterion_group!(preview_rules, benchmark_preview_rules); +criterion_main!(default_rules, all_rules, preview_rules);