A CLI tool to check and validate Python docstring formatting and completeness
Project description
docstring-format-checker
Introduction
A powerful Python CLI tool that validates docstring formatting and completeness using AST parsing. Ensure consistent, high-quality documentation across your entire codebase with configurable validation rules and rich terminal output.
Key Features:
- 🔍 AST-based parsing - Robust code analysis without regex fragility
- ⚙️ Configurable validation - Four section types with TOML-based configuration
- 📁 Hierarchical config discovery - Automatic
pyproject.tomldetection - 🎨 Rich terminal output - Beautiful colored output and error tables
- 🚀 Dual CLI entry points - Use
docstring-format-checkerordfc - 🛡️ 100% test coverage - Thoroughly tested and reliable
Quick Start
# Install
uv add docstring-format-checker
# Check a single file
dfc check my_module.py
# Check entire directory
dfc check src/
# Generate example configuration
dfc config-example
Key URLs
For reference, these URL's are used:
| Type | Source | URL |
|---|---|---|
| Git Repo | GitHub | https://github.com/data-science-extensions/docstring-format-checker |
| Python Package | PyPI | https://pypi.org/project/docstring-format-checker |
| Package Docs | Pages | https://data-science-extensions.com/docstring-format-checker |
Section Types
Configure validation for four types of docstring sections:
| Type | Description | Example Use |
|---|---|---|
free_text |
Admonition-style sections | Summary, details, examples |
list_name |
Simple name lists | Simple parameter lists |
list_type |
Type-only lists | Raises, yields sections |
list_name_and_type |
Name and type lists | Parameters, returns with types |
Configuration
Create a pyproject.toml with your validation rules:
[tool.dfc]
[[tool.dfc.sections]]
order = 1
name = "summary"
type = "free_text"
admonition = "note"
prefix = "!!!"
required = true
[[tool.dfc.sections]]
order = 2
name = "params"
type = "list_name_and_type"
required = true
[[tool.dfc.sections]]
order = 3
name = "returns"
type = "list_name_and_type"
required = false
[[tool.dfc.sections]]
order = 4
name = "raises"
type = "list_type"
required = false
Installation
You can install and use this package multiple ways by using any of your preferred methods: pip, pipenv, poetry, or uv.
Using pip:
-
In your terminal, run:
python3 -m pip install --upgrade pip python3 -m pip install docstring-format-checker
-
Or, in your
requirements.txtfile, add:docstring-format-checker
Then run:
python3 -m pip install --upgrade pip python3 -m pip install --requirement=requirements.txt
Using pipenv:
-
Install using environment variables:
In your
Pipfilefile, add:[[source]] url = "https://pypi.org/simple" verify_ssl = false name = "pypi" [packages] docstring-format-checker = "*"
Then run:
python3 -m pip install pipenv python3 -m pipenv install --verbose --skip-lock --categories=root index=pypi docstring-format-checker
-
Or, in your
requirements.txtfile, add:docstring-format-checker
Then run:
python3 -m pipenv install --verbose --skip-lock --requirements=requirements.txt
-
Or just run this:
python3 -m pipenv install --verbose --skip-lock docstring-format-checker
Using poetry:
-
In your
pyproject.tomlfile, add:[project] dependencies = [ "docstring-format-checker==0.*", ]
Then run:
poetry sync poetry install
-
Or just run this:
poetry add "docstring-format-checker==0.*" poetry sync poetry install
Using uv:
-
In your
pyproject.tomlfile, add:[project] dependencies = [ "docstring-format-checker==0.*", ]
Then run:
uv sync -
Or run this:
uv add "docstring-format-checker==0.*" uv sync
-
Or just run this:
uv pip install "docstring-format-checker==0.*"
Usage Examples
Basic Usage
# Check a single Python file
dfc check src/my_module.py
# Check entire directory recursively
dfc check src/
# Check with verbose output
dfc check --verbose src/
# Generate example configuration file
dfc config-example > pyproject.toml
Advanced Configuration
# Use custom config file location
dfc check --config custom_config.toml src/
# Check specific function patterns
dfc check --include-pattern "**/api/*.py" src/
# Exclude test files
dfc check --exclude-pattern "**/test_*.py" src/
Integration with CI/CD
# .github/workflows/docs.yml
name: Documentation Quality
on: [push, pull_request]
jobs:
docstring-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v3
- run: uv pip install docstring-format-checker
- run: dfc check src/
Example Output
📋 Docstring Format Checker Results
✅ src/utils/helpers.py
❌ src/models/user.py
└── Function 'create_user' missing required section: 'params'
└── Function 'delete_user' missing required section: 'returns'
❌ src/api/endpoints.py
└── Method 'UserAPI.get_user' invalid section format: 'raises'
📊 Summary: 1/3 files passed (33.3%)
Architecture
The tool follows a clean, modular architecture:
core.py-DocstringCheckerclass with AST parsing and validation logicconfig.py- Configuration loading andSectionConfigmanagementcli.py- Typer-based CLI with dual entry pointsutils/exceptions.py- Custom exception classes for structured error handling
Contribution
Check the CONTRIBUTING.md file or Contributing page.
Development
-
Clone the repository:
git clone https://github.com/data-science-extensions/docstring-format-checker.git cd docstring-format-checker
-
Set up development environment:
uv sync --all-groups
-
Run tests:
uv run pytest --config-file=pyproject.toml --cov-report=term-missing
-
Run CLI locally:
uv run dfc check examples/example_code.py
Build and Test
To ensure that the package is working as expected, please ensure that:
- You write your code as per PEP8 requirements.
- You write a UnitTest for each function/feature you include.
- The CodeCoverage is 100%.
- All UnitTests are passing.
- MyPy is passing 100%.
Testing
-
Run them all together:
uv run pytest --config-file=pyproject.toml
-
Or run them individually:
-
Tests with Coverage:
uv run pytest --config-file=pyproject.toml --cov-report=term-missing
-
Type Checking:
uv run mypy src/
-
Code Formatting:
uv run black --check src/
-
Linting:
uv run ruff check src/
-
License
This project is licensed under the MIT License - see the LICENSE file for details.
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 docstring_format_checker-1.5.1.tar.gz.
File metadata
- Download URL: docstring_format_checker-1.5.1.tar.gz
- Upload date:
- Size: 25.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
14f9e4afdaf22f277b8ddbed1b6d38ea8f6a7fa0b8b91653d7bdc560d65932de
|
|
| MD5 |
d3222a58552bce8aa1902b8e38e1cc48
|
|
| BLAKE2b-256 |
8ef1de1922831b0fdc4b7486bd45a9ca7e56d431c6c867a0b5f4b1233c346444
|
File details
Details for the file docstring_format_checker-1.5.1-py3-none-any.whl.
File metadata
- Download URL: docstring_format_checker-1.5.1-py3-none-any.whl
- Upload date:
- Size: 27.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d2e8ed031fe2440403bc1df1d26dcd845e10e40e50608308236ede72e83bde5
|
|
| MD5 |
1b9923b2da3958492f1f9164d98b163f
|
|
| BLAKE2b-256 |
c52fd9f024d808976b059654f587d574b63ccffb46c29d4de6d3f4b98716fdbb
|