言語拡張機能の概要
Visual Studio Codeは、言語拡張機能を通じて、さまざまなプログラミング言語向けの高度な編集機能を提供します。VS Codeのコアエディタ自体には言語サポートは組み込まれていませんが、豊富な言語機能を実現するためのAPIセットが提供されています。
例えば、HTML拡張機能は、これらのAPIを使用してHTMLファイルの構文ハイライトを表示します。同様に、console.と入力したときにIntelliSenseにlogが表示されるのは、TypeScript Language Features拡張機能が動作しているためです。
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 Protocol(言語サーバープロトコル)は、拡張機能開発者が1つのコード解析プログラムを作成し、それを複数のエディタで再利用することを可能にします。
プログラム型言語機能のリストでは、すべてのVS Code言語機能のリストと、それらがどのようにLanguage Server Protocol仕様にマッピングされるかを確認できます。
VS Codeで言語サーバー拡張機能を実装する方法を説明する詳細なガイドを提供しています。

特別なケース
マルチルートワークスペースのサポート
ユーザーがマルチルートワークスペースを開いた場合、それに応じて言語サーバー拡張機能を調整する必要があるかもしれません。このトピックでは、マルチルートワークスペースをサポートするための複数のアプローチについて説明します。
埋め込み言語
埋め込み言語はWeb開発において一般的です。例えば、HTML内のCSS/JavaScriptや、JavaScript/TypeScript内のGraphQLなどです。埋め込み言語のトピックでは、埋め込み言語に対して言語機能を利用可能にする方法について説明します。