A lightweight Python linter for checking Sphinx docstrings.
Project description
sphinxlinter
A lightweight Python linter that ensures Sphinx docstrings follow the recommended field list style and are consistent with function signatures and implementation.
Motivation
This linter enforces Sphinx docstring rules—like field list style and consistency with function signatures and implementation—not covered by pydocstyle, pydoclint, or ruff.
Field list style
In general, a typical Sphinx docstring has the following format (ref):
This linter focuses on the following Sphinx docstring fields:
Parameters fields
The param, parameter, arg, argument, keyword, key values are all equivalent aliases for the same field.
Formats:
:param [ParamType] [ParamName]: [ParamDescription](when type is specified):param [ParamName]: [ParamDescription](when type is not specified)
Parameter type field
For specifying parameter types, the type field is used.
Format:
:type [ParamName]: [ParamType]
Raises field
The raises, raise, except, exception values are all equivalent aliases for the same field.
[ErrorTypes]: 1 or more exception types, separated by commas.
Formats:
:raises [ErrorTypes]: [ErrorDescription]
Return fields
The return, returns values are equivalent aliases for the same field.
Format:
:return: [ReturnDescription]
Return type field
For specifying return types, the rtype field is used.
Format:
:rtype: [ReturnType]
Variable fields
Although Sphinx does not currently explain this distinction, its syntax was directly inherited from Epydoc, so it is generally understood that:
:var [VarName]: [VarDescription](for module-level or global variables):ivar [InstanceVarName]: [VarDescription](for instance variables):cvar [ClassVarName]: [VarDescription](for class variables)
Requirements
- Python 3.9+
Quick usage, download the sphinxlinter.py script from
following link
and run it with Python:
Run on current working directory
python sphinxlinter.py
Pass one or more files or directories. Directories are searched recursively for *.py, ignoring common virtualenv/cache
folders.
python sphinxlinter.py path/to/file.py path/to/package_dir
Installation
To install sphinxlinter using pip, run the following command:
pip install sphinx-linter
Usage from command line (CLI) if installed
Run on current working directory
sphinxlinter .
Or using the short command:
spxl .
Run on specific files or directories
```bash
spxl path/to/file_or_dir ...
Arguments and Options
Arguments
[FILES]: List of files or directories to check.
Options
--help: Displays the help message and exits.--enable: Violation codes to enable (or ALL, to enable all rules), by default all are enabled.--disable: Violation codes to disable, by default none are disabled. Takes precedence over--enable.--ignore: Directories to exclude from analysis (for examplevenv,.cache).--statistics: Show counts for every rule with at least one violation.--quiet: Suppresses all output except the statistics summary if--statisticsis also set.
Violation reporting
Example output
/path/to/module.py:42: [DOC102] Invalid parameter type syntax ('List[int]')
/path/to/module.py:10: [DOC101] Parameter documented but not in signature ('unused_param')
Format: filename:line: [CODE] message
Common violation codes:
DOC0xx: Docstring section issuesDOC1xx: Parameter issuesDOC2xx: Return issuesDOC3xx: Raises issuesDOC4xx: Variable issues
How it works (brief)
- Parses Python AST to find
FunctionDef,AsyncFunctionDef,ClassDef, andModulenodes. - Extracts signatures and docstring sections Sphinx field lists.
- Validates section presence, syntax and consistency with type annotations.
Notes
- The tool prints findings to stdout and does not modify files.
- To integrate into CI, run the script and treat any stdout lines as failures in your pipeline logic.
Violation Codes Table
DOC0xx: Docstring section issues
| Code | Description | Justification |
|---|---|---|
| DOC001 | Unknown docstring section | Detects sections not recognized by Sphinx conventions. |
| DOC002 | Malformed section | Ensures sections follow correct Sphinx formatting. |
| DOC003 | Missing blank line after docstring | Improves readability and separates docstrings from code. |
| DOC004 | Missing blank line between summary and sections | Maintains clarity and standard docstring structure. |
| DOC005 | Too many consecutive empty lines | Avoids unnecessary whitespace, keeping docstrings clean. |
| DOC006 | Trailing empty lines | Ensures docstrings do not contain superfluous blank lines. |
| DOC007 | Misplaced section | Ensures docstrings sections are correctly located. |
| DOC008 | One-line docstring should end with a period | Enforces a trailing period on one-line docstrings, as recommended by PEP257. |
| DOC009 | Docstring must not use more than 3 double quotes | Encourages the use of triple quotes for docstrings. |
NOTES:
DOC008: This rule differs from Ruff’s similar rule
missing-trailing-period,
which enforces a trailing period on the first line of both one-line and multi-line docstrings. By contrast, the rule
DOC008 only enforces a trailing period on one-line docstrings, following the recommendation
in PEP 257.
DOC009: Unlike Ruff
triple-single-quotes,
this rule only checks that multi-line docstrings do not start or end with more than three double quotes.
DOC1xx: Parameter issues
| Code | Description | Justification |
|---|---|---|
| DOC101 | Parameter documented but not in signature | Detects inconsistencies between documentation and function signature. |
| DOC102 | Invalid parameter type syntax | Ensures parameter types conform to valid Python type hint syntax. |
| DOC103 | Parameter type already in signature | Prevents redundant type declarations. |
| DOC104 | Parameter type mismatch with hint | Ensures documented types match actual function hints. |
| DOC105 | Duplicated parameter | Avoids repeating the same parameter in the docstring. |
DOC2xx: Return issues
| Code | Description | Justification |
|---|---|---|
| DOC201 | Return documented but function has no return | Indicates that it is documented for returns, but has no return statement. |
| DOC202 | Invalid return type syntax | Ensures return type conform to valid Python type hint syntax. |
| DOC203 | Return type already in signature | Prevents redundant return type hints. |
| DOC204 | Return type mismatch with annotation | Validates consistency with function return type hints. |
| DOC205 | Duplicated return section | Avoids repeated return sections in then docstring. |
DOC3xx: Raises issues
| Code | Description | Justification |
|---|---|---|
| DOC302 | Invalid exception type syntax | Ensures exceptions conform to valid Python syntax. |
| DOC305 | Duplicated exception type | Prevents repetition of exceptions in the docstring. |
DOC4xx: Variable issues
| Code | Description | Justification |
|---|---|---|
| DOC402 | Invalid variable type syntax | Ensures variable types conform to valid Python type hint syntax. |
| DOC403 | Variable name must not contain spaces | Prevents spaces in variable names. |
| DOC405 | Duplicated variable | Prevents repetition of variables in the docstring. |
Development
To contribute to the project, you can run the following commands for testing and documentation:
First, ensure you have the latest version of pip:
python -m pip install --upgrade pip
Running Unit Tests
Install the development dependencies and run the tests:
pip install --group=test # Install test dependencies
pytest tests/ # Run all tests
pytest --cov sphinxlinter # Run tests with coverage
Running Linter
pip install --group=lint # Install linter dependencies
ruff check . # Run linter
License
This project is licensed under the MIT license.
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 sphinx_linter-0.0.10.tar.gz.
File metadata
- Download URL: sphinx_linter-0.0.10.tar.gz
- Upload date:
- Size: 19.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.24
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
49bb2da9a9b7dfadc89303536896b1858113e9584b8a4d255d4ef03fff861f3f
|
|
| MD5 |
cf606f38a7231774d29474c40c9e88ef
|
|
| BLAKE2b-256 |
e9786e103c3de476ff66a2fabdbfc4cb6a6fd318b6abce5849a6dfbe47534354
|
File details
Details for the file sphinx_linter-0.0.10-py3-none-any.whl.
File metadata
- Download URL: sphinx_linter-0.0.10-py3-none-any.whl
- Upload date:
- Size: 13.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.24
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2888c4fac608a49b2f06a1fface155f3ac596105d67b9d3271796050f4e80005
|
|
| MD5 |
caf7c3b07b1c5469dea35e9a9c02d547
|
|
| BLAKE2b-256 |
4566bcae6bba16a023174fd14248840a194aae642d7c1ef428fe3cc847479cca
|