Small tool to annotate and sort rule IDs inside a ruff config for better readability.
Project description
ruffruleannotator
ruffruleannotator is a small tool designed to enhance the readability of Ruff configuration files by annotating all rule IDs with their corresponding titles. This allows users to easily understand the purpose of each ignored/selected rule within their codebase. Additionally, ruffruleannotator can sort the rule IDs within the relevant sections of the TOML file, ensuring a well-organized and readable configuration.
Example
Consider the following pyproject.toml:
[project]
name = "packagename"
[tool.ruff.lint]
select = ["D100", "D103", "ERA001", "PLR2004", "F"]
ignore = ["E501", "B"]
[tool.ruff.format]
quote-style = "single"
Executing ruffruleannotator yield a reformatted config with annotated rule IDs:
[project]
name = "packagename"
[tool.ruff.lint]
select = [
"D100", # undocumented-public-module (pydocstyle)
"D103", # undocumented-public-function (pydocstyle)
"ERA001", # commented-out-code (eradicate)
"F", # Pyflakes
"PLR2004", # magic-value-comparison (Pylint (Refactor))
]
ignore = [
"B", # flake8-bugbear
"E501", # line-too-long (pycodestyle errors)
]
[tool.ruff.format]
quote-style = "single"
Installation
pip install ruffruleannotator
Usage
The tool automatically recognizes ruff configs inside pyproject.toml and ruff.toml. The entries select, ignore, fixable and unfixable inside the Ruff lint section of the config are supported for reformatting. All other parts of the file stay unchanged.
Execute the tool inside project root directory:
ruffruleannotator
Backup
By default a backup of the config file is stored under ~/.ruffruleannotator/backup. Only the latest version of each project directory is stored. The creation of a config backup can be ignored:
ruffruleannotator --no-backup
Keep order of entries
By default ruffruleannotator sorts the rule IDs within the sections alphabetically. The order of entries can be preserved:
ruffruleannotator --no-sort
Interactive mode
By default ruffruleannotator shows changes and waits for user confirmation before cactually changing the config:
Found ruff config in 'pyproject-test.toml'
---
+++
@@ -2,9 +2,18 @@
name = "packagename"
[tool.ruff.lint]
-select = ["D100", "D103", "ERA001", "PLR2004", "F"]
+select = [
+ "D100", # undocumented-public-module
+ "D103", # undocumented-pubcode
+ "F", # Pyflakes
+ "PLR2004", # magic-value-comparison
+]
-ignore = ["E501", "B"]
+ignore = [
+ "B", # flake8-bugbear
+ "E501", # line-too-long
+]
[tool.ruff.format]
quote-style = "single"
Press enter to apply changes
Automatically confirm changes
By default all expected changes are shown before applied and the user must confirm. The manual confirmation can be skipped:
ruffruleannotator --yes
Complex formattings
Consider the following config file:
[tool.ruff.lint]
select = ["F404",
"F403",
# Comment lines break the sorting. Rule IDs are sorted
# seperately above and below the comment line.
"F406", # already commented lines are not annotated
"F402",
# Lines with multiple rule ids are split
"E112", "E111",
"E113"]
After reformatting:
[tool.ruff.lint]
select = [
"F403", # undefined-local-with-import-star (Pyflakes)
"F404", # late-future-import (Pyflakes)
# Comment lines break the sorting. Rule IDs are sorted
# seperately above and below the comment line.
"F402", # import-shadowed-by-loop-var (Pyflakes)
"F406", # already commented lines are not annotated
# Lines with multiple rule ids are split
"E111", # indentation-with-invalid-multiple (pycodestyle errors)
"E112", # no-indented-block (pycodestyle errors)
"E113", # unexpected-indentation (pycodestyle errors)
]
Contributing
- Create virtual environment
python3 -m venv venv source venv/bin/activate pip install -r requirements-dev.txt
- Setup pre-commit
pre-commit install - Build package
python -m build
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ruffruleannotator-0.1.1.tar.gz.
File metadata
- Download URL: ruffruleannotator-0.1.1.tar.gz
- Upload date:
- Size: 7.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2639580057ac37913c64711892717501e410eb6c90378f2d84b7746ea0373953
|
|
| MD5 |
ab751d850d0664d3146422006a97029a
|
|
| BLAKE2b-256 |
d0cc4b6691b9f9b05f54fe2a2db119101838cbc10c662793fac25d03eddf89d5
|
File details
Details for the file ruffruleannotator-0.1.1-py3-none-any.whl.
File metadata
- Download URL: ruffruleannotator-0.1.1-py3-none-any.whl
- Upload date:
- Size: 8.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7b7ee65dbc9b9ed86d1fc0770b9e6d0125749e8dbfe543e72faf9aee64a11bb9
|
|
| MD5 |
c6413cf489f282e37eb5da240c4b86ba
|
|
| BLAKE2b-256 |
d7fd065b49b55c037a17a7cd9a1eddc154743121af025a6ad69aa063ce67f04a
|