Discourse では、git hooks に lefthook を使用しており、同じチェックを手動で実行するためのメインの CLI エントリポイントとして bin/lint を使用しています。
ローカルクローンで作業する場合は、フックを一度インストールしてください。
pnpm install
pnpm lefthook install
その後、コミット時にステージされたファイルが自動的にチェックされます。
メインコマンド: 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: リポジトリ内のサポートされているすべてのファイルを lint するbin/lint path/to/file ...: 指定されたファイルのみを lint するbin/lint --recent: 過去 50 回のコミットで変更されたファイルと、追跡されていないファイルを lint するbin/lint --staged: ステージされているファイルのみを lint するbin/lint --unstaged: ステージされていないファイルのみを lint するbin/lint --wip: ステージされているファイル、ステージされていないファイル、およびmainからの変更があったファイルを lint するbin/lint --fix ...: 選択されたファイルに対して自動修正を実行するbin/lint --fix: リポジトリ全体で利用可能なすべての自動修正を実行するbin/lint --verbose: 基盤となる lefthook コマンドを出力する
明示的なファイルを渡すと、bin/lint は lefthook を呼び出す前に、それらのファイルをサポートされている lint 対象のファイルタイプにフィルタリングします。
Markdown ドキュメントファイルは現在
bin/lintには含まれていないため、bin/lint path/to/doc.mdを実行しても、lint 対象のマッチするファイルがないという報告になります。
lint の対象
正確な設定は 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 の lint
frontend/**/*.{js,gjs}- マッチするプラグインおよびテーマの JS ファイル
チェック:
eslint
GJS テンプレートの lint
frontend/**/*.gjs- マッチするプラグインおよびテーマの
.gjsファイル
チェック:
ember-template-lint
SCSS の lint
app/assets/stylesheets/**/*.scss- マッチするプラグインおよびテーマの SCSS ファイル
チェック:
stylelint
YAML およびロケールのチェック
config/database.ymlを除く**/*.{yaml,yml}**/{client,server}.en.yml
チェック:
yaml-lintscript/i18n_lint.rb
型チェック
bin/lint をファイル引数なしで実行すると、フルリポジトリの lint も実行されます。
pnpm lint:types
これは、Discourse の JavaScript の型情報に対する Glint/TypeScript スタイルのチェックです。
![]()
bin/lint path/to/fileおよびコミット前のフックは、完全な型チェックを実行しません。完全なリポジトリ全体の lint 実行を行いたい場合は、プレーンなbin/lintを使用してください。
自動修正可能なもの
bin/lint --fix は多くの問題を自動的に修正できますが、すべてではありません。
自動修正が設定されているのは以下の通りです。
prettier --writeeslint --fixember-template-lint --fixstylelint --fixrubocop -Asyntax_tree(stree write)
実際には、これにより以下を再フォーマットおよび書き直しできます。
- Ruby
- JavaScript / GJS
- CSS / SCSS
これらのチェックは、bin/lint --fix によって自動修正されません。
- YAML 構文の検証
client.en.yml/server.en.ymlの i18n lint- Glint/型チェック
git フックとの関係
コミット前のフックは bin/lint と同じ lefthook 設定を使用しますが、ステージされたファイルに対してのみ実行されます。
これは次のことを意味します。
- ステージされたファイルが lint に合格しないため、コミットが失敗する可能性がある
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
# タイプチェックを含む、リポジトリ全体の lint スイートを実行する
bin/lint
このドキュメントはバージョン管理されています - 変更の提案は github でお願いします。