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