|
@@ -0,0 +1,96 @@
|
|
|
|
|
+# Copy AI Ctx 选中悬浮按钮 — 实现计划
|
|
|
|
|
+
|
|
|
|
|
+> **面向 AI 代理的工作者:** 必需子技能:使用 superpowers:subagent-driven-development(推荐)或 superpowers:executing-plans 逐任务实现此计划。步骤使用复选框(`- [ ]`)语法来跟踪进度。
|
|
|
|
|
+
|
|
|
|
|
+**目标:** 编辑器中划选文本后,通过 CodeAction(💡 灯泡)快速触发"复制选中区域"操作。
|
|
|
|
|
+
|
|
|
|
|
+**架构:** 新增 `codeActionProvider.ts` 文件实现 CodeActionProvider,在 `extension.ts` 中注册。复用已有的 `copySelection` 命令。
|
|
|
|
|
+
|
|
|
|
|
+**技术栈:** VS Code Extension API — `languages.registerCodeActionsProvider`、`CodeAction`、`CodeActionKind.Source`
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+### 任务 1:创建 CodeActionProvider
|
|
|
|
|
+
|
|
|
|
|
+**文件:**
|
|
|
|
|
+- 创建:`src/codeActionProvider.ts`
|
|
|
|
|
+
|
|
|
|
|
+- [ ] **步骤 1:编写 `codeActionProvider.ts`**
|
|
|
|
|
+
|
|
|
|
|
+```typescript
|
|
|
|
|
+import * as vscode from 'vscode';
|
|
|
|
|
+
|
|
|
|
|
+export 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[]> {
|
|
|
|
|
+ // Only provide action when there's a selection
|
|
|
|
|
+ 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];
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+- [ ] **步骤 2:修改 `extension.ts` 注册 Provider**
|
|
|
|
|
+
|
|
|
|
|
+在 `activate` 函数中,导入并注册 CodeActionProvider:
|
|
|
|
|
+
|
|
|
|
|
+```typescript
|
|
|
|
|
+import { CopyAiCodeActionProvider } from './codeActionProvider';
|
|
|
|
|
+
|
|
|
|
|
+// 在 activate 函数末尾,console.log('[copy-ai-ctx] activated'); 之前添加:
|
|
|
|
|
+context.subscriptions.push(
|
|
|
|
|
+ vscode.languages.registerCodeActionsProvider(
|
|
|
|
|
+ { pattern: '**' },
|
|
|
|
|
+ new CopyAiCodeActionProvider(),
|
|
|
|
|
+ {
|
|
|
|
|
+ providedCodeActionKinds:
|
|
|
|
|
+ CopyAiCodeActionProvider.providedCodeActionKinds,
|
|
|
|
|
+ },
|
|
|
|
|
+ ),
|
|
|
|
|
+);
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+- [ ] **步骤 3:运行 build 验证**
|
|
|
|
|
+
|
|
|
|
|
+运行:`npm run build`
|
|
|
|
|
+预期:esbuild 打包成功,无报错退出。
|
|
|
|
|
+
|
|
|
|
|
+- [ ] **步骤 4:Commit**
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+git add src/codeActionProvider.ts src/extension.ts
|
|
|
|
|
+git commit -m "feat: add CodeAction (lightbulb) for copy selection on text selection"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 任务 2:重新打包
|
|
|
|
|
+
|
|
|
|
|
+**文件:**
|
|
|
|
|
+- 修改:`package.json`(bump version)
|
|
|
|
|
+
|
|
|
|
|
+- [ ] **步骤 1:打包 vsix**
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+npm run package
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+- [ ] **步骤 2:Commit**
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+git add CHANGELOG.md package.json
|
|
|
|
|
+git commit -m "chore: bump version for CodeAction feature"
|
|
|
|
|
+```
|