Goodbye Flake8, Hello Ruff

Static code analysis is an essential part of ensuring the quality and maintainability of your Python code. There are many tools available for static code analysis, but Ruff stands out for its fast performance, comprehensive analysis, and ease of use.

What is Ruff?

Ruff is a static code analysis tool for Python that provides a fast and comprehensive analysis of your code. It checks your code against a set of predefined rules and best practices, helping you to identify and fix problems early in the development cycle. Ruff has a large number of built-in rules covering a wide range of coding standards and best practices, making it a comprehensive tool for ensuring the quality of your code.

Advantages of Ruff

Fast performance: Ruff is written in Rust, a programming language renowned for its performance and efficiency. This makes Ruff much faster than other code analysis tools such as Flake8. Using Rust allows Ruff to quickly analyze even the largest Python projects, giving you fast and accurate results.

Comprehensive analysis: Ruff provides a comprehensive analysis of your code, covering a wide range of best practices and coding standards. This makes it easier to identify and fix issues early in the development cycle before they become bigger problems.

Easy configuration: Ruff allows you to configure your analysis in the pyproject.toml file. This makes it easier to set up and customize your analysis as all the configuration is stored in a single file.

Auto-fix feature: Ruff also has a unique auto-fix feature that allows you to automatically fix common problems with a single command. The --fix option can be used to automatically fix problems that Ruff has identified in your code. This saves you time and effort, allowing you to focus on more important tasks.

Getting started with Ruff

Getting started with Ruff is simple. You can install Ruff using pip, the Python package manager. Just run the following command in your terminal

pip install ruff

Once Ruff is installed, you can configure your analysis in the pyproject.toml file. Here is an example configuration:

[tool.ruff]
# Docs: https://beta.ruff.rs/docs/
# Rules: https://beta.ruff.rs/docs/rules/
select = ["B", "C4", "EXE", "F", "E", "ISC", "ICN", "INP", "PIE", "SIM", "W", "T20", "UP", "T10", "G", "C90", "ERA"]
ignore = ["B008", "SIM102"]
fixable = ["F", "E", "B", "C4", "EXE", "ISC", "ICN", "INP", "PIE", "SIM", "W", "T20", "UP"]
unfixable = []

# Exclude a variety of commonly ignored directories.
exclude = [
    ".git",
    ".mypy_cache",
    ".pre-commit-cache",
    ".ruff_cache",
    ".tox",
    ".venv",
    "venv",
    "docs",
    "__pycache",
    "**/migrations/*",
]

# Same as Black.
line-length = 100

# Allow unused variables when underscore-prefixed.
dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
# Assume Python 3.11.
target-version = "py311"

[tool.ruff.mccabe]
# Unlike Flake8, default to a complexity level of 10.
max-complexity = 10

For a full list of Ruff rules check it out here.

To run Ruff, simply navigate to your project directory in the terminal and run the following command:

ruff check .

Ruff will analyze your code and display any errors or warnings it has found. If you want to automatically fix common issues, you can use the --fix option:

ruff check . --fix

Ruff will automatically fix any problems it finds, saving you time and effort.

VSCode extension

Ruff also has a Visual Studio Code (VSCode) extension that makes it even easier to use. The VSCode extension provides real-time analysis of your code, allowing you to quickly identify and fix problems.

Pre-commit integration

- repo: https://github.com/charliermarsh/ruff-pre-commit
  # Ruff version.
  rev: 'v0.1.13'
  hooks:
    - id: ruff

The bottom line

In conclusion, Ruff is a fast and powerful static code analysis tool for Python. Its fast performance, comprehensive analysis and easy configuration make it an excellent choice for any Python project looking to improve code quality and avoid common pitfalls.

0
Subscribe to my newsletter

Read articles from Mounir Messelmeni directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Mounir Messelmeni
Mounir Messelmeni