扩展功能概述
Visual Studio Code 提供了多种方式让扩展来增强其功能。有时可能很难找到正确的 贡献点 和 VS Code API 来使用。本主题将扩展功能分为几个类别。每个类别描述如下:
- 您的扩展可以使用的一些功能
- 链接到更详细的主题以使用这些功能
- 一些扩展想法
然而,我们也对扩展施加了限制,以确保VS Code的稳定性和性能。例如,扩展无法访问VS Code UI的DOM。
通用功能
Common Capabilities 是您可以在任何扩展中使用的核心功能。
这些能力包括:
- 注册命令、配置、快捷键绑定或上下文菜单项。
- 存储工作区或全局数据。
- 显示通知消息。
- 使用快速选择来收集用户输入。
- 打开系统文件选择器,让用户选择文件或文件夹。
- 使用Progress API来指示长时间运行的操作。
主题
Theming 控制着 VS Code 的外观,包括编辑器中源代码的颜色以及 VS Code 用户界面的颜色。如果你曾经想过通过将 VS Code 变成不同的绿色调来让它看起来像你在编写《黑客帝国》中的代码,或者只是想创建一个终极的、极简的灰度工作空间,那么主题就是为你准备的。
扩展想法
- 更改源代码的颜色。
- 更改 VS Code 用户界面的颜色。
- 将现有的TextMate主题移植到VS Code。
- 添加自定义文件图标。
声明式语言特性
声明式语言特性为编程语言添加了基本的文本编辑支持,例如括号匹配、自动缩进和语法高亮。这是通过声明方式完成的,无需编写任何代码。对于更高级的语言特性,如智能感知或调试,请参阅编程式语言特性。
扩展想法
- 将常见的JavaScript代码片段打包成一个扩展。
- 告诉 VS Code 关于一种新的编程语言。
- 添加或替换编程语言的语法。
- 使用语法注入扩展现有语法。
- 将现有的TextMate语法移植到VS Code。
编程语言特性
编程语言特性 添加了丰富的编程语言支持,例如悬停、转到定义、诊断错误、智能感知和代码镜头。这些语言特性通过 vscode.languages.*
API 暴露出来。扩展可以直接使用这些 API,或者编写一个语言服务器并使用 VS Code 的 语言服务器库 将其适配到 VS Code。
尽管我们提供了语言特性及其预期用途的列表,但没有什么能阻止你创造性地使用这些API。例如,CodeLens和Hovers是内联展示额外信息的好方法,而诊断错误可以用来突出拼写或代码风格错误。
扩展想法
- 添加悬停效果,显示API的示例用法。
- 使用诊断报告源代码中的拼写或linter错误。
- 为HTML注册一个新的代码格式化程序。
- 提供丰富的、上下文感知的智能感知。
- 为一种语言添加折叠、面包屑和大纲支持。
工作台扩展
Workbench 扩展 扩展了 VS Code Workbench 的用户界面。可以向文件资源管理器添加新的右键操作,甚至可以使用 VS Code 的 TreeView API 构建自定义的资源管理器。如果你的扩展需要一个完全自定义的用户界面,可以使用 Webview API 使用标准的 HTML、CSS 和 JavaScript 构建你自己的文档预览或用户界面。
扩展想法
- 向文件资源管理器添加自定义上下文菜单操作。
- 在侧边栏中创建一个新的交互式树视图。
- 定义一个新的活动栏视图。
- 在状态栏中显示新信息。
- 使用
WebView
API渲染自定义内容。 - 贡献源代码控制提供者。
调试
你可以通过编写调试器扩展来利用VS Code的调试功能,这些扩展将VS Code的调试UI连接到特定的调试器或运行时。
扩展想法
- 通过贡献一个调试适配器实现,将VS Code的调试UI连接到调试器或运行时。
- 指定调试器扩展支持的语言。
- 为调试器使用的调试配置属性提供丰富的智能感知和悬停信息。
- 提供调试配置片段。
另一方面,VS Code 还提供了一套 Debug Extension API,通过它你可以在任何 VS Code 调试器的基础上实现调试相关的功能,以自动化用户的调试体验。
扩展想法
- 基于动态创建的调试配置启动调试会话。
- 跟踪调试会话的生命周期。
- 以编程方式创建和管理断点。
用户体验指南
为了帮助您的扩展无缝融入VS Code用户界面,请参考UX指南,您将了解创建扩展用户界面的最佳实践以及遵循首选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 版本中保持稳定。