[关闭]
@Dale-Lin 2022-05-09T20:57:11.000000Z 字数 4118 阅读 428

Contribution Point

VSCode开发


Contribution Points 是一组在 package.json 中 contributes 字段内的 JSON 声明。插件通过注册 Contribution Points 来扩展 vsCode 中的功能。

contributes.commands

commands 数组包含一组命令,用户可以通过命令面板(Ctrl+Shift+P)输入命令来触发,关键包括 commandtitle 两个:

  1. {
  2. "contributes": [
  3. {
  4. "command": "anyField.commandName",
  5. "title": "commandTitleToShow",
  6. "category": "titlePrefixCategory"
  7. }
  8. ]
  9. }

当一个命令触发时, VSCode 会 emit 一个 activationEvent onCommand:${command}

contributes.viewsContainer

提供一个 view container 到 VSCode 活动区域(activityBar)或面板(panel)中。需要指定 view container 的 idtitleiconid 对应一个 views。

  1. "contributes": {
  2. "viewsContainers": {
  3. "activityBar": [
  4. "id": "custom-view",
  5. "title": "自定义插件",
  6. "icon": "resources/custom.svg"
  7. ]
  8. },
  9. "views": {
  10. "custom-view": [
  11. {
  12. "id": "welcome",
  13. "name": "Welcome"
  14. },
  15. {
  16. "id": "outline",
  17. "name": "Outline"
  18. }
  19. ]
  20. }
  21. }

contributes.views

提供一个 view,必须指定 idname,可以向以下 view containers 提供:

当一个 view 被打开时,VSCode 会 emit 一个 activationEvent onView:${viewId}

可以通过提供 when 属性来控制 view 的可视性:

  1. {
  2. "views": {
  3. "explorer": [
  4. {
  5. "id": "nodeDependencies",
  6. "name": "Node Dependencies",
  7. "when": "workspaceHasPackageJSON",
  8. "icon": "media/dep.svg",
  9. "contextualTitle": "Package Explorer"
  10. }
  11. ]
  12. }
  13. }

view 的内容有两种填充方式:

contributes.viewsWelcome

向自定义 views 提供 welcome 内容。只能作用于空的 treeViews(没有子节点)。任何单行的 command 链接,都会以按钮的形式展示。
view 属性声明了 welcome 内容展示的视图;when 属性可以控制可见性;contents 属性控制了展示的内容:

  1. {
  2. "viewsWelcome": [
  3. {
  4. "view": "scm",
  5. "contents": "In order to use git features, you can open a folder containing a git repository or clone from a URL.\n[Open Folder](command:vscode.openFolder)\n[Clone Repository](command:git.clone)\nTo learn more about how to use git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).",
  6. "when": "config.git.enabled && git.state == initialized && workbenchState == empty"
  7. }
  8. ]
  9. }

contributes.menus

向编辑器或导航条提供一个命令菜单。菜单项定义了选择时执行的 command 和展示条件 when

在必须的 command 属性以外,一个可选的 command 可以通过 alt 属性定义,在打开菜单时按下 Alt 键即可展示。

group 属性定义了菜单项的分组。特殊的 navigation 分组永远展示在菜单的顶部起始位置。

通过 menu 执行一个命令时,VS Code 会尝试推断当前选中的菜单资源,并将其作为命令的参数。例如选中资源管理器的项目,会将所选资源的 URI 作为参数传递;编辑器菜单则会传递当前 document 的 URI。

支持展示菜单栏的位置

  1. {
  2. "menus": {
  3. "editor/title": [
  4. {
  5. "when": "resourceLangId == markdown",
  6. "command": "markdown.showPreview",
  7. "alt": "markdown.showPreviewToSide",
  8. "group": "navigation"
  9. }
  10. ]
  11. }
  12. }

编辑区右键

资源管理器右键

编辑器tab右键

编辑器标题菜单

插件视图右键菜单

Groups 内顺序

菜单栏分组内的顺序通过 @<number> 指定 order id 来实现:

  1. {
  2. "editor/title": [
  3. {
  4. "when": "eidtorHasSelection",
  5. "command": "extension.Command",
  6. "group": "myGroup@1"
  7. }
  8. ]
  9. }

contributes.configuration

confuguration keys 是暴露给用户设置的选项,用户可以在用户设置或者工作区设置里进行配置。

配置可以是一个单独的对象,表示一类配置项;也可以是多类配置项对象组成的数组。

多类配置项的情况下,设置面板里会通过插件子菜单表格的形式展示。

Configuration 例如:

  1. {
  2. "contributes": {
  3. "configuration": {
  4. "title": "TypeScript",
  5. "properties": {
  6. "typescript.useCodeSnippetsOnMethodSuggest": {
  7. "type": "boolean",
  8. "default": false,
  9. "description": "Complete functions with their parameter signature."
  10. },
  11. "typescript.tsdk": {
  12. "type": ["string", "null"],
  13. "default": null,
  14. "markdownDescription": "Specifies how to format absolute dates (e.g. using the `${date}` token) in gutter blame annotations. See the [Moment.js docs](https://momentjs.com/docs/#/displaying/format/) for valid formats"
  15. }
  16. }
  17. }
  18. }
  19. }

string 类型的 property 可以设置 "editPresentation": "multilineText" 来渲染一个多行文本输入框。

在插件中使用 vscode.workspace.getConfiguration('myExtension') 来获取配置。

properties 属性会成为配置项的字典,第一段是命名空间,第二段是小标题,再继续可以有其他配置段落,展示时不会展示第一段的内容;驼峰表示单词间隔,展示时会用空格分开。
例如 gitMagic.blame.dateFormatgitMagic.blame.heatMap.enabled 会展示成:

Blame: Date Format
Blame > Heatmap: Enabled

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注