Skip to main content

Comprehensive docstring quality vetting for Python projects

Project description

PyPI CI Coverage License Python docs vetted

docvet

Better docstrings, better AI.

ruff checks how your docstrings look. interrogate checks if they exist. docvet checks if they're right. Existing tools cover presence and style — docvet delivers the layers they miss:

Layer Check ruff interrogate pydoclint docvet
1. Presence "Does a docstring exist?" -- Yes -- --
2. Style "Is it formatted correctly?" Yes -- -- --
3. Completeness "Does it have all required sections?" -- -- Partial Yes
4. Accuracy "Does it match the current code?" -- -- -- Yes
5. Rendering "Will mkdocs render it correctly?" -- -- -- Yes
6. Visibility "Will mkdocs even see the file?" -- -- -- Yes

pydoclint checks Args/Returns/Raises alignment with function signatures (structural completeness). docvet's enrichment covers that plus Yields, Receives, Warns, Attributes, Examples, typed attributes, and cross-references -- 19 rules across 4 checks. docvet also covers freshness (git diff/blame), griffe rendering compatibility, and mkdocs coverage -- territory no other tool touches.

Quickstart | GitHub Action | Pre-commit | Configuration | Docs

What It Checks

Enrichment (completeness) -- 10 rules: missing-raises missing-yields missing-receives missing-warns missing-other-parameters missing-attributes missing-typed-attributes missing-examples missing-cross-references prefer-fenced-code-blocks

Freshness (accuracy) -- 5 rules: stale-signature stale-body stale-import stale-drift stale-age

Griffe (rendering) -- 3 rules: griffe-unknown-param griffe-missing-type griffe-format-warning

Coverage (visibility) -- 1 rule: missing-init

Quickstart

pip install docvet && docvet check --all

For optional griffe rendering checks:

pip install docvet[griffe]

Example output:

src/mypackage/utils.py:42: missing-raises Function 'parse_config' raises ValueError but has no Raises section
src/mypackage/models.py:15: stale-signature Function 'process' signature changed but docstring not updated
src/mypackage/api.py:1: missing-init Package directory missing __init__.py (invisible to mkdocs)

Configuration

Configure via [tool.docvet] in your pyproject.toml. All checks run and print findings. Checks listed in fail-on cause a non-zero exit code; unlisted checks are treated as warnings.

[tool.docvet]
exclude = ["tests", "scripts"]
fail-on = ["griffe", "coverage"]

[tool.docvet.freshness]
drift-threshold = 30
age-threshold = 90

Pre-commit

Add to your .pre-commit-config.yaml:

repos:
  - repo: https://github.com/Alberto-Codes/docvet
    rev: v1.2.0
    hooks:
      - id: docvet

For griffe rendering checks, add the optional dependency:

repos:
  - repo: https://github.com/Alberto-Codes/docvet
    rev: v1.2.0
    hooks:
      - id: docvet
        additional_dependencies: [griffe]

GitHub Action

Add docvet to your GitHub Actions workflow:

- uses: Alberto-Codes/docvet@v1

With version pinning and custom arguments:

- uses: Alberto-Codes/docvet@v1
  with:
    version: '1.2.0'
    args: 'check --all'

For griffe rendering checks, install griffe before running docvet:

- uses: actions/setup-python@v5
  with:
    python-version: '3.12'
- run: pip install griffe
- uses: Alberto-Codes/docvet@v1
  with:
    args: 'check --all'

Better Docstrings, Better AI

AI coding agents rely on docstrings as context when generating and modifying code. Research shows stale or incorrect documentation is actively harmful -- worse than no docs at all:

As the 2025 DORA report puts it: "AI doesn't fix a team; it amplifies what's already there." The only signal correlating with AI productivity is code quality.

docvet's freshness checking catches the accuracy gap that stale docs create, and its enrichment rules ensure the docstring sections that agents use as context are complete. Run docvet check in your CI, pre-commit hooks, or agent toolchain.

Badge

Add a badge to your project to show your docs are vetted:

[![docs vetted | docvet](https://img.shields.io/badge/docs%20vetted-docvet-purple)](https://github.com/Alberto-Codes/docvet)

Used By

Are you using docvet? Open a pull request to add your project here.

License

MIT -- see LICENSE for details.

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

docvet-1.3.0.tar.gz (36.8 kB view details)

Uploaded Source

Built Distribution

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

docvet-1.3.0-py3-none-any.whl (42.8 kB view details)

Uploaded Python 3

File details

Details for the file docvet-1.3.0.tar.gz.

File metadata

  • Download URL: docvet-1.3.0.tar.gz
  • Upload date:
  • Size: 36.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for docvet-1.3.0.tar.gz
Algorithm Hash digest
SHA256 c003456b7707df8d5e363cf295332d69791042a9ba549f005c8f757b7eb2ad26
MD5 3ebdb5b669640d9c8ca42ffc092e8b02
BLAKE2b-256 af436b27288fb5262c8c128d7ffd5108f7e7de03dcc6baf1b0fc9295b67cb88b

See more details on using hashes here.

File details

Details for the file docvet-1.3.0-py3-none-any.whl.

File metadata

  • Download URL: docvet-1.3.0-py3-none-any.whl
  • Upload date:
  • Size: 42.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for docvet-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 775c63ee3e6a7b10aed6148dd5190610b2ad95a5118d1edb90a737cb90f38612
MD5 b00c3f96a1d4d0efa46be5079d560604
BLAKE2b-256 f3b7a662e6d8b8b269be18c74f11f82130fdd0367edd16cca58b07bf137441e7

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