現已釋出!閱讀關於 11 月新增功能和修復的內容。

嵌入式程式語言

Visual Studio Code 為程式語言提供了豐富的語言功能。正如您在語言伺服器擴充套件指南中所讀到的,您可以編寫語言伺服器來支援任何程式語言。然而,為嵌入式語言啟用此類支援需要更多的努力。

如今,嵌入式語言越來越多,例如

  • HTML 中的 JavaScript 和 CSS
  • JavaScript 中的 JSX
  • 模板語言中的插值,例如 Vue、Handlebars 和 Razor
  • PHP 中的 HTML

本指南著重於為嵌入式語言實現語言功能。如果您對為嵌入式語言提供語法高亮感興趣,可以在語法高亮指南中找到相關資訊。

本指南包含兩個示例,演示了構建此類語言伺服器的兩種方法:**語言服務**和**請求轉發**。我們將回顧這兩個示例,並總結每種方法的優缺點。

兩個示例的原始碼可以在以下位置找到:

這是我們將要構建的嵌入式語言伺服器

sample

兩個示例都為了演示目的而貢獻了一個新的語言 `html1`。您可以建立一個名為 `.html1` 的檔案並測試以下功能:

  • HTML 標籤的自動完成
  • <style> 標籤內 CSS 的自動完成
  • CSS 的診斷(僅在語言服務示例中)

語言服務

**語言服務**是一個實現程式語言功能的庫,針對單一語言。**語言伺服器**可以嵌入語言服務來處理嵌入式語言。

這是 VS Code 的 HTML 支援大綱

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>

在這種情況下,伺服器檢測到 `