Gopls: 設定

このドキュメントでは、gopls の設定について説明します。

Gopls の設定は、以下の有効なフィールドを持つ JSON オブジェクトによって定義されます。これらのフィールドは gopls 固有のものであり、一般的な LSP クライアントは認識しません。

異なるクライアントは、設定をさまざまな方法でユーザーインターフェースに表示します。たとえば、生の JSON オブジェクトをユーザーが編集することを期待するものもあれば、エディタの設定言語でデータ構造を使用するものもあります。さらに、VS Code のようにグラフィカルな設定システムを持つものもあります。お使いのクライアントで設定をどのように表現するかについては、必ずドキュメントを参照してください。一部のクライアントでは、ワークスペースフォルダーごとに異なる設定を許可しています。

実験的またはデバッグ目的の設定は、そのようにマークされます。

ビルド

buildFlags []string

buildFlags は、ビルドシステムが呼び出されたときに渡されるフラグのセットです。これは、ファイルの検出時に使用される go list などのクエリに適用されます。最も一般的な用途は -tags を設定することです。

デフォルト: []

env map[string]string

env は、gopls、特に go list によって実行される外部コマンドに環境変数を追加します。

デフォルト: {}

directoryFilters []string

directoryFilters は、不要なディレクトリをワークスペースから除外するために使用できます。デフォルトでは、すべてのディレクトリが含まれます。フィルターは、含める場合は +、除外する場合は - の演算子と、ワークスペースフォルダーを基準としたパスプレフィックスで構成されます。これらは順序どおりに評価され、パスに適用される最後のフィルターが、そのパスを含めるかどうかを制御します。パスプレフィックスは空にできるため、最初の - はすべてを除外します。

DirectoryFilters は、0 個以上のディレクトリに一致する ** 演算子もサポートしています。

現在の深度の node_modules を除外: -node_modules

任意の深度の node_modules を除外: -**/node_modules

project_a のみを含める: - (すべて除外)、+project_a

project_a のみを含めるが、その中の node_modules は含めない: -+project_a-project_a/node_modules

デフォルト: ["-**/node_modules"]

templateExtensions []string

templateExtensions は、テンプレートファイルとして扱われるファイル名の拡張子 (ファイル名の最後のドット以降の部分) を指定します。

デフォルト: []

memoryMode string

この設定は実験的なものであり、削除される可能性があります。

廃止されました。効果はありません。

デフォルト: ""

expandWorkspaceToModule bool

この設定は実験的なものであり、削除される可能性があります。

expandWorkspaceToModule は、ワークスペースがモジュールを使用している場合に、どのパッケージを「ワークスペースパッケージ」と見なすかを決定します。

ワークスペースパッケージは、ワークスペース全体の操作のスコープに影響します。特に、gopls はすべてのキーストローク後にワークスペースの一部と見なされるすべてのパッケージを診断するため、「ExpandWorkspaceToModule」を false に設定し、ネストされたワークスペースディレクトリを開くことで、gopls がワークスペースを最新の状態に保つために必要な作業量を減らすことができます。

デフォルト: true

standaloneTags []string

standaloneTags は、実行可能ファイルのメインパッケージ全体を構成する個々の Go ソースファイルを識別するビルド制約のセットを指定します。

スタンドアロンのメインファイルの一般的な例は、//go:build ignore ディレクティブを使用して、パッケージに含めることを意図しないファイル (たとえば、開発者が go run を使用して直接呼び出すファイルなど) を示すという慣習です。

Gopls は、ファイルがパッケージ名「main」を持ち、ビルドディレクティブが「//go:build tag」または「// +build tag」の正確な形式であり、tag がこの設定で構成されたタグのリストに含まれる場合に限り、そのファイルをスタンドアロンのメインファイルと見なします。特に、ビルド制約が単純なタグよりも複雑な場合 (複合制約 //go:build tag && go1.18 など)、そのファイルはスタンドアロンのメインファイルとは見なされません。

この設定は、gopls が Go 1.16 以降でビルドされている場合にのみサポートされます。

デフォルト: ["ignore"]

workspaceFiles []string

workspaceFiles は、現在のワークスペースの論理的なビルドを定義するファイルに一致するグロブのセットを構成します。ここで指定されたグロブに一致するファイルに対するディスク上の変更は、ワークスペースの再ロードをトリガーします。

この設定は、カスタムの GOPACKAGESDRIVER を持つ環境でのみカスタマイズする必要があります。

デフォルト: []

書式設定

local string

local は goimports -local フラグに相当し、この文字列で始まるインポートをサードパーティパッケージの後に配置します。これは、インポートが個別にグループ化されるべきインポートパスのプレフィックスである必要があります。

これは、インポートの整理 (LSP のインポートの整理要求中) または新しいインポートの挿入 (たとえば、補完中) の際に使用されます。LSP の書式設定要求は、既存のインポートをソートするだけです。

デフォルト: ""

gofumpt bool

gofumpt は、gofumpt の書式設定を実行するかどうかを示します。

デフォルト: false

UI

codelenses map[enum]bool

codelenses は、gopls の各 Code Lenses ソースの有効/無効状態を上書きします。

使用例

"gopls": {
...
  "codelenses": {
    "generate": false,  // Don't show the `go generate` lens.
  }
...
}

デフォルト: {"generate":true,"regenerate_cgo":true,"run_govulncheck":false,"tidy":true,"upgrade_dependency":true,"vendor":true}

semanticTokens bool

この設定は実験的なものであり、削除される可能性があります。

semanticTokens は、LSP サーバーがセマンティックトークンをクライアントに送信するかどうかを制御します。

デフォルト: false

noSemanticString bool

この設定は実験的なものであり、削除される可能性があります。

noSemanticString は、セマンティックトークン「string」の送信をオフにします。

非推奨: 代わりに SemanticTokenTypes["string"] = false を使用してください。golang/vscode-go#3632 を参照してください。

デフォルト: false

noSemanticNumber bool

この設定は実験的なものであり、削除される可能性があります。

noSemanticNumber は、セマンティックトークン「number」の送信をオフにします。

非推奨: 代わりに SemanticTokenTypes["number"] = false を使用してください。golang/vscode-go#3632 を参照してください。

デフォルト: false

semanticTokenTypes map[string]bool

この設定は実験的なものであり、削除される可能性があります。

semanticTokenTypes は、セマンティックトークンの種類を構成します。各値を false に設定することで、種類を無効にできます。デフォルトでは、すべての種類が有効になっています。

デフォルト: {}

semanticTokenModifiers map[string]bool

この設定は実験的なものであり、削除される可能性があります。

semanticTokenModifiers は、セマンティックトークンの修飾子を構成します。各値を false に設定することで、修飾子を無効にできます。デフォルトでは、すべての修飾子が有効になっています。

デフォルト: {}

補完

usePlaceholders bool

placeholders は、補完応答で関数パラメーターまたは構造体フィールドのプレースホルダーを有効にします。

デフォルト: false

completionBudget time.Duration

この設定はデバッグ目的のみです。

completionBudget は、補完要求のソフトなレイテンシ目標です。ほとんどの要求は数ミリ秒で完了しますが、場合によっては深い補完に時間がかかることがあります。予算を使い果たすにつれて、タイムリーな結果を確実に戻すために検索スコープを動的に縮小します。ゼロは無制限を意味します。

デフォルト: "100ms"

matcher enum

これは高度な設定であり、ほとんどの gopls ユーザーが構成すべきではありません。

matcher は、補完候補を計算するときに使用されるアルゴリズムを設定します。

次のいずれかでなければなりません。

  • "CaseInsensitive"
  • "CaseSensitive"
  • "Fuzzy"

デフォルト: "Fuzzy"

experimentalPostfixCompletions bool

この設定は実験的なものであり、削除される可能性があります。

experimentalPostfixCompletions は、「someSlice.sort!」などの人工的なメソッドスニペットを有効にします。

デフォルト: true

completeFunctionCalls bool

completeFunctionCalls は関数呼び出しの補完を有効にします。

ステートメントを補完するとき、または関数の戻り値の型が補完される式の期待値と一致する場合、補完は呼び出し式 (つまり、括弧を含む場合があります) を提案する場合があります。

デフォルト: true

診断

analyses map[string]bool

analyses は、ユーザーが有効または無効にしたい分析を指定します。有効/無効にすべき分析パスの名前のマップです。gopls が使用するアナライザーの完全なリストは、analyzers.md で確認できます。

使用例

...
"analyses": {
  "unreachable": false, // Disable the unreachable analyzer.
  "unusedvariable": true  // Enable the unusedvariable analyzer.
}
...

デフォルト: {}

staticcheck bool

この設定は実験的なものであり、削除される可能性があります。

staticcheck は、staticcheck.io の分析のデフォルトセットを構成します。これらの分析は、Staticcheck のウェブサイトに記載されています。

「staticcheck」オプションには 3 つの値があります。

  • false: すべての staticcheck アナライザーを無効にする
  • true: すべての staticcheck アナライザーを有効にする
  • unset: gopls メンテナーがランタイム効率と分析精度のために選択した staticcheck アナライザーのサブセットを有効にする

この設定に関わらず、analyses 設定を使用して個々のアナライザーを選択的に有効または無効にできます。

デフォルト: false

staticcheckProvided bool

この設定は実験的なものであり、削除される可能性があります。

デフォルト: false

annotations map[enum]bool

annotations は、「コンパイラ最適化の詳細の切り替え」 (gopls.gc_details) コマンドによってパッケージで有効になったときに、診断として報告されるべきさまざまな種類のコンパイラ最適化の詳細を指定します。

(一部のユーザーは、プロファイリングの取り組みにおいて特定の種類の注釈のみに関心があります。さらに重要なことに、大規模なパッケージでは、注釈の数がユーザーインターフェースを圧倒したり、ファイルごとの診断制限を超えたりする場合があります。)

TODO(adonovan): このフィールドを CompilerOptDetail に変更します。

各 enum は次のいずれかでなければなりません。

  • "bounds" は境界チェックの診断を制御します。
  • "escape" はエスケープ選択に関する診断を制御します。
  • "inline" はインライン化選択に関する診断を制御します。
  • "nil" は nil チェックを制御します。

デフォルト: {"bounds":true,"escape":true,"inline":true,"nil":true}

vulncheck enum

この設定は実験的なものであり、削除される可能性があります。

vulncheck は脆弱性スキャンを有効にします。

次のいずれかでなければなりません。

  • "Imports": Imports モードでは、gopls は分析対象のメインモジュールによって直接的および間接的に使用されるパッケージに影響する脆弱性を報告します。
  • "Off": 脆弱性分析を無効にします。

デフォルト: "Off"

diagnosticsDelay time.Duration

これは高度な設定であり、ほとんどの gopls ユーザーが構成すべきではありません。

diagnosticsDelay は、gopls が最も新しいファイル変更後に深い診断を計算するまで待機する時間を制御します。単純な診断 (解析と型チェック) は、最近変更されたパッケージに対して常にすぐに実行されます。

このオプションは、"250ms" のような有効な期間文字列に設定する必要があります。

デフォルト: "1s"

diagnosticsTrigger enum

この設定は実験的なものであり、削除される可能性があります。

diagnosticsTrigger は、診断を実行するタイミングを制御します。

次のいずれかでなければなりません。

  • "Edit": ファイルの編集時と保存時に診断をトリガーします。(デフォルト)
  • "Save": ファイルの保存時のみ診断をトリガーします。最初のワークスペースロードや設定変更などのイベントでも診断はトリガーされます。

デフォルト: "Edit"

analysisProgressReporting bool

analysisProgressReporting は、分析事実のインデックスの構築に時間がかかるときに gopls が進捗通知を送信するかどうかを制御します。これらの通知をキャンセルすると、インデックス作成タスクはキャンセルされますが、ワークスペースで次の変更があった後に再開されます。

パッケージが初めて開かれ、staticcheck のような重い分析が有効になっている場合、そのすべての依存関係の分析事実のインデックスを構築するのに時間がかかることがあります。インデックスはファイルシステムにキャッシュされるため、その後の分析は高速になります。

デフォルト: true

ドキュメント

hoverKind enum

hoverKind は、ホバーテキストに表示される情報を制御します。SingleLine は、エディタプラグインの作成者のみが使用することを目的としています。

次のいずれかでなければなりません。

  • "FullDocumentation"
  • "NoDocumentation"
  • "SingleLine"
  • "Structured" は、JSON ホバー形式を返す誤った実験的な設定です。この設定は、将来の gopls リリースで削除されるため、使用しないでください。
  • "SynopsisDocumentation"

デフォルト: "FullDocumentation"

linkTarget string

linkTarget は、Hover や DocumentLinks などの LSP 操作によって返される Go パッケージドキュメントへのリンク、および各診断の CodeDescription フィールドにあるリンクのベース URL です。

次のいずれかになります。

  • "godoc.org"
  • "pkg.go.dev"

企業が独自の godoc.org を使用することを選択した場合、そのアドレスも使用できます。

GOPRIVATE 環境変数に一致するモジュールには、ホバーにドキュメントリンクが表示されません。

デフォルト: "pkg.go.dev"

linksInHover enum

linksInHover は、ホバーマークダウン内のドキュメントリンクの有無を制御します。

次のいずれかでなければなりません。

  • false: リンクを表示しない
  • true: linkTarget ドメインへのリンクを表示する
  • "gopls": gopls の内部ドキュメントビューアへのリンクを表示する

デフォルト: true

インレイヒント

hints map[enum]bool

この設定は実験的なものであり、削除される可能性があります。

hints は、ユーザーが見たいインレイヒントを指定します。gopls が使用するヒントの完全なリストは、inlayHints.md で確認できます。

デフォルト: {}

importShortcut enum

importShortcut は、インポートステートメントがドキュメントにリンクするか、定義に移動するかを指定します。

次のいずれかでなければなりません。

  • "Both"
  • "Definition"
  • "Link"

デフォルト: "Both"

symbolMatcher enum

これは高度な設定であり、ほとんどの gopls ユーザーが構成すべきではありません。

symbolMatcher は、ワークスペースシンボルを検索するときに使用されるアルゴリズムを設定します。

次のいずれかでなければなりません。

  • "CaseInsensitive"
  • "CaseSensitive"
  • "FastFuzzy"
  • "Fuzzy"

デフォルト: "FastFuzzy"

symbolStyle enum

これは高度な設定であり、ほとんどの gopls ユーザーが構成すべきではありません。

symbolStyle は、シンボル応答でシンボルがどのように修飾されるかを制御します。

使用例

"gopls": {
...
  "symbolStyle": "Dynamic",
...
}

次のいずれかでなければなりません。

  • "Dynamic" は、特定のシンボルクエリに対して最も高いスコアを生成する修飾子を使用します。ここで「修飾子」とは、完全修飾シンボルの「/」または「.」で区切られた任意のサフィックスです。つまり、「to/pkg.Foo.Field」または単に「Foo.Field」です。
  • "Full" は完全修飾シンボル、つまり「path/to/pkg.Foo.Field」です。
  • "Package" はパッケージ修飾シンボル、つまり「pkg.Foo.Field」です。

デフォルト: "Dynamic"

symbolScope enum

symbolScope は、ワークスペース/シンボル要求に対してどのパッケージが検索されるかを制御します。「workspace」スコープの場合、gopls はワークスペースパッケージのみを検索します。「all」スコープの場合、gopls は依存関係と標準ライブラリを含む、ロードされたすべてのパッケージを検索します。

次のいずれかでなければなりません。

  • "all" は、依存関係を含む、ロードされたすべてのパッケージのシンボルに一致します。
  • "workspace" は、ワークスペースパッケージのシンボルのみに一致します。

デフォルト: "all"

verboseOutput bool

この設定はデバッグ目的のみです。

verboseOutput は、追加のデバッグログを有効にします。

デフォルト: false


このドキュメントのソースファイルは、golang.org/x/tools/gopls/doc の下にあります。