Sphinx est le logiciel de documentation historique de la communauté Python.
Sphinx a été initialement créé 1 2 et est utilisé pour la documentation du langage Python.
C’est un logiciel de génération de documentation, qui permet d’obtenir plusieurs formats de documentations (HTML, PDF via LaTeX, pages man, etc) à partir de sources texte au format reStructuredText ou Markdown.
Il comporte de nombreuses extensions.
Il est peu médiatisé 3 mais très employé dans la communauté Python. La plateforme Read the Docs créée en 2010 pour des projets Sphinx annonce 80k projets open source qui ne sont plus uniquement en Sphinx (MkDocs et Jupyter Book).
Une recherche un peu discriminante sur GitHub 4 pourrait laisser penser qu’il y a 60k projets sur la forge.
La communauté reste active sur le projet :
La documentation d’installation 1 commence par présenter une installation globale 2 de Sphinx
avec les systèmes de packages (apt
, yum
, brew
, chocolatey
) avant d’évoquer conda
puis l’installation avec pip
.
Warning
L’application packagée est plus ancienne que celle que vous pourriez installer par pip
.
# Installation globale sur une Ubuntu LTS 22.04 en 2024
$ sphinx-quickstart --version
sphinx-quickstart 4.3.2
# Installation avec pip dans un environnement virtuel sur le même OS
$ sphinx-quickstart --version
sphinx-quickstart 7.2.6
De plus, une installation packagée n’est valable que si vous générez des documentations pour des projets homogènes en terme de version Python.
Si vous prévoyez plusieurs projets Python, installez plutôt Sphinx
avec pip
dans un environnement virtuel.
When installing Sphinx using pip, it is highly recommended to use virtual environments, which isolate the installed packages from the system packages
The preferred tool for installing packages from PyPI is
pip
.
La commande sphinx-quickstart génère la structure de la documentation.
$ sphinx-quickstart --sep docs
Bienvenue dans le kit de démarrage rapide de Sphinx 7.2.6.
Chemin racine sélectionné : docs
> Nom du projet: ntt
> Nom(s) de(s) l'auteur(s): Romain Vuillemot
> Version du projet []:
> Langue du projet [en]:
Fichier en cours de création /<project-path>/ntt/docs/source/conf.py.
Fichier en cours de création /<project-path>/ntt/docs/source/index.rst.
Fichier en cours de création /<project-path>/ntt/docs/Makefile.
Fichier en cours de création /<project-path>/ntt/docs/make.bat.
Terminé : la structure initiale a été créée.
Vous devez maintenant compléter votre fichier principal /<project-path>/ntt/docs/source/index.rst
et créer d'autres fichiers sources de documentation. Utilisez le Makefile pour construire la documentation comme ceci :
make builder
où « builder » est l'un des constructeurs disponibles, tel que html, latex, ou linkcheck.
docs
: le dossier de la documentation--sep
: séparer la documentation générée (HTML) des sources.rst
docs
├── build
├── make.bat
├── Makefile
└── source
├── conf.py
├── index.rst
├── _static
└── _templates
source
contient la configuration (conf.py
), le fichier racine de la documentation (index.rst
), et les fichiers sources de la documentationbuild
contiendra la documentation générée (HTML, …)Makefile
et make.bat
facilitent la génération de la documentation_static
et _templates
servent à customiser le renduATTENTION
Pour conserver les dossiers build
, _static
et _templates
, initialement vides, ajouter à git
un fichier .gitignore
dans chacun de ces dossiers.
Le fichier de configuration Sphinx 1 est un fichier Python : conf.py
sphinx-quickstart
génère un fichier conf.py
assez minimaliste :
# Configuration file for the Sphinx documentation builder.
project = 'ntt'
copyright = '2024, Romain Vuillemot'
author = 'Romain Vuillemot'
# -- General configuration ---------------------------------------------------
extensions = []
templates_path = ['_templates']
exclude_patterns = []
# -- Options for HTML output -------------------------------------------------
html_theme = 'alabaster'
html_static_path = ['_static']
conf.py
permet de modifier et d’étendre les paramètres de la documentation, voir 2.
Le fichier racine de la documentation index.rst
est un fichier reStructuredText.
Il contient par défaut le titre de la documentation, la génération de la table des matières via la directive Sphinx toctree
1 et la génération de pages spéciales via genindex
, modindex
et search
2.
toctree
1 est une directive Sphinx qui permet de créer et de paramétrer une à plusieurs tables des matières dans sa documentation.
On peut spécifier le texte d’un élément de la table des matières (une Entry
) plutôt que de récupérer le titre de la page.
Ici, API Reference
remplace le titre de la page api/ntt
.
sphinx-build
1 est la commande de génération de la documentation.
-M
est une option récente, le résultat équivaut à la commande suivante avec l’ancienne option -b
Le Makefile
créé par sphinx-quickstart
simplifie la génération de la documentation. Inutile de fournir le dossier source et le dossier destination à chaque appel.
# Génération de la documentation
$ make html
Sphinx v7.2.6 en cours d'exécution
...
La compilation a réussi.
Les pages HTML sont dans build/html.
Suppression du contenu du dossier destination
Créer une page reStructuredText, par ex source/getting-started.rst
===============
Getting started
===============
Installation
============
You can install ``ntt`` from `PyPI`_ using ``pip`` :
.. code-block:: bash
$ pip install ntt
It is recommended to work inside a `virtual environment`_.
.. _PyPI: https://pypi.org/project/ntt
.. _virtual environment: https://docs.python.org/3.9/library/venv.html
et la référencer dans source/index.rst
pour l’ajouter à la documentation
Plutôt qu’un simple fichier, on peut vouloir une section “getting started”.
Je mets habituellement mes images dans un dossier source/images
.
Supposons un fichier source/credits.rst
, le chemin de l’image à spécifier dans la directive .. image::
est relatif au dossier du fichier reStructuredText qui référence l’image.
Sphinx permet des références diverses 1
On référence une page avec le role :doc:
, avec un chemin relatif.
On peut référencer un emplacement “arbitraire” avec le role :ref:
. Pour cela, il faut définir une étiquette (label) avant un titre, une image, ou une table ayant une légende (caption).
On référence les fichiers à télécharger via le role :download:
.
J’utilise un dossier source/documents
pour stocker les documents. Le chemin est relatif au dossier du fichier reStructuredText qui référence le document.
========
Overview
========
Why ntt ?
=========
**ntt** is a library that enable sport videos processing ...
.. only:: builder_html
:download:`ntt presentation at FOSDEM <../documents/2025-02-03_ntt-fosdem.pdf>`
Note
Vous pouvez choisir de déposer vos images et vos fichiers dans le dossier courant pour avoir un chemin plus simple.
Read the docs est la plateforme historique de publication des documentations Python 1 2 3
Read the docs héberge 80 000 projets open source, sert 55 millions de pages par mois et 40 TB de documentation par mois. Il a 100 000 utilisateurs. L’équipe salariée semble composée de 4 personnes 4.
Le code de la plateforme est open source avec ~460 contributeurices.
Read the docs, comme PyPI, a connu une forte augmentation du nombre de projets et d’utilisateurs en 2023 5. 6.
La création d’un compte Read the docs
est possible à partir d’un email / mot de passe ou en s’authentifiant avec un compte github.com
, gitlab.com
ou bitbucket.org
.
La génération de la documentation est déclenchée sur le serveur hébergeant le repository via un webhook 1
Read the docs
peut afficher plusieurs versions de la documentation.
Le tutorial montre :
GitHub
à partir d’un template d’exemple,Read the docs
en s’authentifiant avec GitHub
, ce qui peut se faire également à partir de GitLab
ou Bitbucket
1Read the docs
2.readthedocs.yaml
placé à la racine du repository 3La méthode proposée facilite la création de projets sur Read the docs
et la configuration des webhook associés sur GitHub, mais il est possible de procéder manuellement.
Comment configurer Read the Docs avec un repository sur GitHub, Bitbucket, GitLab, Gitea ou autre : How to manually configure a Git repository integration
.readthedocs.yaml
Exemple du fichier de configuration de la librairie ntt
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
version: 2
# Set the OS, Python version and other tools you might need
build:
os: ubuntu-22.04
tools:
python: "3.9"
jobs:
pre_build:
- sphinx-apidoc -f -T -d 2 -M -o docs/source/api src/ntt
sphinx:
configuration: docs/source/conf.py
# To install the project itself as a Python package using pip
# https://docs.readthedocs.io/en/stable/config-file/v2.html#packages
python:
install:
- method: pip
path: .
extra_requirements:
- dev
Descriptions des éléments du fichier .readthedocs.yaml
ntt
, on génère la documentation automatique de l’API avec sphinx-apidoc
1Pour plus de détails, consulter les documentations ReadTheDocs :
Les documentations strings sont des chaines de caractères qui permettent de documenter le code. 1
Cette chaine de caractère particulière 2 est stockée dans l’attribut __doc__
de l’objet (package, module, classe, fonction, etc).
La docstring
peut être utilisée par Python pour afficher de l’aide 3 4 5
Sphinx peut utiliser les docstrings
pour faire une documentation d’API, …
Plusieurs formats sont supportés pour décrire les arguments, les types et les valeurs de retour.
Le plugin autoDocstring facilite l’écriture de ces docstring
dans l’IDE vscode.
Format | configuration du plugin autoDocstring |
---|---|
reStructuredText / sphinx | one-line-sphinx |
numpy | numpy |
Le format google est souvent considéré comme le plus lisible, voir les exemples ci-après.
C’est le format historique.
def extract_last_frame(
video_path_in: str, video_name_in: str, frame_path_out: str, frame_name_out: str
) -> str:
"""Extracts the last frame of a given video.
:param str video_path_in: path to the folder conataining the input video
:param str video_name_in: name of the input video
:param str frame_path_out: path to the folder conataining the output frame
:param str frame_name_out: name of the output frame
:return str: full path of the output frame
"""
pass
Note
Je n’ai pas retrouvé de documentation claire de ce format, à défaut voir : Describing code in Sphinx
C’est le format par défaut pour le plugin vscode autoDocstring
.
def extract_last_frame(
video_path_in: str, video_name_in: str, frame_path_out: str, frame_name_out: str
) -> str:
"""Extracts the last frame of a given video.
Args:
video_path_in (str): path to the folder conataining the input video
video_name_in (str): name of the input video
frame_path_out (str): path to the folder conataining the output frame
frame_name_out (str): name of the output frame
Returns:
str: full path of the output frame
"""
pass
Note
Un autre format couramment utilisé (dans la communauté Calcul).
def extract_last_frame(
video_path_in: str, video_name_in: str, frame_path_out: str, frame_name_out: str
) -> str:
"""Extracts the last frame of a given video.
Parameters
----------
video_path_in : str
path to the folder conataining the input video
video_name_in : str
name of the input video
frame_path_out : str
path to the folder conataining the output frame
frame_name_out : str
name of the output frame
Returns
-------
str
full path of the output frame
"""
pass
Note
La directive code-block permet d’insérer une section de code, elle a plus d’options que la directive highlight, par ex :emphasize-lines:
.
On peut aussi utiliser ``setrootns`` et ``defaultns`` mais c'est plus verbeux.
.. code-block:: bash
:emphasize-lines: 2,3,9,17,18,20
$ xmllint --shell ISRCTN17072692-internal.xml
/ > setrootns
/ > dir
DOCUMENT
version=1.0
URL=ISRCTN17072692-internal.xml
standalone=true
/ > xpath //defaultns:trialCentres/defaultns:trialCentre/defaultns:name
Object is a Node Set :
Pygments est la librairie Python qui réalise la coloration syntaxique de code.
Elle supporte 580 langages et formats de texte 1.
Elle offre plusieurs styles d’affichage 2 :
autodoc
et napoleon
sont des extensions intégrées à Sphinx : il n’y a pas de code supplémentaire à installer.
autodoc automatise l’extraction des documentations strings (docstrings
) du package. L’extension apporte plusieurs directives, dont :
.. automodule:: => documenter un module
.. autoclass:: => documenter une classe
.. autofunction:: => documenter une fonction
napoleon ajoute le support des docstrings au format numpy et google.
autodoc
et napoleon
doivent être déclarées dans conf.py
:
On peut insérer manuellement une docstring avec les directives autodoc
:
La commande sphinx-apidoc
1 peut générer une documentation complète d’API
à l’aide des directives autodoc
:
$ sphinx-apidoc -f -T -d 2 -M -o docs/source/api src/ntt
$ ls -1 source/api/
ntt.draw.rst
ntt.frames.rst
ntt.rst
...
-f
: Force overwriting of any existing generated files-T
: Do not create a table of contents file 2-d 2
: Maximum depth for the generated table of contents file-M
: Put module documentation before submodule documentation-o
: Directory to place the output filessrc/ntt
: path to a Python package to documentInclure une référence vers le fichier généré comme point d’entrée de la documentation d’API
du package, ici source/api/ntt.rst
, dans la documentation.
Exemple d’inclusion dans le fichier racine index.rst
1 :
L’extension intégrée sphinx.ext.intersphinx permet d’ajouter des références 1 vers des documentations externes :
:external:
Déclarer l’extension et définir les documentations externes dans le dictionnaire intersphinx_mapping
dans le fichier conf.py
.
On peut ensuite ajouter des liens vers la documentation Python par exemple :
On peut mettre un lien vers la documentation d’une fonction :
Pour faire référence à la définition présente dans la documentation Python
du module re
:
Warning
On ne peut pas utiliser le role :doc:
avec intersphinx
1
Permet l’intégration de notebooks à la documentation 1 2
nbsphinx
is a Sphinx extension
that provides a source parser for *.ipynb
filesSphinx extension
built on nbsphinx
that allows you to include Jupyter notebooks that sit outside your sphinx source directory in your documentation⇨ L’ajout de nbsphinx_widgets_path = ''
a supprimé le warning suivant :
Lecture des sources... [100%] notebooks/swim_stats
WARNING: nbsphinx_widgets_path not given and ipywidgets module unavailable
⇨ L’installation de ipywidgets
(via pyproject.toml
) a supprimé les warnings sur les différents notebook et le code dans les cellules est syntaxiquement coloré.
/home/fconil/AMIGO/dockerisation/ntt/docs/source/notebooks/Easing_effets_visuels_3.nblink:: WARNING: Le nom du l'analyseur Pygments 'ipython3' est inconnu
/home/fconil/AMIGO/dockerisation/ntt/docs/source/notebooks/draw_bbox_with_ntt.nblink:: WARNING: Le nom du l'analyseur Pygments 'ipython3' est inconnu
/home/fconil/AMIGO/dockerisation/ntt/docs/source/notebooks/draw_cycles_in_perspective.nblink:: WARNING: Le nom du l'analyseur Pygments 'ipython3' est inconnu
⇨ De nombreuses configurations continent nbsphinx_execute = 'never'
1 ce qui parait souhaitable.
Warning
Faut-il installer ipykernel
, cf nbsphinx installation ? A priori, ça n’a pas semblé nécessaire pour les notebooks de ntt
.
Sphinx-Gallery permet de créer des “galeries HTML” à partir de code Python. 1
À expérimenter
Cette extension est utilisée par matplotlib
Mermaid 1 est une solution qui gagne en popularité pour générer des diagrammes du fait de son intégration à GitLab.
Il y a un conflit entre l’extension nbsphinx et l’extension mermaid 2 : un hack qui a fonctionné avec les deux extensions activées consiste à ajouter nbsphinx_requirejs_path = ''
à conf.py
.
$ pip list
nbsphinx 0.9.3
nbsphinx-link 1.3.0
...
pydata-sphinx-theme 0.15.2
...
Sphinx 7.2.6
sphinx_design 0.5.0
sphinxcontrib-mermaid 0.9.2
Warning
Mermaid manque cruellement d’un affichage correct des erreurs et est plutôt sensible
sequenceDiagram
autonumber
Bob->>Alice: Authentication Request
Alice->>Bob: Authentication Response
Bob->>Alice: dummy
Bob->>Alice: Yet another authentication Request
Alice->>Bob: Yet another authentication Response
Bob->>Alice: dummy
Bob->>Alice: Yet another authentication Request
Alice->>Bob: Yet another authentication Response
PlantUML est un autre outil de génération de graphiques à partir de descriptions textuelles. Créé en 2010, facile à utiliser, il nécessite Java, graphviz et le téléchargement du jar PlantUML 1. Il a une extension Sphinx sphinxcontrib.plantuml.
J’ai pu le faire fonctionner sur Read the docs en suivant les informations de l’issue 9958: PlantUML can’t be executed. Java missing?. 2
Pour le test, j’ai téléchargé manuellement le jar PlantUML que j’ai intégré au projet. Il serait préférable de le faire télécharger par Read the Docs.
├── docs
│ ├── build
│ ├── make.bat
│ ├── Makefile
│ ├── requirements.txt
│ └── source
│ ├── conf.py
│ ├── diagrams
│ │ └── sequence-diagram.rst
│ ├── diagrams.rst
│ ├── index.rst
│ └── utils
│ └── plantuml-lgpl-1.2024.4.jar
Toujours sur la base de l’issue 9958, j’ai ajouté la configuration suivante au fichier Sphinx conf.py
autonumber 10 10 "<b>[000]"
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response
autonumber stop
Bob -> Alice : dummy
autonumber resume "<font color=red><b>Message 0 "
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response
autonumber stop
Bob -> Alice : dummy
autonumber resume 1 "<font color=blue><b>Message 0 "
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response
!theme aws-orange
autonumber 10 10 "<b>[000]"
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response
autonumber stop
Bob -> Alice : dummy
autonumber resume "<font color=red><b>Message 0 "
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response
autonumber stop
Bob -> Alice : dummy
autonumber resume 1 "<font color=blue><b>Message 0 "
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response
Warning
En 2012, l’extension Hieroglyph permettait de créer des slides HTML en reStructuredText avec HTML. Malheureusement, le dernier commit date de 2020-07-04 1 2 et la génération des slides déclenche une exception Jinja et un warning Sphinx.
$ pip install hieroglyph
$ mkdir my-hieroglyph-slides
$ cd my-hieroglyph-slides
$ hieroglyph-quickstart
$ make slides
Running Sphinx v7.2.6
...
done
/home/fconil/Progs/python/sphinx/.venv/lib/python3.10/site-packages/hieroglyph/builder.py:126: RemovedInSphinx80Warning: Sphinx 8 will drop support for representing paths as strings. Use "pathlib.Path" or "os.fspath" instead.
doctree.attributes.get('source')[len(self.srcdir) + 1:].count('/')
generating indices... genindex failed
Theme error:
An error happened in rendering the page genindex.
Reason: UndefinedError("'style' is undefined")
make: *** [Makefile:20: slides] Error 2
Le fichier conf.py
comporte de nombreuses options 1 pour configurer la sortie HTML.
Les thèmes reposent souvent sur ces options qu’il est utile de connaître, parmi celles-ci :
Option HTML | Exemple | Description |
---|---|---|
html_theme |
pydata_sphinx_theme |
Identifiant du thème à appliquer |
html_theme_options |
{ 'show_prev_next': False } |
Options spécifiques au thème |
html_logo |
'images/logo_liris.png' |
Logo de la documentation |
html_css_files |
['custom.css'] |
Liste de fichiers de styles |
Le thème par défaut, pour la documentation au format HTML, est alabaster
1 2. il est utilisé par la librairie Requests.
Vous pouvez découvrir des thèmes complémentaires sur le site sphinx-themes.org.
Le thème Read the Docs est un thème classique pour un projet Python.
Installer le thème via pip
:
ou via le fichier pyproject.toml
:
puis déclarer le thème installé dans le fichier conf.py
:
Le thème PyData semble avoir plus de richesse dans les possibilités de configuration et de présentation. 1 2
Le thème peut utiliser sphinx-design 1 2 pour ajouter des composants d’interface utilisateur 3 et améliorer la création de contenus.
Il faut installer le package sphinx-design
:
et déclarer l’extension sphinx_design
dans le fichier conf.py
Standard
Avec Sphinx Design Components
:html_theme.sidebar_secondary.remove:
.. raw:: html
<style type="text/css">
h1 {display: none;}
.bd-main .bd-content .bd-article-container {max-width: 100%;}
.big-font {font-size: var(--pst-font-size-h4); color: var(--pst-color-primary)}
.video_wrapper.align-center {margin: auto;}
.bd-footer-article{display: none;}
</style>
ntt
===
.. rst-class:: big-font
``ntt`` is a modular video processing pipeline that has been used on swimming and table tennis
.. grid::
.. grid-item-card::
:img-top: images/Mondial_Ping-Men_s_Singles-Round_4-Kenta_Matsudaira-Vladimir_Samsonov-57.jpg
:img-alt: "Championnats du monde de tennis de table, Paris. Huitième de finale simple homme. Kenta Matsudaira vs Vladimir Samsonov"
"Championnats du monde de tennis de table, Paris. Huitième de finale simple homme. Kenta Matsudaira vs Vladimir Samsonov" by `Pierre-Yves Beaudouin`_ is licensed under `CC BY-SA 3.0`_
.. grid-item-card::
:img-top: images/Nuoto5.jpg
:img-alt: "Nuotatore in vasca"
"Nuotatore in vasca" by `Lorenzo Massacci`_ is licensed under CC-BY-SA-2.0
.. toctree::
:maxdepth: 2
:hidden:
getting-started
API Reference <api/ntt>
notebooks
credits
.. _Pierre-Yves Beaudouin: https://commons.wikimedia.org/wiki/User:Pyb
.. _CC BY-SA 3.0: https://creativecommons.org/licenses/by-sa/3.0/
.. _Lorenzo Massacci: https://www.flickr.com/photos/281203/
Ce changement 1 est implémenté dans le fichier index.rst
:
:html_theme.sidebar_secondary.remove:
⇨ supprime la Secondary Sidebar 2.. raw:: html
⇨ supprime le titre de niveau 1, ntt.. rst-class:: big-font
⇨ applique le style CSS big-font
au paragraphe qui suit.. grid::
, .. grid-item-card::
⇨ définissent les composants grid
et card
3:hidden:
⇨ désactive, pour cette page, l’affichage de la table des matières définie plus basOn dirait que l’on ne peut prendre qu’un nombre très restreint de “modes de colorations Pygments”, et même pas tous ceux de “accessible pygments styles” => faire une issue PyData ?
Le thème Furo est un thème assez récent 1
Installer le thème via pip
:
ou via le fichier pyproject.toml
:
puis déclarer le thème installé dans le fichier conf.py
:
MyST étend le Markdown pour la communication et la publication scientifiques et techniques.
Sphinx utilise reStructuredText
par défaut mais peut intégrer du markdown avec l’extension MyST-Parser 1
Comme pour de nombreuses extensions, on installe le package myst-parser
et on déclare l’extension myst_parser
dans le fichier conf.py
On peut ensuite ajouter des pages markdown dans les sources.
La directive code-block
a bien fonctionné.
Le getting started de myst-parser présente une syntaxe 1 qui n’est pas supportée par Sphinx / myst-parser par défaut.
Sphinx / myst-parser fonctionne de base avec la syntaxe suivante 2 :
Il faut ajouter l’option myst_enable_extensions
3 au fichier conf.py
pour que la syntaxe callout / admonitions soit supportée 4 :
Pour créer des tables, on peut utiliser la syntaxe Github Flavoured Markdown
la syntaxe à base de callout / admonitions
ou des directives qui semblent liées à des directives reStructuredText
$ sphinx-quickstart --sep -p ntt --suffix=.md docs
Chemin racine sélectionné : docs
> Nom(s) de(s) l'auteur(s): Romain Vuillemot
> Version du projet []:
> Langue du projet [en]:
Fichier en cours de création /<project-path>/ntt/docs/source/conf.py.
Fichier en cours de création /<project-path>/ntt/docs/source/index.md.
Fichier en cours de création /<project-path>/ntt/docs/Makefile.
Fichier en cours de création /<project-path>/ntt/docs/make.bat.
Terminé : la structure initiale a été créée.
Vous devez maintenant compléter votre fichier principal /<project-path>/ntt/docs/source/index.md
et créer d'autres fichiers sources de documentation. Utilisez le Makefile pour construire la documentation comme ceci :
make builder
où « builder » est l'un des constructeurs disponibles, tel que html, latex, ou linkcheck.
Quarto que j’utilise pour ces slides utilise le Markdown Pandoc qui est une variante semble-t-il différente de MyST.
Read the Docs recommande la méthodologie Diátaxis pour architecturer la documentation.
Un projet peut avoir plusieurs versions de documentations sur Read the Docs 1.
$ git push origin --tags
Énumération des objets: 1, fait.
Décompte des objets: 100% (1/1), fait.
Écriture des objets: 100% (1/1), 206 octets | 206.00 Kio/s, fait.
Total 1 (delta 0), réutilisés 0 (delta 0), réutilisés du pack 0
To github.com:fconil/Sphinx-with-PlantUML-on-RTD.git
* [new tag] 0.1.0 -> 0.1.0
Via le Webhook créé sur GitHub, Read the Docs est notifié du nouveau tag créé.
Si le tag suit le semantic versionning, Read the Docs positionne une étiquette “stable” sur le dernier tag.
La branche de développement courante, par défaut : main
, est référencée par l’étiquette “latest”.
Ci-contre : le panneau d’administration de versions de Read the Docs
sphinx-lint 1 est un linter pour détecter les erreurs de syntaxe reStructuredText. Installation :
On peut exécuter sphinx-lint
sur un fichier, un dossier :
$ sphinx-lint news.rst
news.rst:4043: role missing opening tag colon ( issue:`). (missing-space-before-role)
news.rst:275: trailing whitespace (trailing-whitespace)
On peut intégrer sphinx-lint
à un hook git de pre-commit. Extrait du fichier .pre-commit-config.yaml
de CPython utilisé par le package Python pre-commit]
À étudier
Je n’ai pas eu à le faire mais c’est un point à creuser.
Je suis tombée par hasard sur l’article The Power of Sphinx: Integrating Jinja with RST, à partir d’un lien dans le code de la documentation CircuitPython
À étudier
Le guide Écrire une extension Sphinx
Développer une extension hello world
Sphinx est utilisé par des projets écrits dans d’autres langages. Peut-être plus des langages historiques comme C, C++, … Par exemple :
Les domaines Sphinx, rassemblent les directives
et les roles
spécifiques à un langage.
Par défaut, Sphinx propose les domaines C, C++, JavaScript, Mathematics, Python et reStructuredText
.. c:function:: void hook_register(name, int (*callback)(...))
.. c:macro:: `LV_COLOR_DEPTH` ``8``: 3 x image width x image height
.. cpp:class:: template<K> nsTHashSet<K>
.. cpp:function:: V& LookupOrInsert(KeyType aKey, Args&&... aArgs) const
.. cpp:type:: std::vector<int> List
.. js:module:: RhinoCompute
.. js:function:: RhinoCompute.Extrusion.getWireframe(thisExtrusion, multiple=false)