へいしゃでは、ソースコードのフォーマッターに Ormolu を利用しています。
インデント時のスペース数すらカスタマイズ不可なので好き嫌いが分かれるところですが、プロジェクト全体のコードを統一しておくとコードレビューの際にも有用なので入れています。
ちなみにスペース幅を4にしたくてフォークされた fourmolu というフォーマッターもあります。現在ではスペース数以外の設定もできるみたいです。
どちらも hls から利用可能なので、興味がある人は試してみると良いと思います。
また、ormolu のフォーマット結果で末尾カンマが気に入らない場合は google/ormolu の gfork ブランチを使ってみると良いかもしれません (フォーマット結果)。fourmolu も Add option for leading commas (and expand test suite) #17 で設定できるようになってました。
今回はプロジェクトのコードがフォーマットされていることを CI (Github Action) でチェックする簡単な方法を紹介します。
ormolu-action
既に ormolu-action というアクションが提供されているので、これを利用すると簡単です。
オプションを指定しなければ以下の内容を .github/workflows/format.yml
のような名前で保存すれば完了です。
name: format
jobs:
ormolu:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- uses: mrkkrp/ormolu-action@v1
フォーマットされていない場合は CI のログにフォーマット前後の diff が表示されます。
実例
このブログでも導入しており、オプションもいくつか利用しています。
name: format
jobs:
ormolu:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- uses: mrkkrp/ormolu-action@v1
with:
pattern: |
**/app/**/*.hs
!quiz
!sample-code extra-args: '-o -XTypeApplications'
pattern
を使うと 含めたい/除外したい ディレクトリやファイルを指定できるため、より細かい制御が可能ですextra-args
は ormolu にそのまま渡されるオプションになります