.. SPDX-FileCopyrightText: 2025 cusy GmbH
..
.. SPDX-License-Identifier: BSD-3-Clause
Ruff
====
`Ruff `_ ist ein extrem schneller Python-Linter
und Code-Formatierer, geschrieben in Rust, der :abbr:`u.a. (unter anderem)` die
Regeln von :doc:`flake8`, :doc:`isort`, :doc:`/performance/perflint`,
:doc:`black` und :ref:`Bandit ` ausführen kann. Insgesamt kann Ruff
`über 800 Regeln `_ überprüfen.
Installation
------------
.. code-block:: console
$ uv add --dev ruff
Überprüfen
----------
Anschließend könnt ihr die Installation überprüfen mit
.. code-block:: console
$ uv run ruff check /PATH/TO/YOUR/SOURCE/FILE
Shell-Autovervollständigung
---------------------------
Ruff unterstützt Autovervollständigung für die meisten Shells. Ein
shellspezifisches Skript kann mit :samp:`uv run ruff generate-shell-completion
{SHELL}` generiert werden, wobei :samp:`{SHELL}` entweder ``bash``, ``elvish``,
``fig``, ``fish``, ``powershell`` oder ``zsh`` ist, :abbr:`z. B. (zum Beispiel)`
.. tab:: Bash
.. code-block:: console
$ ruff generate-shell-completion zsh >> ~/.bash_completion
.. tab:: Zsh
.. code-block:: console
% ruff generate-shell-completion zsh > ~/.zfunc/_ruff
Anschließend müssen dann die folgenden Zeilen in eure :file:`~/.zshrc`
eingefügt werden, falls sie dort noch nicht vorhanden sind:
.. code-block:: zsh
fpath+=~/.zfunc
autoload -Uz compinit && compinit
.. tab:: Oh My Zsh
.. code-block:: console
% mkdir $ZSH_CUSTOM/plugins/ruff
% ruff generate-shell-completion zsh > $ZSH_CUSTOM/plugins/ruff/_ruff
.. seealso::
`Shell autocompletion
`_
Konfiguration
-------------
Im Gegensatz zur Standardformatierung von :doc:`black` mit 88 Zeichen bevorzuge
ich eine Zeilenlänge von 79 Zeichen. Hierfür könnt ihr in die
:file:`pyproject.toml`-Datei folgendes eintragen:
.. code-block:: toml
[tool.ruff]
line-length = 79
.. tip::
Üblicherweise fügen wir ``ruff lint`` zunächst alle Regeln hinzu, bevor wir
dann einzelne wieder ausschließen, also :abbr:`z. B. (zum Beispiel)`:
.. code-block:: toml
[tool.ruff.lint]
select = ["ALL"]
ignore = [
"A", # Shaddowing is fine
]
Ruff unterstützt auch auch Monorepos mit unterschiedlichen Regeln durch
`hierarchische und kaskadierende Konfigurationen
`_.
.. seealso::
* `Configuring Ruff `_.
* `Settings `_
Integration
-----------
Jupyter Notebooks
~~~~~~~~~~~~~~~~~
Ruff unterstützt das Linting und Formatieren von :doc:`Jupyter Notebooks
` mit :ref:`nbQA `. Mit `jupyter-ruff
`_ könnt ihr ruff auch in euren
Notebooks verwenden.
IDE
~~~
Auch die Integration in andere Editoren wie `Visual Studio Code
`_, `PyCharm
`_ oder `Vim
`_ ist möglich. Für die
Editor-spezifische Konfiguration schaut euch `Setup
`_ an.
pre-commit
~~~~~~~~~~
Ruff kann über `ruff-pre-commit `_
als :doc:`Pre-Commit-Hook ` verwendet
werden:
.. code-block:: yaml
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.12.10
hooks:
- id: ruff-check
args: [--fix, --exit-non-zero-on-fix]
exclude: docs
- id: ruff-format