feat: integrate code actions into extension activation

This commit is contained in:
sam hoang
2025-01-12 17:51:46 +07:00
parent 273bfc410b
commit 02a8eb96f1
2 changed files with 57 additions and 7 deletions

View File

@@ -5,6 +5,8 @@ import * as vscode from "vscode"
import { ClineProvider } from "./core/webview/ClineProvider" import { ClineProvider } from "./core/webview/ClineProvider"
import { createClineAPI } from "./exports" import { createClineAPI } from "./exports"
import "./utils/path" // necessary to have access to String.prototype.toPosix import "./utils/path" // necessary to have access to String.prototype.toPosix
import { CodeActionProvider } from "./core/CodeActionProvider"
import { explainCodePrompt, fixCodePrompt, improveCodePrompt } from "./core/prompts/code-actions"
import { DIFF_VIEW_URI_SCHEME } from "./integrations/editor/DiffViewProvider" import { DIFF_VIEW_URI_SCHEME } from "./integrations/editor/DiffViewProvider"
/* /*
@@ -158,6 +160,51 @@ export function activate(context: vscode.ExtensionContext) {
} }
context.subscriptions.push(vscode.window.registerUriHandler({ handleUri })) context.subscriptions.push(vscode.window.registerUriHandler({ handleUri }))
// Register code actions provider
context.subscriptions.push(
vscode.languages.registerCodeActionsProvider(
{ pattern: "**/*" },
new CodeActionProvider(),
{
providedCodeActionKinds: CodeActionProvider.providedCodeActionKinds
}
)
);
// Register code action commands
context.subscriptions.push(
vscode.commands.registerCommand("roo-cline.explainCode", async (filePath: string, selectedText: string) => {
const visibleProvider = ClineProvider.getVisibleInstance()
if (!visibleProvider) {
return
}
const prompt = explainCodePrompt(filePath, selectedText)
await visibleProvider.initClineWithTask(prompt)
})
);
context.subscriptions.push(
vscode.commands.registerCommand("roo-cline.fixCode", async (filePath: string, selectedText: string, diagnostics?: any[]) => {
const visibleProvider = ClineProvider.getVisibleInstance()
if (!visibleProvider) {
return
}
const prompt = fixCodePrompt(filePath, selectedText, diagnostics)
await visibleProvider.initClineWithTask(prompt)
})
);
context.subscriptions.push(
vscode.commands.registerCommand("roo-cline.improveCode", async (filePath: string, selectedText: string) => {
const visibleProvider = ClineProvider.getVisibleInstance()
if (!visibleProvider) {
return
}
const prompt = improveCodePrompt(filePath, selectedText)
await visibleProvider.initClineWithTask(prompt)
})
);
return createClineAPI(outputChannel, sidebarProvider) return createClineAPI(outputChannel, sidebarProvider)
} }

View File

@@ -117,13 +117,16 @@ suite("Roo Cline Extension Test Suite", () => {
// Test core commands are registered // Test core commands are registered
const expectedCommands = [ const expectedCommands = [
"roo-cline.plusButtonClicked", 'roo-cline.plusButtonClicked',
"roo-cline.mcpButtonClicked", 'roo-cline.mcpButtonClicked',
"roo-cline.historyButtonClicked", 'roo-cline.historyButtonClicked',
"roo-cline.popoutButtonClicked", 'roo-cline.popoutButtonClicked',
"roo-cline.settingsButtonClicked", 'roo-cline.settingsButtonClicked',
"roo-cline.openInNewTab", 'roo-cline.openInNewTab',
] 'roo-cline.explainCode',
'roo-cline.fixCode',
'roo-cline.improveCode'
];
for (const cmd of expectedCommands) { for (const cmd of expectedCommands) {
assert.strictEqual(commands.includes(cmd), true, `Command ${cmd} should be registered`) assert.strictEqual(commands.includes(cmd), true, `Command ${cmd} should be registered`)