Browse Source

feat: integrate code actions into extension activation

sam hoang 1 year ago
parent
commit
02a8eb96f1
2 changed files with 57 additions and 7 deletions
  1. 47 0
      src/extension.ts
  2. 10 7
      src/test/extension.test.ts

+ 47 - 0
src/extension.ts

@@ -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)
 }
 }
 
 

+ 10 - 7
src/test/extension.test.ts

@@ -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.mcpButtonClicked",
-			"roo-cline.historyButtonClicked",
-			"roo-cline.popoutButtonClicked",
-			"roo-cline.settingsButtonClicked",
-			"roo-cline.openInNewTab",
-		]
+			'roo-cline.plusButtonClicked',
+			'roo-cline.mcpButtonClicked',
+			'roo-cline.historyButtonClicked',
+			'roo-cline.popoutButtonClicked',
+			'roo-cline.settingsButtonClicked',
+			'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`)