goplsでworkspace/symbolが使いたい
現状の最新版(gopls/v0.2.2-pre2)では未実装。
を書いていたら欲しくなったので第1回 ゴリラ合宿で実装したのがコチラ。
symbolの探索はServerのsessionのViews()から
Snapshotを取ってきて、
KnownPackages()のCompiledGoFiles()をParse()
して*ast.Fileを引っ張り出して、
あとは地道にWorkspaceSymbolParamsにマッチするものを探していくようにした。
ただ、WorkspaceSymbolParams
の仕様*1がよくわかっておらず、実装の仕方も上記のやり方で良かったのか全然わかっていない。
また、最初は素直にスライスを作るように実装してみたところ、Vimから:tselect
などを実行すると
- タグが重複したり、
- 実行するたびに順番が変わったり、
するので、
重複を排除した上で、Vimで指定した文字列に近く、現在のパッケージに近いものを優先するようにしてみた。
とりあえず自分用としては使えそうなので色々と試してみることにする。
*1:特にQuery