2022/01/08

[golang] vscode と golang の import(2022/01/08)

今の私は、Ubuntu 20.04 で vscode 1.63.2 を使っている。
go のバージョンはこちら。

$ go version
go version go1.17.6 linux/amd64

 

Microsoft の go extension をインストールしているのだが、うまく動いているような動いていないような、よくわからないときがある。
プロジェクトの設定によるような、よらないような。。。

つまり、よくわかってなのだ。


formatOnSave

よくわからんやつの代表格。
設定項目は、"editor.formatOnSave" と、各言語向け設定の中にある "editor.formatOnSave" だけだと思っている。

01: {
02:     "[go]": {
03:         ....
04:         "editor.formatOnSave": false,
05:         ....
06:     },
07:     ....
08:     "editor.formatOnSave": false,
09:     ....

関連項目に "go.formatTool" もあると思う。

で、どちらにも false を指定している(おそらく共通設定の formatOnSave は個別の言語設定に項目があるなら使われないと思う)のだが、保存すると import が埋められてしまうので、設定が効いていないか別の項目が影響しているかだと思う。

Formatting
https://code.visualstudio.com/docs/languages/go#_formatting

特にそういう情報は載っていない。

 

settings.json で「 "go" 」と書いて Tabキーで自動補完?させると、こういう項目があった。

01:     "[go]": {
02:         "editor.codeActionsOnSave": {
03:             "source.organizeImports": true
04:         },
05:     },

これを false にすると、ファイル保存時に import が更新されなくなった。
つまりあれは format しているわけではなく import の整理をしているだけなのだ。

 

ではこの状態で vscode のコマンドで Format Document すると import が更新されるかというと、されない。
そう、 format は整形だけで、 import の整理とは別なのだ。
別のコマンドで「Organize imports」というのがあるので、そちらを実行すると importが整理された。

キーバインドはこうなっていた。設定した記憶がないので、vscode のデフォルトだろう。

01: {
02:   "key": "shift+alt+o",
03:   "command": "editor.action.organizeImports",
04:   "when": "editorTextFocus && !editorReadonly && supportedCodeAction =~ /(\\s|^)source\\.organizeImports\\b/"
05: }

Go言語用というわけでもないと思うのだが、どういうしくみなんだろうね?

 

Format Tool で "goimports" を指定しておくと format時に importも整理されていたのだが、最近はLanguage Serverなるものを使うのがデフォルト設定になっていて、その場合は Format Tool の設定は無視されるらしい。
「Use Language Server」を false にすると Format Document 時に importが整理された。

import を自動で更新してくれると便利でよいのだが、勝手にソースファイルが変更されるのが嫌なときもあるのだ。単純に「勝手に変わるのは気持ち悪い」というだけかもしれんが、まあそういうものだ。


あとは、文字色だけ付けるモードがあるとありがたい。
import が足りないとかそういうのはチェックせず、単に予約語などに色を付けるだけのモードだ。保存するたびに CPU負荷が上がるところを見ると、簡易的なコンパイルなり何なりを実行しているのだと思うけど、私の場合はそういうのいらないからさっさと動いてくれ、ということが多いのだ。

 

Microsoft の Extension を外して、 "Go Custom Format" で goimports などを指定すればだいたいよさそうな気がする(Format Document、ではなく extensionのコマンドで format することになるが)。
色を付けるのは vscode の設定だけでよさそう。もしかしたら今まで golang で使った設定が残っているだけかもしれんけど。

そんなに毛嫌いしなくても良いと思うのだが、Save して数秒間チェックしてから保存されたりすると、何もしないでいいから保存を先にしてくれ~といいたくなってしまうのだ。

 

あまり難しく考えず、遅いときだけ Extension を disable にしておく、でもよいのかもしれんし、Language Server を使わなくしただけで軽くなったような気がしなくもない。 gopls がないと起動するときに怒られるが、インストールしておくと使われてしまいそうなので、同じ名前の空のファイルを作って実行権限でも与えておくと良いだろう。そこまで毛嫌いしなくてもよいとは思うが。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。