ATOM エディタも gopls に対応していた
Microsoft が誇る Visual Studo Code 最大の功績は「言語サーバ・プロトコル(Language Server Protocol)」を作ったことだと思う。
これによって,コーディング作業をアシストするための入力補完やコード整形や名前をキーにしたジャンプといった機能を,言語やエディタ実装から独立させることが可能になった。ツール開発者はこのプロトコルに適合する言語サーバ・アプリケーションの作成に専念できる。
各プログラミング言語コミュニティは自身の言語用サーバを提供している。 Go コミュニティでも早い段階からいくつかの実装が存在したが,現在では Google の gopls ( go please と読むらしい 😄) に集約されつつあるようだ。 gopls 自体はまだアルファ版だそうだが,それでも VSCode だけでなく Vim や Emacs などでも既に使われている。
この流れに見事に取り残されているのが ATOM エディタである。何故かというと Go 支援用パッケージの最大手である go-plus が今だに gocode を使っているのである。つか,実質的に go-plus の開発は2年くらい前から止まっているのだが。それでも go-plus を越えるパッケージが未だ見当たらないのは(Go プログラマから見て)いかに ATOM エディタが過疎ってるかを示す傍証と言えるかもしれない[1]。
(ホンマ GitHub は ATOM をどうするつもりなんだろう)
まぁ,でも,完全に見捨てられているわけではないようで, gopls では ATOM 用パッケージとして ide-gopls を指定しているっぽい。
ide-gopls の機能は以下の通り。
- Auto completion
- Code format
- Diagnostics (errors & warnings)
- Document outline
- Find references
- Go to definition
- Hover
- Reference highlighting
今回ちょろんと試す機会があったのだが,感想は以下のような感じ。
- ユーザインタフェースが atom-ide-ui に統合されているためか,入力補完の出来は非常によい
- コード整形は gofmt レベルまでしか対応してない。せめて goimports レベルまではサポートしてほしかった(gopls 側の課題かな)
- Lint, test, coverage 等の機能がない。まぁ x-terminal からコマンドを叩けばいいんだけど。でもセーブした瞬間に lint や test が走るのって快感だよね 😄
比較対象が go-plus なので,評価が多少辛辣なのはご容赦を。まぁ「今後に期待」というところだろうか。 gocode はすでにソフトウェアとしての寿命を終えてるし go-plus の入力補完に我慢ならないという方は ide-gopls を応援し育てていくのもいいだろう。
私はせめて lint & test ができるようになってから,かな。もう少し我慢する。
参考
- Big Sky :: gocode やめます(そして Language Server へ)
- Big Sky :: Go 言語の Language Server「gopls」が completeUnimported に対応した。
- gopls 0.4.3で構造体を初期化("fillstruct")しようとしても、"No code actions found"とだけ表示される - My External Storage
- vim-goを使わず、LSP(gopls)を使ってVimのGo開発環境を構築する - My External Storage
Discussion