A fast Python linter written in Rust. Faster than pylint, slower than ruff. Catches more issues than ruff, less than pylint
Project description
Prylint
A blazing-fast Python linter written in Rust, providing 50-80x faster analysis compared to traditional Python linters.
Features
- ⚡ Lightning Fast: 50-80x faster than Pylint on real codebases
- 🎯 High Accuracy: 97.8% accuracy on implemented error codes
- 🦀 Rust-Powered: Built with Rust for maximum performance
- 📦 Easy Installation: Simple pip install with no complex dependencies
- 🔍 Growing Coverage: Actively expanding error detection capabilities
Installation
pip install prylint
Usage
Command Line
# Lint a single file
prylint script.py
# Lint a directory
prylint src/
# Output as JSON
prylint --json script.py
# Lint without recursion
prylint --no-recursive src/
Python API
from prylint import lint_file, lint_directory
# Lint a single file
issues = lint_file("script.py")
for issue in issues:
print(f"{issue.file}:{issue.line}: {issue.code} {issue.message}")
# Lint a directory
issues = lint_directory("src/", recursive=True)
Supported Error Codes
Prylint currently implements 35 error codes from the Pylint error code set:
Fully Implemented
- E0100:
__init__method is a generator - E0101: Explicit return in
__init__ - E0102: Function/method redefined
- E0103: break/continue not in loop
- E0104: Return outside function
- E0105: Yield outside function
- E0106: Return with argument in generator
- E0108: Duplicate argument names
- E0109: Duplicate dictionary keys
- E0112: Too many starred expressions
- E0115: Name is nonlocal and global
- E0116: Continue not in loop
- E0117: Nonlocal without binding
- E0118: Used before global declaration
- E0606: Possibly used before assignment
- E0704: Misplaced bare raise
- E0711: NotImplemented raised
- E1142: await outside async
Performance
Benchmark results on real Python codebases:
| Linter | Time | Speedup |
|---|---|---|
| Pylint | 11.2s | 1x |
| Prylint | 0.22s | 50x |
Why Prylint?
Prylint is designed for developers who want:
- Fast feedback during development
- Integration with CI/CD pipelines without slowing builds
- A modern, performant alternative to traditional linters
- Focus on catching real errors, not style issues
Contributing
Contributions are welcome! Please feel free to submit issues and pull requests on GitHub.
Roadmap
- Expand error code coverage
- Add configuration file support
- Implement auto-fix capabilities
- Add IDE integrations
- Support for custom rules
Credits
Built with ❤️ using:
- RustPython Parser for Python AST parsing
- PyO3 for Python bindings
Goal
Goal is to be equivalent to running:
pylint . -E --disable=C0301,W0511,C0114,R0402,C0116,R0914,W0718,R1735,W0105,R1705,W0603,W0104,C0209,W0719,C0411,C0412,R0912,R0915,C0413,C0115,C0103,W0613,R0801,W0602,R0913,R0917,W0622,R0902,R0911,R0913,R1702,R1716,W0212,R1728,C0121,R0916,C0415,W1401,C0206,C0302,R0904,W1514,R0903,E0110,R1714,W0707,R1718,W1309,W1203,E0611,W0611,W0108,W0177,E1101,C1803,R1721,W0123,R1720,R1710,W0221,W0122,C0201,W1510,R1729,R1737,C0325,R0401,E0401
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 prylint-0.1.1.tar.gz.
File metadata
- Download URL: prylint-0.1.1.tar.gz
- Upload date:
- Size: 1.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e4723a44b1c57b6e8ed2add41b17be1a640f0716fcd57644e7fdf4ce9bbeaff6
|
|
| MD5 |
a4f6471a9cb175b85237eb18cf50c2db
|
|
| BLAKE2b-256 |
1e04864f6723380a38be2996609fa81e97d6d28afc52ca8f77bcd0c751a91ce8
|
File details
Details for the file prylint-0.1.1-py3-none-any.whl.
File metadata
- Download URL: prylint-0.1.1-py3-none-any.whl
- Upload date:
- Size: 1.7 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c33b103337a51a5b31fbd9a7e0bc4e6b78104918fbd74793fd7eb6f9d94a52a8
|
|
| MD5 |
2e23bbad39e76aa58704bafea85cdbd0
|
|
| BLAKE2b-256 |
d04efcb618a518c668d24a8e32d64409c14d8600aef0dda7e17e15c928bcf759
|