Skip to main content

Comprehensive docstring quality vetting for Python projects

Project description

CI Coverage PyPI Python License Renovate enabled Ruff docs vetted

docvet

Better docstrings, better AI.

Why docvet?

ruff checks how your docstrings look. interrogate checks if they exist (but is unmaintained). docvet checks if they're right — and now covers presence too. Existing tools cover style; docvet delivers the layers they miss:

Layer Check ruff interrogate pydoclint docvet
1. Presence "Does a docstring exist?" -- Yes (unmaintained) -- 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 covers 3 structural categories (Args, Returns, Raises). docvet's enrichment alone has 20 rules, including Raises, Yields, Receives, Warns, Attributes, Examples, cross-references, parameter agreement, and more. Add presence (coverage metrics + threshold enforcement), freshness (git diff/blame staleness detection), griffe rendering compatibility, and mkdocs coverage: 31 rules across 5 checks, in territory no other tool touches.

Quickstart | GitHub Action | Pre-commit | Configuration | AI Agent Integration | Docs

What It Checks

Presence (existence) -- 2 rules: missing-docstring overload-has-docstring

Enrichment (completeness) -- 20 rules: missing-raises missing-returns missing-yields missing-receives missing-warns missing-deprecation missing-param-in-docstring extra-param-in-docstring missing-other-parameters missing-attributes undocumented-init-params missing-typed-attributes missing-examples missing-cross-references extra-raises-in-docstring extra-yields-in-docstring extra-returns-in-docstring missing-return-type trivial-docstring 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/helpers.py:1: missing-docstring Module has no docstring [required]
src/mypackage/utils.py:42: missing-raises Function 'parse_config' raises ValueError but has no Raises section [required]
src/mypackage/models.py:15: stale-signature Function 'process' signature changed but docstring not updated [required]
src/mypackage/api.py:1: missing-init Package directory missing __init__.py (invisible to mkdocs) [required]

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 — findings appear as inline annotations on your PR:

- uses: Alberto-Codes/docvet@v1

Select specific checks or pin a version:

- uses: Alberto-Codes/docvet@v1
  with:
    checks: 'enrichment,freshness'
    docvet-version: '1.9.0'
    python-version: '3.13'

For griffe rendering checks, install griffe before running docvet:

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

AI Agent Integration

For tool-specific integration snippets, see the full AI Agent Integration guide.

Add docvet to your AI coding workflow. Drop this into your CLAUDE.md, .cursorrules, or agent configuration:

## Docstring Quality

After modifying Python functions, classes, or modules, run `docvet check` and fix all findings before committing.

Recommended pyproject.toml configuration:

[tool.docvet]
fail-on = ["enrichment", "freshness", "coverage", "griffe"]

Subcommand Quick Reference

Command Description
docvet check Run all enabled checks (default: git diff files)
docvet check --all Run all checks on entire codebase
docvet check --staged Run all checks on staged files only
docvet presence Check for missing docstrings with coverage metrics
docvet enrichment Check for missing docstring sections
docvet freshness Detect stale docstrings via git
docvet coverage Find files invisible to mkdocs
docvet griffe Check mkdocs rendering compatibility

Better Docstrings, Better AI

AI coding agents rely on docstrings as context when generating and modifying code. Agents modify code but often leave docstrings stale, and 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.

mcp-name: io.github.Alberto-Codes/docvet

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.14.1.tar.gz (75.2 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.14.1-py3-none-any.whl (83.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: docvet-1.14.1.tar.gz
  • Upload date:
  • Size: 75.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","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.14.1.tar.gz
Algorithm Hash digest
SHA256 01ec23d5a02bc449fca6c9cbc990f8b4640fd4c5f695d253a082471279c84d93
MD5 9cf09b2d63fe88942ce0aa266f17d590
BLAKE2b-256 1ca435aab7043f8fa21adf97c64ddbc5e3cbf48adf089b094fbae3e2219a9269

See more details on using hashes here.

File details

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

File metadata

  • Download URL: docvet-1.14.1-py3-none-any.whl
  • Upload date:
  • Size: 83.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","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.14.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3f61569453fca9a78dd077f7dabd363ab9eb4607d3cdcdfa2dfeb2bb101614bd
MD5 0d6137789583774fb359e333b5287743
BLAKE2b-256 d79bc4c3486308dcab8bbabc973e3966b426ab635d93a5e8777601b275cf5db1

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