Discourse verwendet lefthook für Git-Hooks und bin/lint als Haupt-CLI-Einstiegspunkt, um dieselben Prüfungen manuell auszuführen.
Wenn du in einem lokalen Clone arbeitest, installiere die Hooks einmalig:
pnpm install
pnpm lefthook install
Danach werden gestufte Dateien bei git commit automatisch geprüft.
Der Hauptbefehl: bin/lint
Verwende bin/lint, wenn du die im Repository konfigurierten Linter 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: Lintet alle unterstützten Dateien im Repositorybin/lint path/to/file ...: Lintet nur die angegebenen Dateienbin/lint --recent: Lintet Dateien, die in den letzten 50 Commits geändert wurden, sowie nicht getrackte Dateienbin/lint --staged: Lintet nur gestufte Dateienbin/lint --unstaged: Lintet nur unggestufte Dateienbin/lint --wip: Lintet gestufte Dateien, unggestufte Dateien und Dateien, die seitmaingeändert wurdenbin/lint --fix ...: Führt die Auto-Fixer für die ausgewählten Dateien ausbin/lint --fix: Führt alle verfügbaren Auto-Fixer über das gesamte Repository ausbin/lint --verbose: Gibt die zugrunde liegenden lefthook-Befehle aus
Wenn du explizite Dateien übergibst, filtert bin/lint diese auf unterstützte, lintbare Dateitypen, bevor es lefthook aufruft.
Markdown-Dateien werden nur unter
docs/developer-guides/gelintet. Wenn dubin/lint path/to/doc.mdfür eine andere Markdown-Datei ausführst, wird gemeldet, dass nichts gelintet wurde.
Was gelintet wird
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}- entsprechende Asset-Dateien von Plugins und Themes
Prüfungen:
prettier/pprettier
JavaScript- und GJS-Linting
frontend/**/*.{js,gjs}- entsprechende JS-Dateien von Plugins und Themes
Prüfungen:
eslint(mit dentemplate-*-Regeln voneslint-plugin-ember, die den Template-Anteil von.gjs-Dateien abdecken)
SCSS-Linting
app/assets/stylesheets/**/*.scss- entsprechende SCSS-Dateien von Plugins und Themes
Prüfungen:
stylelint
YAML- und Locale-Prüfungen
**/*.{yaml,yml}, mit Ausnahme vonconfig/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 das vollständige Repository-Linting auch Folgendes aus:
pnpm lint:types
Dies ist die Glint/TypeScript-artige Prüfung für die Typinformationen von Discourse. Sie läuft im strict-Modus von TypeScript und generiert auch die veröffentlichten Deklarationen.
![]()
bin/lint path/to/fileund der Pre-Commit-Hook führen nicht die vollständige Typprüfung aus. Verwende einfachesbin/lint, wenn du den vollständigen repositoryweiten Lint-Durchlauf möchtest.
Was automatisch korrigiert 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 neu formatieren und umschreiben kann:
- Ruby
- JavaScript / GJS
- CSS / SCSS
Diese Prüfungen werden durch bin/lint --fix nicht automatisch korrigiert:
- YAML-Syntaxvalidierung
- i18n-Linting für
client.en.yml/server.en.yml - Glint/Typprüfung
Beziehung zu Git-Hooks
Der Pre-Commit-Hook verwendet dieselbe lefthook-Konfiguration wie bin/lint, führt sie aber nur gegen gestufte Dateien aus.
Das bedeutet:
- Ein Commit kann fehlschlagen, weil gestufte Dateien das Linting nicht bestehen
bin/lint --stagedist das nächstliegende manuelle Äquivalent zum Pre-Commit-Hookbin/lint --fix --stagedist ein guter Weg, 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 Commen eines paar 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 würde
bin/lint --staged
# Räum alle aktuellen laufenden Arbeiten auf
bin/lint --fix --wip
# Führe den vollständigen Repository-Lint-Suite aus, einschließlich Typprüfungen
bin/lint
Dieses Dokument ist versioniert – Vorschläge für Änderungen auf GitHub.