言語拡張機能の概要
Visual Studio Codeは、言語拡張機能を通じて、さまざまなプログラミング言語向けのスマートな編集機能を提供します。VS Codeはコアエディターに組み込みの言語サポートを提供していませんが、リッチな言語機能を可能にする一連のAPIを提供しています。
例えば、HTML 拡張機能は、これらのAPIを使用してHTMLファイルの構文の強調表示を行います。同様に、console.
と入力したときにIntelliSenseにlog
が表示されるのは、TypeScript言語機能拡張機能が動作しているためです。
VS Codeは、これらの拡張機能の一部をエディターにバンドルして、最初から豊富な言語サポートを提供します。
言語機能は、大きく2つのカテゴリに分類できます。
宣言型言語機能
宣言型言語機能は、構成ファイルで定義されます。例として、VS Codeにバンドルされているhtml、css、およびtypescript-basic拡張機能があり、以下の宣言型言語機能の一部を提供します。
- 構文の強調表示
- スニペット補完
- 括弧のマッチング
- 括弧の自動閉じ
- 括弧の自動囲み
- コメントの切り替え
- 自動インデント
- 折りたたみ(マーカーによる)
宣言型言語機能を提供する言語拡張機能の作成に関する3つのガイドがあります。
- 構文の強調表示ガイド: VS Codeは、構文の強調表示にTextMate文法を使用します。このガイドでは、シンプルなTextMate文法を作成し、それをVS Code拡張機能に変換する方法を順を追って説明します。
- スニペット補完ガイド: このガイドでは、一連のスニペットを拡張機能にバンドルする方法を説明します。
- 言語構成ガイド: VS Codeは、任意のプログラミング言語に対して言語構成を定義することを拡張機能に許可しています。このファイルは、コメントの切り替え、括弧のマッチング/囲み、領域の折りたたみ(レガシー)などの基本的な編集機能を制御します。
プログラムによる言語機能
プログラムによる言語機能には、自動補完、エラーチェック、定義へのジャンプが含まれます。これらの機能は、プロジェクトを分析して動的な機能を提供するLanguage Serverによって提供されることがよくあります。一例として、VS Codeにバンドルされているtypescript-language-features
拡張機能があります。これはTypeScript Language Serviceを利用して、次のようなプログラムによる言語機能を提供します。
- ホバー情報(
vscode.languages.registerHoverProvider
) - 自動補完(
vscode.languages.registerCompletionItemProvider
) - 定義へのジャンプ(
vscode.languages.registerDefinitionProvider
) - エラーチェック
- フォーマット
- リファクタリング
- 折りたたみ
完全なリストはプログラムによる言語機能をご覧ください。
Language Server Protocol
Language Server(静的コード分析ツール)とLanguage Client(通常はソースコードエディター)間の通信を標準化することにより、Language Server Protocolは、拡張機能の作成者が1つのコード分析プログラムを作成し、複数のエディターで再利用することを可能にします。
プログラムによる言語機能の一覧では、すべてのVS Code言語機能と、それらがLanguage Server Protocol Specificationにどのように対応しているかを見つけることができます。
VS CodeでLanguage Server拡張機能を実装する方法を説明する詳細なガイドを提供しています。
特殊なケース
マルチルートワークスペースのサポート
ユーザーがマルチルートワークスペースを開いた場合、Language Server拡張機能をそれに応じて適応させる必要があるかもしれません。このトピックでは、マルチルートワークスペースをサポートするための複数のアプローチについて説明します。
埋め込み言語
埋め込み言語は、ウェブ開発で一般的です。例えば、HTML内のCSS/JavaScript、JavaScript/TypeScript内のGraphQLなどです。埋め込み言語のトピックでは、埋め込み言語で言語機能を利用できるようにする方法について説明します。