# 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 { // 只在有选中内容时提供 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` 不变 - 输出格式不变