本題
ATOMのパッケージ作ったよ!(宣伝)
何のために?
Go
でDIとかゴニョゴニョしてると、しばしばinterface
の実装を書くシーンに直面しますが、
interface
が大きく複雑になってくるとだいぶつらたんですよね。
大きいinterface
を書くな、小さいinterface
の組み合わせにしろ、って話は踏まえてもやっぱり辛いんじゃないかなと。
なので、interface
を指定したらば実装のスタブを自動で生成して、スニペットのように貼り付けられるパッケージを作ってみました。
何ができるの?
1. スタブの生成
コマンドパレットからGo Impl: Find Declaration
、またはキーバインドctrl-i
で、カーソルの当たっているinterfaceから、スタブを生成できます。
2. スタブの貼付け
コマンドパレットからGo Impl: Put Declaration
、またはキーバインドctrl-shift-i
で、カーソル位置に最後に生成したスタブをスニペットのように貼り付けられます。
貼り付けると自動で各メソッドのレシーバを選択した状態になるので、そのままレシーバを書き換えられます。
3. 履歴から選んで貼付け
コマンドパレットからGo Impl: Toggle
、またはキーバインドctrl-alt-i
で、生成されたスタブの履歴から選択して、スニペットのように貼り付けられます。
改善点
ゴミが残る危険性
動画内だと、さも当然のようにstruct
内にinterface
を埋め込み表記してますが、これ自体にinterface
を実装するという宣言のような意味はありません。golang
のinterface
実装はダックタイピングですし。
言語仕様通り「埋め込まれる」だけなので、邪魔にしかなりません。ゴミです。消しましょう。
ソース中にゴミを(一時的とは言え)置かざるを得ない実装は少々不本意です。
だのでGo Impl: Toggle
では、履歴を検索するだけでなく、入力された値からそのままinterfaceを検索して、スタブを生成する機能を付け加えたいところです。
少しばかり重い
さらに言えば、すべてのinterface
を内部でキャッシュしているわけではないので、毎度gopath
以下を検索しています。
これは使用しているImplにおける制約ですが、こちらもなんとかしたいところ。
autocomplete-goの持ってる内部キャッシュなど上手いこと掠め取流用すれば、ある程度平易に実装できる気がしています。