matarillo.com

The best days are ahead of us.

31日間ReSharper一周 Day 20: Alt+Enterでエラーや警告を修正

2012-12-30 18:17:12

元記事

31日間ReSharper一周」の20日目にようこそ。

Alt+Enterについては、エラーを修正する方法を2、3種類話した。でもそれは表面をひっかいただけだ。いろんなものが修正できる――全部とは言わないが、かなりのことはできる。それに対象はエラーだけじゃない。結構な種類の警告(灰色)も修正できる。

だから今日は、もう少し例を挙げよう。網羅的ってわけではないけど。

「この警告を表示しない」に関する注意点

コード中のReSharper警告(灰色のコードまたは青波線)の上でAlt+Enterを押すと、応急処置の中のひとつに警告を非表示にするものがある。例えば、「『未使用のprivateメンバー』の警告を表示しない」のように。忠告しておくけど、このコマンドはやめておけ。

一度試してみたんだ。「ここだけ特別にOKとする印として、コメントとか#pragmaみたいなものを追加する」って意味だと思ったから。違った。結局「この条件は二度と、決して、金輪際チェックしない」ってことだった。それにアンドゥもできない。もう一度オンにする正しい設定を見つけるには、ReSharper Optionsをくまなく探さないといけない。

幸い、このコマンド自体を停止させることができる(意図しないで選択してしまい、設定解除をしに行くのと同じページにある)。ReSharper Options > Highlightingに移動して、「『警告を表示しない』のアクションを表示する」のチェックを外そう。

エラーの修正: 戻り値の型の不一致

コードをVS 2003からVS 2005にアップグレードしようとしていて、ジェネリクスを使い始めているとしよう。そして、ユーティリティメソッドがIListではなくIList<foo>を返すようにリファクタリングする。でもそのせいで、それを呼び出している全ての箇所が壊れた。

戻り値の型の不一致に対するReSharperの応急処置

これはメソッドの戻り値をIListに割り当てている呼び出し元の一例だ。この例では、「’errors’の型を’IList<Exception>‘に変更」を選びたいだろう。それに、他の呼び出し元でも同じ事ができる。同じ戻り値の型を何度も何度もタイピングし直すのを打ち破る。

エラーの修正: 具象クラスの抽象メソッド

テンプレートメソッドを取り入れている最中ならば、あるクラスに抽象メソッドがあるけれども、クラス自体をまだabstractでマークしていないということがあるかもしれない。

非抽象クラス内の抽象メソッドに対するReSharperの応急処置

この例では、abstractキーワードへカーソル移動して、Alt+Enterを押し、「‘クラス名’を抽象クラスにする」を選べばいい。もちろん、クラス宣言までスクロールしてそこでabstractと入力するのには大してタイピングはいらない。ただ、この機能のいい所は、今作業しているコードの上に波線が表示されるので、ファイルの上部にスクロールする必要がないということだ。

警告の修正: 割り当てられたが読み取られない変数

ReSharperでは、宣言されたけど使われていない変数を修正することができるが、大して面白いことはない。一方通行の変数――読まれるけど書かれない、またはその逆――の方が少しは面白い。ということで下の例が、宣言内で割り当てられたけど一度も読み取られていない変数だ。

書かれるが読まれない変数に対するReSharperの応急処置

「(複数の)割り当て」と書いてあるけど、実際そうする。宣言部にある割り当てだったとしても削除されるし、他のどこにあったとしても割り当ては削除される。一度も読み取られないフィールドがあるなら特に顕著だ。ReSharperはどんなメソッド中のどんな割り当てでも削除する。不要になったコードをちぎり捨てるときにとても重宝する機能だろう。

1点だけ気をつけてほしい。もし割り当てに副作用があったなら、その副作用もなくなってしまうだろう。上の例で言えば、値がリストボックスに追加されなくなってしまう。

警告の修正: 読み取られるが書き込まれないフィールド

読まれるが割り当てられないフィールドに対するReSharperの応急処置

これはすごいよ。「(複数の)コンストラクタでフィールドを初期化する」を選ぶだけで完了だ。ReSharperは、新しい引数を自動的にコンストラクタに追加して、割り当てコードを生成する。

変なのは、読み取り/書き込みプロパティを作成する応急処置がないことだ。応急処置で見かけたと思ったんだけど、どう見てもここには無い。

警告の修正: 未使用のパラメータ

未使用パラメータに対するReSharperの応急処置

そうなんだ。ReSharperで未使用のパラメータを削除すると、自動的に呼び出し元も全部修正してコードがコンパイルできる状態を維持してくれる。

時には、余計に灰色コードが増えることもある。特に、7層のコード世界を垂直に掘り下げるようなオブジェクトがあったんだけど、リファクタリングしたのでいらなくなってしまったときなんかに。下の層で削除すると、その上の層でパラメータが灰色になってしまう。

でもそんなのはそうそう見ることはないだろう。ReSharperは、privateメソッドの中でパラメータを灰色に変えるだけのようだから。もちろんばかげている。最低でもprivateメソッド内と同程度には、publicメソッド内で使われていないパラメータのことを気にするだろうからね。

F12とAlt+Enter

エラーや警告を修正するためにAlt+Enterができることの味見ってだけなんだけどね。カラーバーが縞模様になっているなら、F12(次のエラーへ移動)とAlt+Enterを押し続けてみるといい。コードをきれいにするためにReSharperが何をやってくれるのかがよくわかるよ。


31日間ReSharper一周 インデックスへ戻る