Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import * as vscode from 'vscode';
const scheme = 'codeReviewerPreview';
class FixPreviewContentProvider implements vscode.TextDocumentContentProvider {
private texts = new Map<string, string>();
provideTextDocumentContent(uri: vscode.Uri): string {
return this.texts.get(uri.toString()) ?? '';
}
set(uri: vscode.Uri, text: string): void {
this.texts.set(uri.toString(), text);
}
clear(uri: vscode.Uri): void {
this.texts.delete(uri.toString());
}
}
let previewProvider: FixPreviewContentProvider | null = null;
export function registerFixPreviewProvider(context: vscode.ExtensionContext): void {
if (previewProvider) { return; }
previewProvider = new FixPreviewContentProvider();
context.subscriptions.push(vscode.workspace.registerTextDocumentContentProvider(scheme, previewProvider));
}
export interface PreviewRequest {
originalText: string;
newText: string;
title: string;
fileName: string;
}
export async function openPreviewDiff(req: PreviewRequest): Promise<vscode.Uri | undefined> {
if (!previewProvider) { return undefined; }
const stamp = Date.now();
const originalUri = vscode.Uri.parse(`${scheme}://original/${encodeURIComponent(req.fileName)}-${stamp}`);
const newUri = vscode.Uri.parse(`${scheme}://new/${encodeURIComponent(req.fileName)}-${stamp}`);
previewProvider.set(originalUri, req.originalText);
previewProvider.set(newUri, req.newText);
await vscode.commands.executeCommand('vscode.diff', originalUri, newUri, req.title, {
viewColumn: vscode.ViewColumn.Beside,
preserveFocus: true,
});
return newUri;
}
export async function closePreviewEditor(uri: vscode.Uri): Promise<void> {
if (!previewProvider) { return; }
for (const group of vscode.window.tabGroups.all) {
for (const tab of group.tabs) {
if (tab.input instanceof vscode.TabInputTextDiff) {
const modified = tab.input.modified;
if (modified.toString() === uri.toString()) {
await vscode.window.tabGroups.close(tab);
}
}
}
}
previewProvider.clear(uri);
}
export async function applyNewText(
document: vscode.TextDocument,
newText: string
): Promise<boolean> {
const originalText = document.getText();
if (newText === originalText) { return true; }
const edit = new vscode.WorkspaceEdit();
const fullRange = new vscode.Range(
document.positionAt(0),
document.positionAt(originalText.length)
);
edit.replace(document.uri, fullRange, newText);
return vscode.workspace.applyEdit(edit);
}
|