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 還支援 `**` 運算子來匹配零個或多個目錄。
示例
在當前深度排除 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 配置一組匹配當前工作區邏輯構建定義檔案的 glob 模式。對此處指定的任何 glob 模式匹配的檔案的任何磁碟更改都將觸發工作區的重新載入。
只有在具有自定義 GOPACKAGESDRIVER 的環境中才需要自定義此設定。
預設值:`[]`。
格式化
local string
local 等同於 `goimports -local` 標誌,該標誌將以該字串開頭的匯入放在第三方包之後。它應該是需要單獨分組的匯入路徑的字首。
它在整理匯入(在 LSP Organize Imports 請求期間)或插入新匯入(例如,在自動補全期間)時使用;LSP Formatting 請求僅對現有匯入進行排序。
預設值:`""`。
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”選項有三個值:
- false:停用所有 staticcheck 分析器
- true:啟用所有 staticcheck 分析器
- unset:啟用 gopls 維護者為執行時效率和分析精度選擇的 staticcheck 分析器子集。
無論此設定如何,都可以使用 `analyses` 設定選擇性地啟用或停用單個分析器。
預設值:`false`。
staticcheckProvided bool
此設定是實驗性的,可能會被刪除。
預設值:`false`。
annotations map[enum]bool
annotations 指定各種編譯器最佳化細節,這些細節將在啟用“Toggle compiler optimization details”(`gopls.gc_details`)命令為包啟用時作為診斷報告。
(一些使用者在效能分析工作中只關心一種註釋。更重要的是,在大型包中,註釋的數量有時會壓垮使用者介面並超出每個檔案的診斷限制。)
TODO(adonovan): 將此欄位重新命名為 CompilerOptDetail。
每個列舉值必須是以下之一:
"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 在構建其分析事實索引花費時間較長時是否傳送進度通知。取消這些通知將取消索引任務,儘管它會在工作區的下一次更改後重新啟動。
當第一次開啟包並啟用靜態檢查等重量級分析時,構建其所有依賴項的分析事實索引可能需要一些時間。索引快取在檔案系統中,因此後續分析應該更快。
預設值:`true`。
文件
hoverKind enum
hoverKind 控制懸停文字中顯示的資訊。SingleLine 僅供編輯器外掛的作者使用。
必須是以下之一:
"FullDocumentation"
"NoDocumentation"
"SingleLine"
"Structured"
是一個錯誤的實驗性設定,它返回 JSON 懸停格式。不應使用此設定,因為它將在 gopls 的未來版本中刪除。"SynopsisDocumentation"
預設值:`"FullDocumentation"`。
linkTarget string
linkTarget 是 Go 包文件連結的基本 URL,這些連結由 Hover 和 DocumentLinks 等 LSP 操作返回,並在每個 Diagnostic 的 CodeDescription 欄位中返回。
它可以是以下之一:
"godoc.org"
"pkg.go.dev"
如果公司選擇使用自己的 `godoc.org`,也可以使用其地址。
匹配 GOPRIVATE 環境變數的模組將不會在懸停中顯示文件連結。
預設值:`"pkg.go.dev"`。
linksInHover enum
linksInHover 控制懸停 Markdown 中文件連結的存在。
必須是以下之一:
- 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 下找到。