語言伺服器概觀
Deno 語言伺服器提供 語言伺服器通訊協定 的伺服器實作,特別針對提供程式碼的 Deno 檢視而設計。它整合到命令列中,並可透過 lsp
子命令啟動。
大多數使用者永遠不會直接與伺服器互動,而是透過 vscode_deno
或其他 編輯器擴充功能。此文件是提供給實作編輯器客戶端的人員。
結構
當語言伺服器啟動時,會建立一個包含語言伺服器所有狀態的 LanguageServer
實例。它也定義了所有透過語言伺服器 RPC 協定由用戶端呼叫的方法。
設定
語言伺服器支援工作區的數個設定
deno.enable
deno.enablePaths
deno.cache
deno.certificateStores
deno.config
deno.importMap
deno.internalDebug
deno.codeLens.implementations
deno.codeLens.references
deno.codeLens.referencesAllFunctions
deno.codeLens.test
deno.suggest.completeFunctionCalls
deno.suggest.names
deno.suggest.paths
deno.suggest.autoImports
deno.suggest.imports.autoDiscover
deno.suggest.imports.hosts
deno.lint
deno.tlsCertificate
deno.unsafelyIgnoreCertificateErrors
deno.unstable
語言伺服器支援每個資源的設定
deno.enable
deno.enablePaths
deno.codeLens.test
在 Deno 分析這些設定的過程中,有幾個點。首先,當用戶端發出 initialize
要求時,initializationOptions
會假設為一個代表選項的 deno
命名空間的物件。例如,下列值
{
"enable": true,
"unstable": true
}
會針對語言伺服器這個實例啟用 Deno 和不穩定的 API。
當語言伺服器收到 workspace/didChangeConfiguration
通知時,它會評估用戶端是否已指出它具有 workspaceConfiguration
功能。如果有的話,它會傳送一個 workspace/configuration
要求,其中會包含工作區組態的要求,以及語言伺服器目前追蹤的所有 URI 的組態。
如果用戶端具有 workspaceConfiguration
功能,語言伺服器會在收到 textDocument/didOpen
通知時傳送一個 URI 的組態要求,以取得資源的特定設定。
如果客戶端沒有 workspaceConfiguration
功能,語言伺服器會假設工作區設定套用至所有資源。
指令
語言伺服器可能會向客戶端發出多個指令,而客戶端預期會實作這些指令
deno.cache
- 當有未快取的模組識別碼匯入模組時,會將此指令作為解析程式碼動作傳送。它會傳送一個引數,其中包含要快取的解析識別碼字串。deno.showReferences
- 此指令會作為某些程式碼鏡片的指令傳送,用於顯示參考位置。引數包含指令的主旨識別碼、目標的起始位置和要顯示的參考位置。deno.test
- 此指令會作為測試程式碼鏡片的一部分傳送,客戶端預期會根據引數執行測試,這些引數包括包含測試的識別碼和用於過濾測試的測試名稱。
要求
LSP 目前支援下列自訂要求。客戶端應實作這些要求,才能與 Deno 充分整合,並擁有完整運作的客戶端
-
deno/cache
- 此指令會指示 Deno 嘗試快取模組及其所有相依性。如果只傳遞referrer
,則會載入模組識別碼的所有相依性。如果uris
中有值,則只會快取那些uris
。它預期的參數為
interface CacheParams {
referrer: TextDocumentIdentifier;
uris: TextDocumentIdentifier[];
} -
deno/performance
- 要求傳回 Deno 內部儀器的計時平均值。它不預期任何參數。
-
deno/reloadImportRegistries
- 重新載入匯入登錄檔中的任何快取回應。它不預期任何參數。
-
deno/virtualTextDocument
- 從 LSP 要求虛擬文字文件,這是一個唯讀文件,可以在客戶端顯示。這允許客戶端存取 Deno 快取中的文件,例如遠端模組和內建於 Deno 中的 TypeScript 函式庫檔案。Deno 語言伺服器會將所有內部檔案編碼在自訂架構deno:
下,因此客戶端應將所有deno:
架構的請求路由回deno/virtualTextDocument
API。它還支援
deno:/status.md
的特殊 URL,該 URL 提供標記格式的文字文件,其中包含供使用者顯示的 LSP 狀態詳細資料。它預期的參數為
interface VirtualTextDocumentParams {
textDocument: TextDocumentIdentifier;
} -
deno/task
- 要求傳回可用的 deno 任務,請參閱 task_runner。它不預期任何參數。
通知
目前有一個自訂通知從伺服器傳送至客戶端
-
deno/registryState
- 當deno.suggest.imports.autoDiscover
為true
且要新增至文件的匯入來源未明確設定在deno.suggest.imports.hosts
中時,將會檢查來源,並將通知傳送至客戶端以了解狀態。收到通知時,如果參數
suggestion
為true
,客戶端應提供使用者選擇啟用來源並將其新增至deno.suggest.imports.hosts
的組態。如果suggestion
為false
,客戶端應將其新增至組態為false
,以停止語言伺服器嘗試偵測是否支援建議。通知的參數為
interface RegistryStatusNotificationParams {
origin: string;
suggestions: boolean;
}
語言 ID
語言伺服器支援下列 文字文件語言 ID 的診斷和格式化
"javascript"
"javascriptreact"
"jsx"
非標準,與javascriptreact
相同"typescript"
"typescriptreact"
"tsx"
非標準,與typescriptreact
相同
語言伺服器僅支援下列語言 ID 的格式化
"json"
"jsonc"
"markdown"