vscode languageserver node
release
此儲存庫包含以下 npm 模組的程式碼:
所有 npm 模組均使用一個 Azure Pipeline 建置。其狀態為:
按一下此處以取得有關如何使用這些 npm 模組為 VSCode 實作語言伺服器的詳細文件。
克隆儲存庫後,執行npm install
以安裝依賴項,並npm run symlink
將此儲存庫中的套件相互指向。
5.5.x
20.9.0
和es2022
。另請參閱 TypeScript 的節點目標對應。vscode-jsonrpc
、 vscode-languageserver-protocol
、 vscode-languageclient
和vscode-languageserver
現在使用exports
屬性,而不是main
和typings
屬性。這可能需要在module
和moduleResolution
周圍的 tsconfig.json 檔案中採用。 LSP 函式庫目前使用node16
作為這兩個值。CancellationToken
以使其與其他中間件保持一致。這是一個重大更改,因為它添加了必需的參數。 client . getFeature ( lsclient . FoldingRangeRequest . method ) . getProvider ( document ) ?. provider ;
圖書館的具體變化是:
start
和stop
方法。這兩個方法現在都回傳一個承諾,因為這些方法是非同步的。這是一個重大變化,因為 start 之前返回了一次性的。擴展現在應該在其擴展主文件中實現停用功能,並從停用調用正確返回stop
承諾。因此, onReady()
被刪除,因為擴充現在可以等待start()
呼叫。像這樣的舊程式碼 const client : LanguageClient = ... ;
client . start ( ) ;
await client . onReady ( ) ;
應該變成:
const client : LanguageClient = ... ;
await client . start ( ) ;
sendNotification
方法現在都回傳一個承諾。返回承諾是必要的,因為將訊息實際寫入底層傳輸是異步的,並且客戶端無法確定通知是否已傳遞給傳輸。這是一個重大變化,因為它可能會導致浮動承諾並可能被 linter 標記。handleFailedRequest
的行為已更改。當從伺服器收到異常時,該方法不再傳回預設值,而是重新拋出錯誤。這可確保使用 VS Code 對錯誤的預設行為。此方法也以下列方式處理RequestCancelled
和ServerCancelled
:ServerCancelled
且用戶端沒有取消請求,也會拋出 CancellationError 來要求客戶端重新執行請求。RequestCancelled
那麼通常客戶端應該取消請求並且程式碼將傳回預設值(根據 3.16 規範的最佳解釋)。如果用戶端尚未取消,則將RequestCancelled
解釋為ServerCancelled
。null
)取消,則用戶端中間件的下一個處理程序現在會丟棄伺服器結果。這是一個重大更改,因為在該程式庫的早期版本中,中間件會看到 VS Code 也未使用的結果。進行此更改是為了透過不轉換未使用的回應結果來節省 CPU 和記憶體。有關協議 3.16.0 版本中所做更改的詳細列表,請參閱 3.16 規範的更改日誌。
圖書館的具體變化是:
messages
屬性重新命名為registrationType
並傳回對應的RegistrationType
。另外從register
方法中刪除第一個參數。ErrorCodes
。 LSP 特定錯誤代碼已移至新的命名空間LSPErrorCodes
。 jsonrpc
中的命名空間ErrorCodes
未正確保留用於 JSON RPC 特定錯誤代碼。這是一個突破性的改變。若要解決此問題,請改用LSPErrorCodes
。vscode-jsonrpc
為例:(a) import vscode-jsonrpc
只會匯入公用程式碼,(b) import vscode-jsonrpcnode
將匯入公用程式碼和節點碼,(c) import vscode-jsonrpcbrowser
將匯入公共代碼和瀏覽器代碼。vscode-jsonrpc
中發送請求和通知時控制參數結構的支援。建立請求或通知類型時,或使用sendRequest
或sendNotification
函數傳送非類型化請求或通知時,可以使用附加的parameterStructures
參數來控制參數結構。預設值為ParameterStructures.auto
,它執行以下操作:byPosition
用於具有零個或大於一個參數的訊息byName
作為物件文字參數。對所有其他參數使用byPosition
。 SelectionRangeRequest
協定:SelectionRange
SelectionRangeRequest
、 SelectionRangeParams
、 SelectionRangeClientCapabilities
、 SelectionRangeServerCapabilities
、 SelectionRangeProviderOptions
、vscode-languageserver-textdocument
提供了具有基本增量更新的標準文字文件實作。伺服器現在需要預先安裝此 npm 套件。new TextDocuments
。以下是 TypeScript 和 JavaScript 中的範例 import { TextDocuments } from 'vscode-languageserver' ;
import { TextDocument } from 'vscode-languageserver-textdocument' ;
const documents = new TextDocuments ( TextDocument ) ;
const server = require ( "vscode-languageserver" ) ;
const textDocument = require ( "vscode-languageserver-textdocument" ) ;
const documents = new server . TextDocuments ( textDocument . TextDocument ) ;
RenameOptions
FoldingRangeRequestParam
重新命名為“FoldingRangeParams”(仍提供FoldingRangeRequestParam
以實現向後相容性)package.json
檔案中的engines.vscode
中指定的預期客戶端版本是否與客戶端執行的 VS Code 版本相符。Color
、 ColorInformation
、 ColorPresentation
移至 TypesFoldingRangeRequest
協定:FoldingRange
、 FoldingRangeKind
FoldingRangeRequest
、 FoldingRangeRequestParam
、 FoldingRangeClientCapabilities
、 FoldingRangeServerCapabilities
、 FoldingRangeProviderOptions
、CompletionItem
上preselect
屬性的支持新增對診斷中相關資訊的支援。
初始化異常被吞掉
VSCode 中仍未顯示重新命名錯誤
TerminateProcess.sh 未在 dist 套件中提供
新增中間件攔截textDocument/publishDiagnostics
provideCompletionItem?: ( this : void , document : TextDocument , position : VPosition , token : CancellationToken , next : ProvideCompletionItemsSignature ) => ProviderResult < VCompletionItem [ ] | VCompletionList > ;
現在包含一個附加參數context
:
provideCompletionItem?: ( this : void , document : TextDocument , position : VPosition , context : VCompletionContext , token : CancellationToken , next : ProvideCompletionItemsSignature ) => ProviderResult < VCompletionItem [ ] | VCompletionList > ;
vscode-languageserver-protocol
,其中包含 TypeScript 中的協定定義。該模組現在在客戶端和伺服器之間共用。protocol
、 client
和server
npm 模組中新增了對提議協議的支援。即使提議的協定包含在穩定版本的 npm 模組中,也可能會發生變化。client/registerFeature
使用錯誤的名稱:應該是client/registerCapability
WorkspaceEdit
符合 3.x 版本的規格並向後相容於 2.x 版本的函式庫。RequestCancelled
錯誤代碼。Files.uriToFilePath
轉而使用 vscode-uri npm 模組,該模組為 VS Code 提供了更完整的 URI 實作。rootPath
設為可選,因為它在 3.x 中已棄用。client/registerCapability
和client/unregisterCapability
動態註冊和取消註冊功能處理程序。workspace/executeCommand
將命令執行委託給伺服器。InsertTextFormat
let client = new LanguageClient ( ... ) ;
client . onReady ( ) . then ( ( ) => {
client . onNotification ( ... ) ;
client . sendRequest ( ... ) ;
) ;
// Old
import { Protocol2Code , ... } from 'vscode-languageclient' ;
Protocol2Code . asTextEdits ( edits ) ;
// New
let client = new LanguageClient ( ... ) ;
client . protocol2CodeConverter . asTextEdits ( edits ) ;
LanguageClient
在 VS Code 擴充中使用。您可以在此處找到有關如何將 VS Code 擴充功能升級到 TypeScript 2.xx 的詳細步驟。activeSignature
和activeParameter
在SignatureHelp
中被錯誤地聲明為可選。它們現在是強制性的。protocol.ts
檔案在 2.x 中使用枚舉類型。然而,協議本身是基於數字的,因為無法假設實現語言中是否存在枚舉類型。為了更清楚地說明這一點,枚舉被帶有或文字類型定義的數字類型取代。如果在沒有適當範圍檢查的情況下將數字直接指派給先前的枚舉類型,則可能會導致編譯錯誤。RequestType
或NotificationType
並新增void 作為註冊選項類型。請記住在客戶端和伺服器端都更新此內容: // Old
export namespace MyRequest {
export const type : RequestType < MyParams , MyResult , void > = { get method ( ) { return 'myRequest' ; } } ;
}
export namespace MyNotification {
export const type : NotificationType < MyParams > = { get method ( ) { return 'myNotification' ; } } ;
}
// New
export namespace MyRequest {
export const type = new RequestType < MyParams , MyResult , void , void > ( 'myRequest' ) ;
}
export namespace MyNotification {
export const type = new NotificationType < MyParams , void > ( 'myNotification' ) ;
}
LanguageClientOptions.errorHandler
)。預設策略是重新啟動伺服器,除非最近 3 分鐘內崩潰了 5 次或以上。麻省理工學院