Skip to main content

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:

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

prylint-0.1.1.tar.gz (1.7 MB view details)

Uploaded Source

Built Distribution

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

prylint-0.1.1-py3-none-any.whl (1.7 MB view details)

Uploaded Python 3

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

Hashes for prylint-0.1.1.tar.gz
Algorithm Hash digest
SHA256 e4723a44b1c57b6e8ed2add41b17be1a640f0716fcd57644e7fdf4ce9bbeaff6
MD5 a4f6471a9cb175b85237eb18cf50c2db
BLAKE2b-256 1e04864f6723380a38be2996609fa81e97d6d28afc52ca8f77bcd0c751a91ce8

See more details on using hashes here.

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

Hashes for prylint-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c33b103337a51a5b31fbd9a7e0bc4e6b78104918fbd74793fd7eb6f9d94a52a8
MD5 2e23bbad39e76aa58704bafea85cdbd0
BLAKE2b-256 d04efcb618a518c668d24a8e32d64409c14d8600aef0dda7e17e15c928bcf759

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