Skip to main content

Check for stylistic and formal issues in .rst and .py files included in the documentation.

Project description

Sphinx Lint

PyPI Monthly downloads Supported Python Version GitHub Workflow Status

Sphinx Lint is based on rstlint.py from CPython.

What is Sphinx Lint, what is it not?

Sphinx Lint should:

  • be reasonably fast so it's comfortable to use as a linter in your editor.
  • be usable on a single file.
  • not give any false positives (probably a utopia, but let's try).
  • not spend too much effort finding errors that sphinx-build already finds (or can easily find).
  • focus on finding errors that are not visible to sphinx-build.

Using Sphinx Lint

Here are some example invocations of Sphinx Lint from the command line:

sphinx-lint           # check all dirs and files
sphinx-lint file.rst  # check a single file
sphinx-lint docs      # check a directory
sphinx-lint -i venv   # ignore a file/directory
sphinx-lint -h        # for more options

Sphinx Lint can also be used via pre-commit. We recommend using a configuration like this:

  - repo: https://github.com/sphinx-contrib/sphinx-lint
    rev: LATEST_SPHINXLINT_RELEASE_TAG
    hooks:
      - id: sphinx-lint

Known issues

Currently Sphinx Lint can't work with tables, there's no understanding of how linesplit works in tables, like:

   +-----------------------------------------+-----------------------------+---------------+
   | Method                                  | Checks that                 | New in        |
   +=========================================+=============================+===============+
   | :meth:`assertEqual(a, b)                | ``a == b``                  |               |
   | <TestCase.assertEqual>`                 |                             |               |
   +-----------------------------------------+-----------------------------+---------------+

as Sphinx Lint works line by line it will inevitably think the :meth: role is not closed properly.

To avoid false positives, some rules are skipped if we're in a table.

Contributing

A quick way to test if some syntax is valid from a pure reStructuredText point of view, one case use docutils's pseudoxml writer, like:

$ docutils --writer=pseudoxml tests/fixtures/xpass/role-in-code-sample.rst
<document source="tests/fixtures/xpass/role-in-code-sample.rst">
    <paragraph>
        Found in the pandas documentation, this is valid:
    <bullet_list bullet="*">
        <list_item>
            <paragraph>
                A pandas class (in the form
                <literal>
                    :class:`pandas.Series`
                )
        <list_item>
            <paragraph>
                A pandas method (in the form
                <literal>
                    :meth:`pandas.Series.sum`
                )
        <list_item>
            <paragraph>
                A pandas function (in the form
                <literal>
                    :func:`pandas.to_datetime`
                )
    <paragraph>
        it's documenting roles using code samples (double backticks).

Releasing

  1. Make sure that the CI tests pass and optionally double-check locally with "friends projects" by running:

    sh download-more-tests.sh
    python -m pytest
    
  2. Go on the Releases page

  3. Click "Draft a new release"

  4. Click "Choose a tag"

  5. Type the next vX.Y.Z version and select "Create new tag: vX.Y.Z on publish"

  6. Leave the "Release title" blank (it will be autofilled)

  7. Click "Generate release notes" and amend as required

  8. Click "Publish release"

  9. Check the tagged GitHub Actions build has deployed to PyPI

License

As this script was in the CPython repository the license is the Python Software Foundation Licence Version 2, see the LICENSE file for a full version.

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

sphinx_lint-1.0.2.tar.gz (36.9 kB view details)

Uploaded Source

Built Distribution

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

sphinx_lint-1.0.2-py3-none-any.whl (20.7 kB view details)

Uploaded Python 3

File details

Details for the file sphinx_lint-1.0.2.tar.gz.

File metadata

  • Download URL: sphinx_lint-1.0.2.tar.gz
  • Upload date:
  • Size: 36.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sphinx_lint-1.0.2.tar.gz
Algorithm Hash digest
SHA256 4e7fc12f44f750b0006eaad237d7db9b1d8aba92adda9c838af891654b371d35
MD5 2c69ec85fbd8ccdbaac9c6e86617e615
BLAKE2b-256 8a199258497fee6e2a0bdb93e8ecea6ef6864afb5d83e996a1606a853f96c658

See more details on using hashes here.

Provenance

The following attestation bundles were made for sphinx_lint-1.0.2.tar.gz:

Publisher: deploy.yml on sphinx-contrib/sphinx-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sphinx_lint-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: sphinx_lint-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 20.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sphinx_lint-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 edcd0fa4d916386c5a3ef7ef0f5136f0bb4a15feefc83c1068ba15bc16eec652
MD5 dc84774ef02573c259c7e7e8a2f87376
BLAKE2b-256 c062f29a2988ff706ac01d3c63d0b4cc4ed62d2c83b447916e0317790ca156cf

See more details on using hashes here.

Provenance

The following attestation bundles were made for sphinx_lint-1.0.2-py3-none-any.whl:

Publisher: deploy.yml on sphinx-contrib/sphinx-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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