Ruff

Ruff ist ein extrem schneller Python-Linter und Code-Formatierer, geschrieben in Rust, der u.a. die Regeln von flake8, isort, perflint, Black und Bandit ausführen kann. Insgesamt kann Ruff über 800 Regeln überprüfen.

Installation

$ uv add --dev ruff

Überprüfen

Anschließend könnt ihr die Installation überprüfen mit

$ 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 uv run ruff generate-shell-completion SHELL generiert werden, wobei SHELL entweder bash, elvish, fig, fish, powershell oder zsh ist, z. B.

$ ruff generate-shell-completion zsh >> ~/.bash_completion
% ruff generate-shell-completion zsh > ~/.zfunc/_ruff

Anschließend müssen dann die folgenden Zeilen in eure ~/.zshrc eingefügt werden, falls sie dort noch nicht vorhanden sind:

fpath+=~/.zfunc
autoload -Uz compinit && compinit
% mkdir $ZSH_CUSTOM/plugins/ruff
% ruff generate-shell-completion zsh > $ZSH_CUSTOM/plugins/ruff/_ruff

Konfiguration

Im Gegensatz zur Standardformatierung von Black mit 88 Zeichen bevorzuge ich eine Zeilenlänge von 79 Zeichen. Hierfür könnt ihr in die pyproject.toml-Datei folgendes eintragen:

[tool.ruff]
line-length = 79

Tipp

Üblicherweise fügen wir ruff lint zunächst alle Regeln hinzu, bevor wir dann einzelne wieder ausschließen, also z. B.:

[tool.ruff.lint]
select = ["ALL"]
ignore = [
    "A",       # Shaddowing is fine
]

Ruff unterstützt auch auch Monorepos mit unterschiedlichen Regeln durch hierarchische und kaskadierende Konfigurationen.

Integration

Jupyter Notebooks

Ruff unterstützt das Linting und Formatieren von Jupyter Notebooks mit 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 Pre-Commit-Hook verwendet werden:

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