タイトルも悩ましい。
あらすじ
ことの顛末はこう。
- OXCでフォーマッターを実装してる
- スナップショットテストで、CLIを実行してその結果を保存してる
- フォーマット済みのファイルにCLIを実行して、差分が出ないことを確認してるケースがあった
- それがWindowsでだけ、なぜか差分が生まれてしまってCIが失敗する
という事象があり。
原因
Windowsだけという時点で、まあだいたい<CRLF>
のせいだろうとは思ってたけど、ズバリだった。
GitHubのCIが、Windows環境でファイルを取得してきたときに、自動的に改行コードを<CRLF>
にしてしまうのが原因。
そのため、フォーマッターが動いてその<CRLF>
を<LF>
に戻してしまい、差分があるよ!となる。
解決: .gitattributes
を置く
* text=auto eol=lf
これですべてのファイルが<LF>
になって、余計な心配をしなくてよくなる。
Configuring Git to handle line endings - GitHub Docs https://docs.github.com/en/get-started/git-basics/configuring-git-to-handle-line-endings
特定のディレクトリだけにもできる。
foo/bar/fixtures/** text=auto eol=lf
PrettierでもBiomeでも、これがちゃんと指定されてた。
- https://github.com/prettier/prettier/blob/5067313d6899596c06cb2cad8b19cf87a3febd15/.gitattributes
- https://github.com/biomejs/biome/blob/a0039fd5457d0df18242feed5d21ff868ceb0693/.gitattributes
ほんと<CRLF>
にはいい思い出がな〜い。