Discourse は git フックに lefthook を使用し、手動で同じチェックを実行するための主な CLI エントリポイントとして bin/lint を使用します。
ローカルクローンで作業している場合は、一度フックをインストールしてください。
pnpm install
pnpm lefthook install
その後、ステージングされたファイルは git commit 時に自動的にチェックされます。
主なコマンド:bin/lint
プリコミットフックを待たずに、リポジトリで設定されたリンターを手動で実行したい場合は bin/lint を使用してください。
一般的な例:
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
各モードの動作
bin/lint: リポジトリ内のサポートされているすべてのファイルをリンティングしますbin/lint path/to/file ...: 指定されたファイルのみをリンティングしますbin/lint --recent: 直近 50 コミットで変更されたファイルと、未追跡のファイルをリンティングしますbin/lint --staged: ステージングされたファイルのみをリンティングしますbin/lint --unstaged: ステージングされていないファイルのみをリンティングしますbin/lint --wip: ステージングされたファイル、ステージングされていないファイル、およびmain以降で変更されたファイルをリンティングしますbin/lint --fix ...: 選択されたファイルの自動修正機能を実行しますbin/lint --fix: リポジトリ全体で利用可能なすべての自動修正機能を実行しますbin/lint --verbose: 基盤となる lefthook コマンドを出力します
明示的なファイルを渡した場合、bin/lint は lefthook を呼び出す前に、それらをサポートされているリンティング対象のファイルタイプにフィルタリングします。
Markdown ドキュメントファイルは現在
bin/lintの一部ではないため、bin/lint path/to/doc.mdを実行すると、リンティング対象の一致するファイルがないと報告されます。
リンティングされるもの
正確な設定は lefthook.yml にあります。執筆時点では、bin/lint は以下をカバーします。
Ruby
**/*.{rb,rake,thor}bin/**/*配下の Ruby スクリプトGemfile
チェック項目:
rubocopsyntax_tree(stree check)
JavaScript、GJS、CSS、SCSS のフォーマット
app/assets/stylesheets/**/*.{css,scss}frontend/**/*.{js,gjs,scss,css,cjs,mjs}- 一致するプラグインおよびテーマのアセットファイル
チェック項目:
prettier/pprettier
JavaScript および GJS のリンティング
frontend/**/*.{js,gjs}- 一致するプラグインおよびテーマの JS ファイル
チェック項目:
eslint(.gjsファイルのテンプレート部分をカバーするeslint-plugin-emberのtemplate-*ルールを含む)
SCSS のリンティング
app/assets/stylesheets/**/*.scss- 一致するプラグインおよびテーマの SCSS ファイル
チェック項目:
stylelint
YAML およびロケールチェック
config/database.ymlを除く**/*.{yaml,yml}**/{client,server}.en.yml
チェック項目:
yaml-lintscript/i18n_lint.rb
タイプチェック
ファイル引数なしで bin/lint を実行すると、フルリポジトリのリンティングとして以下も実行されます。
pnpm lint:types
これは Discourse の JavaScript タイプ情報に対する Glint/TypeScript スタイルのチェックです。
![]()
bin/lint path/to/fileとプリコミットフックは完全なタイプチェックを実行しません。リポジトリ全体の完全なリンティングを実行したい場合は、通常のbin/lintを使用してください。
自動修正可能なもの
bin/lint --fix は多くの問題を自動的に修正できますが、すべてではありません。
自動修正が設定されているもの:
prettier --writeeslint --fixstylelint --fixrubocop -Asyntax_tree(stree write)
実際には、--fix は以下を再フォーマットおよび書き換えできます。
- Ruby
- JavaScript / GJS
- CSS / SCSS
以下のチェックは bin/lint --fix によって自動修正されません。
- YAML 構文検証
client.en.yml/server.en.ymlの i18n リンティング- Glint/タイプチェック
git フックとの関係
プリコミットフックは bin/lint と同じ lefthook 設定を使用しますが、ステージングされたファイルのみに対して実行されます。
つまり:
- ステージングされたファイルがリンティングをパスしない場合、コミットが失敗する可能性があります
bin/lint --stagedはプリコミットフックに最も近い手動相当コマンドですbin/lint --fix --stagedは、コミットしようとしているものを正確に修復する良い方法です
実用的なワークフロー
日々の開発において、最も便利なコマンドは以下の通りです。
# 変更されたファイルをいくつかコミットする前に
bin/lint --fix path/to/file1.rb path/to/file2.gjs
# プリコミットフックがチェックするものを正確に確認
bin/lint --staged
# 現在の進行中の作業をすべて整理
bin/lint --fix --wip
# タイプチェックを含むフルリポジトリのリンティングスイートを実行
bin/lint
このドキュメントはバージョン管理されています - GitHub で変更を提案してください。