plugin.toml 的文件夹。清单说明插件是谁、需要哪个插件 API、代码在哪里(如果有)、什么时候加载、可以做什么,以及向 IDE 贡献了什么。
示例
顶层字段
未知的顶层字段会报错。
所有路径都相对于插件包目录,且不能跳出该目录。清单作为整体校验:只要有一个贡献无效,整个插件都不会安装或加载。IDE 不认识的贡献类型(来自更新的 API)会被跳过并给出警告。
分类
languages、themes、icon-themes、linters(检查器和格式化工具)、vcs、ai、frameworks、tools、other。
不写 categories 时,贡献了主题、图标主题或语言的插件会归入对应分类,其他插件归入 other。IDE 不认识的分类,以及已认识的前三个之后的分类都会被忽略;openidea-plugin check 会对这两种情况给出警告。
激活
代码按需加载。不写activation 时,代码在第一次执行插件命令时加载。
重复的事件会报错。部分事件类型需要更新的 API:
on-event:files-changed 需要 ^1.3;file-closed、settings-changed、input-mode-changed、run-exited、terminal-exited 和 content-tab-action 需要 ^1.4。
能力
Error::Denied。完整列表及其作用见 权限与能力。
贡献点
每个贡献点是一张表([contributes.settings])或一个表数组([[contributes.commands]])。插件启用后贡献立即生效,不需要等代码加载。
条目 id(命令、视图、主题等)匹配
[a-z0-9][a-z0-9._-]*,不超过 64 个字符。菜单、快捷键和状态栏项只能引用插件自己声明的命令;在 IDE 内部,命令的操作 id 是 plugin.<plugin id>.<command id>。
翻译
插件包用locales/<tag>.json 文件(fr.json、zh-CN.json)翻译自己的文本,不需要在清单里声明。每个文件把英文原文映射到译文:
zh 可以用 zh-TW),应用到清单声明的标题、分类、标签、提示,以及视图显示的文本。插件自己拼出来的文本(通知、错误信息、html 内容)不会被翻译:生成这些文本时读取 host::locale()。如果目录不是“字符串到字符串”的 JSON 对象,openidea-plugin check 会拒绝它。
0.1 格式
旧的 0.1 格式清单(openidea-api = "0.1"、permissions = [...])仍能加载:其 permissions 视为 required 能力,贡献照常生效。但 0.1 的代码不再运行,需要用 1.x SDK 重新构建,并改用 engines.openidea 和 [capabilities]。同一个清单不能混用两种格式。
检查清单
check 按安装时完全相同的规则校验清单、所有贡献和组件。见 测试与调试。