mirror of
https://github.com/pacnpal/Roo-Code.git
synced 2025-12-20 12:21:13 -05:00
feat(code-actions): add "Fix Code in Current Task" action
Adds ability to fix code within the context of an active task instead of starting a new one. This allows for more efficient workflow when already working with Roo. Add new FIX_IN_CURRENT_TASK code action and command Enhance ClineProvider to support context-aware code fixing Update tests to verify new action functionality
This commit is contained in:
@@ -1,15 +1,18 @@
|
||||
import * as vscode from "vscode"
|
||||
import * as path from "path"
|
||||
import { ClineProvider } from "./webview/ClineProvider"
|
||||
|
||||
export const ACTION_NAMES = {
|
||||
EXPLAIN: "Roo Code: Explain Code",
|
||||
FIX: "Roo Code: Fix Code",
|
||||
FIX_IN_CURRENT_TASK: "Roo Code: Fix Code in Current Task",
|
||||
IMPROVE: "Roo Code: Improve Code",
|
||||
} as const
|
||||
|
||||
const COMMAND_IDS = {
|
||||
EXPLAIN: "roo-cline.explainCode",
|
||||
FIX: "roo-cline.fixCode",
|
||||
FIX_IN_CURRENT_TASK: "roo-cline.fixCodeInCurrentTask",
|
||||
IMPROVE: "roo-cline.improveCode",
|
||||
} as const
|
||||
|
||||
@@ -159,6 +162,13 @@ export class CodeActionProvider implements vscode.CodeActionProvider {
|
||||
effectiveRange.text,
|
||||
diagnosticMessages,
|
||||
]),
|
||||
|
||||
this.createAction(
|
||||
ACTION_NAMES.FIX_IN_CURRENT_TASK,
|
||||
vscode.CodeActionKind.QuickFix,
|
||||
COMMAND_IDS.FIX_IN_CURRENT_TASK,
|
||||
[filePath, effectiveRange.text, diagnosticMessages],
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -125,7 +125,7 @@ describe("CodeActionProvider", () => {
|
||||
|
||||
const actions = provider.provideCodeActions(mockDocument, mockRange, mockContext)
|
||||
|
||||
expect(actions).toHaveLength(3)
|
||||
expect(actions).toHaveLength(4)
|
||||
expect((actions as any).some((a: any) => a.title === "Roo Code: Fix Code")).toBe(true)
|
||||
})
|
||||
|
||||
|
||||
@@ -188,10 +188,7 @@ export class ClineProvider implements vscode.WebviewViewProvider {
|
||||
return findLast(Array.from(this.activeInstances), (instance) => instance.view?.visible === true)
|
||||
}
|
||||
|
||||
public static async handleCodeAction(
|
||||
promptType: keyof typeof ACTION_NAMES,
|
||||
params: Record<string, string | any[]>,
|
||||
): Promise<void> {
|
||||
public static async getInstance(): Promise<ClineProvider | undefined> {
|
||||
let visibleProvider = ClineProvider.getVisibleInstance()
|
||||
|
||||
// If no visible provider, try to show the sidebar view
|
||||
@@ -207,10 +204,46 @@ export class ClineProvider implements vscode.WebviewViewProvider {
|
||||
return
|
||||
}
|
||||
|
||||
return visibleProvider
|
||||
}
|
||||
|
||||
public static async isActiveTask(): Promise<boolean> {
|
||||
const visibleProvider = await ClineProvider.getInstance()
|
||||
if (!visibleProvider) {
|
||||
return false
|
||||
}
|
||||
|
||||
if (visibleProvider.cline) {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
public static async handleCodeAction(
|
||||
command: string,
|
||||
promptType: keyof typeof ACTION_NAMES,
|
||||
params: Record<string, string | any[]>,
|
||||
): Promise<void> {
|
||||
const visibleProvider = await ClineProvider.getInstance()
|
||||
if (!visibleProvider) {
|
||||
return
|
||||
}
|
||||
|
||||
const { customSupportPrompts } = await visibleProvider.getState()
|
||||
|
||||
const prompt = supportPrompt.create(promptType, params, customSupportPrompts)
|
||||
|
||||
if (visibleProvider.cline && ["roo-cline.fixCodeInCurrentTask"].indexOf(command) !== -1) {
|
||||
await visibleProvider.postMessageToWebview({
|
||||
type: "invoke",
|
||||
invoke: "sendMessage",
|
||||
text: prompt,
|
||||
})
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
await visibleProvider.initClineWithTask(prompt)
|
||||
}
|
||||
|
||||
|
||||
@@ -194,7 +194,7 @@ export function activate(context: vscode.ExtensionContext) {
|
||||
...(userInput ? { userInput } : {}),
|
||||
}
|
||||
|
||||
await ClineProvider.handleCodeAction(promptType, params)
|
||||
await ClineProvider.handleCodeAction(command, promptType, params)
|
||||
},
|
||||
),
|
||||
)
|
||||
@@ -217,6 +217,14 @@ export function activate(context: vscode.ExtensionContext) {
|
||||
"E.g. Maintain backward compatibility",
|
||||
)
|
||||
|
||||
registerCodeAction(
|
||||
context,
|
||||
"roo-cline.fixCodeInCurrentTask",
|
||||
"FIX", // keep this for use the same prompt with FIX command
|
||||
"What would you like Roo to fix?",
|
||||
"E.g. Maintain backward compatibility",
|
||||
)
|
||||
|
||||
registerCodeAction(
|
||||
context,
|
||||
"roo-cline.improveCode",
|
||||
|
||||
Reference in New Issue
Block a user