mirror of
				https://github.com/astral-sh/ruff.git
				synced 2025-10-31 12:05:57 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			76 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/usr/bin/env sh
 | |
| 
 | |
| ###
 | |
| # Benchmark the Ruff formatter's performance against a variety of similar tools.
 | |
| #
 | |
| # Expects to be run from the repo root after invoking `cargo build --release`,
 | |
| # in an environment with access to `black`, `autopep8`, and `yapf` (most recently:
 | |
| # `black` v23.9.1, `autopep8` v2.0.4, and `yapf` v0.40.2, on Python 3.11.6, the
 | |
| # most recent combination of versions for which Black provides compiled wheels at
 | |
| # time of writing).
 | |
| #
 | |
| # Example usage:
 | |
| #
 | |
| #   ./scripts/benchmarks/run_formatter.sh ~/workspace/zulip
 | |
| ###
 | |
| 
 | |
| TARGET_DIR=${1}
 | |
| 
 | |
| # In each case, ensure that we format the code in-place before invoking a given tool. This ensures
 | |
| # a fair comparison across tools, since every tool is then running on a repository that already
 | |
| # matches that tool's desired formatting.
 | |
| #
 | |
| # For example, if we're benchmarking Black's preview style, we first run `black --preview` over the
 | |
| # target directory, thus ensuring that we're benchmarking preview style against a codebase that
 | |
| # already conforms to it. The same goes for yapf, autoepp8, etc.
 | |
| 
 | |
| # Benchmark 1: Write to disk.
 | |
| hyperfine --ignore-failure \
 | |
|   --prepare "./target/release/ruff format ${TARGET_DIR}" \
 | |
|   "./target/release/ruff format ${TARGET_DIR}" \
 | |
|   --prepare "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --safe" \
 | |
|   "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --safe" \
 | |
|   --prepare "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --fast" \
 | |
|   "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --fast" \
 | |
|   --prepare "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --safe --preview" \
 | |
|   "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --safe --preview" \
 | |
|   --prepare "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --fast --preview" \
 | |
|   "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --fast --preview" \
 | |
|   --prepare "autopep8 ${TARGET_DIR} --recursive --in-place" \
 | |
|   "autopep8 ${TARGET_DIR} --recursive --in-place" \
 | |
|   --prepare "yapf ${TARGET_DIR} --parallel --recursive --in-place" \
 | |
|   "yapf ${TARGET_DIR} --parallel --recursive --in-place"
 | |
| 
 | |
| # Benchmark 2: Write to disk, but only use one thread.
 | |
| hyperfine --ignore-failure \
 | |
|   --prepare "./target/release/ruff format ${TARGET_DIR}" \
 | |
|   "RAYON_NUM_THREADS=1 ./target/release/ruff format ${TARGET_DIR}" \
 | |
|   --prepare "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --safe" \
 | |
|   "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --workers=1 --safe" \
 | |
|   --prepare "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --fast" \
 | |
|   "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --workers=1 --fast" \
 | |
|   --prepare "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --safe --preview" \
 | |
|   "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --workers=1 --safe --preview" \
 | |
|   --prepare "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --fast --preview" \
 | |
|   "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --workers=1 --fast --preview" \
 | |
|   --prepare "autopep8 ${TARGET_DIR} --recursive --in-place" \
 | |
|   "autopep8 ${TARGET_DIR} --in-place --recursive --jobs=1" \
 | |
|   --prepare "yapf ${TARGET_DIR} --parallel --recursive --in-place" \
 | |
|   "yapf ${TARGET_DIR} --recursive --in-place"
 | |
| 
 | |
| # Benchmark 3: Check formatting, but don't write to disk.
 | |
| hyperfine --ignore-failure \
 | |
|   --prepare "./target/release/ruff format ${TARGET_DIR}" \
 | |
|   "./target/release/ruff format ${TARGET_DIR} --check" \
 | |
|   --prepare "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --safe" \
 | |
|   "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --check --safe" \
 | |
|   --prepare "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --fast" \
 | |
|   "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --check --fast" \
 | |
|   --prepare "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --safe --preview" \
 | |
|   "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --check --safe --preview" \
 | |
|   --prepare "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --fast --preview" \
 | |
|   "BLACK_CACHE_DIR=/dev/null black ${TARGET_DIR} --check --fast --preview" \
 | |
|   --prepare "autopep8 ${TARGET_DIR} --recursive --in-place" \
 | |
|   "autopep8 ${TARGET_DIR} --recursive --diff" \
 | |
|   --prepare "yapf ${TARGET_DIR} --parallel --recursive --in-place" \
 | |
|   "yapf ${TARGET_DIR} --parallel --recursive --quiet"
 | 
