Path: blob/main/extensions/merge-conflict/src/contentProvider.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import * as vscode from 'vscode';67export default class MergeConflictContentProvider implements vscode.TextDocumentContentProvider, vscode.Disposable {89static scheme = 'merge-conflict.conflict-diff';1011constructor(private context: vscode.ExtensionContext) {12}1314begin() {15this.context.subscriptions.push(16vscode.workspace.registerTextDocumentContentProvider(MergeConflictContentProvider.scheme, this)17);18}1920dispose() {21}2223async provideTextDocumentContent(uri: vscode.Uri): Promise<string | null> {24try {25const { scheme, ranges } = JSON.parse(uri.query) as { scheme: string; ranges: [{ line: number; character: number }[], { line: number; character: number }[]][] };2627// complete diff28const document = await vscode.workspace.openTextDocument(uri.with({ scheme, query: '' }));2930let text = '';31let lastPosition = new vscode.Position(0, 0);3233ranges.forEach(rangeObj => {34const [conflictRange, fullRange] = rangeObj;35const [start, end] = conflictRange;36const [fullStart, fullEnd] = fullRange;3738text += document.getText(new vscode.Range(lastPosition.line, lastPosition.character, fullStart.line, fullStart.character));39text += document.getText(new vscode.Range(start.line, start.character, end.line, end.character));40lastPosition = new vscode.Position(fullEnd.line, fullEnd.character);41});4243const documentEnd = document.lineAt(document.lineCount - 1).range.end;44text += document.getText(new vscode.Range(lastPosition.line, lastPosition.character, documentEnd.line, documentEnd.character));4546return text;47}48catch (ex) {49await vscode.window.showErrorMessage('Unable to show comparison');50return null;51}52}53}5455