import文を削るのが手間
GoをIntelliJで書いていると、必要なimportは結構よしなに追加してくれます。
ところが、そのimportしたパッケージが不要になった場合(使用してるコードを削除する)、そのimportを削除するところまではやってくれません。
Goは不要なimport文があるとコンパイルが通らないので、自分でimport文を削らなければならずちょっと手間です。
GoImportsを使う
Goimportsというツールが有ります。
https://github.com/bradfitz/goimports
これを使用することで、不要なimportsの削除、標準パッケージであればimportsの追加をしてくれていい感じに整理もしてくれます。
導入は簡単で
go get golang.org/x/tools/cmd/goimports
をすればOK
あとはコマンドライン上で、goimports -w hoge.go
とするだけでファイルのimportを整理してくれます。
ちなみに -w
付けないと標準出力に吐き出されます。
IntelliJ IDEAから呼び出す
これでいつでも整理できるようにはなりましたが、都度コンソールから実行するのは不便です。
IntelliJから呼び出せるようにしましょう。
まず一旦 goimportsのフルパスを確認。
$ which goimports
-> /Users/yourname/bin/goimports
で、適当な場所(今回は/usr/local/bin/
)にシェルスクリプトを作成します。
$ touch /usr/local/bin/goimp.sh
$ chmod +x /usr/local/bin/goimp.sh
中身をこんな感じに編集
#!/bin/sh
if [[ $1 == *.go ]]
then
/Users/yourname/bin/goimports -w $1
fi
きちんと実行できるかは試しておいたほうがよいです。
$ /usr/local/bin/goimp.sh /Users/yourname/src/hoge/fuga.go
きちんとimportが整理されているようなら、外部ツールとして登録します。
Preference(⌘+,)を開いて、IDE Settings
→ External Tools
を開きます。で、追加ボタン。
名前は自分のわかりやすいもの、Groupも適当にGolangとかにしておくと良いです。
Open Console
のチェックは外しておいた方がイチイチ実行するたびにターミナル出てこなくて楽です。
Program
のところにはさっきのシェルスクリプト、Parameters
には、右のinsert macroから $FilePath$
を選びましょう。
大体こんな感じ
あとは保存してOK.
実行するには、メニューのTools
からさっきのGroupに入れればOK.
Goの方に入れたいけど出来ないのかな。
Macro化
これでIntelliJからいつでもgoimportsが実行できるようになりました。
しかしまだ、面倒ですね。
出来たら保存のアクション(IntelliJは基本的に自動保存なので、明示的に⌘+Sする必要はないですが)の時に都度実行されて欲しい感じもあります。
なので、この動作をmacroとして設定します。
メニューの Edit
→ Macro
→ Start recording macro
を選びます。
ここからマクロとして記録されてしまうのでIntelliJの中では余計な動作をしないようにしましょう。
-
Tools
からさっきのgoimportsを実行する -
“File
からSave all
を実行する - 再度
Edit
→Macro
からStop recording macro
を選ぶ - 適当な名前をつける。
ここからはもうマクロじゃないので適当に。
これでマクロとして一連の操作が保存されたので、キーボードショートカットして登録すればOK。
Preference(⌘+,)を開いて、IDE Settings
→ Keymap
を開いて、さっき付けたマクロの名前で検索。
あとは自分の分かりやすいショートカット、今回はctrl+sをアサインして終わり。
都度、ctrl+sを押すだけでgoimportsが実行されるようになりました。
よく見たら設定にあった
まぁでもこれを応用して、
gofmt
golint https://github.com/golang/lint
goimports https://github.com/bradfitz/goimports
をまとめて実行してくれるようなシェルスクリプトにすれば、結構いい感じになるんじゃないかと。
テスト環境
・Mac OSX 10.9.5
・IntelliJ IDEA CE 13.1.4
・Go 1.3
参考
http://marcesher.com/2014/03/30/intellij-idea-run-goimports-on-file-save/