gopls の no package metadata は build tag 除外ファイルで起きる
Go
開発環境
LSP
Go エディタで定義ジャンプ、hover、コードアクションが特定のファイルだけ効かず、LSP ログに no package metadata for file が出る場合、そのファイルが go list の対象パッケージから除外されている可能性が高い。典型例はファイル先頭に //go:build integration などの build tag があり、エディタ起動時の gopls に対応する tag が渡っていないケース。
確認手順:
- 対象ファイルの先頭に
//go:build ...がないか確認する。 - 対象パッケージで
go list -json ./path/to/packageを実行し、該当ファイルがIgnoredGoFilesに入っていないか見る。 gopls symbols <file>やエディタの LSP ログでno package metadata for fileが出ていれば、コード定義そのものではなくパッケージロード条件の問題として切り分ける。
対処:
- そのファイル上でも LSP を効かせたいなら、エディタの
gopls設定でbuildFlags相当に-tags=<tag>を渡す。 - integration test など普段は除外したいファイルなら、通常開発時は通常ファイル側からジャンプし、integration タグ付きファイルを編集するときだけ tag を有効化する運用にする。
注意点: build tag を常時有効にすると、重い統合テスト補助や Docker/Testcontainers 依存のファイルまで解析対象になることがある。高速な通常開発とタグ付きファイル編集のどちらを優先するかで、プロジェクト設定に入れるか一時設定にするかを決める。