へいしゃでは、ソースコードのフォーマッターに Ormolu を利用しています。

インデント時のスペース数すらカスタマイズ不可なので好き嫌いが分かれるところですが、プロジェクト全体のコードを統一しておくとコードレビューの際にも有用なので入れています。

ちなみにスペース幅を4にしたくてフォークされた fourmolu というフォーマッターもあります。現在ではスペース数以外の設定もできるみたいです。

どちらも hls から利用可能なので、興味がある人は試してみると良いと思います。

また、ormolu のフォーマット結果で末尾カンマが気に入らない場合は google/ormolugfork ブランチを使ってみると良いかもしれません (フォーマット結果)。fourmoluAdd 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-argsormolu にそのまま渡されるオプションになります