PyConFr 2023.

This commit is contained in:
Julien Palard 2023-02-07 12:27:20 +01:00
commit 5a79d0af79
Signed by: mdk
GPG Key ID: 0EFC1AC1006886F8
3 changed files with 382 additions and 0 deletions

32
Makefile Normal file
View File

@ -0,0 +1,32 @@
SRCS := $(sort $(wildcard *.md))
DEST := $(addprefix output/, $(SRCS:.md=.html))
.PHONY: static
static: $(DEST)
if [ -d static ]; then cp -a static/ output/; fi
output/%.html: %.md
mkdir -p output
sed 's/#!//e;' $< | mdtoreveal /dev/stdin --output $@
.PHONY: rsync
rsync: static
rsync -vah --delete output/ mdk_fr@mdk.fr:/var/www/mdk.fr/$(DEST)/
.PHONY: clean
clean:
rm -fr output
.PHONY: entr
entr:
ls -1 *.md | entr -nr $(MAKE) serve
.PHONY: serve
serve: static
python3 -m http.server -d output/
.PHONY: test
test:
if [ -f test.py ]; then \
python test.py *.md; \
fi

350
sphinx-lint.md Normal file
View File

@ -0,0 +1,350 @@
# sphinx-lint
<!-- .slide: data-background="static/background.jpg" -->
Un linter pour ta doc.
<br/>
<b>Julien Palard</b>
CPython core dev<br/>
Sysadmin de lAFPy<br/>
hackinscience.org<br/>
<br/>
# Pourquoi ?
Trouver des fautes de frappe dans du rst, ni plus, ni moins.
## Depuis quand ?
```text
Author: Georg Brandl <georg@python.org>
Date: Sat Jan 3 20:30:15 2009 +0000
```
Dans `cpython` dans `Doc/tools/rstlint.py` !
::: notes
Oui oui, Georg, l'auteur de Sphinx-doc.
## Depuis quand, quoi ?
Et dans `cpython` on en avait un autre, `make suspicious`.
Bien connu pour ses faux positifs.
::: notes
Lui il date du portage de la doc de LaTeX à Sphinx, 2009 aussi.
## La motivation
Remplacer `make suspicious` par un outil qui naurait **aucun** faux positif.
::: notes
Et qui serait rapide !
Parler de la lenteur de `make suspicious`.
## La motivation
Sortir loutil de `cpython/Doc/tools` pour que tout le monde puisse l'utiliser.
# Parsons du rst !
## Le reStructuredText
Le balisage :
```text
*En italique*
**En gras**
`Interprété` (dont le rôle peut changer)
``litéral``
Lien_
`Autre lien`_
`Encore un lien <https://...>`_
`Un lien anonyme <https://...>`__
```
## Le reStructuredText
Les textes interprétés :
```text
`while` C'est du texte interprété.
:keyword:`while` Du texte interprété avec un « role marker »
`while`:keyword: Ça lui donne un sens particulier.
```
## Le reStructuredText
Donc oui le balisage et le texte interprété peuvent jouer le même rôle :
```text
*ça* c'est pareil que :emphasis:`ça`.
**ça** c'est pareil que :strong:`ça`.
``ça`` c'est pareil que :literal:`ça`.
```
::: notes
Mais comme en Python on a plus de méthodes que d'opérateurs…
En rst on a plus de rôles que de balises !
## Le reStructuredText
Les directives :
```text
.. image:: Lenna.jpg
.. important::
Elle sappelle Lena Sjööblom.
```
::: notes
Je prends un gros raccourci : les directives ne sont qu'un bout de
tout le balisage "explicite" comme les commentaires, les notes de bas
de page, ...
## Parsons du rst !
C'est facile ! Ou pas…
Exemple, comment on interprète :
```text
*2 * x *a **b *.txt*
```
::: notes
C'est tout en italique !
## Parsons du rst !
Vous voyez des balises, vous ?
```text
2 * x ** 2 + 3 * x ** 3
a || b
"*" '|' (*) [*] {*} <*> *
2*x a**b O(N**2) e**(x*y)
```
::: notes
Pas le parseur. Mais bon les règles sont bien documentées ♥
Mais on voit que les humains peuvent facilement faire des erreurs ici.
## Parsons du rst !
Regardons du côté des directives :
```text
.. code-block:: python
def fib(x):
if n in (0, 1):
return 1
x = n // 2
return fib(x - 1) * fib(n - x - 1) + fib(x) * fib(n - x)
```
::: notes
Une directive peut avoir un corps, ici du code.
## Parsons du rst !
Regardons du côté des directives :
```text
.. image:: Lenna.jpg
:height: 330px
:width: 330px
:scale: 50 %
:alt: Lenna Sjööblom
```
::: notes
Une directive peut avoir des options mais **pas de corps**.
## Parsons du rst !
Regardons du côté des directives :
```text
.. csv-table:: Domaines d'organismes publics
:header: "name", "http_status", "https_status"
:widths: 20, 10, 10
cgf.pf, 200, 200
dun.fr, 200, 200
caf.pf, 200, 200
aze.fr, 200, 200
```
::: notes
Une directive peut avoir des options **et** un corps.
## Quiz !
```text
.. code-block:: python
items = ["titi", "tata", "toto"]
print(*items)
.. important::
items = ["titi", "tata", "toto"]
print(*items)
```
## Quiz !
```text
.. csv-table:: Domaines d'organismes publics
:header: "name", "http_status", "https_status"
:widths: 20, 10, 10
cgf.pf, 200, 200, OK
dun.fr, 200, 200, OK
.. csv-table:: Domaines d'organismes publics
:header: "name", "http_status", "https_status"
:widths: 20, 10, 10
caf.pf
aze.fr
```
::: notes
Les valeurs manquantes sont moins graves que les valeurs surnuméraires.
## Ne parsons pas de rst...
De toutes façons `sphinx-lint` ne cherche pas du rst valide, il cherche du rst invalide !
# Cest utilisé ?
- CPython (depuis longtemps), devguide, peps, traductions, ...
- neo4j-python-driver
- pandas
- Spyder IDE
- Sympy
- Sphinx !!!
# Ça trouve des bugs ?
## Dans les PEPS
```diff
-`vcs <https://pythonhosted.org/vcs/>` library as
+`vcs <https://pythonhosted.org/vcs/>`_ library as
```
## Dans sympy
```diff
-... autoclass:: sympy.assumptions.predicates.order
+.. autoclass:: sympy.assumptions.predicates.order
```
```diff
-:data:``sympy.parsing.sympy_parser.transformations``
+:data:`sympy.parsing.sympy_parser.transformations`
```
```diff
- `KanesMethod`` objects.
+ ``KanesMethod`` objects.
```
## Dans la traduction
> I just run the tool against library/ as a whole and it spit out a loooot of messages, so I thought that maybe it didn't work with our po files.
## Dans la traduction
> After closer inspecting two of these files I found that they were indeed proper errors
```diff
-"datetime`. :const:`MINYEAR` es` `1``."
+"datetime`. :const:`MINYEAR` es ``1``."
```
... notes
Ils ont réparé plus de 300 erreurs !
# Et les faux positifs ?
Ils se cachent bien :
- Aucun dans la doc de Sphinx, cest un bon test (beaucoup de rst dans du rst).
- Aucun dans la doc de Python, cest un bon test (286k lignes de rst).
# OK, vendu !
Mais comment ça sutilise ?
```text
$ python -m pip install sphinx-lint
$ sphinx-lint
```
# Bouh cest pas packagé pour [distrib]
Bah, fais-le.
# Questions ?
- <s>Twitter : [@sizeof](https://twitter.com/sizeof)</s>
- Mastodon : [@mdk@mamot.fr](https://mamot.fr/@mdk)
- XMPP : mdk@chapril.org
- HTTP : https://mdk.fr
- SMTP : julien@python.org
- Whatsapp : HAHAHA jamais.
- Instagram : Et puis quoi encore ?
- TikTok : Euh, stop maintenant ?

BIN
static/background.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB