概要
- Eclipseのコード補完機能で、あるクラスのメソッド名を補完させるときに**意図しない補完になってしまう!**とおもった場合の対策です
(Eclipse NEONで追加された部分一致でのコード補完(Substring code completion)機能の副作用の抑え方です)
環境
- Eclipse IDE 2019‑06
「意図しない補完」とは↓のような場合(見たほうが早い)
Arraysでドット(.)を打つと、コード補完がはしる続いてtostringと入力してエンターを押すとdeepToStringが選ばれてしまう現象発生。
コード補完するときの部分一致(substring)は便利だが
以下のようにstringだけ入力しても、メソッド名の一部にstringが含まれるものを候補としてあげてくれる
修正方法その1:メソッド名の部分一致をオフする
メソッド名の部分一致が悪さをしている面もあるので、この機能を設定からオフしてみる。
EclipseのメインウィンドウからWindow>Preference>Java>Editor>Content Assist の順で選択していくとShow substring matchesという項目があるので、それをオフする
部分一致(substring)をオフでつかってみる
なかなか良い感じ。
さっきみたいに意図せずdeepToStringが選択されることはなくなった。
あたりまえだけど、部分一致(substring)がオフだと、部分一致で補完できない
ためしに、Arrays.の後にstringと打ってみると、候補が何もでてこなくなった。
修正方法その2
まず、さきほどと同じようにWindow>Preference>Java>Editor>Content Assistで設定画面ひらいてはチェックを入れる。
これで部分一致をひとまず有効にする。
次に、Content Assistの[+]マークをおして設定を展開してAdvancedを選択する。
次に↓のようにJava Proposalsにチェックを入れる
これでOK
コード補完を試す
さて、この設定で再度、コード補完を試す。
意図した動作で動いている模様
部分一致でコード補完を試す
部分一致のほうもちゃんと動作している。
修正方法2のほうが、より意図した動作(部分一致もつかえて、コード補完も意図どおり)となるようだ。
まとめ
- Eclipseのコード補完で「意図しない補完になってしまう」と思ったときの現象と対策について説明しました
- 部分一致でのコード補完(Substring code completion)機能はEclipse NEONで追加された機能ですが、その副作用で意図しない補完になってしまう場合にsubstring code completionをオフにしたり、Java Proposalsを有効にする対策を打つことで副作用を抑えられることがわかりました。
- コード補完についてはIntellij IDEA(やAndroid Studio)のほうがだいぶ先行してsubstring code completionに対応しており、こうした副作用も無いよう予めチューニングされているようです。
(Eclipseで遭遇するまであたり前で気づかなかったが、こういうUI工夫・使用感のチューニングで生まれる微差が生産性や品質に影響を与えるんだよなぁ、っと。)