No project description provided
Project description
rust-python-linter
A performance-focused, Pyflakes-inspired Python linter, written in Rust.
Features:
- Python 3.10 compatibility
- ESLint-inspired cache semantics
- TypeScript-inspired
--watchsemantics pyproject.tomlsupport
Installation
Available as rust-python-linter on PyPI:
pip install rust-python-linter
Usage
To run the linter, try any of the following:
rust_python_linter path/to/code/to/check.py
# ...or...
rust_python_linter path/to/code/
# ...or...
rust_python_linter path/to/code/*.py
You can also run in --watch mode to automatically re-run the linter on-change with, e.g.:
rust_python_linter path/to/code/ --watch
Development
As the name suggests, rust-python-linter is implemented in Rust:
cargo fmt
cargo clippy
cargo run resources/test/src
Deployment
rust-python-linter is released for Python using maturin:
maturin publish --skip-existing --target x86_64-apple-darwin
maturin publish --skip-existing --target aarch64-apple-darwin
Benchmarking
First, clone CPython. It's a large and diverse Python codebase,
which makes it a good target for benchmarking. Note that we clone v3.9, as RustPython doesn't yet
support pattern matching, which was introduced in v3.10.
git clone --branch 3.9 https://github.com/python/cpython.git resources/test/cpython
Add this pyproject.toml to the directory:
[tool.linter]
line-length = 88
exclude = [
"Lib/ctypes/test/test_numbers.py",
"Lib/dataclasses.py",
"Lib/lib2to3/tests/data/bom.py",
"Lib/lib2to3/tests/data/crlf.py",
"Lib/lib2to3/tests/data/different_encoding.py",
"Lib/lib2to3/tests/data/false_encoding.py",
"Lib/lib2to3/tests/data/py2_test_grammar.py",
"Lib/sqlite3/test/factory.py",
"Lib/sqlite3/test/hooks.py",
"Lib/sqlite3/test/regression.py",
"Lib/sqlite3/test/transactions.py",
"Lib/sqlite3/test/types.py",
"Lib/test/bad_coding2.py",
"Lib/test/badsyntax_3131.py",
"Lib/test/badsyntax_pep3120.py",
"Lib/test/encoded_modules/module_iso_8859_1.py",
"Lib/test/encoded_modules/module_koi8_r.py",
"Lib/test/sortperf.py",
"Lib/test/test_email/torture_test.py",
"Lib/test/test_fstring.py",
"Lib/test/test_genericpath.py",
"Lib/test/test_getopt.py",
"Lib/test/test_htmlparser.py",
"Lib/test/test_importlib/stubs.py",
"Lib/test/test_importlib/test_files.py",
"Lib/test/test_importlib/test_metadata_api.py",
"Lib/test/test_importlib/test_open.py",
"Lib/test/test_importlib/test_util.py",
"Lib/test/test_named_expressions.py",
"Lib/test/test_peg_generator/__main__.py",
"Lib/test/test_pipes.py",
"Lib/test/test_source_encoding.py",
"Lib/test/test_weakref.py",
"Lib/test/test_webbrowser.py",
"Lib/tkinter/__main__.py",
"Lib/tkinter/test/test_tkinter/test_variables.py",
"Modules/_decimal/libmpdec/literature/fnt.py",
"Modules/_decimal/tests/deccheck.py",
"Tools/i18n/pygettext.py",
"Tools/test2to3/maintest.py",
"Tools/test2to3/setup.py",
"Tools/test2to3/test/test_foo.py",
"Tools/test2to3/test2to3/hello.py",
]
Next, to benchmark the release build:
cargo build --release
hyperfine --warmup 5 \
"./target/release/rust_python_linter ./resources/test/cpython/ --no-cache" \
"./target/release/rust_python_linter ./resources/test/cpython/"
Benchmark 1: ./target/release/rust_python_linter ./resources/test/cpython/ --no-cache
Time (mean ± σ): 353.6 ms ± 7.6 ms [User: 2868.8 ms, System: 171.5 ms]
Range (min … max): 344.4 ms … 367.3 ms 10 runs
Benchmark 2: ./target/release/rust_python_linter ./resources/test/cpython/
Time (mean ± σ): 59.6 ms ± 2.5 ms [User: 36.4 ms, System: 345.6 ms]
Range (min … max): 55.9 ms … 67.0 ms 48 runs
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
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 rust_python_linter-0.0.12.tar.gz.
File metadata
- Download URL: rust_python_linter-0.0.12.tar.gz
- Upload date:
- Size: 35.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/0.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f32a0b6f237c4d0832d4ed6e47a704819617c48798c1f09fc74c71bfc90e17e4
|
|
| MD5 |
33f9ed8ab2eb5df030f7e4f5c97fd66d
|
|
| BLAKE2b-256 |
39cfd6b55e7239a35e7ea117a2d5c37c144a9203b06a7f1fee7db3db9daa735f
|
File details
Details for the file rust_python_linter-0.0.12-cp38-cp38-macosx_11_0_arm64.whl.
File metadata
- Download URL: rust_python_linter-0.0.12-cp38-cp38-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.8, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/0.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d83f81e916404287bf18a1401a4839bd9b2472695effa112300d237d3c827f2
|
|
| MD5 |
39911b740006417798e30033df5d3c73
|
|
| BLAKE2b-256 |
182570bfca12ead93aa36420b5b6f549fcad67a1d8ddc8038500aa2b3a92e4bf
|
File details
Details for the file rust_python_linter-0.0.12-cp38-cp38-macosx_10_7_x86_64.whl.
File metadata
- Download URL: rust_python_linter-0.0.12-cp38-cp38-macosx_10_7_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.8, macOS 10.7+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/0.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
065fdc1b55fb8a9b51a777c7ab2b804be178cc50ae1bdd31aad0b82eb82075df
|
|
| MD5 |
80b0a99d3372e124daeccc98191abee3
|
|
| BLAKE2b-256 |
6bc7354ae6d6273ab47732024e372e75d3dae1a2b345977d8fa11f594e3a82ed
|