import { formatApplyResult, formatPrepareRenameResult } from "../lsp/formatters.js"; import { withLspClient } from "../lsp/client-wrapper.js"; import { missingDependencyResult } from "../missing-dependency-result.js"; import { clientOptions, requireNumber, requireString } from "./parameters.js"; import { text } from "./result.js"; import type { LspPrepareRenameDetails, LspRenameDetails, ToolExecutionResult } from "./types.js"; export async function executeLspPrepareRename( params: Record, signal?: AbortSignal, ): Promise { const filePath = requireString(params, "filePath"); const line = requireNumber(params, "line"); const character = requireNumber(params, "character"); try { const result = await withLspClient( filePath, async (client) => client.prepareRename(filePath, line, character, signal), "prepareRename", clientOptions(signal), ); const details: LspPrepareRenameDetails = { filePath, line, character, result }; return text(formatPrepareRenameResult(result), details); } catch (error) { const missingDependency = missingDependencyResult(error, { filePath, line, character, result: null, } satisfies Omit); if (missingDependency) return missingDependency; throw error; } } export async function executeLspRename( params: Record, signal?: AbortSignal, ): Promise { const filePath = requireString(params, "filePath"); const line = requireNumber(params, "line"); const character = requireNumber(params, "character"); const newName = requireString(params, "newName"); try { const result = await withLspClient( filePath, async (client) => client.rename(filePath, line, character, newName, signal), "rename", clientOptions(signal), ); const details: LspRenameDetails = { filePath, line, character, newName, apply: result.apply, edit: result.edit }; return text(formatApplyResult(result.apply), details, !result.apply.success); } catch (error) { const missingDependency = missingDependencyResult(error, { filePath, line, character, newName, apply: null, edit: null, } satisfies Omit); if (missingDependency) return missingDependency; throw error; } }