|
@@ -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` 不变
|
|
|
|
|
+- 输出格式不变
|