现已发布!阅读十月的新功能和修复。

自定义数据格式:不断发展的 HTML 和 CSS 语言特性

2020 年 2 月 24 日,作者:Pine Wu,@octref

网络不断发展,其语言也随之发展。新的实体不断出现在 HTML 和 CSS 规范中。 自定义元素Houdini 允许用户扩展 HTML 和 CSS 语义。如今,许多开发人员使用嵌入 HTML 和 CSS 的编程语言。尽管 HTML 和 CSS 的使用越来越灵活,但编辑器对新功能的支持往往落后于时代。

为了使 Visual Studio Code 中的 HTML 和 CSS 语言支持现代化,我们设计了 自定义数据格式,这是一个用于描述 HTML 和 CSS 实体的声明式 JSON 格式。VS Code 的 HTML 和 CSS 语言服务器可以读取此格式中定义的数据,并为新定义的 HTML 和 CSS 实体提供语言支持。

在本篇博文中,我们将解释该数据格式以及用户和扩展作者如何利用它。

使用自定义数据格式

VS Code 在自动完成和悬停信息中提供有关 HTML/CSS 实体的信息

HTML and CSS Language Features

借助自定义数据格式,用户可以轻松地定义新的 HTML/CSS 实体,并获得自动完成、悬停信息以及其他语言特性。

要开始使用,用户可以编写一个 JSON 文件 html.html-data.json

{
  "version": 1.1,
  "tags": [
    {
      "name": "my-button",
      "description": "My button. You should use it as in `<my-button type='alert'></mybutton>`.",
      "references": [
        {
          "name": "Bootstrap buttons",
          "url": "https://bootstrap.ac.cn/docs/4.0/components/buttons/"
        }
      ]
    }
  ]
}

然后在您的用户或工作区 设置 中定义一个 html.customData 值,指向该数据文件

{
  "html.customData": ["./html.html-data.json"]
}

然后您将获得为定义的实体提供的语言特性

Custom Data helloworld

您可以尝试使用预配置的 自定义数据 hello world 示例 来打开 VS Code。您可以编辑 HTML/CSS 自定义数据文件,以添加、删除或细化自定义实体的定义,并微调语言特性。

html.customDatacss.customData 设置是使用自定义数据的一个良好起点。但是,还有其他方法可以利用自定义数据。在接下来的部分中,我们将描述扩展作者如何共享精选的自定义数据集或利用自定义数据构建语言支持。

通过扩展共享自定义数据

如今,许多 Web 框架都是建立在 HTML 之上的。例如,Mavo 项目使用各种 mv- 属性扩展了 HTML 语法。自定义数据使支持此类 Web 框架变得轻而易举

通过下载 Mavo 扩展,用户将在 HTML 文件中获得所有 Mavo 属性的自动完成和悬停信息

Mavo demo

扩展的源代码位于 vscode-mavo 存储库中。我们希望该项目能够作为在 VS Code 中实现 Web 框架或语言支持的起点。您可以在 vscode-custom-data 中找到有关 contributes.html.customDatacontributes.css.customData 贡献点的更多信息。

将自定义数据用于语言服务器

vscode-html-languageservicevscode-css-languageservice 库允许扩展作者轻松地为扩展或嵌入 HTML 和 CSS 的语言实现语言服务器。最近,我们添加了一个用于加载自定义数据的 API

import { getLanguageService } from 'vscode-html-languageservice'

getLanguageService({
  customDataProviders: [...]
})

我们内置的 HTML 语言服务器 利用此 API 加载我们从各种来源收集的精选自定义数据集

  • HTML、CSS 和 WAI-ARIA 的 W3C 规范
  • Mozilla 开发者网络
  • Mozilla 的 mdn-datamdn-browser-compat-data
  • Chrome 对 CSS 属性使用情况的排名

我们已将此数据集发布到 NPM。您也可以在 GitHub 上 找到该数据。语言服务器作者可以将此数据集与我们的 HTML/CSS 语言服务结合使用,以实现对扩展或嵌入 HTML/CSS 的语言的支持,或者他们可以使用此数据来实现对转换为 HTML/CSS 的语言(例如 Pug 或 Stylus)的支持。最后,我们将继续维护此数据集,以在 VS Code 中为 HTML/CSS 提供最新的语言支持。

总结

VS Code 团队致力于为 Web 语言提供良好的编辑体验。通过自定义数据格式,我们紧跟最新的 HTML 和 CSS 语言特性,并为用户和扩展作者提供了一个简单的界面来自定义他们的 HTML 和 CSS 编辑体验。

Simple interface

您可以在 vscode-custom-data 存储库中阅读有关自定义数据格式的更多信息,您可以在该存储库中打开问题和功能请求。

编码愉快!

Pine Wu,VS Code 团队成员 @octref