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.

  • ⚡️ 10-100x faster than existing linters
  • 🐍 Installable via pip
  • 🤝 Python 3.10 compatibility
  • 🛠️ pyproject.toml support
  • 📦 ESLint-inspired cache support
  • 🔧 ESLint-inspired --fix support
  • 👀 TypeScript-inspired --watch 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.

Read the launch blog post.

Installation and usage

Installation

Available as ruff on PyPI:

pip install ruff

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

ruff also works with Pre-Commit (requires Cargo on system):

repos:
- repo: https://github.com/charliermarsh/ruff
  rev: v0.0.34
  hooks:
    - id: lint

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 (v0.0.34)
An extremely fast Python linter.

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

ARGS:
    <FILES>...

OPTIONS:
    -e, --exit-zero               Exit with status code "0", even upon detecting errors
        --exclude <EXCLUDE>...    List of file and/or directory patterns to exclude from checks
    -f, --fix                     Attempt to automatically fix lint errors
    -h, --help                    Print help information
        --ignore <IGNORE>...      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>...      List of error codes to enable
    -v, --verbose                 Enable verbose logging
    -w, --watch                   Run in watch mode by re-running whenever files change

Compatibility with Black

ruff is intended to be compatible with Black, and should be compatible out-of-the-box as long as the line-length setting is consistent between the two.

As a project, ruff is designed to be used alongside Black and, as such, will defer implementing lint rules that are obviated by Black (e.g., stylistic rules).

Parity with Flake8

ruff's goal is to achieve feature-parity with Flake8 when used (1) without any plugins, (2) alongside Black, and (3) on Python 3 code. (Using Black obviates the need for many of Flake8's stylistic checks; limiting to Python 3 obviates the need for certain compatibility checks.)

Under those conditions, Flake8 implements about 58 rules, give or take. At time of writing, ruff implements 31 rules. (Note that these 31 rules likely cover a disproportionate share of errors: unused imports, undefined variables, etc.)

Of the unimplemented rules, ruff is missing:

  • 15 rules related to string .format calls.
  • 6 rules related to misplaced yield, break, and return statements.
  • 3 rules related to syntax errors in doctests and annotations.
  • 2 rules related to redefining unused names.

...along with a variety of others that don't fit neatly into any specific category.

Beyond rule-set parity, ruff suffers from the following limitations vis-à-vis Flake8:

  1. Flake8 supports a wider range of noqa patterns, such as per-file ignores defined in .flake8.
  2. Flake8 has a plugin architecture and supports writing custom lint rules.
  3. ruff does not yet support parenthesized context managers.

Rules

Code Name Message
E402 ModuleImportNotAtTopOfFile Module level import not at top of file
E501 LineTooLong Line too long
E711 NoneComparison Comparison to None should be cond is None
E712 TrueFalseComparison Comparison to True should be cond is True
E713 NotInTest Test for membership should be not in
E714 NotIsTest Test for object identity should be is not
E731 DoNotAssignLambda Do not assign a lambda expression, use a def
E741 AmbiguousVariableName ambiguous variable name '...'
E902 IOError No such file or directory: ...
F401 UnusedImport ... imported but unused
F403 ImportStarUsage Unable to detect undefined names
F404 LateFutureImport from future imports must occur at the beginning of the file
F407 FutureFeatureNotDefined future feature '...' is not defined
F541 FStringMissingPlaceholders f-string without any placeholders
F601 MultiValueRepeatedKeyLiteral Dictionary key literal repeated
F602 MultiValueRepeatedKeyVariable Dictionary key ... repeated
F621 TooManyExpressionsInStarredAssignment too many expressions in star-unpacking assignment
F622 TwoStarredExpressions two starred expressions in assignment
F631 AssertTuple Assert test is a non-empty tuple, which is always True
F634 IfTuple If test is a tuple, which is always True
F704 YieldOutsideFunction a yield or yield from statement outside of a function/method
F706 ReturnOutsideFunction a return statement outside of a function/method
F707 DefaultExceptNotLast an except: block as not the last exception handler
F821 UndefinedName Undefined name ...
F822 UndefinedExport Undefined name ... in __all__
F823 UndefinedLocal Local variable ... referenced before assignment
F831 DuplicateArgumentName Duplicate argument name in function definition
F841 UnusedVariable Local variable ... is assigned to but never used
F901 RaiseNotImplemented raise NotImplemented should be raise NotImplementedError
R001 UselessObjectInheritance Class ... inherits from object
R002 NoAssertEquals assertEquals is deprecated, use assertEqual instead

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/fixtures
cargo fmt
cargo clippy
cargo test

Deployment

ruff is distributed on PyPI, and published via maturin.

See: .github/workflows/release.yaml.

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.ruff]
line-length = 88
exclude = [
    "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/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/test_fstring.py",
    "Lib/test/test_grammar.py",
    "Lib/test/test_importlib/test_util.py",
    "Lib/test/test_named_expressions.py",
    "Lib/test/test_patma.py",
    "Lib/test/test_source_encoding.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 against the ecosystem's existing tools:

hyperfine --ignore-failure --warmup 5 \
  "./target/release/ruff ./resources/test/cpython/ --no-cache" \
  "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:

  • ruff
  • 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 ± σ):     469.3 ms ±  16.3 ms    [User: 2663.0 ms, System: 972.5 ms]
  Range (min  max):   445.2 ms  494.8 ms    10 runs

Benchmark 2: pylint --recursive=y resources/test/cpython/
  Time (mean ± σ):     27.211 s ±  0.097 s    [User: 26.405 s, System: 0.799 s]
  Range (min  max):   27.056 s  27.349 s    10 runs

Benchmark 3: pyflakes resources/test/cpython
  Time (mean ± σ):     27.309 s ±  0.033 s    [User: 27.137 s, System: 0.169 s]
  Range (min  max):   27.267 s  27.372 s    10 runs

Benchmark 4: autoflake --recursive --expand-star-imports --remove-all-unused-imports --remove-unused-variables --remove-duplicate-keys resources/test/cpython
  Time (mean ± σ):      8.027 s ±  0.024 s    [User: 74.255 s, System: 0.953 s]
  Range (min  max):    7.969 s   8.052 s    10 runs

Benchmark 5: pycodestyle resources/test/cpython
  Time (mean ± σ):     41.666 s ±  0.266 s    [User: 41.531 s, System: 0.132 s]
  Range (min  max):   41.295 s  41.980 s    10 runs

Benchmark 6: pycodestyle --select E501 resources/test/cpython
  Time (mean ± σ):     14.547 s ±  0.077 s    [User: 14.466 s, System: 0.079 s]
  Range (min  max):   14.429 s  14.695 s    10 runs

Benchmark 7: flake8 resources/test/cpython
  Time (mean ± σ):     75.700 s ±  0.152 s    [User: 75.254 s, System: 0.440 s]
  Range (min  max):   75.513 s  76.014 s    10 runs

Benchmark 8: flake8 --select=F831,F541,F634,F403,F706,F901,E501 resources/test/cpython
  Time (mean ± σ):     75.122 s ±  0.532 s    [User: 74.677 s, System: 0.440 s]
  Range (min  max):   74.130 s  75.606 s    10 runs

Benchmark 9: python -m scripts.run_flake8 resources/test/cpython
  Time (mean ± σ):     12.794 s ±  0.147 s    [User: 90.792 s, System: 0.738 s]
  Range (min  max):   12.606 s  13.030 s    10 runs

Benchmark 10: python -m scripts.run_flake8 resources/test/cpython --select=F831,F541,F634,F403,F706,F901,E501
  Time (mean ± σ):     12.487 s ±  0.118 s    [User: 90.052 s, System: 0.714 s]
  Range (min  max):   12.265 s  12.665 s    10 runs

Summary
  './target/release/ruff ./resources/test/cpython/ --no-cache' ran
   17.10 ± 0.60 times faster than 'autoflake --recursive --expand-star-imports --remove-all-unused-imports --remove-unused-variables --remove-duplicate-keys resources/test/cpython'
   26.60 ± 0.96 times faster than 'python -m scripts.run_flake8 resources/test/cpython --select=F831,F541,F634,F403,F706,F901,E501'
   27.26 ± 1.00 times faster than 'python -m scripts.run_flake8 resources/test/cpython'
   30.99 ± 1.09 times faster than 'pycodestyle --select E501 resources/test/cpython'
   57.98 ± 2.03 times faster than 'pylint --recursive=y resources/test/cpython/'
   58.19 ± 2.02 times faster than 'pyflakes resources/test/cpython'
   88.77 ± 3.14 times faster than 'pycodestyle resources/test/cpython'
  160.06 ± 5.68 times faster than 'flake8 --select=F831,F541,F634,F403,F706,F901,E501 resources/test/cpython'
  161.29 ± 5.61 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.34.tar.gz (98.5 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.34-py3-none-win_amd64.whl (2.5 MB view details)

Uploaded Python 3Windows x86-64

ruff-0.0.34-py3-none-win32.whl (2.4 MB view details)

Uploaded Python 3Windows x86

ruff-0.0.34-py3-none-musllinux_1_2_x86_64.whl (2.7 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

ruff-0.0.34-py3-none-musllinux_1_2_i686.whl (2.7 MB view details)

Uploaded Python 3musllinux: musl 1.2+ i686

ruff-0.0.34-py3-none-musllinux_1_2_armv7l.whl (2.4 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

ruff-0.0.34-py3-none-musllinux_1_2_aarch64.whl (2.5 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

ruff-0.0.34-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ s390x

ruff-0.0.34-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.0 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ppc64le

ruff-0.0.34-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl (2.1 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ppc64

ruff-0.0.34-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.8 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARMv7l

ruff-0.0.34-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.5 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

ruff-0.0.34-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (2.6 MB view details)

Uploaded Python 3manylinux: glibc 2.12+ x86-64

ruff-0.0.34-py3-none-manylinux_2_12_i686.manylinux2010_i686.whl (2.7 MB view details)

Uploaded Python 3manylinux: glibc 2.12+ i686

ruff-0.0.34-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (5.0 MB view details)

Uploaded Python 3macOS 10.9+ universal2 (ARM64, x86-64)macOS 10.9+ x86-64macOS 11.0+ ARM64

ruff-0.0.34-py3-none-macosx_10_7_x86_64.whl (2.6 MB view details)

Uploaded Python 3macOS 10.7+ x86-64

File details

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

File metadata

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

File hashes

Hashes for ruff-0.0.34.tar.gz
Algorithm Hash digest
SHA256 6237a2466d4473e5caf17ee9f37427243b49a5b51fa1296e9987a671c0744044
MD5 b4f6a23c3cb196f08968dea54524aa96
BLAKE2b-256 0c234b5484ee01aee8ee0ff3f473da27734135f829d85bd003b1b044cc0da892

See more details on using hashes here.

File details

Details for the file ruff-0.0.34-py3-none-win_amd64.whl.

File metadata

  • Download URL: ruff-0.0.34-py3-none-win_amd64.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.10

File hashes

Hashes for ruff-0.0.34-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 1e8132e4d984aaf8f73caabdb99923816215e18e7a0a007c04c33819fca591d7
MD5 95e5a68fe2c77624126914d7d0285921
BLAKE2b-256 c06bbe82c61dd117c8f6a4fab054929d28e0f5297f136bf8ad583255fdc030cf

See more details on using hashes here.

File details

Details for the file ruff-0.0.34-py3-none-win32.whl.

File metadata

  • Download URL: ruff-0.0.34-py3-none-win32.whl
  • Upload date:
  • Size: 2.4 MB
  • Tags: Python 3, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.10

File hashes

Hashes for ruff-0.0.34-py3-none-win32.whl
Algorithm Hash digest
SHA256 0a56356c85839824b959742662f70b0425eb4ce7caef072119ee85ca5d6e3d6c
MD5 683d6875f2dd0f3cb0806d8d6ee0c647
BLAKE2b-256 50cb870537a0e40bf64463d49107dd073a48f7d64d525ec2c8de8d88ec9a01db

See more details on using hashes here.

File details

Details for the file ruff-0.0.34-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ruff-0.0.34-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 711fcf180e733159634428d37610e9bb5ee5e9bec17c9e46827f6cc51a5d7818
MD5 7f041d05ccd49c3ef7d7169278285907
BLAKE2b-256 2e7cbc00653e9ff7bbd819e43d139cf6383359419d2c882d2c71af6fcc0e4f02

See more details on using hashes here.

File details

Details for the file ruff-0.0.34-py3-none-musllinux_1_2_i686.whl.

File metadata

  • Download URL: ruff-0.0.34-py3-none-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: Python 3, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.10

File hashes

Hashes for ruff-0.0.34-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 721b69a091833cd70328c815a970d0b8e22d52b38214233059c3055d929c2037
MD5 20426fc1631c41488ff0399a36c85a42
BLAKE2b-256 5fe859e3c5c7753b3f8e6326bdd9660e1ae86aad5721065253b7ec21a84ed6bb

See more details on using hashes here.

File details

Details for the file ruff-0.0.34-py3-none-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for ruff-0.0.34-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 453486d11f50c68489a23f4d7a83397aafa4181581c1cdc44cd06d63737387b8
MD5 e318d3fba673ebcb27c3db8d536028a0
BLAKE2b-256 79f85e0121c522c59291883e0f6ef6b3c980786ff930c9df5665a2360733a706

See more details on using hashes here.

File details

Details for the file ruff-0.0.34-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ruff-0.0.34-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 2c7df29159294eae10115b21d92a4e9a2b2876a7179d5ee53dc7d0a027d3f874
MD5 99e706bc23e2f29d7bda0c31d81c1ec6
BLAKE2b-256 d32e5fc35c870b8e3200f00d260e6ec0b3f5a34b76d96b9858252c92d1a5ed1c

See more details on using hashes here.

File details

Details for the file ruff-0.0.34-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for ruff-0.0.34-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 fa22c8dec6080bd919bcf3dc780c5666a34330bd6674fd8940f957448d3c2760
MD5 389f88c176c03fff9d4227b391975cf8
BLAKE2b-256 2b3431d2dbfb5f9f7b87236ce869466ccea84fceb4481909dc2d4fa1556017b0

See more details on using hashes here.

File details

Details for the file ruff-0.0.34-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for ruff-0.0.34-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 fafe9079d00efdfc951489536240daebbcf590823e336dbf997250ba1d7ab219
MD5 f1aec5a41d6e8e90c4076d13421fe018
BLAKE2b-256 083df1dbd85a9d18d6af9fa02a1248e7556d551a93ceb620d52dc3a0f2099863

See more details on using hashes here.

File details

Details for the file ruff-0.0.34-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl.

File metadata

File hashes

Hashes for ruff-0.0.34-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm Hash digest
SHA256 dfd38db3a9da36f941a414cc86976ea5b398d9c12204343c5269e3b2feac6a6f
MD5 f316783733cfe4eda0f1e8d97f7b4a59
BLAKE2b-256 5cb6c32cf5c83667d09e5725a700c94e71d7642fdff0e976ffa31394d820d4e7

See more details on using hashes here.

File details

Details for the file ruff-0.0.34-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for ruff-0.0.34-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 e7a9fe086f67d8180eec02a1013f54bdf2bb8023b1ae076650b6ea8ad9133db2
MD5 de622126600ea5324ad44d09c858b877
BLAKE2b-256 3f2a183a65824890aa6d13acf6889c51826f2d4675fb3917da8fa1d9c0e1deb8

See more details on using hashes here.

File details

Details for the file ruff-0.0.34-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ruff-0.0.34-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 415f9d5730e8b3292587277c7d6ded4bcf48f046708a76847da2ce5c6c7a054f
MD5 3993b9b9d095d8837f037d6f948e06ff
BLAKE2b-256 ce8be56d03bafca159b27ec4bcffe286fe0b6197baa7cb4b09e90e82f4fb148a

See more details on using hashes here.

File details

Details for the file ruff-0.0.34-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for ruff-0.0.34-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 1fdd24dd29ceab5850e5f38e087747ff084853afea08316c40bd032dc8877db7
MD5 aace6955ae7abd569ed983fc8aa41c48
BLAKE2b-256 4063582a8fc94bd95bea21c56b9293e96d0db310d19176aa32073e5f803d374f

See more details on using hashes here.

File details

Details for the file ruff-0.0.34-py3-none-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for ruff-0.0.34-py3-none-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 7d0b96b9dc42e553586899e388ee73066589b7bc789d26e116f2e3bd5f9fe173
MD5 d6a8cc718501006976ec08061525d994
BLAKE2b-256 71e60540c578b4517c1f2ad573aa365cbfafb7d50319414f333b5650d01e3df0

See more details on using hashes here.

File details

Details for the file ruff-0.0.34-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for ruff-0.0.34-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 b5ec807b57c1496fe7b4c445ab5abbbe200d489cc69817a80668f25317dd8fef
MD5 9cf97cc9385b144aa38047806377a823
BLAKE2b-256 f211c5a97dfa3329505f3afd6aad750414a0743ed5418729f95d8196adbe451c

See more details on using hashes here.

File details

Details for the file ruff-0.0.34-py3-none-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for ruff-0.0.34-py3-none-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 f98a7f9b4d6e3c6337c023af5dbaaef88d79f4d1c4ab6600b1c939cc877e5343
MD5 a136006a39fce5d112ffff87586bce70
BLAKE2b-256 bcfdb004feaeef55b9b0557ce08df09ca641dbb4552011b4beef9523c4603ea5

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