またお便りが届きました!🎉
前回の続きで、今回はVS Codeでリンターの設定をします。
- [おたより紹介]
- [settings.jsonでgo.lintToolを設定する]
- [gometalinterが反応しない]
- [golangci-lintも使ってみる]
- [再度gometalinterをいじる]
- [まとめ]
[おたより紹介]
今回は2人から来ました。
1通目
おなじみbudougumi先生から。
VSCode、デフォルトlint設定はたぶんgolintだと思いますよ。READMEにはgometalinter使っている時の"go.lintFlags"の書き方がかいてありますが
— Yoichiro Shimizu (@budougumi0617) January 23, 2019
英語ちゃんと読めや!というお叱り。確かに……。
2通目
mobcovさんからいただきました。
1.11になってからはgometalinterやめてgolangci-lintに移行しちゃったなー https://t.co/ggR5q1GP9t
— Motonori Iwata(カジュアルブロッカー) (@mobcov) January 24, 2019
gometalinterじゃなくてgolangci-lintというのもあるらしい。ふむふむ。
[settings.jsonでgo.lintToolを設定する]
早速設定を。VS Codeの設定は「.vscode」ディレクトリを作り、さらにその中にsettings.jsonファイルを作る。
go.lintToolの設定をsettings.jsonに書く。多分このへんの作業は手作業じゃなくてもっといい感じにやる方法がありそうだけど、それは後日調べる。
[2019/01/27 追記]
またおたよりが。ありがたや……。
VSCode上で"cmd(ctrl) + Shift + p"でコマンドパレット開いて、open workspace settingsって入れるとワークスペースの設定をGUIで設定できますよ。 https://t.co/WFlTmDx4k5
— Yoichiro Shimizu (@budougumi0617) January 25, 2019
[2019/01/27 追記ここまで]
settings.jsonファイルに記載した内容をCtrl+Sで保存すると、ウィンドウの右下にダイアログが表示された。gometalinterがインストールされていないらしい。迷わずInstallボタンをクリック。
OUTPUTタブにgometalinterと依存ライブラリのインストール結果が表示される。
これで無事インストール完了。
[gometalinterが反応しない]
だが、待てど暮らせどリンターが反応してくれる気配がない。はて。
英語をよく読むと、「Lint-on-save」の文字が。あー、ファイルを保存し直せばいいのか。
というわけで、適当に改行を追加して保存してみると、無事エラーハンドリングが甘い!というワーニングが表示された。
[golangci-lintも使ってみる]
せっかくなので紹介いただいたもう一個のリンターも使ってみる。
settings.jsonの内容を変更して保存する。
リンターがインストールされていなければ、先ほどと同様にgolangci-lintのインストールを促すダイアログが表示される。ここもInstallをクリック。
インストールが無事完了したところ。
改めてファイルに適当な変更を加えてリンターを動作させてみる。
無事動作確認も完了した。
[再度gometalinterをいじる]
golangci-lintはgometalinterより爆速だよ!とGithub上ではうたっているものの、対象ファイルが小さいからか、それほど速度の違いは感じなかった。
gometalinterの場合とgolangci-lintの場合とで、それぞれワーニングを表示しているリンターがgosecとerrcheckで異なっているのが気になった。多分、ワーニングの対象として緑の下線が引かれる部分が異なっているのも検知しているリンターが異なるのが影響しているのだろう。
gometalinterの場合もデフォルトでerrcheckはオンになっているようだったので、他のリンターをオフにしてerrcheckのみを動作させる下記の設定を試した。すると、gometalinterの場合でもerrcheckによるワーニングのメッセージを表示することができた。
緑色の下線でワーニングになっていて赤色下線のエラーじゃないのが気になって、go.lintFlagsにseverityの設定を試してみたが効果がなかった。Githubちゃんと読んだつもりなんだけどな……はて。
OUTPUTタブでリント時のコマンドを確認すると、/Users/akito/go/bin/gometalinter --disable-all --enable=errcheck --severity=errcheck:error --aggregate
となっていてオプションの設定自体は間違っていなそうなのだけれど。ちなみにseverityのソースをみるとLINTER:SEVERITYのように大文字になっていたからERRCHECK:ERRORという設定も試してみたが効果がなかった。
[まとめ]
先生方おたよりありがとうございます!
おかげで面倒なリントから解放されそうです。
……最初はsettings.jsonがうまく機能せず悩んでいたが、setting.jsonという命名にしてしまっていたのはナイショ。