golangci-lintにはModule Pluginという仕組みがあり、設定ファイルを書いてカスタムビルドすることで独自のlinterをgolangci-lintで走らせることができます。これを使って、プロジェクト固有のlinterを組み込んだgolangci-lintをビルドして、VSCodeでも使えるようにします。
だいたい おなかが空いたら golangci-lint の Module Plugin 使おう | 東京科学大学デジタル創作同好会traP に書いてある通りの設定を入れたらよいけど、プロジェクト固有のカスタムビルドを行ったgolangci-lintでlintするためには工夫が要ります。
プロジェクト内にgolangci-lintがビルドされるようにする
以下のような .custom-gcl.yml ファイルを用意します。
version: v2.12.2 name: custom-gcl destination: ./tmp plugins: # 略
コツは name と destination フィールドで、プロジェクト内の tmp/custom-gcl というパスにビルドされたバイナリが出力されるように設定します。このあたりはプロジェクトごとに好きな流儀で調整してください。
VSCode (vscode-go) でプロジェクト内にビルドしたgolangci-lintが使われるようにする
プロジェクト内の tmp/custom-gcl というパスにgolangci-lintがビルドされるとします。
以下のような設定を .vscode/settings.json ファイルに追加することで、VSCode内でカスタムビルドしたgolangci-lintを使ったlintが走るようになります。
{ "go.lintTool": "golangci-lint-v2", "go.alternateTools": { "golangci-lint-v2": "${workspaceFolder}/tmp/custom-gcl" } }
コツは ${workspaceFolder} という変数を使って設定を書くことです。VSCodeの機能として、settings.jsonなどのファイル内で展開される変数を使って設定を記述できます*1。こうすることで、カスタムビルドしたgolangci-lintのバイナリをPATHが通ったディレクトリにコピーする必要がなく、プロジェクト固有のlinterを組み込んで好きに使うことができます。