You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于在Visual Studio Code扩展中调用并触发GitHub Copilot Chat的技术问询

在Visual Studio Code扩展中调用并触发GitHub Copilot Chat的技术问询

嘿,这个需求完全可行!我之前研究过类似的场景,下面给你拆解具体的实现思路和关键步骤:

核心实现逻辑

GitHub Copilot Chat本身作为VSCode的官方扩展,暴露了一系列内部命令供其他扩展调用,我们可以借助VSCode的扩展API来完成你的需求,大致分为两步:


1. 获取用户选中的代码

这是VSCode扩展开发的基础操作,通过编辑器API就能轻松拿到选中文本:

import * as vscode from 'vscode';

const getSelectedCode = (): string | undefined => {
  const activeEditor = vscode.window.activeTextEditor;
  if (!activeEditor) return undefined;
  return activeEditor.document.getText(activeEditor.selection);
};

2. 触发Copilot Chat并发送自定义提示

Copilot Chat提供了两个关键命令可以直接调用:

  • github.copilot.chat.focus:聚焦到Copilot Chat的输入框
  • github.copilot.chat.sendMessage:直接发送指定内容到Chat

结合起来的完整命令注册示例如下:

export function activate(context: vscode.ExtensionContext) {
  // 注册你的自定义源命令
  const triggerChatCommand = vscode.commands.registerCommand(
    'your-extension-name.code-to-copilot',
    async () => {
      const selectedCode = getSelectedCode();
      if (!selectedCode) {
        vscode.window.showErrorMessage('请先选中一段代码再执行命令!');
        return;
      }

      // 自定义你的提示模板,比如让Copilot优化、解释代码
      const customPrompt = `请帮我优化这段代码,并说明优化点:\n${selectedCode}`;

      try {
        // 先检查Copilot Chat是否已安装并激活
        const copilotChatExt = vscode.extensions.getExtension('GitHub.copilot-chat');
        if (!copilotChatExt) {
          vscode.window.showErrorMessage('请先安装GitHub Copilot Chat扩展!');
          return;
        }
        if (!copilotChatExt.isActive) {
          await copilotChatExt.activate();
        }

        // 触发Chat并发送提示
        await vscode.commands.executeCommand('github.copilot.chat.focus');
        await vscode.commands.executeCommand('github.copilot.chat.sendMessage', customPrompt);
      } catch (err) {
        vscode.window.showErrorMessage(`触发Copilot Chat失败:${(err as Error).message}`);
      }
    }
  );

  context.subscriptions.push(triggerChatCommand);
}

额外注意事项

  • 记得在你的扩展package.json中声明对Copilot Chat的依赖,避免用户未安装时出错:
    "extensionDependencies": [
      "GitHub.copilot-chat"
    ]
    
  • Copilot Chat的内部命令可能会随版本更新调整,如果遇到命令失效的情况,可以查看Copilot Chat扩展的package.json文件,在contributes.commands节点里找最新的命令名称。
  • 你可以根据需求自由定制提示模板,比如添加代码上下文、指定任务类型(重构、注释、bug排查等)。

亲测这个方案完全符合你描述的使用场景——用户选中代码后执行你的命令,就能自动触发Copilot Chat并返回定制化结果。

备注:内容来源于stack exchange,提问作者Will Huang

火山引擎 最新活动