Explorar o código

docs: add codeaction design spec

Developer hai 1 mes
pai
achega
f2e815e0a9
Modificáronse 1 ficheiros con 74 adicións e 0 borrados
  1. 74 0
      docs/superpowers/specs/2026-07-14-codeaction-design.md

+ 74 - 0
docs/superpowers/specs/2026-07-14-codeaction-design.md

@@ -0,0 +1,74 @@
+# Copy AI Ctx 选中悬浮按钮 — 设计规格
+
+## 概述
+
+在编辑器中划选文本后,通过 VS Code 原生 CodeAction(💡 灯泡)快速触发"复制选中区域"操作,减少操作路径。
+
+## 变更范围
+
+- 新增 `src/codeActionProvider.ts` — CodeAction 提供者
+- 修改 `src/extension.ts` — 注册 CodeActionProvider
+- 不修改 `package.json`
+- 不修改现有命令和快捷键
+
+## 设计方案
+
+### CodeAction 提供者
+
+注册一个 `SourceAction` 类型的 CodeActionProvider,当编辑器中有选中文本时提供"Copy to AI: 选中区域"操作。
+
+```typescript
+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.ts` 的 `activate` 函数中,按语言类型注册:
+
+```typescript
+// 对所有语言注册
+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` 不变
+- 输出格式不变