Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
105
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

IntelliJ IDEAでファイル保存時にcode formatする

ヒューマンエラーを防ごう

IntelliJ IDEAのMacroとReformat codeの機能を使って、作業ブランチから変更のあった差分だけコードフォーマットを適用するように設定したので、そのメモ。ファイル保存時に設定したコーディング規約に沿って整形されるので、行儀の悪いコードがプロダクトコードに入ることを防げる。

プロジェクト内において定められたコーディング規約に違反しているコードや、単純なミスによる修正は、そのコードを書いた側にも、レビューする側にも負担となる。ましてやそれを手で修正しているのであれば、頻度こそ下がるものの(これは開発者の性格的による側面もありそうだが)、ミスは永遠になくなることはない。

目視には限界があるし、コードの行儀を整えてくれるもの(PHPだと http://cs.sensiolabs.org/ とか)もあるが、バージョン管理下で作業する場合には、作業分とは関係のない変更がコミットに入るのが厄介である。そこで、IntelliJのReformat codeを利用する。Reformatする際にOnly VCS changed textという便利な項目にチェックを入れておくと、変更箇所だけにフォーマットを適用できる。

Mac版IntelliJ IDEAでのコマンドで記述してあるので、WindowsおよびLinux版を使用している方は適宜読み変えてください。

手順

プロジェクトのコーディング規約に合わせる

Preferences -> Code Style

  • プロジェクトごとに設定可能
  • 使用する言語を適宜設定
  • PHPの場合、Set from... -> Predefined Style でPSR1/PSR2やSymfony2等のコーディング規約を拝借できる

マクロを登録する

スクリーンショット 2013-12-11 2.51.21.png

Edit -> Macros -> Start Macro Recording

  • この後マクロを登録するので、以下のコマンドを実行
  • Command + Option + l (エル)
  • Command + s(vimmerは:wで)
  • Edit -> Macros -> Stop Macro Recording
  • 名前をつける。適当にformat and save fileとかで
 Reformat codeのダイアログが表示されるので、セレクトボックスは現在のファイルを、下のOnly VCS changed textにチェックを入れる。Do not show this dialog in the futureにもチェックを入れてしまおう。もしこのダイアログを再表示したくなったら、Preferences -> Editor -> Formatting -> Show "Reformat code" dialog にチェックを入れればOK

保存時に実行されるようキーバインド

スクリーンショット 2013-12-11 2.51.21.png

Preferences -> Keymap -> Macros -> format and save file -> add keyboard shorcut

  • Enter Keyboard Shortcutのダイアログが表示される
    • 2回までのキーアクションを登録できる
    • 普通の人はFirst StrokeにCommand + s
    • VimmerはFirst StrokeにShift + ;、Second Strokeにwとかで
  • OKを押して、Keymapに登録したアクションが指定されているか確認

試してみよう

  • 以上で登録は終了。実際に確認してみましょう。

最後に

どこかに間違い、アドバイス等ございましたらぜひご指摘ください。また、「変更分だけフォーマットかけたいならこっちの方が早くね?」的なものがありましたらご教授ください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
105
Help us understand the problem. What are the problem?