Files
IC-Coder-Plugin/src/utils/fileDiff.ts
2026-03-02 10:00:04 +08:00

52 lines
1.4 KiB
TypeScript

import * as vscode from "vscode";
import * as path from "path";
/**
* 将相对路径解析为工作区绝对路径
*/
export function resolveWorkspaceFilePath(filePath: string): string {
if (path.isAbsolute(filePath)) {
return filePath;
}
const workspaceFolders = vscode.workspace.workspaceFolders;
if (!workspaceFolders || workspaceFolders.length === 0) {
throw new Error("请先打开一个文件夹作为工作区,这样我就能为您修改文件了");
}
return path.join(workspaceFolders[0].uri.fsPath, filePath);
}
/**
* 使用 VS Code 原生 diff 视图展示文件修改前后对比
*/
export async function showFileDiff(
filePath: string,
oldContent: string,
title?: string
): Promise<void> {
const absolutePath = resolveWorkspaceFilePath(filePath);
const fileUri = vscode.Uri.file(absolutePath);
const newBytes = await vscode.workspace.fs.readFile(fileUri);
const newContent = Buffer.from(newBytes).toString("utf-8");
if (oldContent === newContent) {
return;
}
const language = (await vscode.workspace.openTextDocument(fileUri)).languageId;
const oldDoc = await vscode.workspace.openTextDocument({
content: oldContent,
language,
});
const diffTitle = title || `${path.basename(absolutePath)} (修改前 <-> 修改后)`;
await vscode.commands.executeCommand(
"vscode.diff",
oldDoc.uri,
fileUri,
diffTitle,
{ preview: false }
);
}