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.0.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.0.0.tar.gz | 336.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rattle_lint-3.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 543.6 kB
Release files / rattle_lint-3.0.0.tar.gz
| Download URL | rattle_lint-3.0.0.tar.gz |
|---|---|
| Size | 336.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d8ab90df661af583d40aba077990138641a6ef80aa21ae4b23c52a471872b3b6
|
|
BLAKE2b-256 checksum How to use checksums |
1ede4ea7a950935e69b00ba6f1d718eb5c4e39a1416a670672ffce60ffb71e33
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.21
|
Release files / rattle_lint-3.0.0-py3-none-any.whl
| Download URL | rattle_lint-3.0.0-py3-none-any.whl |
|---|---|
| Size | 207.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
75597f1cd21d2ee923956733ef495bee7f118789f4359cf45cd53dc6a0eeda9a
|
|
BLAKE2b-256 checksum How to use checksums |
65ad7f5bb6cd531f3b1896c2828d1121c4ccec9557e44f7f00b3235519e585a2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.21
|