BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Microsoft、VS Codeの言語サーバープロトコルをオープンソース化

Microsoft、VS Codeの言語サーバープロトコルをオープンソース化

原文(投稿日:2016/07/09)へのリンク

MicrosoftはVS Codeが各種言語サーバーとの通信に使っているプロトコルをオープンソース化した。

Visual Studio CodeはMicrosoftが開発しているIDEで、150以上の言語をサポートしている。それを可能にするため、Monaco Editorには、構文チェック、エラー報告などコードを検証し、言語サーバー経由でIntellisenseやリファクタリングのサポートを提供するツールが含まれている。通常、サポートするプログラミング言語ごとにサーバーが1つある。Monacoとサーバー間の通信は、Language Server Protocol (LSP) によって行われる。Microsoftはこのプロトコルをオープンソース化した。

コード検証はリソース負荷の高い作業なので、言語サーバーは別プロセスで動いている。言語サーバーは様々なプログラミング言語で書くことができ、標準入力/標準出力経由で軽量なJSON-RPCベースのプロトコルを使い、エディタと情報をやりとりしている。このプロトコルはV8 debugger protocolにインスパイアされたものだとErich Gamma氏は書いている。彼は現在、MicrosoftのVisual Studioにコンピュータサイエンティストとして関わっている。

LSPはHTTPと似ていて、ヘッダーセクションとそれに続くJSON-RPCコンテンツセクションで構成される。以下にその一部を示す。

Content-Length: ...\r\n
\r\n
{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "textDocument/didOpen",
    "params": {
        ...
    }
}

ヘッダーには、コンテンツの長さとタイプを示す2つのフィールドを含めることができる。コンテンツは言語サーバーに送られたリクエスト、あるいはそれから受け取ったレスポンスを表す。このセクションはメッセージ、通知、コマンドを送信するのに使われる。言語サーバーはサポートするcapabilitiesを示すことで、コード検証に使える機能を提示することができる。異なる言語サーバーに同時に複数のリクエストを送っても、エディタがそれぞれの応答を区別できるよう、各パケットにはIDフィールドが含まれている。

LSPによって、エディタとそれが用いる言語サーバーが切り離されている。おかげで、1つのIDEで複数のサーバーを使ったり、このプロトコルをサポートする複数のIDEで言語サーバーを再利用したりすることが可能だ。Microsoftや他のベンダーは、すでにC++、CSS/LESS/SASS、JSON、PowerShell、Xtext、PHPなどの言語サーバーを開発している。Eclipse CheはLSPを採用しており、それを使ってC/C++、C#、Go、JSON、R、TypeScript、RAML、XMLのサポートを追加する予定だ。またRed HatはEclipse CheにJava言語サーバーを寄贈するという。現在のところ、C#、Haxe、Java、Node.js向けのSDKが用意されている。

 
 

Rate this Article

Relevance
Style
 
 

この記事に星をつける

おすすめ度
スタイル

BT