mirror of
				https://github.com/astral-sh/ruff.git
				synced 2025-11-03 21:24:29 +00:00 
			
		
		
		
	
		
			Some checks failed
		
		
	
	CI / Determine changes (push) Has been cancelled
				
			CI / cargo fmt (push) Has been cancelled
				
			CI / cargo build (release) (push) Has been cancelled
				
			CI / mkdocs (push) Has been cancelled
				
			CI / python package (push) Has been cancelled
				
			CI / pre-commit (push) Has been cancelled
				
			[ty Playground] Release / publish (push) Has been cancelled
				
			CI / cargo clippy (push) Has been cancelled
				
			CI / cargo test (linux) (push) Has been cancelled
				
			CI / cargo test (linux, release) (push) Has been cancelled
				
			CI / cargo test (windows) (push) Has been cancelled
				
			CI / cargo test (wasm) (push) Has been cancelled
				
			CI / cargo build (msrv) (push) Has been cancelled
				
			CI / cargo fuzz build (push) Has been cancelled
				
			CI / fuzz parser (push) Has been cancelled
				
			CI / test scripts (push) Has been cancelled
				
			CI / ecosystem (push) Has been cancelled
				
			CI / Fuzz for new ty panics (push) Has been cancelled
				
			CI / cargo shear (push) Has been cancelled
				
			CI / formatter instabilities and black similarity (push) Has been cancelled
				
			CI / test ruff-lsp (push) Has been cancelled
				
			CI / check playground (push) Has been cancelled
				
			CI / benchmarks-instrumented (push) Has been cancelled
				
			CI / benchmarks-walltime (push) Has been cancelled
				
			
		
			
				
	
	
		
			78 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
use ruff_benchmark::criterion;
 | 
						|
 | 
						|
use criterion::{
 | 
						|
    BenchmarkId, Criterion, Throughput, criterion_group, criterion_main, measurement::WallTime,
 | 
						|
};
 | 
						|
use ruff_benchmark::{
 | 
						|
    LARGE_DATASET, NUMPY_CTYPESLIB, NUMPY_GLOBALS, PYDANTIC_TYPES, TestCase, UNICODE_PYPINYIN,
 | 
						|
};
 | 
						|
use ruff_python_ast::Stmt;
 | 
						|
use ruff_python_ast::statement_visitor::{StatementVisitor, walk_stmt};
 | 
						|
use ruff_python_parser::parse_module;
 | 
						|
 | 
						|
#[cfg(target_os = "windows")]
 | 
						|
#[global_allocator]
 | 
						|
static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc;
 | 
						|
 | 
						|
#[cfg(all(
 | 
						|
    not(target_os = "windows"),
 | 
						|
    not(target_os = "openbsd"),
 | 
						|
    any(
 | 
						|
        target_arch = "x86_64",
 | 
						|
        target_arch = "aarch64",
 | 
						|
        target_arch = "powerpc64",
 | 
						|
        target_arch = "riscv64"
 | 
						|
    )
 | 
						|
))]
 | 
						|
#[global_allocator]
 | 
						|
static GLOBAL: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;
 | 
						|
 | 
						|
fn create_test_cases() -> Vec<TestCase> {
 | 
						|
    vec![
 | 
						|
        TestCase::fast(NUMPY_GLOBALS.clone()),
 | 
						|
        TestCase::fast(UNICODE_PYPINYIN.clone()),
 | 
						|
        TestCase::normal(PYDANTIC_TYPES.clone()),
 | 
						|
        TestCase::normal(NUMPY_CTYPESLIB.clone()),
 | 
						|
        TestCase::slow(LARGE_DATASET.clone()),
 | 
						|
    ]
 | 
						|
}
 | 
						|
 | 
						|
struct CountVisitor {
 | 
						|
    count: usize,
 | 
						|
}
 | 
						|
 | 
						|
impl<'a> StatementVisitor<'a> for CountVisitor {
 | 
						|
    fn visit_stmt(&mut self, stmt: &'a Stmt) {
 | 
						|
        walk_stmt(self, stmt);
 | 
						|
        self.count += 1;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
fn benchmark_parser(criterion: &mut Criterion<WallTime>) {
 | 
						|
    let test_cases = create_test_cases();
 | 
						|
    let mut group = criterion.benchmark_group("parser");
 | 
						|
 | 
						|
    for case in test_cases {
 | 
						|
        group.throughput(Throughput::Bytes(case.code().len() as u64));
 | 
						|
        group.bench_with_input(
 | 
						|
            BenchmarkId::from_parameter(case.name()),
 | 
						|
            &case,
 | 
						|
            |b, case| {
 | 
						|
                b.iter(|| {
 | 
						|
                    let parsed = parse_module(case.code())
 | 
						|
                        .expect("Input should be a valid Python code")
 | 
						|
                        .into_suite();
 | 
						|
 | 
						|
                    let mut visitor = CountVisitor { count: 0 };
 | 
						|
                    visitor.visit_body(&parsed);
 | 
						|
                    visitor.count
 | 
						|
                });
 | 
						|
            },
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    group.finish();
 | 
						|
}
 | 
						|
 | 
						|
criterion_group!(parser, benchmark_parser);
 | 
						|
criterion_main!(parser);
 |