现已推出!阅读 10 月份的新功能和修复。

扩展功能概述

Visual Studio Code 提供了许多方法让扩展扩展其功能。有时可能很难找到要使用的正确贡献点VS Code API。本主题将扩展功能划分为几个类别。每个类别都描述了

  • 你的扩展可以使用的一些功能
  • 有关使用这些功能的更详细主题的链接
  • 一些扩展想法

但是,我们也对扩展施加了限制,以确保 VS Code 的稳定性和性能。例如,扩展无法访问 VS Code UI 的 DOM。

常见功能

常见功能 是你可以使用在任何扩展中的核心功能部分。

以下是一些功能:

  • 注册命令、配置、键绑定或上下文菜单项。
  • 存储工作区或全局数据。
  • 显示通知消息。
  • 使用快速选择收集用户输入。
  • 打开系统文件选择器,让用户选择文件或文件夹。
  • 使用进度 API 指示长时间运行的操作。

主题

主题 控制 VS Code 的外观,包括编辑器中源代码的颜色和 VS Code UI 的颜色。如果你曾经想要让它看起来像你在黑客帝国中编程一样,让 VS Code 呈现出不同的绿色色调,或者只是想要创建一个极简的灰度色工作区,那么主题就是为你准备的。

扩展想法

  • 更改源代码的颜色。
  • 更改 VS Code UI 的颜色。
  • 将现有 TextMate 主题移植到 VS Code。
  • 添加自定义文件图标。

声明式语言功能

声明式语言功能 为编程语言添加基本的文本编辑支持,例如括号匹配、自动缩进和语法高亮。这可以通过声明的方式完成,无需编写任何代码。有关更高级的语言功能,例如 IntelliSense 或调试,请参阅编程语言功能

扩展想法

  • 将常见的 JavaScript 代码片段捆绑到扩展中。
  • 告诉 VS Code 有关新的编程语言。
  • 添加或替换编程语言的语法。
  • 使用语法注入扩展现有语法。
  • 将现有 TextMate 语法移植到 VS Code。

编程语言功能

编程语言功能 添加丰富的编程语言支持,例如悬停、转到定义、诊断错误、IntelliSense 和 CodeLens。这些语言功能通过vscode.languages.* API 公开。扩展可以直接使用这些 API,或编写一个语言服务器,并使用 VS Code 的语言服务器库 将其适配到 VS Code。

虽然我们提供了语言功能 及其预期用法的列表,但没有任何东西可以阻止你创造性地使用这些 API。例如,CodeLens 和悬停是展示内联附加信息的好方法,而诊断错误可用于突出显示拼写错误或代码样式错误。

扩展想法

  • 添加显示 API 使用示例的悬停。
  • 使用诊断报告源代码中的拼写错误或 linter 错误。
  • 为 HTML 注册新的代码格式化程序。
  • 提供丰富的上下文感知 IntelliSense。
  • 为语言添加折叠、面包屑和大纲支持。

工作台扩展

工作台扩展 扩展 VS Code 工作台 UI。为文件资源管理器添加新的右键单击操作,甚至可以使用 VS Code 的TreeView API 构建自定义资源管理器。如果你的扩展需要完全自定义的用户界面,请使用Webview API 使用标准 HTML、CSS 和 JavaScript 构建自己的文档预览或 UI。

扩展想法

  • 为文件资源管理器添加自定义上下文菜单操作。
  • 在侧边栏中创建新的交互式 TreeView。
  • 定义新的活动栏视图。
  • 在状态栏中显示新信息。
  • 使用 WebView API 呈现自定义内容。
  • 贡献源代码管理提供者。

调试

你可以通过编写调试器扩展 来利用 VS Code 的调试 功能,这些扩展将 VS Code 的调试 UI 连接到特定调试器或运行时。

扩展想法

  • 通过贡献调试适配器实现 将 VS Code 的调试 UI 连接到调试器或运行时。
  • 指定调试器扩展支持的语言。
  • 为调试器使用的调试配置属性提供丰富的 IntelliSense 和悬停信息。
  • 提供调试配置代码片段。

另一方面,VS Code 还提供了一组调试扩展 API,你可以使用它在任何 VS Code 调试器之上实现与调试相关的功能,以自动执行用户的调试体验。

扩展想法

  • 根据动态创建的调试配置启动调试会话。
  • 跟踪调试会话的生命周期。
  • 以编程方式创建和管理断点。

UX 指南

为了帮助你的扩展无缝地融入 VS Code 用户界面,请参阅UX 指南,在这里你将了解创建扩展 UI 的最佳实践以及遵循首选 VS Code 工作流程的约定。

限制

我们对扩展施加了一些限制。以下是这些限制及其目的。

禁止访问 DOM

扩展无法访问 VS Code UI 的 DOM。你不能编写一个将自定义 CSS 应用于 VS Code 或将 HTML 元素添加到 VS Code UI 的扩展。

在 VS Code 中,我们不断尝试优化对底层 Web 技术的使用,以提供始终可用的、高响应的编辑器,并且随着这些技术和我们的产品发展,我们将继续调整我们对 DOM 的使用。为了确保扩展无法干扰 VS Code 的稳定性和性能,并且我们能够继续改进 VS Code 的 DOM 而不破坏现有扩展,我们将在扩展宿主 进程中运行扩展并阻止直接访问 DOM。

禁止使用自定义样式表

用户或扩展提供的自定义样式表将与 DOM 结构和类名相冲突。这些没有记录,因为我们认为它们是内部的。为了发展、重构或改进 VS Code,我们需要有权对用户界面进行更改。任何对 DOM 的更改都可能破坏现有的自定义样式表,从而导致样式表提供者感到沮丧,并导致用户体验不佳,出现来自损坏样式表的 UI 故障。

相反,VS Code 旨在提供一个设计良好的扩展 API,支持 UI 自定义。该 API 经过了记录,并附带工具和示例,并且在 VS Code 的所有即将发布的版本中保持稳定。