Skip to main content

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

!!! WIP, COMING SOON !!!

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

ruffruleannotator-0.1.0.tar.gz (7.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ruffruleannotator-0.1.0-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

Details for the file ruffruleannotator-0.1.0.tar.gz.

File metadata

  • Download URL: ruffruleannotator-0.1.0.tar.gz
  • Upload date:
  • Size: 7.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.5

File hashes

Hashes for ruffruleannotator-0.1.0.tar.gz
Algorithm Hash digest
SHA256 6becbbe91d9f78fe8c0723d7f3c914bbcd736294e67b644de6515aa7b411c17f
MD5 400295ec1632312bc5694c65797df83e
BLAKE2b-256 db571316f58c31221098d290dbe65b4f393b1bf7b84eb22ac68f44d5a5d14aef

See more details on using hashes here.

File details

Details for the file ruffruleannotator-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for ruffruleannotator-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 536d3b7b2626d948842ac71e4f986579b8eaff2c3de54d69488453222af68e86
MD5 49020e70220ff8b6eebc01e28f4bcbb9
BLAKE2b-256 ae7873b88939751599b56fddae622b8dc6df111c06a42c6b2fcb56aa0b14e5fd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page