Rattle
Rattle is a Python linting framework built on LibCST with support for autofixes, custom in-repo lint rules, and hierarchical configuration.
Rattle is a fork of Fixit designed to complement Ruff. It intentionally omits rules that duplicate Ruff checks, so pair it with a comprehensive Ruff configuration; Ruff is considerably faster for those checks.
For migration from Fixit, overlapping Fixit-derived rules remain available in the opt-in legacy collection. This collection is not recommended for new configurations.
Features
- 51 built-in lint rules
- Autofix support when a rule can safely rewrite code
- Local custom rules that can live inside your repository
- Hierarchical
pyproject.tomlconfiguration - Pre-commit integration for CI and local workflows
- LSP support
Install
From PyPI
uv tool install rattle-lint
pip install rattle-lint
With editor/LSP support
uv tool install "rattle-lint[lsp]"
pip install "rattle-lint[lsp]"
Agent Skill
The official AI agent skill can be installed from this repo.
npx skills add https://github.com/zigai/rattle/tree/main/src/rattle/.agents/skills/create-rattle-lint-rules
or
uvx library-skills
Basic Usage
Rattle enables no rules by default. A practical baseline for a typical typed Python project is:
[tool.rattle]
root = true
enable = [
"blank-line-after-control-block",
"blank-line-after-terminal-control-block",
"blank-line-before-branch",
"blank-line-before-unrelated-block",
"no-suite-leading-trailing-blank-lines",
"module-all-at-bottom",
"no-underscore-all-exports",
"forbidden-call",
"no-relative-imports",
"no-underscore-import-aliases",
"no-unsafe-tempfile-factories",
"no-annotated-self",
"no-exception-message-variables",
"no-str-exception-translation",
"no-underscore-class",
"public-method-order",
"no-bare-object-annotations",
"no-named-tuple",
"no-static-if-condition",
"sorted-attributes",
"use-callable-ellipsis",
]
[tool.rattle.options."forbidden-call"]
forbidden_calls = ["typing.cast"]
Adjust the list to match the project, then lint the repository:
rattle lint .
Apply available autofixes:
rattle fix .
Explain rule metadata, examples, and settings:
rattle explain no-bare-object-annotations
rattle explain --json no-bare-object-annotations
License
Metadata
Release files for rattle-lint 3.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| rattle_lint-3.1.0.tar.gz | 338.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rattle_lint-3.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 551.4 kB
Release files / rattle_lint-3.1.0.tar.gz
| Download URL | rattle_lint-3.1.0.tar.gz |
|---|---|
| Size | 338.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
eca25365fa108a8c6ca058f5cb17d0e67035d394f055012e507040ba0aba1577
|
|
BLAKE2b-256 checksum How to use checksums |
c3a498d82457f04911f90b6e79ca364f51ae90ed8cff70b72168a7a731bae141
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.22
|
Release files / rattle_lint-3.1.0-py3-none-any.whl
| Download URL | rattle_lint-3.1.0-py3-none-any.whl |
|---|---|
| Size | 212.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9d4b44365e599e45a7c921d8e1bfb3210d4c095ba74cc374022e92454e182d01
|
|
BLAKE2b-256 checksum How to use checksums |
28c5e8704690aa0e0017ba2b782ab5e368d2b8b5f2c7384bbcba5b1ced889271
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.22
|