2026-07-14-codeaction-design.md 2.1 KB

Copy AI Ctx 选中悬浮按钮 — 设计规格

概述

在编辑器中划选文本后,通过 VS Code 原生 CodeAction(💡 灯泡)快速触发"复制选中区域"操作,减少操作路径。

变更范围

  • 新增 src/codeActionProvider.ts — CodeAction 提供者
  • 修改 src/extension.ts — 注册 CodeActionProvider
  • 不修改 package.json
  • 不修改现有命令和快捷键

设计方案

CodeAction 提供者

注册一个 SourceAction 类型的 CodeActionProvider,当编辑器中有选中文本时提供"Copy to AI: 选中区域"操作。

class CopyAiCodeActionProvider implements vscode.CodeActionProvider {
  public static readonly providedCodeActionKinds = [
    vscode.CodeActionKind.Source,
  ];

  provideCodeActions(
    document: vscode.TextDocument,
    range: vscode.Range | vscode.Selection,
  ): vscode.ProviderResult<vscode.CodeAction[]> {
    // 只在有选中内容时提供 action
    if (range.isEmpty) return;

    const action = new vscode.CodeAction(
      '$(clippy) Copy to AI: 选中区域',
      vscode.CodeActionKind.Source,
    );
    action.command = {
      command: 'copy-ai-ctx.copySelection',
      title: 'Copy to AI: 选中区域',
    };
    return [action];
  }
}

注册方式

extension.tsactivate 函数中,按语言类型注册:

// 对所有语言注册
context.subscriptions.push(
  vscode.languages.registerCodeActionsProvider(
    { pattern: '**' },
    new CopyAiCodeActionProvider(),
    { providedCodeActionKinds: CopyAiCodeActionProvider.providedCodeActionKinds }
  ),
);

用户流程

划选文本 → 💡 灯泡出现 → 点击灯泡 → "Copy to AI: 选中区域" → 点击 → 复制完成

SourceAction 类型的 CodeAction 在划选后灯泡会直接亮起,点击灯泡会弹出菜单显示所有可用的 SourceAction,用户选择 "Copy to AI: 选中区域" 即可。

不受影响的部分

  • 现有右键菜单不变
  • 快捷键 Shift+Alt+C 不变
  • 核心复制逻辑 copyContext.ts 不变
  • 输出格式不变