%PDF-1.5 %���� ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY
Server IP : www.kowitt.ac.th / Your IP : 216.73.216.118 Web Server : Microsoft-IIS/7.5 System : Windows NT SERVER02 6.1 build 7601 (Windows Server 2008 R2 Standard Edition Service Pack 1) i586 User : IUSR ( 0) PHP Version : 5.6.31 Disable Function : NONE MySQL : ON | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /Program Files/Microsoft VS Code/resources/app/extensions/merge-conflict/out/ |
Upload File : |
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ const vscode = require("vscode"); const interfaces = require("./interfaces"); const contentProvider_1 = require("./contentProvider"); const path = require("path"); const vscode_nls_1 = require("vscode-nls"); const localize = vscode_nls_1.loadMessageBundle(__filename); var NavigationDirection; (function (NavigationDirection) { NavigationDirection[NavigationDirection["Forwards"] = 0] = "Forwards"; NavigationDirection[NavigationDirection["Backwards"] = 1] = "Backwards"; })(NavigationDirection || (NavigationDirection = {})); class CommandHandler { constructor(trackerService) { this.disposables = []; this.tracker = trackerService.createTracker('commands'); } begin() { this.disposables.push(this.registerTextEditorCommand('merge-conflict.accept.current', this.acceptCurrent), this.registerTextEditorCommand('merge-conflict.accept.incoming', this.acceptIncoming), this.registerTextEditorCommand('merge-conflict.accept.selection', this.acceptSelection), this.registerTextEditorCommand('merge-conflict.accept.both', this.acceptBoth), this.registerTextEditorCommand('merge-conflict.accept.all-current', this.acceptAllCurrent), this.registerTextEditorCommand('merge-conflict.accept.all-incoming', this.acceptAllIncoming), this.registerTextEditorCommand('merge-conflict.accept.all-both', this.acceptAllBoth), this.registerTextEditorCommand('merge-conflict.next', this.navigateNext), this.registerTextEditorCommand('merge-conflict.previous', this.navigatePrevious), this.registerTextEditorCommand('merge-conflict.compare', this.compare)); } registerTextEditorCommand(command, cb) { return vscode.commands.registerCommand(command, (...args) => { const editor = vscode.window.activeTextEditor; return editor && cb.call(this, editor, ...args); }); } acceptCurrent(editor, ...args) { return this.accept(interfaces.CommitType.Current, editor, ...args); } acceptIncoming(editor, ...args) { return this.accept(interfaces.CommitType.Incoming, editor, ...args); } acceptBoth(editor, ...args) { return this.accept(interfaces.CommitType.Both, editor, ...args); } acceptAllCurrent(editor) { return this.acceptAll(interfaces.CommitType.Current, editor); } acceptAllIncoming(editor) { return this.acceptAll(interfaces.CommitType.Incoming, editor); } acceptAllBoth(editor) { return this.acceptAll(interfaces.CommitType.Both, editor); } compare(editor, conflict) { return __awaiter(this, void 0, void 0, function* () { const fileName = path.basename(editor.document.uri.fsPath); // No conflict, command executed from command palette if (!conflict) { conflict = yield this.findConflictContainingSelection(editor); // Still failed to find conflict, warn the user and exit if (!conflict) { vscode.window.showWarningMessage(localize(0, null)); return; } } const scheme = editor.document.uri.scheme; let range = conflict.current.content; const leftUri = editor.document.uri.with({ scheme: contentProvider_1.default.scheme, query: JSON.stringify({ scheme, range }) }); range = conflict.incoming.content; const rightUri = leftUri.with({ query: JSON.stringify({ scheme, range }) }); const title = localize(1, null, fileName); vscode.commands.executeCommand('vscode.diff', leftUri, rightUri, title); }); } navigateNext(editor) { return this.navigate(editor, NavigationDirection.Forwards); } navigatePrevious(editor) { return this.navigate(editor, NavigationDirection.Backwards); } acceptSelection(editor) { return __awaiter(this, void 0, void 0, function* () { let conflict = yield this.findConflictContainingSelection(editor); if (!conflict) { vscode.window.showWarningMessage(localize(2, null)); return; } let typeToAccept; let tokenAfterCurrentBlock = conflict.splitter; if (conflict.commonAncestors.length > 0) { tokenAfterCurrentBlock = conflict.commonAncestors[0].header; } // Figure out if the cursor is in current or incoming, we do this by seeing if // the active position is before or after the range of the splitter or common // ancestors marker. We can use this trick as the previous check in // findConflictByActiveSelection will ensure it's within the conflict range, so // we don't falsely identify "current" or "incoming" if outside of a conflict range. if (editor.selection.active.isBefore(tokenAfterCurrentBlock.start)) { typeToAccept = interfaces.CommitType.Current; } else if (editor.selection.active.isAfter(conflict.splitter.end)) { typeToAccept = interfaces.CommitType.Incoming; } else if (editor.selection.active.isBefore(conflict.splitter.start)) { vscode.window.showWarningMessage(localize(3, null)); return; } else { vscode.window.showWarningMessage(localize(4, null)); return; } this.tracker.forget(editor.document); conflict.commitEdit(typeToAccept, editor); }); } dispose() { this.disposables.forEach(disposable => disposable.dispose()); this.disposables = []; } navigate(editor, direction) { return __awaiter(this, void 0, void 0, function* () { let navigationResult = yield this.findConflictForNavigation(editor, direction); if (!navigationResult) { vscode.window.showWarningMessage(localize(5, null)); return; } else if (!navigationResult.canNavigate) { vscode.window.showWarningMessage(localize(6, null)); return; } else if (!navigationResult.conflict) { // TODO: Show error message? return; } // Move the selection to the first line of the conflict editor.selection = new vscode.Selection(navigationResult.conflict.range.start, navigationResult.conflict.range.start); editor.revealRange(navigationResult.conflict.range, vscode.TextEditorRevealType.Default); }); } accept(type, editor, ...args) { return __awaiter(this, void 0, void 0, function* () { let conflict; // If launched with known context, take the conflict from that if (args[0] === 'known-conflict') { conflict = args[1]; } else { // Attempt to find a conflict that matches the current cursor position conflict = yield this.findConflictContainingSelection(editor); } if (!conflict) { vscode.window.showWarningMessage(localize(7, null)); return; } // Tracker can forget as we know we are going to do an edit this.tracker.forget(editor.document); conflict.commitEdit(type, editor); }); } acceptAll(type, editor) { return __awaiter(this, void 0, void 0, function* () { let conflicts = yield this.tracker.getConflicts(editor.document); if (!conflicts || conflicts.length === 0) { vscode.window.showWarningMessage(localize(8, null)); return; } // For get the current state of the document, as we know we are doing to do a large edit this.tracker.forget(editor.document); // Apply all changes as one edit yield editor.edit((edit) => conflicts.forEach(conflict => { conflict.applyEdit(type, editor, edit); })); }); } findConflictContainingSelection(editor, conflicts) { return __awaiter(this, void 0, void 0, function* () { if (!conflicts) { conflicts = yield this.tracker.getConflicts(editor.document); } if (!conflicts || conflicts.length === 0) { return null; } for (let i = 0; i < conflicts.length; i++) { if (conflicts[i].range.contains(editor.selection.active)) { return conflicts[i]; } } return null; }); } findConflictForNavigation(editor, direction, conflicts) { return __awaiter(this, void 0, void 0, function* () { if (!conflicts) { conflicts = yield this.tracker.getConflicts(editor.document); } if (!conflicts || conflicts.length === 0) { return null; } let selection = editor.selection.active; if (conflicts.length === 1) { if (conflicts[0].range.contains(selection)) { return { canNavigate: false }; } return { canNavigate: true, conflict: conflicts[0] }; } let predicate; let fallback; if (direction === NavigationDirection.Forwards) { predicate = (conflict) => selection.isBefore(conflict.range.start); fallback = () => conflicts[0]; } else if (direction === NavigationDirection.Backwards) { predicate = (conflict) => selection.isAfter(conflict.range.start); fallback = () => conflicts[conflicts.length - 1]; } else { throw new Error(`Unsupported direction ${direction}`); } for (let i = 0; i < conflicts.length; i++) { if (predicate(conflicts[i]) && !conflicts[i].range.contains(selection)) { return { canNavigate: true, conflict: conflicts[i] }; } } // Went all the way to the end, return the head return { canNavigate: true, conflict: fallback() }; }); } } exports.default = CommandHandler; //# sourceMappingURL=https://ticino.blob.core.windows.net/sourcemaps/0f080e5267e829de46638128001aeb7ca2d6d50e/extensions\merge-conflict\out/commandHandler.js.map