# 插件功能

VS Code 提供了非常多的方法,供插件扩展VS 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或调试,请看编程式添加语言特性

# 插件灵感
  • 将常用的JS代码片段打包到插件中
  • 为VS Code添加新的语言支持
  • 为一门语言添加或替换语法
  • 通过注入的方式,扩展一门语法
  • 将现有的 TextMate 语法迁移到VS Code中

# 编程式添加语言特性


编程式添加语言特性可以为编程语言添加更为丰富的特性,如:悬停提示、转跳定义、错误诊断、IntelliSense和CodeLens。这些语言特性暴露于vscode.languages.*API。语言插件可以直接使用这些API,或是自己写一个语言服务器,通过语言服务器库将它适配到VS Code。

虽然我们提供了一个语言特性列表,但是并不阻碍你发挥想象,自由使用这些API。比方说,在行内显示额外信息,使用CodeLens和代码悬停是非常好的方式,而错误诊断可以高亮拼写或代码风格错误。

# 插件灵感
  • 鼠标悬停于API上时, 出现用法示例
  • 使用诊断,报告代码风格错误
  • 注册新的HTML代码格式化
  • 提供丰富的IntelliSense中间件
  • 为一门语言添加代码折叠、面包屑、轮廓支持

# 扩展工作台


扩展工作台加强了 VS Code 工作台的UI,为资源管理侧边栏添加了新的右击行为,你甚至可以用 TreeViewAPI构建自定义的资源管理侧边栏。如果你的插件需要完全自定义用户界面,那就使用Webview API和HTML,CSS,Javascript构建你自己的UI。

# 插件灵感
  • 自定义资源管理侧边栏的菜单行为
  • 在侧边栏中创建新的、交互式的TreeView
  • 定义新的活动栏视图
  • 在状态栏显示新的信息
  • 使用WebView API显示自定义内容
  • 配置*源控制(git/svn等)*来源

# 调试


你可以利用调试来制作调试器插件,这个插件需要将VS Code的调试UI连接到真实的调试器或者运行时上。

# 插件灵感
  • 通过调试适配器将VS Code的调试UI连接到真实的调试器或者运行时上
  • 通过调试器插件添加语言支持
  • 为调试配置文件添加丰富的智能提示或者悬停信息
  • 为调试配置文件添加代码片段

另一方面,VS Code也提供了非常多的调试器插件API,你可以用来实现任何VS Code调试器相关的功能,加强用户的调试体验。

# 插件灵感
  • 动态生成调试器配置文件,启动调试器会话
  • 跟踪调试会话的声明周期
  • 编程式管理断点

# 限制


最后,我还对插件也提出了一些限制。

# 不可访问DOM

插件没有权限访问VS Code UI的底层DOM,禁止添加自定义的CSS 和 HTML片段到VS Code UI上。

我们在一直努力优化VS Code底层的web技术,为用户创造高可用、持续响应的编辑器,而我们也会继续调整这些技术中使用到的DOM。为了确保不会干扰到VS Code的性能和稳定性,同时不阻断其他插件的运行,所以我们的插件都跑在插件主机进程中,而且阻止了插件直接访问DOM的途径。