Ruff Formatter and Linter
Ruff​
Ruff is a powerful python code formatter and linter written in Rust.
For more details refer official documentation: Ruff
Installing Ruff​
- Ruff VS Code extension: Ruff Extension
- Ruff python CLI: Ruff CLI
Extensions can come in handy during development as it shows warning as we write and CLI can help in extensive validation and fixing.
Configuration​
Ruff claims to be an alternative for black
, flake8
, pydocstyle
, isort
etc.,
Configure Extension​
Ruff VS Code Extension can be configured via VS Code settings or settings.json. For easy reference settings.json is captured here for example.
settings.json
{
"editor.formatOnSave": true,
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff"
},
"ruff.lineLength": 120
}
Configuring CLI​
Ruff CLI can be configured from pyproject.toml and ruff.toml. I would recommend ruff.toml for cleaner configuration and separation of concerns. This also makes the pyproject toml clutter free for poetry.
ruff.toml
# Indentations
line-length = 120
# Includes
include = ["project_template/**/*.py"]
# Other Configs
show-fixes = true
# Lints
[lint]
select = [
"E", # pycodestyle Errors
"W", # pycodestyle Warnings
"F", # Pyflakes
"I", # isort
"B", # flake8-bugbear
"C4", # flake8-comprehensions
"D", # pydocstyle
"N", # pep8-naming
"UP", # pyupgrade
"PL", # Pylint
"SIM", # flake8-simplify
"TC", # flake8-type-checking
]
[lint.pydocstyle]
convention = "google" # Google Style Docstring. Can be "numpy", "pep257", or "google"
[lint.per-file-ignores]
"__init__.py" = ["F401"] # Ignore "F401: 'module' imported but unused" in __init__.py files
Useful Commands for Ruff CLI​
-
Run Ruff checker / linter
ruff check
-
Run Ruff checker and fix possible errors
ruff check --fix
-
List all available linters from Ruff
ruff linter
infoThe linters can be configured in pytoml file.
-
Check only specific errors
ruff check --select I