mirror of
https://github.com/pacnpal/Roo-Code.git
synced 2025-12-20 04:11:10 -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 vscode from "vscode"
|
||||||
import * as path from "path"
|
import * as path from "path"
|
||||||
|
import { ClineProvider } from "./webview/ClineProvider"
|
||||||
|
|
||||||
export const ACTION_NAMES = {
|
export const ACTION_NAMES = {
|
||||||
EXPLAIN: "Roo Code: Explain Code",
|
EXPLAIN: "Roo Code: Explain Code",
|
||||||
FIX: "Roo Code: Fix Code",
|
FIX: "Roo Code: Fix Code",
|
||||||
|
FIX_IN_CURRENT_TASK: "Roo Code: Fix Code in Current Task",
|
||||||
IMPROVE: "Roo Code: Improve Code",
|
IMPROVE: "Roo Code: Improve Code",
|
||||||
} as const
|
} as const
|
||||||
|
|
||||||
const COMMAND_IDS = {
|
const COMMAND_IDS = {
|
||||||
EXPLAIN: "roo-cline.explainCode",
|
EXPLAIN: "roo-cline.explainCode",
|
||||||
FIX: "roo-cline.fixCode",
|
FIX: "roo-cline.fixCode",
|
||||||
|
FIX_IN_CURRENT_TASK: "roo-cline.fixCodeInCurrentTask",
|
||||||
IMPROVE: "roo-cline.improveCode",
|
IMPROVE: "roo-cline.improveCode",
|
||||||
} as const
|
} as const
|
||||||
|
|
||||||
@@ -159,6 +162,13 @@ export class CodeActionProvider implements vscode.CodeActionProvider {
|
|||||||
effectiveRange.text,
|
effectiveRange.text,
|
||||||
diagnosticMessages,
|
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)
|
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)
|
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)
|
return findLast(Array.from(this.activeInstances), (instance) => instance.view?.visible === true)
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async handleCodeAction(
|
public static async getInstance(): Promise<ClineProvider | undefined> {
|
||||||
promptType: keyof typeof ACTION_NAMES,
|
|
||||||
params: Record<string, string | any[]>,
|
|
||||||
): Promise<void> {
|
|
||||||
let visibleProvider = ClineProvider.getVisibleInstance()
|
let visibleProvider = ClineProvider.getVisibleInstance()
|
||||||
|
|
||||||
// If no visible provider, try to show the sidebar view
|
// If no visible provider, try to show the sidebar view
|
||||||
@@ -207,10 +204,46 @@ export class ClineProvider implements vscode.WebviewViewProvider {
|
|||||||
return
|
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 { customSupportPrompts } = await visibleProvider.getState()
|
||||||
|
|
||||||
const prompt = supportPrompt.create(promptType, params, customSupportPrompts)
|
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)
|
await visibleProvider.initClineWithTask(prompt)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ export function activate(context: vscode.ExtensionContext) {
|
|||||||
...(userInput ? { userInput } : {}),
|
...(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",
|
"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(
|
registerCodeAction(
|
||||||
context,
|
context,
|
||||||
"roo-cline.improveCode",
|
"roo-cline.improveCode",
|
||||||
|
|||||||
Reference in New Issue
Block a user