Discourse は git フックに lefthook を使用しており、同じチェックを手動で実行するための主な CLI エントリポイントとして bin/lint を提供しています。
ローカルクローンで作業している場合は、フックを一度だけインストールしてください:
pnpm install
pnpm lefthook install
これ以降、ステージされたファイルは git commit 時に自動的にチェックされます。
主なコマンド: bin/lint
pre-commit フックを待つのではなく、リポジトリに設定されたリンターを自分で実行したい場合は 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(eslint-plugin-emberのtemplate-*ルールにより、.gjsファイルのテンプレート部分をカバー)
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や pre-commit フックは、完全な型チェックを実行しません。リポジトリ全体の完全なリンティングパスを実行したい場合は、単に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 フックとの関係
pre-commit フックは bin/lint と同じ lefthook 設定を使用しますが、ステージされたファイルに対してのみ実行されます。
つまり:
- ステージされたファイルがリンティングに合格しないため、コミットが失敗する可能性があります
bin/lint --stagedは pre-commit フックに最も近い手動の同等コマンドですbin/lint --fix --stagedは、コミットしようとしているものを正確に修復する良い方法です
実用的なワークフロー
日常的な開発において、最も有用なコマンドは以下の通りです:
# 変更された数個のファイルをコミットする前に
bin/lint --fix path/to/file1.rb path/to/file2.gjs
# pre-commit フックがチェックするものと全く同じものを確認
bin/lint --staged
# 現在の進行中のすべての作業をクリーンアップ
bin/lint --fix --wip
# 型チェックを含むリポジトリ全体のリンティングスイートを実行
bin/lint
このドキュメントはバージョン管理されています - 変更の提案は github で行ってください。