本站点文档内容均翻译自code.visualstudio.com,仅供个人学习,如有差异请以官网为准。

扩展功能概述

Visual Studio Code 提供了许多扩展其功能的方法。有时很难找到合适的贡献点VS Code API。本主题将扩展功能分为几类。每类描述:

  • 一些您的扩展可以使用的功能
  • 链接到更详细的功能使用主题
  • 一些扩展想法

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

常见功能

常用功能是您可以将在任何扩展中使用的核心功能。

其中一些能力包括:

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

主题化

主题 控制 VS Code 的外观,包括编辑器中源代码的颜色和 VS Code 用户界面的颜色。如果你曾经想过通过让 VS Code 成为不同色调的绿色来模拟在编码矩阵中,或者只是想创建一个终极的、极简的灰度工作区,那么主题就是为你准备的。

扩展创意

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

声明性语言特性

声明性语言特性 为编程语言(如括号匹配、自动缩进和语法高亮)添加基本文本编辑支持。这是通过声明性地完成的,无需编写任何代码。对于更高级的语言特性,如IntelliSense或调试,请参阅 编程语言特性

扩展创意

  • 将常见的JavaScript片段打包成一个扩展。
  • 告诉 VS Code 一种新的编程语言。
  • 添加或替换编程语言的语法。
  • 用语法注入扩展现有语法。
  • 将现有的 TextMate 语法移植到 VS Code。

编程语言特性

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

尽管我们提供了一个语言特性及其预期用途的列表,但没有什么能阻止你创意地使用这些API。例如,CodeLens和Hovers是在线呈现附加信息的好方法,而诊断错误可以用来突出显示拼写或代码风格错误。

扩展创意

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

工作台扩展

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

扩展创意

  • 为文件资源管理器添加自定义上下文菜单操作。
  • 在侧栏中创建一个新的交互式树形视图。
  • 定义一个新的活动栏视图。
  • 在状态栏中显示新信息。
  • 使用自定义内容渲染网页视图应用程序编程接口。
  • 贡献源代码管理提供者。

调试

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

扩展创意

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

另一方面,VS Code 还提供了一组调试扩展 API,通过它可以基于任何 VS Code 调试器实现调试相关的功能,以自动化用户的调试体验。

扩展创意

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

用户体验指南

为了帮助您的扩展无缝融入VS Code用户界面,请参考用户体验指南,在那里您将学习创建扩展用户界面的最佳实践以及遵循VS Code首选工作流程的约定。

限制

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

没有DOM访问

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

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

没有自定义样式表

用户或扩展提供的自定义样式表会针对DOM结构和类名。我们没有将这些文档化,因为我们将它们视为内部的。为了发展、重构或改进VS Code,我们需要自由地对用户界面进行更改。对DOM的任何更改都可能导致现有的自定义样式表失效,这将使样式表提供者感到沮丧,并且由于样式表损坏而出现的UI故障会给用户带来不好的体验。

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