## 背景
[[golangci-lint]]のv2が最近リリースされた。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" />
<span class="link-card-v2-site-name">GitHub</span>
</div>
<div class="link-card-v2-title">
golangci-lint/CHANGELOG.md at main · golangci/golangci-lint
</div>
<div class="link-card-v2-content">
Fast linters runner for Go. Contribute to golangci/golangci-lint development by creating an account on GitHub.
</div>
<img class="link-card-v2-image" src="https://repository-images.githubusercontent.com/132145189/05239680-dfaf-11e9-9646-2c3ef2f5f8d4" />
<a href="https://github.com/golangci/golangci-lint/blob/main/CHANGELOG.md#v200"></a>
</div>
v1では[[Neovim]]でも動作しない問題があったのでバージョンアップする。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📝NeovimでGoのファイルを開くとgolangci-lintがunknown flag --output.json.pathエラー
</div>
<div class="link-card-v2-content">nvim-lspconfigがgolangci-lintのv2対応されたから。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/troubleshooting.webp" />
<a data-href="📝NeovimでGoのファイルを開くとgolangci-lintがunknown flag --output.json.pathエラー" class="internal-link"></a>
</div>
%%[[📝NeovimでGoのファイルを開くとgolangci-lintがunknown flag --output.json.pathエラー]]%%
## アップデート
バージョン 1.24.1 から 2.0.2 にアップデート。
```console
mise up golangci-lint
```
## マイグレーション
マイグレーションガイドを参考にする。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://golangci-lint.run/favicon-32x32.png?v=6f2f64f27c627571f538b670491b3f23" />
<span class="link-card-v2-site-name">golangci-lint</span>
</div>
<div class="link-card-v2-title">
Migration guide | golangci-lint
</div>
<div class="link-card-v2-content">
Fast Go linters runner golangci-lint.
</div>
<img class="link-card-v2-image" src="https://golangci-lint.run/logo.png" />
<a href="https://golangci-lint.run/product/migration-guide/#command-migrate"></a>
</div>
コマンド一発でいけそう。コメントは移行されないので注意。
```console
$ golangci-lint migrate
WARN The configuration comments are not migrated.
WARN Details about the migration: https://golangci-lint.run/product/migration-guide/
```
### 変更前
```yaml
linters:
disable-all: true
enable:
# 暗黙的な変更を回避するため明示的に指定する
- govet
- errcheck
- gosimple
- ineffassign
- staticcheck
- unused
# 以降は明示的に追加
- errorlint
- exhaustive
- exhaustruct
- goimports # コード変更はgoplsで行う
- nakedret
- revive
linters-settings:
nakedret:
max-func-lines: 0 # Naked returnは認めない
severity:
default-severity: error
```
### 変更後
```yaml
version: "2"
linters:
default: none
enable:
- errcheck
- errorlint
- exhaustive
- exhaustruct
- govet
- ineffassign
- nakedret
- revive
- staticcheck
- unused
exclusions:
generated: lax
presets:
- comments
- common-false-positives
- legacy
- std-error-handling
paths:
- third_party$
- builtin$
- examples$
severity:
default: error
formatters:
enable:
- goimports
exclusions:
generated: lax
paths:
- third_party$
- builtin$
- examples$
```
## トラブル
### Naked returnがエラーにならない
以前は[[Naked return]]をエラーにしてた。
```yaml
linters-settings:
nakedret:
max-func-lines: 0 # Naked returnは認めない
```
どうやら `linters-settings` が `linters.settings` に変わったのにmigrationされてなさそう。以下のようにしてやればよい。
```yaml
version: "2"
linters:
enable:
- nakedret
settings:
nakedret:
max-func-lines: 0
```
参考。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" />
<span class="link-card-v2-site-name">GitHub</span>
</div>
<div class="link-card-v2-title">
golangci-lint/.golangci.next.reference.yml at 8c929e0665808d583263d73eabd596e409dd9eb9 · golangci/golangci-lint
</div>
<div class="link-card-v2-content">
Fast linters runner for Go. Contribute to golangci/golangci-lint development by creating an account on GitHub.
</div>
<img class="link-card-v2-image" src="https://repository-images.githubusercontent.com/132145189/05239680-dfaf-11e9-9646-2c3ef2f5f8d4" />
<a href="https://github.com/golangci/golangci-lint/blob/8c929e0665808d583263d73eabd596e409dd9eb9/.golangci.next.reference.yml#L1952"></a>
</div>