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