Discourse utilise lefthook pour les hooks git, et bin/lint comme point d’entrée CLI principal pour exécuter manuellement les mêmes vérifications.
Si vous travaillez dans un clone local, installez les hooks une seule fois :
pnpm install
pnpm lefthook install
Ensuite, les fichiers mis en scène seront vérifiés automatiquement lors de git commit.
La commande principale : bin/lint
Utilisez bin/lint lorsque vous souhaitez exécuter vous-même les linters configurés pour le dépôt au lieu d’attendre le hook pre-commit.
Exemples courants :
bin/lint
bin/lint path/to/file.rb path/to/file.gjs
bin/lint --recent
bin/lint --staged
bin/lint --unstaged
bin/lint --wip
bin/lint --fix path/to/file.rb
bin/lint --fix --recent
bin/lint --fix
Ce que fait chaque mode
bin/lint: vérifie tous les fichiers pris en charge dans le dépôtbin/lint path/to/file ...: vérifie uniquement les fichiers spécifiésbin/lint --recent: vérifie les fichiers modifiés au cours des 50 derniers commits, ainsi que les fichiers non suivisbin/lint --staged: vérifie uniquement les fichiers mis en scènebin/lint --unstaged: vérifie uniquement les fichiers non mis en scènebin/lint --wip: vérifie les fichiers mis en scène, les fichiers non mis en scène et les fichiers modifiés depuismainbin/lint --fix ...: exécute les correcteurs automatiques pour les fichiers sélectionnésbin/lint --fix: exécute tous les correcteurs automatiques disponibles dans le dépôtbin/lint --verbose: affiche les commandes lefthook sous-jacentes
Lorsque vous passez des fichiers explicites, bin/lint les filtre aux types de fichiers lintables pris en charge avant d’invoquer lefthook.
Les fichiers de documentation Markdown ne font pas actuellement partie de
bin/lint, donc l’exécution debin/lint path/to/doc.mdindiquera qu’il n’y a aucun fichier correspondant à vérifier.
Ce qui est vérifié
La configuration exacte se trouve dans lefthook.yml. Au moment de la rédaction, bin/lint couvre :
Ruby
**/*.{rb,rake,thor}- Scripts Ruby sous
bin/**/* Gemfile
Vérifications :
rubocopsyntax_tree(stree check)
Formatage JavaScript, GJS, CSS et SCSS
app/assets/stylesheets/**/*.{css,scss}frontend/**/*.{js,gjs,scss,css,cjs,mjs}- Fichiers d’actifs correspondants pour les plugins et les thèmes
Vérifications :
prettier/pprettier
Vérification JavaScript et GJS
frontend/**/*.{js,gjs}- Fichiers JS correspondants pour les plugins et les thèmes
Vérifications :
eslint(avec les règlestemplate-*deeslint-plugin-embercouvrant la partie template des fichiers.gjs)
Vérification SCSS
app/assets/stylesheets/**/*.scss- Fichiers SCSS correspondants pour les plugins et les thèmes
Vérifications :
stylelint
Vérifications YAML et locales
**/*.{yaml,yml}saufconfig/database.yml**/{client,server}.en.yml
Vérifications :
yaml-lintscript/i18n_lint.rb
Vérification des types
Lorsque vous exécutez bin/lint sans arguments de fichier, la vérification complète du dépôt est également exécutée :
pnpm lint:types
Il s’agit de la vérification de style Glint/TypeScript pour les informations de type JavaScript de Discourse.
![]()
bin/lint path/to/fileet le hook pre-commit n’exécutent pas la vérification complète des types. Utilisezbin/lintsimple lorsque vous souhaitez la passe complète de vérification à l’échelle du dépôt.
Ce qui peut être corrigé automatiquement
bin/lint --fix peut corriger automatiquement de nombreux problèmes, mais pas tous.
La correction automatique est configurée pour :
prettier --writeeslint --fixstylelint --fixrubocop -Asyntax_tree(stree write)
En pratique, cela signifie que --fix peut reformater et réécrire :
- Ruby
- JavaScript / GJS
- CSS / SCSS
Ces vérifications ne sont pas corrigées automatiquement par bin/lint --fix :
- Validation de la syntaxe YAML
- Vérification i18n pour
client.en.yml/server.en.yml - Vérification Glint/types
Relation avec les hooks git
Le hook pre-commit utilise la même configuration lefthook que bin/lint, mais il s’exécute uniquement sur les fichiers mis en scène.
Cela signifie que :
- un commit peut échouer si les fichiers mis en scène ne passent pas la vérification
bin/lint --stagedest l’équivalent manuel le plus proche du hook pre-commitbin/lint --fix --stagedest un bon moyen de réparer exactement ce que vous êtes sur le point de commiter
Flux de travail pratique
Pour le développement quotidien, voici les commandes les plus utiles :
# Avant de commiter quelques fichiers modifiés
bin/lint --fix path/to/file1.rb path/to/file2.gjs
# Vérifier exactement ce que le hook pre-commit va vérifier
bin/lint --staged
# Nettoyer tout le travail en cours actuel
bin/lint --fix --wip
# Exécuter la suite complète de vérification du dépôt, y compris les vérifications de types
bin/lint
Ce document est versionné - proposez des modifications sur github.