vscode languageserver node
release
このリポジトリには、次の npm モジュールのコードが含まれています。
すべての npm モジュールは、1 つの Azure パイプラインを使用して構築されます。そのステータスは次のとおりです。
これらの npm モジュールを使用して VSCode の言語サーバーを実装する方法に関する詳細なドキュメントについては、ここをクリックしてください。
リポジトリのクローンを作成した後、 npm install
実行して依存関係をインストールし、 npm run symlink
実行してこのリポジトリ内のパッケージを相互にポイントします。
5.5.x
にアップグレードされました。20.9.0
およびes2022
に依存するようになりました。 TypeScript のノード ターゲット マッピングも参照してください。vscode-jsonrpc
、 vscode-languageserver-protocol
、 vscode-languageclient
およびvscode-languageserver
、 main
プロパティとtypings
プロパティの代わりに、 exports
プロパティを使用するようになりました。これには、 module
およびmoduleResolution
周りの tsconfig.json ファイルでの採用が必要になる場合があります。 LSP ライブラリは現在、両方の値にnode16
使用しています。CancellationToken
ショー ドキュメント ミドルウェアに追加しました。これは必須パラメータを追加したため、破壊的な変更です。 client . getFeature ( lsclient . FoldingRangeRequest . method ) . getProvider ( document ) ?. provider ;
ライブラリ固有の変更は次のとおりです。
start
メソッドとstop
メソッドのクリーンアップ。これらのメソッドは非同期であるため、両方のメソッドが Promise を返すようになりました。これは、start が以前に使い捨てを返して以来の破壊的な変更です。拡張機能は拡張機能のメイン ファイルに deactivate 関数を実装し、deactivate 呼び出しからstop
Promise を正しく返す必要があります。その結果、拡張機能がstart()
呼び出しを待機できるようになったため、 onReady()
削除されました。このような古いコード const client : LanguageClient = ... ;
client . start ( ) ;
await client . onReady ( ) ;
になるはずです:
const client : LanguageClient = ... ;
await client . start ( ) ;
sendNotification
メソッドが Promise を返すようになりました。基礎となるトランスポートへのメッセージの実際の書き込みは非同期であり、たとえばクライアントは通知がトランスポートに渡されたかどうかを判断できないため、Promise を返すことが必要でした。これは、フローティング Promise になり、リンターによってフラグが立てられる可能性があるという意味で、破壊的変更です。handleFailedRequest
の動作が変更されました。サーバーから例外を受信したときにデフォルト値を返す代わりに、メソッドはエラーを再スローするようになりました。これにより、エラーに対する VS Code のデフォルトの動作が確実に使用されます。このメソッドは、次の方法でRequestCancelled
とServerCancelled
も処理します。ServerCancelled
受信し、クライアントがリクエストをキャンセルしなかった場合は、CancelError をスローして、クライアントにリクエストを再実行するように要求します。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) インポートvscode-jsonrpc
共通コードのみをインポートします。(b) インポートvscode-jsonrpcnode
共通コードとノード コードをインポートします。(c) インポート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
Type に移動されましたFoldingRangeRequest
プロトコルが追加されました: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
が追加されました。このモジュールはクライアントとサーバー間で共有されるようになりました。protocol
、 client
およびserver
npm モジュールに追加されました。提案されたプロトコルは、npm モジュールの安定バージョンで出荷される場合でも変更される可能性があります。client/registerFeature
メソッドの間違った名前の使用を修正しました: client/registerCapability
である必要がありますWorkspaceEdit
3.x バージョンの仕様に準拠し、2.x バージョンのライブラリと下位互換性を持つようになりました。RequestCancelled
エラー コードを追加しました。Files.uriToFilePath
は非推奨となり、VS Code の URI のより完全な実装を提供する vscode-uri npm モジュールが優先されました。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
ファイルは列挙型を使用していました。ただし、実装言語での列挙型の存在については想定できないため、プロトコル自体は数値ベースです。これをより明確にするために、列挙型は、リテラル型定義を備えた数値型に置き換えられました。適切な範囲チェックを行わずに数値が以前の列挙型に直接割り当てられた場合、コンパイル エラーが発生する可能性があります。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 回以上クラッシュしない限り、サーバーを再起動します。マサチューセッツ工科大学