贡献点
贡献点是 package.json 里 contributes 下的 JSON 声明。扩展用它们告诉 VS Code:我要加命令、菜单、语言、视图、主题、调试器等。声明本身不执行代码。需要行为时,再在 activate 里注册对应实现。
官方列出的贡献点
authentication、breakpoints、chatAgents、chatInstructions、chatPromptFiles、chatSkills、colors、commands、configuration、configurationDefaults、customEditors、debuggers、grammars、icons、iconThemes、jsonValidation、keybindings、languages、languageModelChatProviders、languageModelTools、menus、problemMatchers、problemPatterns、productIconThemes、resourceLabelFormatters、semanticTokenModifiers、semanticTokenScopes、semanticTokenTypes、snippets、submenus、taskDefinitions、terminal、themes、typescriptServerPlugins、views、viewsContainers、viewsWelcome、walkthroughs。
最常用的几类
| 贡献点 | 作用 |
|---|---|
commands | 命令 ID、标题、分类、图标。用户能从命令面板看见它 |
menus | 把命令挂到右键、编辑器标题、视图标题、命令面板 |
keybindings | 默认快捷键 |
configuration | 设置项的类型、默认值、说明 |
languages | 语言 ID、扩展名、别名 |
grammars | TextMate 语法,负责着色 |
snippets | 代码片段 |
views / viewsContainers | 侧栏或面板里的树、网页视图 |
themes / iconThemes | 颜色主题、文件图标主题 |
debuggers | 调试类型,真正的调试器还要实现调试适配器 |
taskDefinitions | 自定义任务类型,用户能写进 tasks.json |
customEditors | 用自定义界面打开某种文件 |
authentication | 认证提供方的 id 和显示名 |
languageModelTools | 给聊天模型调用的工具,实现用 vscode.lm.registerTool |
同一语言的语法、片段、语言功能要用同一个语言 ID,VS Code 才能把它们算到同一种文件上。
和激活的关系
很多贡献点在被使用时会发出激活事件。例如调用贡献出来的命令会发出 onCommand:${command},展开贡献出来的视图会发出 onView:${viewId}。1.74 之后这些事件可以不手写,但贡献点本身仍然要写,否则界面上没有入口。