Monorepoなリポジトリでgo.modがネストされた位置にあるときのgoplsの設定

$ gopls version
golang.org/x/tools/gopls v0.7.3
    golang.org/x/tools/gopls@v0.7.3 h1:Lru57ht8vtDMouRskFC085VAjBAZRAISd/lwvwOOV0Q=

Monorepoなリポジトリ内のサブプロジェクトの開発でEmacs + goplsが動かないなーと思っていて *lsp-log* bufferをみると以下のようなエラーが出ていました。

 errors loading workspace: gopls requires a module at the root of your workspace.
You can work with multiple modules by opening each one as a workspace folder.
Improvements to this workflow will be coming soon, and you can learn more here:
https://github.com/golang/tools/blob/master/gopls/doc/workspace.md.
  snapshot=0
  directory=file:///Users/k1low/src/path/to/monorepo

https://github.com/golang/tools/blob/master/gopls/doc/workspace.md によると、通常の設定+Multiple modules構成*1では動かないらしいとのこと。

goplsの experimentalWorkspaceModule の設定を有効にすることで、The workspace moduleという機能を有効になりMultiple modules構成に対応ができるとのこと。

手元の環境では上記を設定とりあえず有効にしてみたらちゃんと補完されました。

Emacsだと以下のような感じ。

(lsp-register-custom-settings
 '(
;; [...]
   ("gopls.experimentalWorkspaceModule" t t)
;; [...]
   ))

*1:私は、「プロジェクトルート以外にgo.modがある構成」と理解しました