Skip to main content

An extremely fast Python linter, written in Rust.

Project description

ruff

Actions status PyPI version

An extremely fast Python linter, written in Rust.

Bar chart with benchmark results

Linting the CPython codebase from scratch.

Major features:

  • 10-100x faster than your current linter.
  • Installable via pip.
  • Python 3.10 compatibility.
  • ESLint-inspired cache semantics.
  • TypeScript-inspired --watch semantics.
  • pyproject.toml support.

ruff is a proof-of-concept and not yet intended for production use. It supports only a small subset of the Flake8 rules, and may crash on your codebase.

Installation and usage

Installation

Available as ruff on PyPI:

pip install ruff

For now, wheels are only available for macOS (on Python 3.7, 3.8, 3.9, and 3.10). If you're using a different operating system or Python version, you'll need to install the Rust toolchain prior to running pip install ruff. (This is an effort limitation on my part, not a technical limitation.)

Usage

To run ruff, try any of the following:

ruff path/to/code/to/check.py
ruff path/to/code/
ruff path/to/code/*.py

You can run ruff in --watch mode to automatically re-run on-change:

ruff path/to/code/ --watch

Configuration

ruff is configurable both via pyproject.toml and the command line.

For example, you could configure ruff to only enforce a subset of rules with:

[tool.ruff]
line-length = 88
select = [
    "F401",
    "F403",
]

Alternatively, on the command-line:

ruff path/to/code/ --select F401 F403

See ruff --help for more:

ruff
A Python linter written in Rust

USAGE:
    ruff [OPTIONS] <FILES>...

ARGS:
    <FILES>...

OPTIONS:
    -e, --exit-zero             Exit with status code "0", even upon detecting errors
    -h, --help                  Print help information
        --ignore <IGNORE>...    Comma-separated list of error codes to ignore
    -n, --no-cache              Disable cache reads
    -q, --quiet                 Disable all logging (but still exit with status code "1" upon
                                detecting errors)
        --select <SELECT>...    Comma-separated list of error codes to enable
    -v, --verbose               Enable verbose logging
    -w, --watch                 Run in watch mode by re-running whenever files change

Development

ruff is written in Rust (1.63.0). You'll need to install the Rust toolchain for development.

Assuming you have cargo installed, you can run:

cargo run resources/test/src
cargo fmt
cargo clippy
cargo test

Deployment

ruff is distributed on PyPI, and published via maturin.

For now, releases are cut and published manually:

for TARGET in x86_64-apple-darwin aarch64-apple-darwin
do
  maturin publish --username crmarsh --skip-existing --target ${TARGET} -i \
    /usr/local/opt/python@3.7/libexec/bin/python \
    /usr/local/opt/python@3.8/libexec/bin/python \
    /usr/local/opt/python@3.9/libexec/bin/python \
    /usr/local/opt/python@3.10/libexec/bin/python
done

Benchmarking

First, clone CPython. It's a large and diverse Python codebase, which makes it a good target for benchmarking.

git clone --branch 3.10 https://github.com/python/cpython.git resources/test/cpython

Add this pyproject.toml to the CPython directory:

[tool.linter]
line-length = 88
exclude = [
    "Lib/ctypes/test/test_numbers.py",
    "Lib/dataclasses.py",
    "Lib/lib2to3/tests/data/bom.py",
    "Lib/lib2to3/tests/data/crlf.py",
    "Lib/lib2to3/tests/data/different_encoding.py",
    "Lib/lib2to3/tests/data/false_encoding.py",
    "Lib/lib2to3/tests/data/py2_test_grammar.py",
    "Lib/sqlite3/test/factory.py",
    "Lib/sqlite3/test/hooks.py",
    "Lib/sqlite3/test/regression.py",
    "Lib/sqlite3/test/transactions.py",
    "Lib/sqlite3/test/types.py",
    "Lib/test/bad_coding2.py",
    "Lib/test/badsyntax_3131.py",
    "Lib/test/badsyntax_pep3120.py",
    "Lib/test/encoded_modules/module_iso_8859_1.py",
    "Lib/test/encoded_modules/module_koi8_r.py",
    "Lib/test/sortperf.py",
    "Lib/test/test_email/torture_test.py",
    "Lib/test/test_fstring.py",
    "Lib/test/test_genericpath.py",
    "Lib/test/test_getopt.py",
    "Lib/test/test_grammar.py",
    "Lib/test/test_htmlparser.py",
    "Lib/test/test_importlib/stubs.py",
    "Lib/test/test_importlib/test_files.py",
    "Lib/test/test_importlib/test_metadata_api.py",
    "Lib/test/test_importlib/test_open.py",
    "Lib/test/test_importlib/test_util.py",
    "Lib/test/test_named_expressions.py",
    "Lib/test/test_patma.py",
    "Lib/test/test_peg_generator/__main__.py",
    "Lib/test/test_pipes.py",
    "Lib/test/test_source_encoding.py",
    "Lib/test/test_weakref.py",
    "Lib/test/test_webbrowser.py",
    "Lib/tkinter/__main__.py",
    "Lib/tkinter/test/test_tkinter/test_variables.py",
    "Modules/_decimal/libmpdec/literature/fnt.py",
    "Modules/_decimal/tests/deccheck.py",
    "Tools/c-analyzer/c_parser/parser/_delim.py",
    "Tools/i18n/pygettext.py",
    "Tools/test2to3/maintest.py",
    "Tools/test2to3/setup.py",
    "Tools/test2to3/test/test_foo.py",
    "Tools/test2to3/test2to3/hello.py",
]

Next, to benchmark the release build:

cargo build --release

hyperfine --ignore-failure --warmup 1 \
  "./target/release/ruff ./resources/test/cpython/ --no-cache" \
  "./target/release/ruff ./resources/test/cpython/"

Benchmark 1: ./target/release/ruff ./resources/test/cpython/ --no-cache
  Time (mean ± σ):     353.6 ms ±   7.6 ms    [User: 2868.8 ms, System: 171.5 ms]
  Range (min  max):   344.4 ms  367.3 ms    10 runs

Benchmark 2: ./target/release/ruff ./resources/test/cpython/
  Time (mean ± σ):      59.6 ms ±   2.5 ms    [User: 36.4 ms, System: 345.6 ms]
  Range (min  max):    55.9 ms   67.0 ms    48 runs

To benchmark the ecosystem's existing tools:

hyperfine --ignore-failure --warmup 1 \
  "pylint --recursive=y resources/test/cpython/" \
  "pyflakes resources/test/cpython" \
  "autoflake --recursive --expand-star-imports --remove-all-unused-imports --remove-unused-variables --remove-duplicate-keys resources/test/cpython" \
  "pycodestyle resources/test/cpython" \
  "pycodestyle --select E501 resources/test/cpython" \
  "flake8 resources/test/cpython" \
  "flake8 --select=F831,F541,F634,F403,F706,F901,E501 resources/test/cpython" \
  "python -m scripts.run_flake8 resources/test/cpython" \
  "python -m scripts.run_flake8 resources/test/cpython --select=F831,F541,F634,F403,F706,F901,E501"

In order, these evaluate:

  • Pylint
  • PyFlakes
  • autoflake
  • pycodestyle
  • pycodestyle, limited to the checks supported by ruff
  • Flake8
  • Flake8, limited to the checks supported by ruff
  • Flake8, with a hack to enable multiprocessing on macOS
  • Flake8, with a hack to enable multiprocessing on macOS, limited to the checks supported by ruff

(You can poetry install from ./scripts to create a working environment for the above.)

Benchmark 1: ./target/release/ruff ./resources/test/cpython/ --no-cache
  Time (mean ± σ):     566.9 ms ±  36.6 ms    [User: 2618.0 ms, System: 992.0 ms]
  Range (min  max):   504.8 ms  634.0 ms    10 runs

  Warning: Ignoring non-zero exit code.

Benchmark 2: ./target/release/ruff ./resources/test/cpython/
  Time (mean ± σ):      79.5 ms ±   2.3 ms    [User: 330.1 ms, System: 254.3 ms]
  Range (min  max):    75.6 ms   85.2 ms    35 runs

  Warning: Ignoring non-zero exit code.

Benchmark 3: pylint --recursive=y resources/test/cpython/
  Time (mean ± σ):     27.532 s ±  0.207 s    [User: 26.606 s, System: 0.899 s]
  Range (min  max):   27.344 s  28.064 s    10 runs

  Warning: Ignoring non-zero exit code.

Benchmark 4: pyflakes resources/test/cpython
  Time (mean ± σ):     28.074 s ±  0.551 s    [User: 27.845 s, System: 0.212 s]
  Range (min  max):   27.479 s  29.467 s    10 runs

  Warning: Ignoring non-zero exit code.

Benchmark 5: autoflake --recursive --expand-star-imports --remove-all-unused-imports --remove-unused-variables --remove-duplicate-keys resources/test/cpython
  Time (mean ± σ):      4.986 s ±  0.190 s    [User: 43.257 s, System: 0.801 s]
  Range (min  max):    4.837 s   5.462 s    10 runs

  Warning: Ignoring non-zero exit code.

Benchmark 6: pycodestyle resources/test/cpython
  Time (mean ± σ):     42.400 s ±  0.211 s    [User: 42.177 s, System: 0.213 s]
  Range (min  max):   42.106 s  42.677 s    10 runs

  Warning: Ignoring non-zero exit code.

Benchmark 7: pycodestyle --select E501 resources/test/cpython
  Time (mean ± σ):     14.578 s ±  0.068 s    [User: 14.466 s, System: 0.108 s]
  Range (min  max):   14.475 s  14.726 s    10 runs

  Warning: Ignoring non-zero exit code.

Benchmark 8: flake8 resources/test/cpython
  Time (mean ± σ):     76.414 s ±  0.461 s    [User: 75.611 s, System: 0.652 s]
  Range (min  max):   75.691 s  77.180 s    10 runs

  Warning: Ignoring non-zero exit code.

Benchmark 9: flake8 --select=F831,F541,F634,F403,F706,F901,E501 resources/test/cpython
  Time (mean ± σ):     75.960 s ±  0.610 s    [User: 75.255 s, System: 0.634 s]
  Range (min  max):   75.159 s  77.066 s    10 runs

  Warning: Ignoring non-zero exit code.

Benchmark 10: python -m scripts.run_flake8 resources/test/cpython
  Time (mean ± σ):     13.536 s ±  0.584 s    [User: 90.911 s, System: 0.934 s]
  Range (min  max):   12.831 s  14.699 s    10 runs

Benchmark 11: python -m scripts.run_flake8 resources/test/cpython --select=F831,F541,F634,F403,F706,F901,E501
  Time (mean ± σ):     12.781 s ±  0.192 s    [User: 89.525 s, System: 0.882 s]
  Range (min  max):   12.568 s  13.119 s    10 runs

Summary
  './target/release/ruff ./resources/test/cpython/' ran
    7.13 ± 0.50 times faster than './target/release/ruff ./resources/test/cpython/ --no-cache'
   62.69 ± 3.01 times faster than 'autoflake --recursive --expand-star-imports --remove-all-unused-imports --remove-unused-variables --remove-duplicate-keys resources/test/cpython'
  160.71 ± 5.26 times faster than 'python -m scripts.run_flake8 resources/test/cpython --select=F831,F541,F634,F403,F706,F901,E501'
  170.21 ± 8.86 times faster than 'python -m scripts.run_flake8 resources/test/cpython'
  183.30 ± 5.40 times faster than 'pycodestyle --select E501 resources/test/cpython'
  346.19 ± 10.40 times faster than 'pylint --recursive=y resources/test/cpython/'
  353.00 ± 12.39 times faster than 'pyflakes resources/test/cpython'
  533.14 ± 15.74 times faster than 'pycodestyle resources/test/cpython'
  955.13 ± 28.83 times faster than 'flake8 --select=F831,F541,F634,F403,F706,F901,E501 resources/test/cpython'
  960.82 ± 28.55 times faster than 'flake8 resources/test/cpython'

License

MIT

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ruff-0.0.18.tar.gz (71.4 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

ruff-0.0.18-cp310-none-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.10Windows x86-64

ruff-0.0.18-cp310-none-win32.whl (1.6 MB view details)

Uploaded CPython 3.10Windows x86

ruff-0.0.18-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ s390x

ruff-0.0.18-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ppc64le

ruff-0.0.18-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARMv7l

ruff-0.0.18-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

ruff-0.0.18-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.12+ x86-64

ruff-0.0.18-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl (1.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.12+ i686

ruff-0.0.18-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (3.2 MB view details)

Uploaded CPython 3.10macOS 10.9+ universal2 (ARM64, x86-64)macOS 10.9+ x86-64macOS 11.0+ ARM64

ruff-0.0.18-cp310-cp310-macosx_10_7_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.10macOS 10.7+ x86-64

ruff-0.0.18-cp39-none-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.9Windows x86-64

ruff-0.0.18-cp39-none-win32.whl (1.6 MB view details)

Uploaded CPython 3.9Windows x86

ruff-0.0.18-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.1 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ s390x

ruff-0.0.18-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.9 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ppc64le

ruff-0.0.18-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.7 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARMv7l

ruff-0.0.18-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

ruff-0.0.18-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ x86-64

ruff-0.0.18-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl (1.8 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ i686

ruff-0.0.18-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (3.2 MB view details)

Uploaded CPython 3.9macOS 10.9+ universal2 (ARM64, x86-64)macOS 10.9+ x86-64macOS 11.0+ ARM64

ruff-0.0.18-cp39-cp39-macosx_10_7_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.9macOS 10.7+ x86-64

ruff-0.0.18-cp38-none-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.8Windows x86-64

ruff-0.0.18-cp38-none-win32.whl (1.6 MB view details)

Uploaded CPython 3.8Windows x86

ruff-0.0.18-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.1 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ s390x

ruff-0.0.18-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.9 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ppc64le

ruff-0.0.18-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.7 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARMv7l

ruff-0.0.18-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

ruff-0.0.18-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64

ruff-0.0.18-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl (1.8 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ i686

ruff-0.0.18-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (3.2 MB view details)

Uploaded CPython 3.8macOS 10.9+ universal2 (ARM64, x86-64)macOS 10.9+ x86-64macOS 11.0+ ARM64

ruff-0.0.18-cp38-cp38-macosx_10_7_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.8macOS 10.7+ x86-64

ruff-0.0.18-cp37-none-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.7Windows x86-64

ruff-0.0.18-cp37-none-win32.whl (1.6 MB view details)

Uploaded CPython 3.7Windows x86

ruff-0.0.18-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.1 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ s390x

ruff-0.0.18-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.9 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ ppc64le

ruff-0.0.18-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.7 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ ARMv7l

ruff-0.0.18-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ ARM64

ruff-0.0.18-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64

ruff-0.0.18-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl (1.8 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ i686

ruff-0.0.18-cp37-cp37m-macosx_10_7_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.7mmacOS 10.7+ x86-64

File details

Details for the file ruff-0.0.18.tar.gz.

File metadata

  • Download URL: ruff-0.0.18.tar.gz
  • Upload date:
  • Size: 71.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for ruff-0.0.18.tar.gz
Algorithm Hash digest
SHA256 338194a789a57ed6d7b0aa3cba19cf38e1a6fc7bd8799c9e57795d832be048bf
MD5 1f469abc48a3f1995231f9728293ea43
BLAKE2b-256 db0bc00b65d4bb50c1ba128f69d9c76383d145578a5c82bdea99487146228b1c

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp310-none-win_amd64.whl.

File metadata

  • Download URL: ruff-0.0.18-cp310-none-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for ruff-0.0.18-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 74d14ff072ad8f081e4d440a5f0cc102dfcb88c6d75c1219eb799e73675fcaa7
MD5 128a6cfbb59dbcb16e393e6a8b96a6e1
BLAKE2b-256 b6360e8e710cd9c316d4315c89ccc2b5ca1a85665eb67525beb19c7ce5c46bb4

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp310-none-win32.whl.

File metadata

  • Download URL: ruff-0.0.18-cp310-none-win32.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for ruff-0.0.18-cp310-none-win32.whl
Algorithm Hash digest
SHA256 6407d7193815fc9274016d90ba095323d3867653fa0b1b7d694c775ee3402715
MD5 d9910cd1366f416e95f6f5b14b1297aa
BLAKE2b-256 918335cf06a01309dcf45d80f458ac464cba13895ad21ca485b6f3055643609c

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 e29c6313844d6b000b1b02122f39a6c1c3979017fde67234b6fbbbf766ddddac
MD5 c1bb160c963c8f6d7a010c8499d60b6b
BLAKE2b-256 2f4886770c7cca948414b72f10b657abb17bd2a4dfd8d81e34ae4f57719bec87

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 271b7b5148d2fa328d315d30562f4f23765e5738311823477e925e95a50051a2
MD5 add72a95ac32e733a494f9737f190129
BLAKE2b-256 16cbb2ccd8cbf4ac53e0110e6178dd635558c3eba2de372b645eeda50f901efc

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 510a651c721c08d2c9b9d9befeb88fef64d3437f000c1cf45ae6bc21d0f6ec99
MD5 b6ec4455a918c20b8f3c5e5a9f52fd2a
BLAKE2b-256 e3cb9abe7ff6bfb1ea7d466319d6c197eee9bf8c06d06043a5d8360da1557d3b

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6ad65a978c5e38ec626b15052025d2dc40039964d6942a4d1d7dbf79098fb8af
MD5 fee31280589789abd6a0b332786247bd
BLAKE2b-256 9f047f0d35a3c0b145c95d1af27639239f1fd79ee00708b7760e4a7a5431ef0e

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 2b3f2c7951c70cf050fa48e5960bbfba312d4f0f4512a798bb9e976658ecd85c
MD5 873208af4749052c564bad1433860ec1
BLAKE2b-256 3f51eab09cc5c651078195a607c774b0d4e7535572484d5b220c092d5dc7a39b

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 f12dcfca268d31de2450b7f9920c6eb59553cc32fa7df891192c9be9e9b98bfe
MD5 1a2f22f8fb914212696b8bd62dc0d859
BLAKE2b-256 c9527c87a11ba41c146603e36ba4dac3b584f879b5e4af3e4c8ae2ca1cebf618

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 bac22a8f611d9533b69ae1a9ab08b042083effec1b12f6ca5f5c099e1f577299
MD5 f9dec1583b7a2e7d1a93de697a9f944a
BLAKE2b-256 907df79b0fcf0ca5cdc91c9012751978470d490128ffb1031719e48176a115e6

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp310-cp310-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp310-cp310-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 459f9d94131ab77bb6603e2cd241c9320ff689742e8c789a32469e4c206156f5
MD5 bee90c7835792619d1893a1863801694
BLAKE2b-256 013ad64ac7cce55707e9736ded0f393c57f7d81ac3579e30a2d4db3121cb7062

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp39-none-win_amd64.whl.

File metadata

  • Download URL: ruff-0.0.18-cp39-none-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for ruff-0.0.18-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 e95c32653fdfa87e19c24b88e13de09bfdd32bbd301f7c02763dd7934eddc463
MD5 a9643fde238b8ff4f958058381feb23e
BLAKE2b-256 d27fa70660198652c298bcb9f377530793d9fe63d511f4f09054991541976a54

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp39-none-win32.whl.

File metadata

  • Download URL: ruff-0.0.18-cp39-none-win32.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for ruff-0.0.18-cp39-none-win32.whl
Algorithm Hash digest
SHA256 4d761603c1efd50e334964cc5fd5522579555d0f665b807aa54708dac752ed52
MD5 6827ad0c053904da6cfe1f3dcba7105a
BLAKE2b-256 4a53ecc72bce3326559b25abe610815e570b5af1e03d5bdc04117dcbe4d84fb4

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 c61953a6ad7f5a3e4951df445d743a35a7188a5227c185aaacc60d8730289007
MD5 e9932557a18ed632caefac06f18abbce
BLAKE2b-256 b4f62a3d4a22eda1f570de4704bd1fb7e47ae70cdf4a05bf172de1b99bfd3f0a

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 65a9b425bd41f1e273cc9d77a099c5f11e07133b0d66404e695a919071fbcced
MD5 fd242dc0f54c4126c1e4d8ea7b34b8fc
BLAKE2b-256 eb3876a20b9c72dc1dabdff6f128072746a1aaed9d5c7b31694ff349df54ab10

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 0731789c088713764d43c690f6d2b2275f1a0014c7db4a319af68435a4ad4e4d
MD5 d17067cc8ffdec30c67dac1a4724330a
BLAKE2b-256 4b29d924d3ce91b5f5601481d912a6c43a373b244670699ed2bb760887f85b96

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7c907a6f729b4194602ce5b49ab25c0a341aa89a333e9310aba7944dec04819c
MD5 d1ee0bc69864253e30b8e35ad8ca26ce
BLAKE2b-256 0a97b6299c46c194c6eaf17169cf4cef849ff5e4d430ad2b6a9d880254afd263

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 30c04b0ca4fe22ab585fe8b5e4fae2401413b5763e06d0e47a203dabdc3ba08b
MD5 7872fc910b9f6430db2813f3c149dd64
BLAKE2b-256 1233878859c581de1532a218e30c0872605a2545349d1d08e668de49abf0d661

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 563eb3371cf6f08738f0f246935173de27ab35f834a718fed8a3aa24ac75a980
MD5 428a19d57d2219696811d2f599f679c3
BLAKE2b-256 4065a9259acbe9bee1b58352984b59b9c6b9dc7cdd263fb2620de9c3a0ea5f9f

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 84c237c217778451e9a0d20c7938af5acca27033d9c4d9b90de280e17d058c9d
MD5 98395bfce618a64c8f1c37a1b81c3639
BLAKE2b-256 91fcb0e6056dd442815827660926e0cefa8afa1c5226f4536e9a842208d7cb28

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp39-cp39-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp39-cp39-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 2fcbd1494509350454419a52a607307add3108ce49864ef64e2e061767a92b78
MD5 f07f30a207c5251711caf814fdfef55c
BLAKE2b-256 5fe51d6059c89708783fd6ab423ee53aceb0ac7d27fd0659383574f316ab41ae

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp38-none-win_amd64.whl.

File metadata

  • Download URL: ruff-0.0.18-cp38-none-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for ruff-0.0.18-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 d5b7b2079f04f4ae7ad247aa3e9cfc0b2e917f69498b72c95f2625ad58a95c21
MD5 de90673432289dbf7861323293997a11
BLAKE2b-256 1892bfb61f1f5a88498bff29e00e0f42a173e370e0d52de7eb4328d099217f4a

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp38-none-win32.whl.

File metadata

  • Download URL: ruff-0.0.18-cp38-none-win32.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for ruff-0.0.18-cp38-none-win32.whl
Algorithm Hash digest
SHA256 37aed592e82ad36f21a144a0bbcada6290167874ec13b7b1f9d936d4bf1d2922
MD5 1953b0b01421d15367af7c27e04440af
BLAKE2b-256 fde7a853cb925a05ab6c2a44f57489a6cc2718f3ffc7fb3ffbeeefdb7738c346

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 5bcff208ad0cf44f8f300676853f9fac7dde4fc6bd76ebee502d1e32cec54c2e
MD5 d46450baa26d8415314c86d24b82f9c6
BLAKE2b-256 d3c4cfc9aa1fca7441850d68d353439c5e13cd65ab2c6918b9bf5b05d38d0db7

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 3ecfe3eac7d63600039eeedf248aa1c87933a8cbbf17524ad78d53b8ce52e0bd
MD5 fc0f0858cab71dfa1b0d5eb79be488c6
BLAKE2b-256 271bf1b99ac404672e9c6f403656a1b869192f652d0ae2219abc908d6ef5967e

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 98d78cfec84aed6c5518ae3b46ca2683e2bc1859f2389ac50dcd4fbc1b86d1c2
MD5 524fd2161e4e025b9bd2680d3e3354c5
BLAKE2b-256 cfa494177a0f3c9496fbdb636335666c18abe8054452dae8bf17f9054bc7867a

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b0248375e1665485d8cd3b247af49456fe9317f6f2e86104529cb297106ac6fa
MD5 9bbbfa883099e585f3ef8fbf8887a041
BLAKE2b-256 bde3ea3ed56ba2ff08b42f30053dbed599a30fdee18815b13f13aa72bcdd98a1

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 41ae06d255f1b5a27f42db927561cb7a26ee9f6730be57a6f1be5c5b9eca286c
MD5 c11159a730f8d0e34efb010bc765cf7b
BLAKE2b-256 6b51484173c466d8f64e82745132ff6d9dc3debd3f3301712c1babbecf808fd3

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 13d16be5e6f8d2949f51553fd0d4265a966b25877df2c9477efa41283d230f00
MD5 8d7bb701c5bd8e431c6ffe07a4b58398
BLAKE2b-256 cc994545b6baa0724ee966dc33570cdcc6f5d0e9921a0cf603e539f77c94bc82

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 ab8d40d4f50f925630668cc9176debade659becb2c30b17d66195258dd44ae22
MD5 d90ea00558b5a0795c65ea662ef5c63b
BLAKE2b-256 e54cf2199c2e2277b838c8215f3ab7497b467da5cb6b6ae13e4cd4d8c6543258

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp38-cp38-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp38-cp38-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 5e303301050f8aa1b40759ecb33ec5a927dfd3144d1df931cd6b68b32f58aea9
MD5 74b2c5f6c4ca386a41645369df2d57e4
BLAKE2b-256 33035da9b17cb93b7f7a23dec613f13d808b8003300f1c4b4f0c9fd4a60d7a0e

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp37-none-win_amd64.whl.

File metadata

  • Download URL: ruff-0.0.18-cp37-none-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.7, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for ruff-0.0.18-cp37-none-win_amd64.whl
Algorithm Hash digest
SHA256 60fee0616ccedf4ade8577491b445465b8dc07004b5a670e60ae5be0e1d0a72a
MD5 956ae3ca0a6d9be91ba99b7ba643d022
BLAKE2b-256 215100cd9963d486aac87b54398fe659f6eb0ce5f2f49e3898b26d49cb476986

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp37-none-win32.whl.

File metadata

  • Download URL: ruff-0.0.18-cp37-none-win32.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.7, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for ruff-0.0.18-cp37-none-win32.whl
Algorithm Hash digest
SHA256 047c8863c3a2925ff9d6915231771959c476e36e0586e4054ad99d949b96e7ce
MD5 880293ab4fbfeba23a6034487073dd39
BLAKE2b-256 c45f97343e1ce20f2bc926dc5fdba37ce121feabac5d2ab175a3c71f839cf2e4

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 625c368bef294837f17e78528aa4fdd829d6d08cef81ae0efe5a6bf071c6ae63
MD5 64fc3b2b3ecc063bdfabb8f6ab08a558
BLAKE2b-256 0b464c9c7308971602ac1bf1ebf03bf70c08a4878a9d3ab97e3f4352543dff85

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 d83eff5dff39b2740310ec34d1045c885d4a4377beccf01c532f1e244c8e3a06
MD5 89a73ad0ec9ce3b42510badecd9086e9
BLAKE2b-256 aa2b95bab9b48be6837a8ed63a5f956f179a07c7368f3760c4cb74f1c2de2ed6

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 846877276776480285f30b8242ef755c7de7117d7b1b9db845943bb30d61b374
MD5 2a33cf78aa8d6f1720af3948a100d390
BLAKE2b-256 ce1c67f4b928c726212e6ffbf7469f15848d8d68e104e48f305cea18e810ea9c

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 bea3f58827c8e36ce31005b8d7913e2fa39442a0f135985e3550cc82568b8601
MD5 3fa3cf633efc0d7578251620711adf1b
BLAKE2b-256 d38609b3bbc58ccc9129b85d935fa34421a155099cb42d4c6c79ea2add152c04

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 dc17d49d9533d290d7d64800c514dfdf5b219c9b7144f437f8f4e4e9769f085c
MD5 1400a033d2dbe76776886b9aaed53486
BLAKE2b-256 83e489c0f4641144eceea7c7c29bc25b39fc9ef7d7c074e300458557d9f45bce

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 1db098d99e9a71a409af310b2962546aec1bfb2e91fdf119f52facff12c9f0c9
MD5 51ec80d1575db76613dec68f09579c81
BLAKE2b-256 b3059eeab287a39549dbce00539a41242e1d702ae235adad86e20dc8e3878f0c

See more details on using hashes here.

File details

Details for the file ruff-0.0.18-cp37-cp37m-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for ruff-0.0.18-cp37-cp37m-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 310cbf1c9a116c70f4751e17709c682e145e42851e093ad136960ecbf76014eb
MD5 43deebd3f16ac5aeeeac43fe3aa34253
BLAKE2b-256 8b247a4dc19bec10167e3c99861c129817f164f198a748da23498455bdc7e0f9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page