插件功能概览
VS Code 提供了多种可以使用插件来扩展它的功能的方法。插件开发的工作有时候会因为找不到正确的 Contribution 配置项或是 VS Code API 而变得特别困难。这篇文档将插件功能划分为如下几类:
- 一些你的插件可能会用到的功能
- 为这些功能链接到各自详细的页面
- 一些插件的创意
然而,我们也对扩展进行了限制,以确保VS代码的稳定性和性能。例如,扩展无法访问VS Code UI的DOM。
公共功能
公共功能 是你在任何插件中都能用到的核心功能。
这些功能大致包含:
- 注册命令、配置、键位绑定、右键菜单。
- 存储工作区或全局数据。
- 显示提示信息。
- 使用输入提示帮助用户进行输入。
- 打开文件选择窗口来让用户打开文件或打开文件夹。
- 使用进度 API 来示意一个长时间运行的活动。
主题
主题 决定了 VS Code 的外观,包含编辑器中的代码颜色以及 VS Code 用户界面的颜色。如果你想要让 VS Code 显示炫酷的编码界面,或者是显示一个只有黑白灰的极简的工作区,那么你会需要主题的。
开发建议
- 改变源代码的颜色。
- 改变 VS Code 用户界面的颜色。
- 将其它编辑器的主题移植到 VS Code。
- 添加定制的文件图标。
声明式语言功能
声明式语言功能 为编程语言提供了基础的文本编辑支持,例如括号匹配、自动缩进和语法高亮。这是用声明的方式来实现的,不需要写任何的代码。对于一些高级的语言特性,例如代码智能补全和代码调试,你可以查阅 变成语言特性。
开发建议
- 将公共的 JavaScript 代码块导入插件。
- 将一个新的编程语言告知 VS Code。
- 添加或替换一个编程语言的语法。
- 使用语法注入功能扩展一个已存在的语法。
- 将其它编辑器的语法移植到 VS Code 中。
编程语言特性
编程语言特性 为 VS Code 添加了丰富的支持,例如鼠标悬停提示、转到定义、诊断报错、智能补全、CodeLens 功能等。这些语言特性通过 vscode.languages.*
接口提供。一个插件可以直接使用这些 API,或者是编写一个语言服务,通过 语言服务库 将其适配到 VS Code 中。
虽然我们提供了一整个 语言特性的清单,以及它们的使用方法,但你不必循规蹈矩,没有任何事情可以阻拦你的创意。举个例子,CodeLens 和鼠标悬停提示是提供行内提示的绝佳方法,而诊断错误可以用于突出显示拼写或编码风格的错误。
开发建议
- 鼠标悬停显示一个 API 的用法。
- 使用诊断功能来报告代码的拼写错误或是代码风格问题。
- 为 HTML 注册一个新的格式化程序。
- 提供丰富的、具有上下文感知的代码补全功能。
- 添加目录结构、编辑器顶部的面包屑和大纲支持。
工作区插件
工作区插件 扩展了 VS Code 的工作区的用户界面。你可以为文件浏览器添加一个新的右键菜单项,或者是使用 VS Code 的 树形结构视图 接口来创建一个自定义的文件浏览器。如果你的插件需要高度定制用户界面,你可以使用标准的 HTML、CSS、JavaScript,通过 Webview 接口 来创建你的文档或者是用户界面。
开发建议
- 为文件浏览器添加自定义的右键菜单。
- 在侧边栏创建一个可交互的树形视图。
- 定义一个活动条视图。
- 在状态栏中显示信息。
- 使用
WebView
接口渲染一个自定义页面。
- 提供代码版本控制能力(SVN、Git)。
调试
调试插件可以链接到 VS Code 的调试界面,来增强 VS Code 的调试功能。
开发建议
- 通过 调试适配器实现 将 VS Code 的调试界面链接到一个调试器或运行时。
- 将一个调试插件指定为一个语言的支持插件。
- 为调试配置属性提供智能感知和鼠标悬停提示。
- 提供调试配置的代码片段。
另一方面,VS Code 同样提供了一系列的 调试插件 API,使用这些 API 可以在 VS Code 调试器上实现任何与调试相关的功能,来实现用户的自动化调试体验。
开发建议
- 根据动态创建的调试配置启动调试会话。
- 跟踪调试会话的生命周期。
- 用编程的方式创建和管理断点。
用户体验指南
请参考 用户体验指南,这有助于你的插件更适配 VS Code 的用户界面。同样你也可以学习到更适配 VS Code 用户界面和工作流的最佳实践。
限制
我们同样对插件做了一些限制,以下是具体的限制以及目的。
不支持 DOM 操作
插件没有任何修改 VS Code 用户界面的权限,你不可以通过插件来修改 VS Code 的用户界面的任何 CSS 和 HTML。
在 VS Code 的不断迭代中,我们不断尝试优化底层 web 技术的应用,来为用户提供一个高可用性、高响应性的编辑器。随着技术的发展,我们将不断提升对 DOM 的使用程度。为了确保插件不会干扰 VS Code 的稳定性,同样为了确保我们可以在不破坏现有插件的情况下继续改进 VS Code 对 DOM 的应用,我们将插件放在插件宿主中运行,并阻止插件直接访问 DOM。
不支持自定义 CSS
自定义的 CSS 会作用于 DOM 结构。我们认为这些应该是内部提供的,因此并没有文档。出于为了能更好地扩展、重构或是改进 VS Code,我们保留了修改用户界面的能力。任何自定义的 CSS 都可能破坏现有的界面样式,导致破坏用户体验。
VS Code 想要提供一个精心设计的,支持用户界面定制的插件 API。API 应该拥有它的文档,并带有对应的工具和示例,同样需要在未来发布的 VS Code 版本中保证稳定性。