言語拡張の概要
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 では、拡張機能が任意のプログラミング言語の言語設定を定義できます。このファイルは、コメントの切り替え、括弧の照合/囲み、領域の折りたたみ(レガシー)などの基本的な編集機能を制御します。
プログラム的な言語機能
プログラム的な言語機能には、自動補完、エラーチェック、定義へのジャンプなどがあります。これらの機能は、多くの場合、プロジェクトを分析して動的な機能を提供するプログラムである言語サーバーによって強化されます。一例として、VS Code にバンドルされている typescript-language-features
拡張機能があります。これは、TypeScript Language Service を利用して、次のようなプログラム的な言語機能を提供します。
- ホバー情報 (
vscode.languages.registerHoverProvider
) - 自動補完 (
vscode.languages.registerCompletionItemProvider
) - 定義へのジャンプ (
vscode.languages.registerDefinitionProvider
) - エラーチェック
- フォーマット
- リファクタリング
- 折りたたみ
プログラム的な言語機能の完全なリストはこちらです。
言語サーバープロトコル
言語サーバー(静的コード分析ツール)と言語クライアント(通常はソースコードエディター)間の通信を標準化することで、言語サーバープロトコルは、拡張機能開発者が1つのコード分析プログラムを作成し、複数のエディターで再利用できるようにします。
プログラム的な言語機能の一覧で、すべてのVS Code言語機能と、それらが言語サーバープロトコル仕様にどのようにマッピングされているかを確認できます。
VS Codeで言語サーバー拡張機能を実装する方法を説明する詳細なガイドを提供しています
特殊なケース
マルチルートワークスペースのサポート
ユーザーがマルチルートワークスペースを開いた場合、それに応じて言語サーバー拡張機能を適応させる必要があるかもしれません。このトピックでは、マルチルートワークスペースをサポートするための複数のアプローチについて説明します。
埋め込み言語
埋め込み言語はウェブ開発でよく使われます。例えば、HTML内のCSS/JavaScript、JavaScript/TypeScript内のGraphQLなどです。埋め込み言語のトピックでは、埋め込み言語に言語機能を利用できるようにする方法について説明します。