simplint
simplint is a companion linter for astral-sh/ruff. It enforces the parts of the simp house style that Ruff has no rule for, such as definition order, Final constants, explicit exports and test layout. It is built on Ruff’s own parser crates, so the 264 files of tox-dev/tox lint in about 10 ms, and it fixes what it reports wherever the fix is mechanical. See the release history for version changes.
$ simplint check --select SMP050,SMP101 src/tox/util/path.py src/tox/util/spinner.py
src/tox/util/path.py:16:1: SMP050 `_CACHEDIR_TAG` is used by one function only; define it there
src/tox/util/path.py:16:1: SMP101 [*] `_CACHEDIR_TAG` is never reassigned; annotate it `Final`
src/tox/util/spinner.py:41:1: SMP101 [*] `MISS_DURATION` is never reassigned; annotate it `Final`
src/tox/util/spinner.py:181:1: SMP050 `_PERIODS` is used by one function only; define it there
src/tox/util/spinner.py:181:1: SMP101 `_PERIODS` is never reassigned; annotate it `Final`
Found 5 issues.
[*] 2 fixable with `--fix`.
2 hidden fixes can be enabled with `--unsafe-fixes`.
Install
simplint ships as a single binary inside a Python wheel, like Ruff, so it needs no Python at runtime. An isolated tool environment keeps it apart from the project it lints.
uv tool install simplint simplint --help
Pre-commit
Add the hook to .pre-commit-config.yaml and set rev to the required release. The hook lints the whole project on every run, since several rules need to know which names other modules import:
- repo: https://github.com/gaborbernat/simplint
rev: ""
hooks:
- id: simplint
See pre-commit/pre-commit for installation and update commands.
Running it
simplint check [PATHS] lints the Python files under each path, honoring .gitignore. Add --fix to apply safe fixes, --unsafe-fixes to also apply fixes that can change behavior, and --diff to print the fixes without writing them. --select and --ignore take comma-separated rule codes, code prefixes or rule names. simplint rules lists every rule and whether it fixes, and simplint rule SMP111 prints one rule’s documentation.
Fixes rewrite code without formatting it, so run the formatter afterwards, the same way you would after ruff check --fix:
simplint check --fix . && ruff check --fix . && ruff format .
See the configuration reference for settings and the rules reference for every rule with examples and fix safety.
simplint reads the nearest pyproject.toml. From [tool.ruff] it takes target-version (falling back to project.requires-python, then to Python 3.11), exclude and extend-exclude. Its own settings live in [tool.simplint]:
[tool.simplint]
select = ["ALL"] # the default
extend-select = []
ignore = ["SMP002"] # codes, prefixes or names
per-file-ignores = { "tests/*" = ["SMP101"] }
From [project] it reads dependencies, which SMP040 treats as required, and the entry points in scripts, gui-scripts and entry-points, which count as imports of the names they reference.
Suppress a single line with # noqa: SMP010. Tell Ruff those codes belong to another tool so it does not report them as unused:
[tool.ruff]
lint.external = ["SMP"]
Pairing with Ruff
simplint does not repeat what Ruff already checks. Run Ruff with select = ["ALL"] and add this configuration to cover the rest of the style:
[tool.ruff.lint.flake8-tidy-imports]
ban-relative-imports = "parents"
[tool.ruff.lint.flake8-tidy-imports.banned-api]
"typing.Any".msg = "use the precise type"
"typing.cast".msg = "narrow with isinstance or TypeIs instead"
Ruff reads banned-api per configuration file, so the test-only bans go in a ruff.toml inside the tests directory. It extends the root configuration and repeats the bans above, since a nested table replaces the parent’s:
extend = "../pyproject.toml"
[lint.flake8-tidy-imports.banned-api]
"typing.Any".msg = "use the precise type"
"typing.cast".msg = "narrow with isinstance or TypeIs instead"
"unittest.mock".msg = "mock through pytest-mock's mocker"
"time.sleep".msg = "wait on an event the mock sets"
Metadata
Release files for simplint 0.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 | Provenance | Actions |
|---|---|---|---|---|
| simplint-0.1.0.tar.gz | 257.8 kB | With provenance | Details for simplint-0.1.0.tar.gz |
Built distributions (wheels)
Total release size: 20.7 MB
Release files / simplint-0.1.0.tar.gz
| Download URL | simplint-0.1.0.tar.gz |
|---|---|
| Size | 257.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8ccddf26658709c780545b1414cc9eebe33301e77e7d3efb48ca71d552a4f55f
|
|
BLAKE2b-256 checksum How to use checksums |
dacdf4f5b7b2558a809ab8faac502ef843495bb38bfb2c23fd202ac2e85b3880
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logRelease files / simplint-0.1.0-py3-none-win_arm64.whl
| Download URL | simplint-0.1.0-py3-none-win_arm64.whl |
|---|---|
| Size | 2.2 MB |
| Tags | Python 3 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
db04ac11fab4c177276fa96f4dc5a21f811260a0916826261a7bda22022fddd6
|
|
BLAKE2b-256 checksum How to use checksums |
b1dc4b44c85965e525b71a0cdbe00a6e5497edb65cc696d4c0d8cf2ebc2534ed
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logRelease files / simplint-0.1.0-py3-none-win_amd64.whl
| Download URL | simplint-0.1.0-py3-none-win_amd64.whl |
|---|---|
| Size | 2.3 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
722acf07ef396f2258d4e8bae85b3a7467ec53b129435b402cb7567712de30cc
|
|
BLAKE2b-256 checksum How to use checksums |
a33a27985bb73c8f0942092b2013d631d3fb6ff4a082277397c164769b40486c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logRelease files / simplint-0.1.0-py3-none-musllinux_1_2_x86_64.whl
| Download URL | simplint-0.1.0-py3-none-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 2.4 MB |
| Tags | Linux musl 1.2+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
d36e805f818c92aecec8bf0cc8270be126dbf263b8f74a4dbe17b0def659b9fe
|
|
BLAKE2b-256 checksum How to use checksums |
2d245865457e6eded85a6a796971f0e18e7e56ab3416b89f16a9c0d0598f4f34
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logRelease files / simplint-0.1.0-py3-none-musllinux_1_2_aarch64.whl
| Download URL | simplint-0.1.0-py3-none-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 2.3 MB |
| Tags | Linux musl 1.2+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
0a9361163c6e9449900f8b5b22b06cc6da144beaa6d04317d3c653327e348044
|
|
BLAKE2b-256 checksum How to use checksums |
ba0c325dbe0544d8781a8e6a776c93e672ac7571d4ed61e2c05fc410a8b615f9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logRelease files / simplint-0.1.0-py3-none-manylinux_2_31_riscv64.whl
| Download URL | simplint-0.1.0-py3-none-manylinux_2_31_riscv64.whl |
|---|---|
| Size | 2.3 MB |
| Tags | Linux glibc 2.31+ RISC-V 64 Python 3 |
|
SHA-256 checksum How to use checksums |
5f9dfc766bd4c07c4c707360acda4dadabcecaec23988b26438e6bb53f200d01
|
|
BLAKE2b-256 checksum How to use checksums |
d0faee73f086ea8c4065deb217a9131b46ce275374f3382daccc53fceaef8309
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logRelease files / simplint-0.1.0-py3-none-manylinux_2_28_x86_64.whl
| Download URL | simplint-0.1.0-py3-none-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.4 MB |
| Tags | Linux glibc 2.28+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
54eeebb3c0bc82daf044d39f6e4412ec7eacc4fb000195b9835c1d42045084b7
|
|
BLAKE2b-256 checksum How to use checksums |
853dbe0cb348d8736b9f2c8a6242a155b0ede1d720ae229cdd5803e4a387566a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logRelease files / simplint-0.1.0-py3-none-manylinux_2_28_aarch64.whl
| Download URL | simplint-0.1.0-py3-none-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 2.2 MB |
| Tags | Linux glibc 2.28+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
4a5b61510a83d748e9c31df8c15fc3265348f63224cd3e9cdb3dab8eca46d7d6
|
|
BLAKE2b-256 checksum How to use checksums |
ecdf279c2054e2d95424e6d5e0eb1b48c743325fec4313d06eee105db15db0de
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logRelease files / simplint-0.1.0-py3-none-macosx_11_0_arm64.whl
| Download URL | simplint-0.1.0-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 2.2 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
e1b5b4caad4657c661e2e301b29e63cc70ed769a2a3ff276a605e9fc510dcc78
|
|
BLAKE2b-256 checksum How to use checksums |
9be94f264ef1ef6dc3a14f024e65531db19be4fc5f60f01aaa5896689da561e7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logRelease files / simplint-0.1.0-py3-none-macosx_10_12_x86_64.whl
| Download URL | simplint-0.1.0-py3-none-macosx_10_12_x86_64.whl |
|---|---|
| Size | 2.3 MB |
| Tags | Python 3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
f7274da28543f234d6349b473b270412c8a86ef9395c8f7602f4d15c308c0b32
|
|
BLAKE2b-256 checksum How to use checksums |
cf2f5835e46840ab8de1d8cccc4f8156e1a956bcab6d1410f9696a4247b90a0c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logSecurity for simplint 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 10 files in this release have been uploaded with provenance metadata.
Attestation for simplint-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.