mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-09-05 08:10:14 +00:00
91 lines
2.4 KiB
TypeScript
91 lines
2.4 KiB
TypeScript
import * as vscode from "vscode"
|
|
|
|
import { ACTION_NAMES, COMMAND_IDS } from "../core/CodeActionProvider"
|
|
import { EditorUtils } from "../core/EditorUtils"
|
|
import { ClineProvider } from "../core/webview/ClineProvider"
|
|
|
|
export const registerCodeActions = (context: vscode.ExtensionContext) => {
|
|
registerCodeActionPair(
|
|
context,
|
|
COMMAND_IDS.EXPLAIN,
|
|
"EXPLAIN",
|
|
"What would you like Roo to explain?",
|
|
"E.g. How does the error handling work?",
|
|
)
|
|
|
|
registerCodeActionPair(
|
|
context,
|
|
COMMAND_IDS.FIX,
|
|
"FIX",
|
|
"What would you like Roo to fix?",
|
|
"E.g. Maintain backward compatibility",
|
|
)
|
|
|
|
registerCodeActionPair(
|
|
context,
|
|
COMMAND_IDS.IMPROVE,
|
|
"IMPROVE",
|
|
"What would you like Roo to improve?",
|
|
"E.g. Focus on performance optimization",
|
|
)
|
|
|
|
registerCodeAction(context, COMMAND_IDS.ADD_TO_CONTEXT, "ADD_TO_CONTEXT")
|
|
}
|
|
|
|
const registerCodeAction = (
|
|
context: vscode.ExtensionContext,
|
|
command: string,
|
|
promptType: keyof typeof ACTION_NAMES,
|
|
inputPrompt?: string,
|
|
inputPlaceholder?: string,
|
|
) => {
|
|
let userInput: string | undefined
|
|
|
|
context.subscriptions.push(
|
|
vscode.commands.registerCommand(command, async (...args: any[]) => {
|
|
if (inputPrompt) {
|
|
userInput = await vscode.window.showInputBox({
|
|
prompt: inputPrompt,
|
|
placeHolder: inputPlaceholder,
|
|
})
|
|
}
|
|
|
|
// Handle both code action and direct command cases.
|
|
let filePath: string
|
|
let selectedText: string
|
|
let diagnostics: any[] | undefined
|
|
|
|
if (args.length > 1) {
|
|
// Called from code action.
|
|
;[filePath, selectedText, diagnostics] = args
|
|
} else {
|
|
// Called directly from command palette.
|
|
const context = EditorUtils.getEditorContext()
|
|
if (!context) return
|
|
;({ filePath, selectedText, diagnostics } = context)
|
|
}
|
|
|
|
const params = {
|
|
...{ filePath, selectedText },
|
|
...(diagnostics ? { diagnostics } : {}),
|
|
...(userInput ? { userInput } : {}),
|
|
}
|
|
|
|
await ClineProvider.handleCodeAction(command, promptType, params)
|
|
}),
|
|
)
|
|
}
|
|
|
|
const registerCodeActionPair = (
|
|
context: vscode.ExtensionContext,
|
|
baseCommand: string,
|
|
promptType: keyof typeof ACTION_NAMES,
|
|
inputPrompt?: string,
|
|
inputPlaceholder?: string,
|
|
) => {
|
|
// Register new task version.
|
|
registerCodeAction(context, baseCommand, promptType, inputPrompt, inputPlaceholder)
|
|
|
|
// Register current task version.
|
|
registerCodeAction(context, `${baseCommand}InCurrentTask`, promptType, inputPrompt, inputPlaceholder)
|
|
}
|