Vous voulez contribuer au code de BookWyrm, c’est génial ! S'il y a un problème ouvert que vous souhaitez corriger, il est préférable de laisser un commentaire dans la conversation pour que le travail ne soit pas dupliqué. Essayez de limiter la portée des pull requests et de concentrer votre attention sur un seul sujet. Comme ça elle est plus facile à relire, et si une partie a besoin de changements elle ne retardera pas les autres parties.
Si vous ne savez pas comment régler un problème, ou que vous n'êtes plus disponible pour le faire, ne vous en faites pas. Laissez simplement un commentaire sur la pull request et nous allons prendre le relais 💖.
Les pull requests doivent valider tous les tests automatiques avant d'être fusionnées, ça inclut des vérifications de style, des linters globaux, un test de sécurité et des tests unitaires.
There are several ./bw-dev commands you may find helpful for linting and testing prior to pushing your pull request. See Command Line Tool for all the options available.
Nous utilisons EditorConfig pour maintenir la cohérence de l’indentation et des fins de lignes.
BookWyrm uses ruff for both code linting (checking for errors) and formatting (ensuring code style is consistent). All new pull requests are checked with GitHub actions, and you can automatically fix code style problems by running ./bw-dev ruff. For linting errors, you can try ./bw-dev ruff-fix to automatically fix errors, though this may not always be possible.
Ruff linting warnings must be addressed before pull requests are merged, but it's a judgement call if the suggestion should be used, or the warning suppressed. See the Ruff projects's documentation on suppressing warnings using code comments.
The BookWyrm project previously used Black for formatting and Pylint for linting. You may notice artefacts such as pylint suppression comments in older code. We are still refining our linting rules so if something seems confusing or not quite right, don't hesitate to ask for advice.
We are gradually rolling out static type checking across the BookWyrm code base. This is a long term project. Whilst it is not compulsory to formally define types in new code, it is strongly recommended. This will help to avoid some more subtle bugs that may not be identified in tests.
We currently use mypy as our static type checker. Find out more about how to use mypy at the mypy project documentation.
Votre pull request sera également vérifiée par le linter curlylint pour les gabarits Django.
Nous utilisons stylelint pour vérifier toutes les règles CSS. Comme pour Pylint vous pouvez désactiver le stylelint pour une règle particulière, mais vous aurez besoin d'une bonne justification pour le faire.
ESLint vérifie toute modification effectuée en JavaScript. Si ESLint n'aime pas votre JavaScript (même fonctionnel), vérifiez le message linter pour le problème exact.
BookWyrm aspire à être aussi inclusif et accessible que possible.
Lorsque vous contribuez du code, vérifiez la checklist Inclusive Web Design avant de proposer votre pull request. Pour des conseils sur l'accessibilité, A11Y-101 est également une ressource utile. For information on how to make your page templates multi-lingual, see the Translations section.
Quelques particularités à garder en tête pour la contribution au code de BookWyrm :
input[type="checkbox"] ou input[type="radio"] qu’à l'intérieur de <label><label>, le <label> doit être placé après l'élément auquel il se rapporte<button> pour tout ce qui a pour but de déclencher une action JavaScript (par ex. cacher ou révéler un formulaire) ou envoyer une requête POST (par ex. soumettre un formulaire)<a> pour tout ce qui déclenche une requête GET. Habituellement, un lien (<a>) ne doit pas avoir l’apparence d’un bouton (class="button"), bien qu'il y ait quelques exceptions comme les boutons "Annuler". En cas de doute, demandez conseil dans votre pull requestBookWyrm is an international project and aims to be inclusive of as many languages as possible. All user-facing messages and templates should follow the advice on translations and gendered language.