mirror of
				https://github.com/astral-sh/ruff.git
				synced 2025-10-31 12:05:57 +00:00 
			
		
		
		
	 1fa64a24b8
			
		
	
	
		1fa64a24b8
		
			
		
	
	
	
		
			
	
		
	
	
		
			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);
 |