Package for running linters, static type checkers and code analysis tools on python code in quarto (.qmd) files.
Project description
Package for running linters, static type checkers and code analysis tools on python code in quarto (.qmd) files.
By default, python code validation tools can't check embedded python code in Quarto files. This package fills that gap, enabling analysts and researchers to run python quality checks within Quarto documents.
Currently supported:
- Linters: pylint, flake8, pydoclint, pyflakes, ruff, vulture, and pycodestyle.
- Static type checkers: mypy, pyright, pyrefly, and pytype.
- Code analysis tools: radon.
Installation
You can install lintquarto with pip (from PyPI or GitHub) or conda (from conda-forge).
Install with pip
pip install lintquarto
To include your selection of linters, install them as needed.
For a one-step installation that includes lintquarto and all supported linters and type checkers, use:
pip install lintquarto[all]
Install with conda
conda install conda-forge::lintquarto
With conda, only the main lintquarto tool is installed. If you want to use any linters or type checkers, you must install them separately (either with conda or pip, depending on availability).
Development version
To install the latest development version of lintquarto directly from this repository:
pip install git+https://github.com/lintquarto/lintquarto
If you also want all supported linters and type checkers in one step, install from a local clone in editable mode with the all extra:
git clone https://github.com/lintquarto/lintquarto.git
cd lintquarto
pip install -e ".[all]"
Getting started using lintquarto
Usage
Usage:
lintquarto -l LINTER [LINTER ...] -p PATH [PATH ...] [-e EXCLUDE [EXCLUDE ...]] [-k]
Options:
-l, --linters LINTER [LINTER ...]- linters to run.-p, --paths PATH [PATH ...]- quarto files and/or directories to include.-e, --exclude EXCLUDE [EXCLUDE ...]- optional, files and/or directories to exclude.-k, --keep-temp- optional, keep temporary.pyfiles created during linting (for debugging).
Passing extra arguments directly to linters is not supported. Only .qmd files are processed.
Examples
The linter used is interchangeable in these examples.
Lint all .qmd files in the current directory (using pylint):
lintquarto -l pylint -p .
Lint several specific files (using pylint and flake8):
lintquarto -l pylint flake8 -p file1.qmd file2.qmd
Keep temporary .py files after linting (with pylint)
lintquarto -l pylint -p . -k
Lint all files in current directory (using ruff):
- Excluding folders
examples/andignore/, or- - Excluding a specific file
analysis/test.qmd.
lintquarto -l ruff -p . -e examples ignore
lintquarto -l ruff -p . -e analysis/test.qmd
Find out more
Visit our website to find out more and see examples from running with each code validation tool.
PyOpenSci
This package has been submit to PyOpenSci for review. This includes an article for consideration by the Journal of Open Source Software (JOSS) which is in the inst/ folder of this repository.
Community
Curious about contributing? Check out the contributing guidelines to learn how you can help. Every bit of help counts, and your contribution - no matter how minor - is highly valued.
How to cite lintquarto
Please cite the repository on GitHub, PyPI, conda and/or Zenodo:
Heather, A. (2026). lintquarto (v0.10.0). https://github.com/lintquarto/lintquarto.
Heather, A. (2026). lintquarto (v0.10.0). https://pypi.org/project/lintquarto/.
Heather, A. (2026). lintquarto (v0.10.0). https://anaconda.org/conda-forge/lintquarto.
Heather, A. (2026). lintquarto (v0.10.0). https://doi.org/10.5281/zenodo.15731161.
Citation instructions are also provided in CITATION.cff.
Acknowledgements
This project was written and maintained by hand, with occasional use of Perplexity AI during development (specific models and versions varied over time).
AI assistance was used for small, targeted tasks (e.g. help when troubleshooting, identifying issues, refining docstrings, improving code structure), rather than to generate complete functions or substantial content.
All code and design decisions were reviewed and finalised by a human. For transparency, the use of AI is acknowledged, but the project should not be considered AI‑generated.
Contributors ✨
Thanks goes to these wonderful people (emoji key):
Amy Heather 🎨 📖 🤔 🚇 🚧 ⚠️ |
Isabel Zimmerman 📖 🤔 |
This project follows the all-contributors specification. Contributions of any kind welcome!
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 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 lintquarto-0.10.0.tar.gz.
File metadata
- Download URL: lintquarto-0.10.0.tar.gz
- Upload date:
- Size: 19.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d004e63f30779047d89182557e0ac738177e851f9b4a9e19f14929e2506f6b7b
|
|
| MD5 |
4873d6189e3bf567774cd1abd6d40c23
|
|
| BLAKE2b-256 |
c80f2e1532feb215bce5f9a824fe33ad851ba5a4803bd231fa16278d8b4d716a
|
Provenance
The following attestation bundles were made for lintquarto-0.10.0.tar.gz:
Publisher:
build-publish.yaml on lintquarto/lintquarto
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lintquarto-0.10.0.tar.gz -
Subject digest:
d004e63f30779047d89182557e0ac738177e851f9b4a9e19f14929e2506f6b7b - Sigstore transparency entry: 1449543896
- Sigstore integration time:
-
Permalink:
lintquarto/lintquarto@d20744a74d5dd50e6ecf78eeffe2bd76ff206c22 -
Branch / Tag:
refs/tags/v0.10.0 - Owner: https://github.com/lintquarto
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build-publish.yaml@d20744a74d5dd50e6ecf78eeffe2bd76ff206c22 -
Trigger Event:
release
-
Statement type:
File details
Details for the file lintquarto-0.10.0-py3-none-any.whl.
File metadata
- Download URL: lintquarto-0.10.0-py3-none-any.whl
- Upload date:
- Size: 17.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
49a04decd719b7f3a82f064b087c50adf1e4dde53bfe90f60692910997c214f0
|
|
| MD5 |
adf79d95fff38a06e4b93c81604ff199
|
|
| BLAKE2b-256 |
32f81e5e3623590d92e7595ea60429c07e377ae04fd8f538d95e9fb842d38e70
|
Provenance
The following attestation bundles were made for lintquarto-0.10.0-py3-none-any.whl:
Publisher:
build-publish.yaml on lintquarto/lintquarto
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lintquarto-0.10.0-py3-none-any.whl -
Subject digest:
49a04decd719b7f3a82f064b087c50adf1e4dde53bfe90f60692910997c214f0 - Sigstore transparency entry: 1449543941
- Sigstore integration time:
-
Permalink:
lintquarto/lintquarto@d20744a74d5dd50e6ecf78eeffe2bd76ff206c22 -
Branch / Tag:
refs/tags/v0.10.0 - Owner: https://github.com/lintquarto
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build-publish.yaml@d20744a74d5dd50e6ecf78eeffe2bd76ff206c22 -
Trigger Event:
release
-
Statement type: