24日目 Inspections & Intentions

私に「Javaでいいや」どころか下手すると「Javaが良い」と思わせるIntelliJの超絶変態機能。Inspectionsはコードの検査で,いわゆる「Checkstyle&Findbugsの強力バージョン」。Intentionsは意図というか気づき?EclipseでいうQuick Assistっぽい感じ。


Inspectionsは検査なので,エラーや警告,プロジェクト固有の規約違反などを指摘する(指摘項目によっては,その解決もしてくれる)。Intentionsは「こうも書けるよ」的なアドバイス。どっちも実行キーは,ALT+Enter(macだとopt+Enter)で実行可能な箇所にカーソルを置くと電球アイコンが表示される。


ALT+Enterについては、はるか昔に解説してた。
31日間ReSharper一周 ... それIDEAでもできるよ(その8)


Eclipse知ってる人には「Ctrl+1のようなもの」と言えばピンとくるかも(Ctrl+2っぽいのは無い)。NetBeansはまんま同じキーで同じことできるから分かるでしょ。


Inspectionsはエラーや警告の類いなので、エディタの右側にマーカーバーとして指摘箇所を表示してくれる。マーカーバーの説明も昔書いてた。
31日間ReSharper一周 ... それIDEAでもできるよ


ファイルを開くたびに検査を実行するので、有効になってるInspectionsが多いほど検査に時間がかかります。検査中はエディタ右上端のコンパイルステータス(compile status)が目玉マークの間は検査中ということを示してます。


このコンパイルステータスを緑に保つのが良いことなのですが、検査項目をうまいこと調整しないと緑にするのは至難の業です。2007年に紹介したときは630項目くらいだったのですが、IDEA12のデフォルト*1であらためて数えなおしたところ1,600項目近くありました。中には互いを打ち消し合う検査項目もあるので未調整でステータスを緑にするのは今や不可能ですね。:-P


うまいとこ手綱を握らないと鬱陶しいことこの上ないInspectionsですが、普段だったらうっかり見落とすような事まで指摘してくれるので、とても頼りになるパートナーとペアプロしてると錯覚することもままあります。ここまで徹底して指摘できるのも、型でガチガチに縛ってるJavaだからなんだよなぁと思うと「(IntelliJ使うんなら)Javaも悪くないな」と思うわけです。むろん、RubyJavaScriptなどの他言語用のInspectionsもありますが、数や精度ではJavaのソレに及ばないです。


Inspectionsはひとつひとつ警告レベルを指定でき、モノによっては専用のオプションもあるので、一度じっくり項目をながめてみることをオススメします。過去に紹介したInspections系のエントリにも、いくつかオススメが載ってますので、ご参考まで。
「正しいソースの書き方養成ギプス」をIDEAでもやってみる。
behind the times: 10 Best IDEA Inspections You’re Not Using
Usages of API documented as @since 1.5


Inspectionsの調整は、まず項目ごとの警告レベルの設定ができます。デフォルトの警告レベルは「As typo/As server problem/As weak warning/As info/As warning/As Error」の6種類。


"As server problem"はJetBrainsのCIサーバであるTeamCityを使ってなければ設定する必要すらありません。通常は"As warning"なんですが「ウザいけどOFFにするのはどうも」ってのは"As weak warning"か"As info"にしとくといいです。
一応、デフォルト以外の警告レベルも追加できるのですが、そこまでするのはやり過ぎかなと思います。


それと先ほども言いましたが、Inspectorによっては独自のオプションを持っているものもあります。正直、プロジェクトごとにいちいち設定するのは大変ですので、その辺はうまいこと使い分けしましょう。


ちなみに、Inspectionsの設定は、Settings->Inspectionsで行います。この設定画面にはステータスバーに居るHectorおじさん経由でもたどり着けます(おじさんをクリックして"Configure Inspections"をクリック。


それ以外にも、警告箇所でALT+Enterを押し、該当する検査項目からInspectionsの設定画面に飛ぶこともできます(下図の場合、"Flip comparison(Constant on right side of comparison)"が検査項目で、そこから展開したメニューにある"Edit inspection profile setting"で設定画面に飛べます)。


Inspectionsの設定項目が多すぎるので、とりあえず全設定ONにして実コードの検査度合いをみつつ、上記方法で個別に警告レベルの調整をしたりしてます(それでも調整はくたびれます)。このサブメニューを見てもわかるように、検査項目の設定に飛ぶだけでは無く、検査項目そのものを無効(Disable inspection)にしたり、ここでだけ検査を無効(Suppress ...)することも可能です。ただし、"Disable inspection"を選択した場合、その検査項目は二度と登場してきませんので、復帰させるには1,600もあるInspectorsから探し出さないといけません(これもかなりくたびれる作業です。:-(


ちなみに、上記スクリーンショットの"Flip comparison"の下にある鉛筆アイコンの項目3つがIntentionsになります。こちらは検査項目ではないのでマーカーバーには影響ありません。


Hectorおじさんについて補足すると、検査レベル(Highlighting Level)を「Inspections/Syntax/None」に変えるたび、おじさんがそっぽを向いていくという細かい芸があります。


なんとなく想像が付くかと思いますが、このInspectoinsは結構CPUパワーを食います(つまり動作が重くなる)。そのため検査レベルを下げていけばいくほどIntelliJが軽くなります。その分、IntelliJを使っている良さも減っていきますが...。とはいえ非力なマシンでIntelliJを使うと、ホントに泣きたくなるほど遅くなるので、背に腹は代えられないときは、この辺から調整してみることをオススメします。


それとIDEA9あたりから"Power Save Mode"というのがつきました。Helpを読んでも要用を得なかったのですが、名称からしてCPUにやさしいモードなのだと思います。その証拠(?)に、このモードにするとHectorおじさんが完全に沈黙します。


いずれにしろ、明らかに余計だと思えるInsepctionsは無効にしておいたほうがPCにも、利用者の気持ちにもやさしいと思います。:-)


あと、その気になれば自分でもInspectionsやIntentionsを作れます。
独自Inspectorを作ってみる
QuickFixの作り方
この前,独自Inspectorで試したことを,他の方法で実現してみんとす


やめりゃ良かったと作り始めてから思ったのですが、IDEA12でデフォルトのプラグインをすべて有効にしたときのInspectionsとIntentionsの一覧を作りました。気になる&使っている順にコメントも付けてます。まだ完成してませんが、気長にこつこつやってこうと思います("+"付いてるのが、個人的オススメ。それらをError, Warinig, Infoのどれにするかは各自が決めて。
IntelliJ IDEA : inspections&intentions




当然ながら、RubyPHPPythonScala、Kotlinなどの言語系プラグインを入れると、それ用のInsepctionsやIntentionsが増えます。:-P

*1:IDEA12の標準プラグインを全て有効にした状態