リフォーマットコードを特定のディレクトリ・ファイルのみ除外する設定

私はGitの操作はほぼ全てIntelliJ系のIDEで行っている。慣れれば便利である。 コミットする際には自動的にreformat code(コードスタイルに基づいて自動的に整形してくれる機能)が走るように設定しているのだが、これが今回おもわぬ事故を引き起こした。 コミット時に自動フォーマットする機能は大変便利なのだが、特定のファイルで問題が発生するためにオフにはしたくない。 そこで特定のファイルのみ自動フォーマットされないようにする設定を探してみた。

特定ファイルのみ除外する

なんと普通に設定が存在していた。さすがIntelliJ。

https://www.jetbrains.com/help/idea/reformat-and-rearrange-code.html

Preferences > Editor > Code Style内の「Formatter Control」で設定ができる。

フォーマッタの設定

ここに「Do not format,….」という欄があり、ここでルールを追加する。

除外設定

ファイルやディレクトリの指定方法が少々独特なので、そこらあたりは試行錯誤するしかない。 正規表現で指定するわけではないので気をつけよう。

私の場合!file[android]:layouts//*.xmlという設定。 [android]はプロジェクトルートディレクトリのこと。 プロジェクトルートのlayoutsディレクトリの下にある*.xmlファイルでないものを自動フォーマットの対象にするという設定になる。 ややこしいが、要するにXMLファイルには自動フォーマットが動作しないようになる。

思いっきり勘違いしていた。 ここの設定は Do not format なので、この部分で指定したファイルには自動フォーマットが適用されなくなる。 そのためfile[android]:layouts//*.xmlとしないといけない。

そもそもなぜ問題が起きたか

基本的にIntteliJではCode Styleといって、ファイルタイプごとにどういうフォーマットで整形するかの設定ができる。 わりと細かく設定できて、この設定をするのもこだわりだすとすごい大変である。

普通はこのコードスタイルの設定で何も問題は起こらない。 しかし今回ブログをHugoで運用するようになって、XMLファイル形式のテンプレートをいじるときに問題が起こった。

そもそもIntteliJ(Goland)はHugo専用の設定とかはないので、Hugo特有のテンプレート記法などコードスタイルに設定が存在しない。 そのためも元となるファイルタイプのコードスタイルが適用される。

Hugoのテンプレートファイルには{{ .Site.Title }}のような記述をすることで、サイトのタイトルを埋め込んだりできる。 HTMLファイルならこれまで特に問題は起きなかったのだが、XMLファイルになるとそうはいかなかった。 自動フォーマットによってHugoの波括弧の位置がずれると、Hugoがテンプレートファイルをパースできなくなってしまうのである。

そこで今回のような設定が必要になったのだ。

私の場合、完全にエラーが起こってしまうので必要不可欠だった。 そうでなくとも、特定のファイルだけは特別に自動フォーマットさせないようにしたいニーズはあるだろう、多分。 検索してみるとそういった話題を見かけることもあったので、たぶんあるんだろう。

IntelliJにはこういう細かいニーズに応える設定項目があって、やっぱり便利だなぁとしみじみ思う。

Amazonのほしいものリストを公開しています。仕事で欲しいもの、単なる趣味としてほしいもの、リフレッシュのために欲しいものなどを登録しています。 寄贈いただけると泣いて喜びます。大したお礼はできませんが、よりよい情報発信へのモチベーションに繋がりますので、ご検討いただければ幸いです。