Discourse verwendet lefthook für Git-Hooks, und bin/lint als den primären CLI-Einstiegspunkt, um dieselben Prüfungen manuell auszuführen.
Wenn Sie in einer lokalen Kopie arbeiten, installieren Sie die Hooks einmal:
pnpm install
pnpm lefthook install
Danach werden die gestagten Dateien automatisch bei git commit geprüft.
Der Hauptbefehl: bin/lint
Verwenden Sie bin/lint, wenn Sie die für das Repository konfigurierten Linter selbst ausführen möchten, anstatt auf den Pre-Commit-Hook zu warten.
Häufige Beispiele:
bin/lint
bin/lint pfad/zu/datei.rb pfad/zu/datei.gjs
bin/lint --recent
bin/lint --staged
bin/lint --unstaged
bin/lint --wip
bin/lint --fix pfad/zu/datei.rb
bin/lint --fix --recent
bin/lint --fix
Was die einzelnen Modi bewirken
bin/lint: Lintet alle unterstützten Dateien im Repositorybin/lint pfad/zu/datei ...: Lintet nur die angegebenen Dateienbin/lint --recent: Lintet Dateien, die in den letzten 50 Commits geändert wurden, zuzüglich nicht verfolgter Dateienbin/lint --staged: Lintet nur gestagte Dateienbin/lint --unstaged: Lintet nur nicht gestagte Dateienbin/lint --wip: Lintet gestagte Dateien, nicht gestagte Dateien und Dateien, die seitmaingeändert wurdenbin/lint --fix ...: Führt die automatischen Korrekturen für die ausgewählten Dateien ausbin/lint --fix: Führt alle verfügbaren automatischen Korrekturen im gesamten Repository ausbin/lint --verbose: Gibt die zugrunde liegenden lefthook-Befehle aus
Wenn Sie explizite Dateien übergeben, filtert bin/lint diese auf unterstützte lintbare Dateitypen, bevor lefthook aufgerufen wird.
Markdown-Dokumentationsdateien sind derzeit nicht Teil von
bin/lint. Daher meldet die Ausführung vonbin/lint pfad/zu/doc.md, dass keine übereinstimmenden Dateien zum Linting gefunden wurden.
Was wird gelintet
Die genaue Konfiguration befindet sich in lefthook.yml. Zum Zeitpunkt der Erstellung deckt bin/lint Folgendes ab:
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}- passende Plugin- und Theme-Asset-Dateien
Prüfungen:
prettier/pprettier
JavaScript und GJS Linting
frontend/**/*.{js,gjs}- passende Plugin- und Theme-JS-Dateien
Prüfungen:
eslint
GJS Template Linting
frontend/**/*.gjs- passende Plugin- und Theme-
.gjs-Dateien
Prüfungen:
ember-template-lint
SCSS Linting
app/assets/stylesheets/**/*.scss- passende Plugin- und Theme-SCSS-Dateien
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
Typ-Prüfung
Wenn Sie bin/lint ohne Dateinamen-Argumente ausführen, wird auch das vollständige Repository-Lint ausgeführt:
pnpm lint:types
Dies ist die Glint/TypeScript-ähnliche Prüfung für Discurses JavaScript-Typinformationen.
![]()
bin/lint pfad/zu/dateiund der Pre-Commit-Hook führen die vollständige Typenprüfung nicht aus. Verwenden Sie einfachbin/lint, wenn Sie den vollständigen, repositoryweiten Lint-Durchlauf wünschen.
Was kann automatisch korrigiert werden
bin/lint --fix kann viele Probleme automatisch beheben, aber nicht alle.
Die automatische Korrektur ist konfiguriert für:
prettier --writeeslint --fixember-template-lint --fixstylelint --fixrubocop -Asyntax_tree(stree write)
In der Praxis bedeutet dies, dass --fix Folgendes neu formatieren und umschreiben kann:
- Ruby
- JavaScript / GJS
- CSS / SCSS
Diese Prüfungen werden von bin/lint --fix nicht automatisch korrigiert:
- YAML-Syntaxvalidierung
- i18n-Linting für
client.en.yml/server.en.yml - Glint/Typenprüfung
Beziehung zu Git Hooks
Der Pre-Commit-Hook verwendet dieselbe lefthook-Konfiguration wie bin/lint, führt diese jedoch nur gegen gestagte Dateien aus.
Das bedeutet:
- Ein Commit kann fehlschlagen, weil gestagte Dateien das Linting nicht bestehen
bin/lint --stagedist das nächstgelegene manuelle Äquivalent zum Pre-Commit-Hookbin/lint --fix --stagedist eine gute Möglichkeit, genau das zu reparieren, was Sie gerade committen wollen
Praktischer Workflow
Für die tägliche Entwicklung sind dies die nützlichsten Befehle:
# Bevor Sie ein paar geänderte Dateien committen
bin/lint --fix pfad/zu/datei1.rb pfad/zu/datei2.gjs
# Prüfen Sie genau das, was der Pre-Commit-Hook prüfen wird
bin/lint --staged
# Bereinigen Sie alle aktuellen, in Arbeit befindlichen Änderungen
bin/lint --fix --wip
# Führen Sie die vollständige Repository-Lint-Suite aus, einschließlich Typenprüfungen
bin/lint
Dieses Dokument ist versioniert – schlagen Sie Änderungen auf github vor.