/
outbreak
/
kilocode
Обзор
Документация
Войти
/
outbreak
/
kilocode
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/activate/CodeActionProvider.ts
104 строки
3 KB
Kevin van Dijk
Merge branch 'upstream-at-v3.22.4' into roo-v3.22.4
30 июн 2025, 19:44
30 июн 2025, 19:44
18474be
Код
Авторство
О чём код?
import * as vscode from "vscode" import { CodeActionName, CodeActionId } from "@roo-code/types" import { Package } from "../shared/package" import { getCodeActionCommand } from "../utils/commands" import { EditorUtils } from "../integrations/editor/EditorUtils" export const TITLES: Record<CodeActionName, string> = { EXPLAIN: "Explain with Kilo Code", FIX: "Fix with Kilo Code", IMPROVE: "Improve with Kilo Code", ADD_TO_CONTEXT: "Add to Kilo Code", NEW_TASK: "New Kilo Code Task", } as const export class CodeActionProvider implements vscode.CodeActionProvider { public static readonly providedCodeActionKinds = [ vscode.CodeActionKind.QuickFix, vscode.CodeActionKind.RefactorRewrite, ] private createAction( title: string, kind: vscode.CodeActionKind, command: CodeActionId, args: any[], ): vscode.CodeAction { const action = new vscode.CodeAction(title, kind) action.command = { command: getCodeActionCommand(command), title, arguments: args } return action } public provideCodeActions( document: vscode.TextDocument, range: vscode.Range | vscode.Selection, context: vscode.CodeActionContext, ): vscode.ProviderResult<(vscode.CodeAction | vscode.Command)[]> { try { if (!vscode.workspace.getConfiguration(Package.name).get<boolean>("enableCodeActions", true)) { return [] } const effectiveRange = EditorUtils.getEffectiveRange(document, range) if (!effectiveRange) { return [] } const filePath = EditorUtils.getFilePath(document) const actions: vscode.CodeAction[] = [] actions.push( this.createAction(TITLES.ADD_TO_CONTEXT, vscode.CodeActionKind.QuickFix, "addToContext", [ filePath, effectiveRange.text, effectiveRange.range.start.line + 1, effectiveRange.range.end.line + 1, ]), ) if (context.diagnostics.length > 0) { const relevantDiagnostics = context.diagnostics.filter((d) => EditorUtils.hasIntersectingRange(effectiveRange.range, d.range), ) if (relevantDiagnostics.length > 0) { actions.push( this.createAction(TITLES.FIX, vscode.CodeActionKind.QuickFix, "fixCode", [ filePath, effectiveRange.text, effectiveRange.range.start.line + 1, effectiveRange.range.end.line + 1, relevantDiagnostics.map(EditorUtils.createDiagnosticData), ]), ) } } else { actions.push( this.createAction(TITLES.EXPLAIN, vscode.CodeActionKind.QuickFix, "explainCode", [ filePath, effectiveRange.text, effectiveRange.range.start.line + 1, effectiveRange.range.end.line + 1, ]), ) actions.push( this.createAction(TITLES.IMPROVE, vscode.CodeActionKind.QuickFix, "improveCode", [ filePath, effectiveRange.text, effectiveRange.range.start.line + 1, effectiveRange.range.end.line + 1, ]), ) } return actions } catch (error) { console.error("Error providing code actions:", error) return [] } } }