嵌入式程式語言
Visual Studio Code 為程式語言提供了豐富的語言功能。正如您在語言伺服器擴充套件指南中所讀到的,您可以編寫語言伺服器來支援任何程式語言。然而,為嵌入式語言啟用此類支援需要更多的努力。
如今,嵌入式語言越來越多,例如
- HTML 中的 JavaScript 和 CSS
- JavaScript 中的 JSX
- 模板語言中的插值,例如 Vue、Handlebars 和 Razor
- PHP 中的 HTML
本指南著重於為嵌入式語言實現語言功能。如果您對為嵌入式語言提供語法高亮感興趣,可以在語法高亮指南中找到相關資訊。
本指南包含兩個示例,演示了構建此類語言伺服器的兩種方法:**語言服務**和**請求轉發**。我們將回顧這兩個示例,並總結每種方法的優缺點。
兩個示例的原始碼可以在以下位置找到:
這是我們將要構建的嵌入式語言伺服器

兩個示例都為了演示目的而貢獻了一個新的語言 `html1`。您可以建立一個名為 `.html1` 的檔案並測試以下功能:
- HTML 標籤的自動完成
<style>標籤內 CSS 的自動完成- CSS 的診斷(僅在語言服務示例中)
語言服務
**語言服務**是一個實現程式語言功能的庫,針對單一語言。**語言伺服器**可以嵌入語言服務來處理嵌入式語言。
這是 VS Code 的 HTML 支援大綱
- 內建的HTML 擴充套件僅為 HTML 提供語法高亮和語言配置。
- 內建的html-language-features 擴充套件包含一個 HTML 語言伺服器,用於為 HTML 提供程式語言功能。
- HTML 語言伺服器使用vscode-html-languageservice來支援 HTML。
- CSS 語言伺服器使用vscode-css-languageservice來支援 HTML 中的 CSS。
HTML 語言伺服器分析 HTML 文件,將其分解為語言區域,並使用相應的語言服務來處理語言伺服器請求。
例如
- 對於在 `<|` 位置的自動完成請求,HTML 語言伺服器使用 HTML 語言服務來提供 HTML 自動完成。
- 對於在 `<style>.foo { | }</style>` 位置的自動完成請求,HTML 語言伺服器使用 CSS 語言服務來提供 CSS 自動完成。
讓我們來檢視 `lsp-embedded-language-service` 示例,它是 HTML 語言伺服器的一個簡化版本,實現了 HTML 和 CSS 的自動完成,以及 CSS 的診斷錯誤。您可以在這裡找到它。
語言服務示例
**注意**:此示例假定您已瞭解程式語言功能主題和語言伺服器擴充套件指南。程式碼基於lsp-sample。
原始碼可在 microsoft/vscode-extension-samples 找到。
與 lsp-sample 相比,客戶端程式碼是相同的。
如上所述,伺服器將文件分解為不同的語言區域,以處理嵌入式內容。
這裡有一個簡單的例子:
<div></div>
<style>.foo { }</style>
在這種情況下,伺服器檢測到 `