Skip to main content

An extremely fast Python linter, written in Rust.

Project description

ruff

image image image Actions status

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
  • ⚖️ Near-complete parity with the built-in Flake8 rule set

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:

repos:
  - repo: https://github.com/charliermarsh/ruff-pre-commit
    rev: v0.0.48
    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 --select F403

See ruff --help for more:

ruff: An extremely fast Python linter.

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

Arguments:
  <FILES>...

Options:
  -v, --verbose
          Enable verbose logging
  -q, --quiet
          Disable all logging (but still exit with status code "1" upon detecting errors)
  -e, --exit-zero
          Exit with status code "0", even upon detecting errors
  -w, --watch
          Run in watch mode by re-running whenever files change
  -f, --fix
          Attempt to automatically fix lint errors
  -n, --no-cache
          Disable cache reads
      --select <SELECT>
          List of error codes to enable
      --extend-select <EXTEND_SELECT>
          Like --select, but adds additional error codes on top of the selected ones
      --ignore <IGNORE>
          List of error codes to ignore
      --extend-ignore <EXTEND_IGNORE>
          Like --ignore, but adds additional error codes on top of the ignored ones
      --exclude <EXCLUDE>
          List of paths, used to exclude files and/or directories from checks
      --extend-exclude <EXTEND_EXCLUDE>
          Like --exclude, but adds additional files and directories on top of the excluded ones
      --per-file-ignores <PER_FILE_IGNORES>
          List of mappings from file pattern to code to exclude
      --format <FORMAT>
          Output serialization format for error messages [default: text] [possible values: text, json]
      --show-files
          See the files ruff will be run against with the current settings
      --show-settings
          See ruff's settings
      --add-noqa
          Enable automatic additions of noqa directives to failing lines
      --dummy-variable-rgx <DUMMY_VARIABLE_RGX>
          Regular expression matching the name of dummy variables
  -h, --help
          Print help information
  -V, --version
          Print version information

Excluding files

Exclusions are based on globs, and can be either:

  • Single-path patterns, like .mypy_cache (to exclude any directory named .mypy_cache in the tree), foo.py (to exclude any file named foo.py), or foo_*.py (to exclude any file matching foo_*.py ).
  • Relative patterns, like directory/foo.py (to exclude that specific file) or directory/*.py (to exclude any Python files in directory). Note that these paths are relative to the project root (e.g., the directory containing your pyproject.toml).

Ignoring errors

To omit a lint check entirely, add it to the "ignore" list via --ignore or --extend-ignore, either on the command-line or in your project.toml file.

To ignore an error in-line, ruff uses a noqa system similar to Flake8. To ignore an individual error, add # noqa: {code} to the end of the line, like so:

# Ignore F841.
x = 1  # noqa: F841

# Ignore E741 and F841.
i = 1  # noqa: E741, F841

# Ignore _all_ errors.
x = 1  # noqa

Note that, for multi-line strings, the noqa directive should come at the end of the string, and will apply to the entire body, like so:

"""Lorem ipsum dolor sit amet.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
"""  # noqa: E501

ruff supports several (experimental) workflows to aid in noqa management.

First, ruff provides a special error code, M001, to enforce that your noqa directives are "valid", in that the errors they say they ignore are actually being triggered on that line (and thus suppressed). You can run ruff /path/to/file.py --extend-select M001 to flag unused noqa directives.

Second, ruff can automatically remove unused noqa directives via its autofix functionality. You can run ruff /path/to/file.py --extend-select M001 --fix to automatically remove unused noqa directives.

Third, ruff can automatically add noqa directives to all failing lines. This is useful when migrating a new codebase to ruff. You can run ruff /path/to/file.py --add-noqa to automatically add noqa directives to all failing lines, with the appropriate error codes.

Compatibility with Black

ruff is compatible with Black 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 stylistic lint rules that are obviated by autoformatting.

Parity with Flake8

ruff's goal is to achieve feature parity with Flake8 when used (1) without plugins, (2) alongside Black, and (3) on Python 3 code.

Under those conditions, ruff implements 44 out of 60 rules. (ruff is missing: 14 rules related to string .format calls, 1 rule related to docstring parsing, and 1 rule related to redefined variables.)

ruff also implements some of the most popular Flake8 plugins natively, including:

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

  1. ruff does not yet support a few Python 3.9 and 3.10 language features, including structural pattern matching and parenthesized context managers.
  2. Flake8 has a plugin architecture and supports writing custom lint rules.

Rules

The ✅ emoji indicates a rule is enabled by default.

The 🛠 emoji indicates that a rule is automatically fixable by the --fix command-line option.

Code Name Message
E402 ModuleImportNotAtTopOfFile Module level import not at top of file
E501 LineTooLong Line too long (89 > 88 characters)
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
E721 TypeComparison Do not compare types, use isinstance()
E722 DoNotUseBareExcept Do not use bare except
E731 DoNotAssignLambda Do not assign a lambda expression, use a def
E741 AmbiguousVariableName Ambiguous variable name: ...
E742 AmbiguousClassName Ambiguous class name: ...
E743 AmbiguousFunctionName Ambiguous function name: ...
E902 IOError IOError: ...
E999 SyntaxError SyntaxError: ...
F401 UnusedImport ... imported but unused 🛠
F402 ImportShadowedByLoopVar Import ... from line 1 shadowed by loop variable
F403 ImportStarUsed from ... import * used; unable to detect undefined names
F404 LateFutureImport from __future__ imports must occur at the beginning of the file
F405 ImportStarUsage ... may be undefined, or defined from star imports: ...
F406 ImportStarNotPermitted from ... import * only allowed at module level
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 ExpressionsInStarAssignment 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
F632 IsLiteral Use == and != to compare constant literals
F633 InvalidPrintSyntax Use of >> is invalid with print function
F634 IfTuple If test is a tuple, which is always True
F701 BreakOutsideLoop break outside loop
F702 ContinueOutsideLoop continue not properly in loop
F704 YieldOutsideFunction yield or yield from statement outside of a function/method
F706 ReturnOutsideFunction return statement outside of a function/method
F707 DefaultExceptNotLast An except: block as not the last exception handler
F722 ForwardAnnotationSyntaxError Syntax error in forward annotation: ...
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
A001 BuiltinVariableShadowing Variable ... is shadowing a python builtin
A002 BuiltinArgumentShadowing Argument ... is shadowing a python builtin
A003 BuiltinAttributeShadowing Class attribute ... is shadowing a python builtin
SPR001 SuperCallWithParameters Use super() instead of super(__class__, self) 🛠
T201 PrintFound print found 🛠
T203 PPrintFound pprint found 🛠
U001 UselessMetaclassType __metaclass__ = type is implied 🛠
R001 UselessObjectInheritance Class ... inherits from object 🛠
R002 NoAssertEquals assertEquals is deprecated, use assertEqual instead 🛠
M001 UnusedNOQA Unused noqa directive 🛠

Integrations

PyCharm

ruff can be installed as an External Tool in PyCharm. Open the Preferences pane, then navigate to "Tools", then "External Tools". From there, add a new tool with the following configuration:

Install ruff as an External Tool

ruff should then appear as a runnable action:

ruff as a runnable action

GitHub Actions

GitHub Actions has everything you need to run ruff out-of-the-box:

name: CI
on: push
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Install Python
        uses: actions/setup-python@v2
        with:
          python-version: "3.10"
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install ruff
      - name: Run ruff
        run: ruff .

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
extend-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 10 --runs 100 \
  "./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 ± σ):     297.4 ms ±   4.9 ms    [User: 2460.0 ms, System: 67.2 ms]
  Range (min  max):   287.7 ms  312.1 ms    100 runs

  Warning: Ignoring non-zero exit code.

Benchmark 2: ./target/release/ruff ./resources/test/cpython/
  Time (mean ± σ):      79.6 ms ±   7.3 ms    [User: 59.7 ms, System: 356.1 ms]
  Range (min  max):    62.4 ms  111.2 ms    100 runs

  Warning: Ignoring non-zero exit code.

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" \
  "flake8 resources/test/cpython" \
  "python -m scripts.run_flake8 resources/test/cpython"

In order, these evaluate:

  • ruff
  • Pylint
  • PyFlakes
  • autoflake
  • pycodestyle
  • Flake8
  • Flake8, with a hack to enable multiprocessing on macOS

(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 ± σ):     297.9 ms ±   7.0 ms    [User: 2436.6 ms, System: 65.9 ms]
  Range (min  max):   289.9 ms  314.6 ms    10 runs

  Warning: Ignoring non-zero exit code.

Benchmark 2: pylint --recursive=y resources/test/cpython/
  Time (mean ± σ):     37.634 s ±  0.225 s    [User: 36.728 s, System: 0.853 s]
  Range (min  max):   37.201 s  38.106 s    10 runs

  Warning: Ignoring non-zero exit code.

Benchmark 3: pyflakes resources/test/cpython
  Time (mean ± σ):     40.950 s ±  0.449 s    [User: 40.688 s, System: 0.229 s]
  Range (min  max):   40.348 s  41.671 s    10 runs

  Warning: Ignoring non-zero exit code.

Benchmark 4: autoflake --recursive --expand-star-imports --remove-all-unused-imports --remove-unused-variables --remove-duplicate-keys resources/test/cpython
  Time (mean ± σ):     11.562 s ±  0.160 s    [User: 107.022 s, System: 1.143 s]
  Range (min  max):   11.417 s  11.917 s    10 runs

Benchmark 5: pycodestyle resources/test/cpython
  Time (mean ± σ):     67.428 s ±  0.985 s    [User: 67.199 s, System: 0.203 s]
  Range (min  max):   65.313 s  68.496 s    10 runs

  Warning: Ignoring non-zero exit code.

Benchmark 6: flake8 resources/test/cpython
  Time (mean ± σ):     116.099 s ±  1.178 s    [User: 115.217 s, System: 0.845 s]
  Range (min  max):   114.180 s  117.724 s    10 runs

  Warning: Ignoring non-zero exit code.

Benchmark 7: python -m scripts.run_flake8 resources/test/cpython
  Time (mean ± σ):     20.477 s ±  0.349 s    [User: 142.372 s, System: 1.504 s]
  Range (min  max):   20.107 s  21.183 s    10 runs

Summary
  './target/release/ruff ./resources/test/cpython/ --no-cache' ran
   38.81 ± 1.05 times faster than 'autoflake --recursive --expand-star-imports --remove-all-unused-imports --remove-unused-variables --remove-duplicate-keys resources/test/cpython'
   68.74 ± 1.99 times faster than 'python -m scripts.run_flake8 resources/test/cpython'
  126.33 ± 3.05 times faster than 'pylint --recursive=y resources/test/cpython/'
  137.46 ± 3.55 times faster than 'pyflakes resources/test/cpython'
  226.35 ± 6.23 times faster than 'pycodestyle resources/test/cpython'
  389.73 ± 9.92 times faster than 'flake8 resources/test/cpython'

License

MIT

Contributing

Contributions are welcome and hugely appreciated. To get started, check out the contributing guidelines.

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.55.tar.gz (139.1 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.55-py3-none-win_amd64.whl (2.9 MB view details)

Uploaded Python 3Windows x86-64

ruff-0.0.55-py3-none-win32.whl (2.8 MB view details)

Uploaded Python 3Windows x86

ruff-0.0.55-py3-none-musllinux_1_2_x86_64.whl (3.2 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

ruff-0.0.55-py3-none-musllinux_1_2_i686.whl (3.1 MB view details)

Uploaded Python 3musllinux: musl 1.2+ i686

ruff-0.0.55-py3-none-musllinux_1_2_armv7l.whl (2.8 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

ruff-0.0.55-py3-none-musllinux_1_2_aarch64.whl (2.9 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

ruff-0.0.55-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

ruff-0.0.55-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.8 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ s390x

ruff-0.0.55-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.5 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ppc64le

ruff-0.0.55-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl (2.6 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ppc64

ruff-0.0.55-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl (3.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ i686

ruff-0.0.55-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARMv7l

ruff-0.0.55-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.9 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

ruff-0.0.55-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (6.0 MB view details)

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

ruff-0.0.55-py3-none-macosx_10_7_x86_64.whl (3.1 MB view details)

Uploaded Python 3macOS 10.7+ x86-64

File details

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

File metadata

  • Download URL: ruff-0.0.55.tar.gz
  • Upload date:
  • Size: 139.1 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.55.tar.gz
Algorithm Hash digest
SHA256 ae33dc5f92787406bea67120a5d9c313f3512ee68b4f09371dde273fc7c63155
MD5 9534330f590dba3edc5644eb4d5aceab
BLAKE2b-256 558e0dc9d652c5c493550819a315d2ef3dde80e35f840f3b1ed8b9aaa91fc24e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ruff-0.0.55-py3-none-win_amd64.whl
  • Upload date:
  • Size: 2.9 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.55-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 338858b11fce015c7cd642155dd805ae0d8ac20001304d33bcaded4d0062ae49
MD5 0cf5ebbcf7e02cf1ec4d13b76e56e548
BLAKE2b-256 8435f3d4f14cfd49722d456c79301db2a59966beb9a598c6f9367caf0396d3a2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ruff-0.0.55-py3-none-win32.whl
  • Upload date:
  • Size: 2.8 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.55-py3-none-win32.whl
Algorithm Hash digest
SHA256 fd6969a2c0384c4ffa16b29266a0ceaac57b10f29090c7d5effc91bb23f37004
MD5 c056561870d58b42837cb5c4bcb83274
BLAKE2b-256 cdd29b99b283aa62b83912c215e21aa916f9b6dbb56c5067298f69947c300211

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruff-0.0.55-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0ec9b470270949bbdfadcf687bc76a977ef8bbd2362ad21256160b6c522d8f5c
MD5 22a625e646ddbfcb606f50fd160e95e7
BLAKE2b-256 a496309bb3fe03699bf657aa218af626d5c624a080ca3389d5aee3bc67a2ba70

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ruff-0.0.55-py3-none-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 3.1 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.55-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 b560c08d0400e4f30f2e3a938a216567a00efccf1327302812bd09e1daf79bb0
MD5 0da2625b8a36c94f23cb4508c61fe870
BLAKE2b-256 b827a1f3cb31ef0d343dfac17809227c3f0e7bc7862e23d1462835a288c4ab9b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruff-0.0.55-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 c6518163b2a1800e18959bc580d952befd748762ff38f8aae0a60edf3896b688
MD5 a38c5a75494b357cbf8403294f982bab
BLAKE2b-256 1c2ae4bafea8e39308769d9b70e736f860c2aa6a7b73f406b187f6a5783c88ea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruff-0.0.55-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 57f34bac2269ca20655b782eeec444afec8435c150faa4f7975bb511c898fddd
MD5 5070360a6709ac72080e4e6f75ba9c55
BLAKE2b-256 0fb104a95c636aa80b5e39384251354ef9cfa552d73a2bc5412f6409737c05a4

See more details on using hashes here.

File details

Details for the file ruff-0.0.55-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ruff-0.0.55-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5d9e9d3819b021af659c372caeeea27853ba6f4b9aa315a76bb8d80f025efba4
MD5 9768bffddae5ff67e98f9f245947fe5e
BLAKE2b-256 cd072e539c42dd979a9e8b291457f4ce8413485f7c3f1ff9ed8894e758051f18

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruff-0.0.55-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 9f7c231a9afd1a63adc73669af7e155cbdf673e9d732dc3efd3626f8984a0d02
MD5 049e469263f3cc0bafe9efe601105706
BLAKE2b-256 9cd6e6320903a582bf0665fccf6875ccec9a8f52f4fab648032ca98d8904d436

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruff-0.0.55-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 28e902495be53845c82d452341afe19e0a8e72dd4125779d17ed1d45bfd938fc
MD5 9306d044f9514066e817934ff3332e4e
BLAKE2b-256 9bf925dec6c614318352db16c1a43003900df61ec1b249806bf610bd69a9003f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruff-0.0.55-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm Hash digest
SHA256 ce63c4e547d4f44ab307f50297196ad29ffaf97790267c491515a62acc94a1f1
MD5 a4a6f50ed725d56122c700fa471e5489
BLAKE2b-256 b3d6896145c1437b79a053a28ce9aacfae393afa0de8afa3be5cea1622821dac

See more details on using hashes here.

File details

Details for the file ruff-0.0.55-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for ruff-0.0.55-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 4a11e153d036d441f454601964038eaaa73560350c43e42ec8d4f25b022a70a1
MD5 1708da250e27034e83399ff48f2a6393
BLAKE2b-256 44fa191e162f6b0c70a2b094468e41fb38c01d1d6900fee58991c9d8c455857c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruff-0.0.55-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 c939b4e7beea2a6d7bcd7eb8440433b49556f0932afd62a3f456916678e9b4a1
MD5 e4701836bb384733aa5693d5090e7ba5
BLAKE2b-256 5f5574eb242f18bc5487b6b286f8c8c23a02350a0d1da088912b9f1626cf7e6f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruff-0.0.55-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ff9d34f565933c54ae6a18ae0c186bd8d6c40b290e7e17f9b5f8f8120f6bc4eb
MD5 17fa732f7d78f2ef04cf8d88c00b9afb
BLAKE2b-256 7cb5086fdef922c4a6bc9a044b0778d7fee522a7bfec1425a9c08e2cbd35dc52

See more details on using hashes here.

File details

Details for the file ruff-0.0.55-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.55-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 6aa5f81b1108311dcbacb9123b706d375db03279346467e0eea3e2317b67918f
MD5 c7ff2822663fcc6f876168938f373d42
BLAKE2b-256 4eef485d574981034b415fc1e20dafcafd0d379ee4426a0ddc3425412621c053

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruff-0.0.55-py3-none-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 400d4ef110837d7b2bf76ae6b9b67c2be8652d6d4b935d607eb26f75e71bfa47
MD5 c05e7787e113517d4721be3438e40f4e
BLAKE2b-256 328d9d191f782e3a6bd90b27748d5ab83944b23db727e6a71c7607cd8a5bf0cc

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