Code style #200
Labels
No labels
devtype -- backend
devtype -- docs
devtype -- frontend
devtype -- user interface
difficulty -- easy
difficulty -- hard
difficulty -- normal
Doing
domain -- bda
domain -- bds
domain -- cof
domain -- core
domain -- kfet
Good first issue
priority -- high
priority -- low
priority -- medium
priority -- staff-wanted
status -- development
status -- discussion
status -- need review
status -- production
status -- ready to merge
status -- todo
To Do
type -- bug
type -- hygiene
type -- improvement
type -- new feature
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: DGNum/gestioCOF#200
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Situation actuelle
from .. import ..
par module + tout les objets derrière,Discussions
Imports
Les lignes d'imports sont généralement sources de conflits lors des merges.
Pour réduire ça, on pourrait utiliser la convention de n'importer qu'un seul objet par ligne.
Ça peut faire des préambules un peu long, mais :
l'affichage après celles-ci.
On peut automatiser ça avec un plugin comme isort.
Il peut en plus classer les imports par type, améliorant la lisibilité.
Note : Django utilise isort.
Linter
Chacun est libre de formater le code à sa sauce : flake8 ne vérifie
quela PEP8, qui autorisede multiples formatages pour une même ligne de code.
Je vous propose d'utiliser à nouveau un plugin : black.
L'intérêt de ce plugin : rien n'est négociable et son formatage est déterministe (ou presque).
Ainsi, Michelle sur sa machine peut obtenir le même formatage d'un module que Michel sur une autre machine.
Cela réduit énormément le nombre de conflits, et ça permet de moins se poser de questions qui n'ont
pas un grand intérêt !
Pour cette raison, black est de plus en plus utilisé dans la communauté Python open-source.
L'intégration aux IDEs, éditeurs se passent généralement bien.
Seul point critique : il faut avoir python3.6 d'installer pour le faire tourner.
Nombre de colonnes
On voit l'intérêt des 80 colonnes : 2 fichiers ouverts sur un même (petit) écran, et c'est bien !
Mais c'est quand même très petit... Les auteurs de black ont l'air d'accord et propose, par défaut, d'utiliser
une largeur de 88 colonnes.
Avec ça on peut encore ouvrir deux fichiers côte-à-côte sur un 14" ☺
Propositions
black
Ajout de black à la CI en --check
Au préalable, l'appliquer à toute la codebase, se fait "rapidement" :
master
,→ Et ça sans conflit supplémentaire !
isort
colonnes
un bon compromis pour du 14" en moyen/gros caractère avec 2 fichiers
à voir
On pourrait ajouter isort et black dans un hook de pre-commit, mais j'ai un peur que ça
soit frustrant pour les nouveaux arrivants de pas réussir à commit pour ces raisons.
(
git commit -n
ferait l'affaire)Si des solutions sont viables et très faciles à utiliser alors on pourrait les intégrer
au projet pour avoir du hook au pre-commit, etc.
Ça reste à étudier...
Je suis plutôt favorable à
black
(sur 88c), ça évite de devoir corriger du PEP8 partout à chaque fois... Par contre pourisort
, je vois l'apport pour les conflits mais je suis plus dubitatif sur le reste... J'ai l'impression que pas mal de conflits peuvent être réglés rien qu'en utilisantisort
sans forcément mettre un import par ligne.C'est vrai qu'on peut s'en contenter.
Pour info : https://github.com/timothycrosley/isort#multi-line-output-modes
Sur authens, j'avais dû mettre le 5.
Sur #200, j'ai finalement dû sortir la 3 pour la compatibilité avec
black
.On aurait pu run black puis isort dans cet ordre, mais bon c'est facile à "obliger" dans un script. Plus compliqué si tu commences à les run à la main.
mentioned in merge request !317
mentioned in commit
ec287c8a3b
closed via merge request !317