Quellcode durchsuchen

feat: add CodeAction (lightbulb) for copy selection on text selection

Developer vor 1 Monat
Ursprung
Commit
5fcb0c1975

+ 10 - 2
CHANGELOG.md

@@ -1,10 +1,18 @@
 # Change Log
 
-## [0.2.5] - 2026-07-14
+## [0.2.6] - 2026-07-14
 
 ### Added
 
-- Default keybinding `Ctrl+K C` / `Cmd+K C` for all 4 copy commands (context-aware)
+- CodeAction (💡 灯泡): 划选文本后灯泡亮起,快速执行「Copy to AI: 选中区域」
+- 快捷键 `Shift+Alt+C` / `Shift+Option+C`: 编辑器/资源管理器上下文感知
+- 快捷键键盘触发时自动降级到当前编辑器文件
+
+## [0.2.5] - 2026-07-14
+
+### Changed
+
+- 快捷键从 `Ctrl+K C` 改为 `Shift+Alt+C`(`Shift+Option+C`),避免与内置快捷键冲突
 
 ## [0.2.3] - 2026-07-11
 

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
dist/extension.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 1
dist/extension.js.map


+ 96 - 0
docs/superpowers/plans/2026-07-14-codeaction-plan.md

@@ -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"
+```

+ 1 - 1
package.json

@@ -2,7 +2,7 @@
   "name": "copy-ai-ctx",
   "displayName": "Copy AI Ctx",
   "description": "复制上下文供AI助手使用 —— 复制文件、内容的引用信息",
-  "version": "0.2.5",
+  "version": "0.2.6",
   "publisher": "fivesay",
   "engines": {
     "vscode": "^1.85.0"

+ 25 - 0
src/codeActionProvider.ts

@@ -0,0 +1,25 @@
+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];
+  }
+}

+ 13 - 0
src/extension.ts

@@ -6,6 +6,7 @@ import {
   copySelectedFiles,
   copyMultiFiles,
 } from './copyContext';
+import { CopyAiCodeActionProvider } from './codeActionProvider';
 
 export function activate(context: vscode.ExtensionContext) {
   console.log('[copy-ai-ctx] activating...');
@@ -53,6 +54,18 @@ export function activate(context: vscode.ExtensionContext) {
   );
 
   console.log('[copy-ai-ctx] activated');
+
+  // Register CodeAction provider (lightbulb on selection)
+  context.subscriptions.push(
+    vscode.languages.registerCodeActionsProvider(
+      { pattern: '**' },
+      new CopyAiCodeActionProvider(),
+      {
+        providedCodeActionKinds:
+          CopyAiCodeActionProvider.providedCodeActionKinds,
+      },
+    ),
+  );
 }
 
 export function deactivate() {

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.