Discourse verwendet lefthook für Git-Hooks und bin/lint als zentrale CLI-Eingabeaufforderung, um dieselben Prüfungen manuell auszuführen.
Wenn du in einem lokalen Klon arbeitest, installiere die Hooks einmalig:
pnpm install
pnpm lefthook install
Danach werden gestufte Dateien automatisch bei git commit geprüft.
Der Hauptbefehl: bin/lint
Verwende bin/lint, wenn du die konfigurierten Linter des Repositories selbst ausführen möchtest, anstatt auf den Pre-Commit-Hook zu warten.
Häufige Beispiele:
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
Was jeder Modus tut
bin/lint: Prüft alle unterstützten Dateien im Repositorybin/lint path/to/file ...: Prüft nur die angegebenen Dateienbin/lint --recent: Prüft Dateien, die in den letzten 50 Commits geändert wurden, sowie nicht nachverfolgte Dateienbin/lint --staged: Prüft nur gestufte Dateienbin/lint --unstaged: Prüft nur nicht gestufte Dateienbin/lint --wip: Prüft gestufte Dateien, nicht gestufte Dateien und Dateien, die sich seitmaingeändert habenbin/lint --fix ...: Führt die Auto-Fixers für die ausgewählten Dateien ausbin/lint --fix: Führt alle verfügbaren Auto-Fixers im gesamten Repository ausbin/lint --verbose: Gibt die zugrunde liegenden lefthook-Befehle aus
Wenn du explizite Dateien übergibst, filtert bin/lint diese auf unterstützte, prüfbare Dateitypen, bevor es lefthook aufruft.
Markdown-Dokumentationsdateien sind derzeit nicht Teil von
bin/lint, daher meldetbin/lint path/to/doc.md, dass es keine passenden Dateien zum Prüfen gibt.
Was geprüft wird
Die genaue Konfiguration befindet sich in lefthook.yml. Zum Zeitpunkt der Erstellung umfasst bin/lint:
Ruby
**/*.{rb,rake,thor}- Ruby-Skripte unter
bin/**/* Gemfile
Prüfungen:
rubocopsyntax_tree(stree check)
JavaScript-, GJS-, CSS- und SCSS-Formatierung
app/assets/stylesheets/**/*.{css,scss}frontend/**/*.{js,gjs,scss,css,cjs,mjs}- Entsprechende Asset-Dateien von Plugins und Themes
Prüfungen:
prettier/pprettier
JavaScript- und GJS-Prüfung
frontend/**/*.{js,gjs}- Entsprechende JS-Dateien von Plugins und Themes
Prüfungen:
eslint(mit dentemplate-*-Regeln voneslint-plugin-ember, die den Template-Anteil der.gjs-Dateien abdecken)
SCSS-Prüfung
app/assets/stylesheets/**/*.scss- Entsprechende SCSS-Dateien von Plugins und Themes
Prüfungen:
stylelint
YAML- und Locale-Prüfungen
**/*.{yaml,yml}außerconfig/database.yml**/{client,server}.en.yml
Prüfungen:
yaml-lintscript/i18n_lint.rb
Typprüfung
Wenn du bin/lint ohne Dateiargumente ausführst, führt die Repository-weite Prüfung auch Folgendes aus:
pnpm lint:types
Dies ist die Glint/TypeScript-artige Prüfung für die JavaScript-Typpinformationen von Discourse.
![]()
bin/lint path/to/fileund der Pre-Commit-Hook führen die vollständige Typprüfung nicht aus. Verwende schlichtesbin/lint, wenn du den vollständigen Repository-weiten Lint-Durchlauf möchtest.
Was automatisch behoben werden kann
bin/lint --fix kann viele Probleme automatisch beheben, aber nicht alle.
Auto-Fix ist konfiguriert für:
prettier --writeeslint --fixstylelint --fixrubocop -Asyntax_tree(stree write)
In der Praxis bedeutet das, dass --fix Folgendes neu formatieren und umschreiben kann:
- Ruby
- JavaScript / GJS
- CSS / SCSS
Diese Prüfungen werden nicht durch bin/lint --fix automatisch behoben:
- YAML-Syntaxvalidierung
- i18n-Prüfung für
client.en.yml/server.en.yml - Glint/Typprüfung
Verhältnis zu Git-Hooks
Der Pre-Commit-Hook verwendet dieselbe lefthook-Konfiguration wie bin/lint, führt sie jedoch nur gegen gestufte Dateien aus.
Das bedeutet:
- Ein Commit kann fehlschlagen, weil gestufte Dateien die Prüfung nicht bestehen
bin/lint --stagedist das nächstliegende manuelle Äquivalent zum Pre-Commit-Hookbin/lint --fix --stagedist eine gute Möglichkeit, genau das zu reparieren, was du gerade committen möchtest
Praktischer Workflow
Für die tägliche Entwicklung sind dies die nützlichsten Befehle:
# Vor dem Commiten einiger geänderter Dateien
bin/lint --fix path/to/file1.rb path/to/file2.gjs
# Prüfe genau das, was der Pre-Commit-Hook prüfen wird
bin/lint --staged
# Räumt alle aktuellen Arbeiten in Bearbeitung auf
bin/lint --fix --wip
# Führt die vollständige Repository-Prüfungssuite aus, einschließlich Typprüfungen
bin/lint
Dieses Dokument ist versioniert - Vorschläge für Änderungen auf GitHub.