@codingame/monaco-vscode-extensions-service-override 1.83.8 → 1.83.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/assets/webWorkerExtensionHostIframe.html +123 -0
  2. package/extensions.d.ts +12 -13
  3. package/extensions.js +456 -0
  4. package/external/rollup-plugin-styles/dist/runtime/inject-css.js +3 -0
  5. package/external/tslib/tslib.es6.js +11 -0
  6. package/index.d.ts +1 -1
  7. package/index.js +2 -2
  8. package/override/vs/platform/dialogs/common/dialogs.js +8 -0
  9. package/override/vs/workbench/browser/parts/editor/textEditor.weak.js +8 -0
  10. package/override/vs/workbench/contrib/notebook/common/notebookEditorInput.js +3 -0
  11. package/package.json +5 -3
  12. package/tools/url.js +10 -0
  13. package/tools.js +5 -0
  14. package/vscode/src/vs/base/common/console.js +59 -0
  15. package/vscode/src/vs/base/common/prefixTree.js +131 -0
  16. package/vscode/src/vs/platform/files/common/watcher.js +71 -0
  17. package/vscode/src/vs/platform/lifecycle/common/lifecycle.js +27 -0
  18. package/vscode/src/vs/platform/log/browser/log.js +26 -0
  19. package/vscode/src/vs/platform/remote/common/managedSocket.js +98 -0
  20. package/vscode/src/vs/workbench/api/browser/mainThreadAiEmbeddingVector.js +31 -0
  21. package/vscode/src/vs/workbench/api/browser/mainThreadAiRelatedInformation.js +35 -0
  22. package/vscode/src/vs/workbench/api/browser/mainThreadAuthentication.js +330 -0
  23. package/vscode/src/vs/workbench/api/browser/mainThreadBulkEdits.js +68 -0
  24. package/vscode/src/vs/workbench/api/browser/mainThreadChat.js +174 -0
  25. package/vscode/src/vs/workbench/api/browser/mainThreadChatAgents.js +52 -0
  26. package/vscode/src/vs/workbench/api/browser/mainThreadChatProvider.js +61 -0
  27. package/vscode/src/vs/workbench/api/browser/mainThreadChatSlashCommands.js +49 -0
  28. package/vscode/src/vs/workbench/api/browser/mainThreadChatVariables.js +31 -0
  29. package/vscode/src/vs/workbench/api/browser/mainThreadClipboard.js +24 -0
  30. package/vscode/src/vs/workbench/api/browser/mainThreadCodeInsets.js +107 -0
  31. package/vscode/src/vs/workbench/api/browser/mainThreadCommands.js +94 -0
  32. package/vscode/src/vs/workbench/api/browser/mainThreadComments.js +541 -0
  33. package/vscode/src/vs/workbench/api/browser/mainThreadConfiguration.js +80 -0
  34. package/vscode/src/vs/workbench/api/browser/mainThreadConsole.js +35 -0
  35. package/vscode/src/vs/workbench/api/browser/mainThreadCustomEditors.js +578 -0
  36. package/vscode/src/vs/workbench/api/browser/mainThreadDebugService.js +387 -0
  37. package/vscode/src/vs/workbench/api/browser/mainThreadDecorations.js +102 -0
  38. package/vscode/src/vs/workbench/api/browser/mainThreadDiagnostics.js +69 -0
  39. package/vscode/src/vs/workbench/api/browser/mainThreadDialogs.js +68 -0
  40. package/vscode/src/vs/workbench/api/browser/mainThreadDocumentContentProviders.js +75 -0
  41. package/vscode/src/vs/workbench/api/browser/mainThreadDocuments.js +249 -0
  42. package/vscode/src/vs/workbench/api/browser/mainThreadDocumentsAndEditors.js +370 -0
  43. package/vscode/src/vs/workbench/api/browser/mainThreadDownloadService.js +22 -0
  44. package/vscode/src/vs/workbench/api/browser/mainThreadEditSessionIdentityParticipant.js +41 -0
  45. package/vscode/src/vs/workbench/api/browser/mainThreadEditor.js +411 -0
  46. package/vscode/src/vs/workbench/api/browser/mainThreadEditorTabs.js +475 -0
  47. package/vscode/src/vs/workbench/api/browser/mainThreadEditors.js +227 -0
  48. package/vscode/src/vs/workbench/api/browser/mainThreadErrors.js +24 -0
  49. package/vscode/src/vs/workbench/api/browser/mainThreadExtensionService.js +317 -0
  50. package/vscode/src/vs/workbench/api/browser/mainThreadFileSystem.js +280 -0
  51. package/vscode/src/vs/workbench/api/browser/mainThreadFileSystemEventService.js +283 -0
  52. package/vscode/src/vs/workbench/api/browser/mainThreadInlineChat.js +68 -0
  53. package/vscode/src/vs/workbench/api/browser/mainThreadInteractive.js +28 -0
  54. package/vscode/src/vs/workbench/api/browser/mainThreadIssueReporter.js +33 -0
  55. package/vscode/src/vs/workbench/api/browser/mainThreadLabelService.js +27 -0
  56. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageFeatures.js +947 -0
  57. package/vscode/src/vs/workbench/api/browser/mainThreadLanguages.js +78 -0
  58. package/vscode/src/vs/workbench/api/browser/mainThreadLocalization.js +35 -0
  59. package/vscode/src/vs/workbench/api/browser/mainThreadLogService.js +78 -0
  60. package/vscode/src/vs/workbench/api/browser/mainThreadManagedSockets.js +93 -0
  61. package/vscode/src/vs/workbench/api/browser/mainThreadMessageService.js +118 -0
  62. package/vscode/src/vs/workbench/api/browser/mainThreadNotebook.js +158 -0
  63. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDocuments.js +123 -0
  64. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDocumentsAndEditors.js +188 -0
  65. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDto.js +129 -0
  66. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookEditors.js +131 -0
  67. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookKernels.js +341 -0
  68. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookRenderers.js +25 -0
  69. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookSaveParticipant.js +48 -0
  70. package/vscode/src/vs/workbench/api/browser/mainThreadOutputService.js +76 -0
  71. package/vscode/src/vs/workbench/api/browser/mainThreadProfilContentHandlers.js +38 -0
  72. package/vscode/src/vs/workbench/api/browser/mainThreadProgress.js +68 -0
  73. package/vscode/src/vs/workbench/api/browser/mainThreadQuickDiff.js +49 -0
  74. package/vscode/src/vs/workbench/api/browser/mainThreadQuickOpen.js +185 -0
  75. package/vscode/src/vs/workbench/api/browser/mainThreadRemoteConnectionData.js +30 -0
  76. package/vscode/src/vs/workbench/api/browser/mainThreadSCM.js +463 -0
  77. package/vscode/src/vs/workbench/api/browser/mainThreadSaveParticipant.js +49 -0
  78. package/vscode/src/vs/workbench/api/browser/mainThreadSearch.js +148 -0
  79. package/vscode/src/vs/workbench/api/browser/mainThreadSecretState.js +70 -0
  80. package/vscode/src/vs/workbench/api/browser/mainThreadShare.js +50 -0
  81. package/vscode/src/vs/workbench/api/browser/mainThreadStatusBar.js +53 -0
  82. package/vscode/src/vs/workbench/api/browser/mainThreadStorage.js +72 -0
  83. package/vscode/src/vs/workbench/api/browser/mainThreadTask.js +731 -0
  84. package/vscode/src/vs/workbench/api/browser/mainThreadTelemetry.js +53 -0
  85. package/vscode/src/vs/workbench/api/browser/mainThreadTerminalService.js +412 -0
  86. package/vscode/src/vs/workbench/api/browser/mainThreadTesting.js +182 -0
  87. package/vscode/src/vs/workbench/api/browser/mainThreadTheming.js +24 -0
  88. package/vscode/src/vs/workbench/api/browser/mainThreadTimeline.js +55 -0
  89. package/vscode/src/vs/workbench/api/browser/mainThreadTreeViews.js +313 -0
  90. package/vscode/src/vs/workbench/api/browser/mainThreadTunnelService.js +223 -0
  91. package/vscode/src/vs/workbench/api/browser/mainThreadUriOpeners.js +110 -0
  92. package/vscode/src/vs/workbench/api/browser/mainThreadUrls.js +61 -0
  93. package/vscode/src/vs/workbench/api/browser/mainThreadWebviewManager.js +29 -0
  94. package/vscode/src/vs/workbench/api/browser/mainThreadWebviewPanels.js +283 -0
  95. package/vscode/src/vs/workbench/api/browser/mainThreadWebviewViews.js +100 -0
  96. package/vscode/src/vs/workbench/api/browser/mainThreadWebviews.js +135 -0
  97. package/vscode/src/vs/workbench/api/browser/mainThreadWindow.js +57 -0
  98. package/vscode/src/vs/workbench/api/browser/mainThreadWorkspace.js +273 -0
  99. package/{dist/main/vscode → vscode}/src/vs/workbench/api/common/extHost.api.impl.d.ts +2 -2
  100. package/{dist/main/vscode → vscode}/src/vs/workbench/api/common/extHostConfiguration.d.ts +3 -3
  101. package/{dist/main/vscode → vscode}/src/vs/workbench/api/common/extHostExtensionService.d.ts +3 -4
  102. package/{dist/main/vscode → vscode}/src/vs/workbench/api/common/extHostManagedSockets.d.ts +2 -2
  103. package/{dist/main/vscode → vscode}/src/vs/workbench/api/common/extHostTerminalService.d.ts +19 -20
  104. package/{dist/main/vscode → vscode}/src/vs/workbench/api/common/extHostTunnelService.d.ts +7 -8
  105. package/{dist/main/vscode → vscode}/src/vs/workbench/api/common/extHostWorkspace.d.ts +25 -26
  106. package/vscode/src/vs/workbench/api/common/shared/dataTransferCache.js +35 -0
  107. package/vscode/src/vs/workbench/contrib/chat/common/chatModel.js +217 -0
  108. package/vscode/src/vs/workbench/contrib/comments/browser/commentColors.js +57 -0
  109. package/vscode/src/vs/workbench/contrib/comments/browser/commentFormActions.js +51 -0
  110. package/vscode/src/vs/workbench/contrib/comments/browser/commentGlyphWidget.js +92 -0
  111. package/vscode/src/vs/workbench/contrib/comments/browser/commentNode.js +648 -0
  112. package/vscode/src/vs/workbench/contrib/comments/browser/commentReply.js +297 -0
  113. package/vscode/src/vs/workbench/contrib/comments/browser/commentThreadAdditionalActions.js +62 -0
  114. package/vscode/src/vs/workbench/contrib/comments/browser/commentThreadBody.js +249 -0
  115. package/vscode/src/vs/workbench/contrib/comments/browser/commentThreadHeader.js +109 -0
  116. package/vscode/src/vs/workbench/contrib/comments/browser/commentThreadRangeDecorator.js +109 -0
  117. package/vscode/src/vs/workbench/contrib/comments/browser/commentThreadWidget.js +331 -0
  118. package/vscode/src/vs/workbench/contrib/comments/browser/commentThreadZoneWidget.js +380 -0
  119. package/vscode/src/vs/workbench/contrib/comments/browser/comments.js +5 -0
  120. package/vscode/src/vs/workbench/contrib/comments/browser/commentsController.js +1196 -0
  121. package/vscode/src/vs/workbench/contrib/comments/browser/commentsFilterOptions.js +19 -0
  122. package/vscode/src/vs/workbench/contrib/comments/browser/commentsTreeViewer.js +334 -0
  123. package/vscode/src/vs/workbench/contrib/comments/browser/commentsView.js +543 -0
  124. package/vscode/src/vs/workbench/contrib/comments/browser/commentsViewActions.js +178 -0
  125. package/vscode/src/vs/workbench/contrib/comments/browser/media/panel.css.js +6 -0
  126. package/vscode/src/vs/workbench/contrib/comments/browser/media/review.css.js +6 -0
  127. package/vscode/src/vs/workbench/contrib/comments/browser/reactionsAction.js +101 -0
  128. package/vscode/src/vs/workbench/contrib/comments/browser/timestamp.js +57 -0
  129. package/vscode/src/vs/workbench/contrib/comments/common/commentModel.js +145 -0
  130. package/vscode/src/vs/workbench/contrib/comments/common/commentsConfiguration.js +3 -0
  131. package/vscode/src/vs/workbench/contrib/customEditor/common/customTextEditorModel.js +73 -0
  132. package/vscode/src/vs/workbench/contrib/externalUriOpener/common/contributedOpeners.js +83 -0
  133. package/vscode/src/vs/workbench/contrib/interactive/browser/interactiveEditorInput.js +179 -0
  134. package/vscode/src/vs/workbench/contrib/interactive/browser/interactiveHistoryService.js +5 -0
  135. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/mergeEditorInput.js +144 -0
  136. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel.js +482 -0
  137. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/mergeMarkers/mergeMarkersController.js +6 -0
  138. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/model/diffComputer.js +85 -0
  139. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/model/editing.js +56 -0
  140. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/model/lineRange.js +110 -0
  141. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/model/mapping.js +260 -0
  142. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/model/mergeEditorModel.js +616 -0
  143. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/model/modifiedBaseRange.js +309 -0
  144. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/model/rangeUtils.js +38 -0
  145. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/model/textModelDiffs.js +167 -0
  146. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/telemetry.js +80 -0
  147. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/utils.js +70 -0
  148. package/vscode/src/vs/workbench/contrib/mergeEditor/common/mergeEditor.js +3 -0
  149. package/vscode/src/vs/workbench/contrib/notebook/common/notebookEditorModel.js +108 -0
  150. package/vscode/src/vs/workbench/contrib/tasks/common/tasks.js +506 -0
  151. package/vscode/src/vs/workbench/contrib/terminal/browser/terminalProcessExtHostProxy.js +132 -0
  152. package/vscode/src/vs/workbench/contrib/testing/common/getComputedState.js +103 -0
  153. package/vscode/src/vs/workbench/contrib/testing/common/observableValue.js +28 -0
  154. package/vscode/src/vs/workbench/contrib/testing/common/testCoverage.js +25 -0
  155. package/vscode/src/vs/workbench/contrib/testing/common/testResult.js +336 -0
  156. package/vscode/src/vs/workbench/contrib/testing/common/testingStates.js +46 -0
  157. package/vscode/src/vs/workbench/services/extensions/browser/extensionService.js +283 -0
  158. package/vscode/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.js +273 -0
  159. package/vscode/src/vs/workbench/services/extensions/browser/webWorkerFileSystemProvider.js +52 -0
  160. package/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.js +1093 -0
  161. package/vscode/src/vs/workbench/services/extensions/common/extHostCustomers.js +41 -0
  162. package/vscode/src/vs/workbench/services/extensions/common/extensionDevOptions.js +25 -0
  163. package/vscode/src/vs/workbench/services/extensions/common/extensionHostManager.js +643 -0
  164. package/vscode/src/vs/workbench/services/extensions/common/extensionRunningLocationTracker.js +274 -0
  165. package/vscode/src/vs/workbench/services/extensions/common/extensionStorageMigration.js +58 -0
  166. package/vscode/src/vs/workbench/services/extensions/common/extensionsProposedApi.js +80 -0
  167. package/vscode/src/vs/workbench/services/extensions/common/extensionsUtil.js +64 -0
  168. package/vscode/src/vs/workbench/services/extensions/common/remoteConsoleUtil.js +49 -0
  169. package/vscode/src/vs/workbench/services/extensions/common/remoteExtensionHost.js +220 -0
  170. package/vscode/src/vs/workbench/services/themes/common/iconExtensionPoint.js +5 -0
  171. package/vscode/src/vs/workbench/services/workingCopy/common/resourceWorkingCopy.js +79 -0
  172. package/vscode-proposed.d.ts +0 -3872
  173. /package/{dist/main/vscode → vscode}/src/vs/workbench/api/common/extHost.protocol.d.ts +0 -0
  174. /package/{dist/main/vscode → vscode}/src/vs/workbench/api/common/extHostExtensionActivator.d.ts +0 -0
  175. /package/{dist/main/vscode → vscode}/src/vs/workbench/api/common/extHostFileSystemInfo.d.ts +0 -0
  176. /package/{dist/main/vscode → vscode}/src/vs/workbench/api/common/extHostInitDataService.d.ts +0 -0
  177. /package/{dist/main/vscode → vscode}/src/vs/workbench/api/common/extHostLocalizationService.d.ts +0 -0
  178. /package/{dist/main/vscode → vscode}/src/vs/workbench/api/common/extHostRpcService.d.ts +0 -0
  179. /package/{dist/main/vscode → vscode}/src/vs/workbench/api/common/extHostStoragePaths.d.ts +0 -0
  180. /package/{dist/main/vscode → vscode}/src/vs/workbench/api/common/extHostTypes.d.ts +0 -0
  181. /package/{dist/main/vscode → vscode}/src/vs/workbench/api/common/extHostUriTransformerService.d.ts +0 -0
  182. /package/{dist/main/vscode → vscode}/src/vs/workbench/api/worker/extHostExtensionService.d.ts +0 -0
  183. /package/{dist/main/vscode → vscode}/src/vs/workbench/services/search/common/queryBuilder.d.ts +0 -0
@@ -0,0 +1,482 @@
1
+ import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
2
+ import { assertFn } from 'monaco-editor/esm/vs/base/common/assert.js';
3
+ import { BugIndicatingError } from 'monaco-editor/esm/vs/base/common/errors.js';
4
+ import { Event } from 'monaco-editor/esm/vs/base/common/event.js';
5
+ import { DisposableStore } from 'monaco-editor/esm/vs/base/common/lifecycle.js';
6
+ import { observableValue, observableFromEvent, derived } from 'monaco-editor/esm/vs/base/common/observable.js';
7
+ import { basename, isEqual } from 'monaco-editor/esm/vs/base/common/resources.js';
8
+ import Severity from 'monaco-editor/esm/vs/base/common/severity.js';
9
+ import { IModelService } from 'monaco-editor/esm/vs/editor/common/services/model.js';
10
+ import { ITextModelService } from 'monaco-editor/esm/vs/editor/common/services/resolverService.js';
11
+ import { localizeWithPath } from 'monaco-editor/esm/vs/nls.js';
12
+ import '../../../../../../../override/vs/platform/dialogs/common/dialogs.js';
13
+ import { IInstantiationService } from 'monaco-editor/esm/vs/platform/instantiation/common/instantiation.js';
14
+ import { IStorageService } from 'monaco-editor/esm/vs/platform/storage/common/storage.js';
15
+ import { SaveSourceRegistry } from 'vscode/vscode/vs/workbench/common/editor';
16
+ import { EditorModel } from 'vscode/vscode/vs/workbench/common/editor/editorModel';
17
+ import { conflictMarkers } from './mergeMarkers/mergeMarkersController.js';
18
+ import { MergeDiffComputer } from './model/diffComputer.js';
19
+ import { MergeEditorModel } from './model/mergeEditorModel.js';
20
+ import { StorageCloseWithConflicts } from '../common/mergeEditor.js';
21
+ import { IEditorService } from 'vscode/vscode/vs/workbench/services/editor/common/editorService';
22
+ import { ITextFileService } from 'vscode/vscode/vs/workbench/services/textfile/common/textfiles';
23
+ import { IDialogService } from 'vscode/vscode/vs/platform/dialogs/common/dialogs';
24
+
25
+ var WorkspaceMergeEditorModeFactory_1;
26
+ let TempFileMergeEditorModeFactory = class TempFileMergeEditorModeFactory {
27
+ constructor(_mergeEditorTelemetry, _instantiationService, _textModelService, _modelService) {
28
+ this._mergeEditorTelemetry = _mergeEditorTelemetry;
29
+ this._instantiationService = _instantiationService;
30
+ this._textModelService = _textModelService;
31
+ this._modelService = _modelService;
32
+ }
33
+ async createInputModel(args) {
34
+ const store = ( new DisposableStore());
35
+ const [base, result, input1Data, input2Data,] = await Promise.all([
36
+ this._textModelService.createModelReference(args.base),
37
+ this._textModelService.createModelReference(args.result),
38
+ toInputData(args.input1, this._textModelService, store),
39
+ toInputData(args.input2, this._textModelService, store),
40
+ ]);
41
+ store.add(base);
42
+ store.add(result);
43
+ const tempResultUri = result.object.textEditorModel.uri.with({ scheme: 'merge-result' });
44
+ const temporaryResultModel = this._modelService.createModel('', {
45
+ languageId: result.object.textEditorModel.getLanguageId(),
46
+ onDidChange: Event.None,
47
+ }, tempResultUri);
48
+ store.add(temporaryResultModel);
49
+ const mergeDiffComputer = this._instantiationService.createInstance(MergeDiffComputer);
50
+ const model = this._instantiationService.createInstance(MergeEditorModel, base.object.textEditorModel, input1Data, input2Data, temporaryResultModel, mergeDiffComputer, {
51
+ resetResult: true,
52
+ }, this._mergeEditorTelemetry);
53
+ store.add(model);
54
+ await model.onInitialized;
55
+ return this._instantiationService.createInstance(TempFileMergeEditorInputModel, model, store, result.object, args.result);
56
+ }
57
+ };
58
+ TempFileMergeEditorModeFactory = ( __decorate([
59
+ ( __param(1, IInstantiationService)),
60
+ ( __param(2, ITextModelService)),
61
+ ( __param(3, IModelService))
62
+ ], TempFileMergeEditorModeFactory));
63
+ let TempFileMergeEditorInputModel = class TempFileMergeEditorInputModel extends EditorModel {
64
+ constructor(model, disposable, result, resultUri, textFileService, dialogService, editorService) {
65
+ super();
66
+ this.model = model;
67
+ this.disposable = disposable;
68
+ this.result = result;
69
+ this.resultUri = resultUri;
70
+ this.textFileService = textFileService;
71
+ this.dialogService = dialogService;
72
+ this.editorService = editorService;
73
+ this.savedAltVersionId = observableValue(this, this.model.resultTextModel.getAlternativeVersionId());
74
+ this.altVersionId = observableFromEvent(e => this.model.resultTextModel.onDidChangeContent(e), () =>
75
+ this.model.resultTextModel.getAlternativeVersionId());
76
+ this.isDirty = derived(this, (reader) => this.altVersionId.read(reader) !== this.savedAltVersionId.read(reader));
77
+ this.finished = false;
78
+ }
79
+ dispose() {
80
+ this.disposable.dispose();
81
+ super.dispose();
82
+ }
83
+ async accept() {
84
+ const value = await this.model.resultTextModel.getValue();
85
+ this.result.textEditorModel.setValue(value);
86
+ this.savedAltVersionId.set(this.model.resultTextModel.getAlternativeVersionId(), undefined);
87
+ await this.textFileService.save(this.result.textEditorModel.uri);
88
+ this.finished = true;
89
+ }
90
+ async _discard() {
91
+ await this.textFileService.revert(this.model.resultTextModel.uri);
92
+ this.savedAltVersionId.set(this.model.resultTextModel.getAlternativeVersionId(), undefined);
93
+ this.finished = true;
94
+ }
95
+ shouldConfirmClose() {
96
+ return true;
97
+ }
98
+ async confirmClose(inputModels) {
99
+ assertFn(() => ( inputModels.some((m) => m === this)));
100
+ const someDirty = ( inputModels.some((m) => m.isDirty.get()));
101
+ let choice;
102
+ if (someDirty) {
103
+ const isMany = inputModels.length > 1;
104
+ const message = isMany
105
+ ? ( localizeWithPath(
106
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
107
+ 'messageN',
108
+ 'Do you want keep the merge result of {0} files?',
109
+ inputModels.length
110
+ ))
111
+ : ( localizeWithPath(
112
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
113
+ 'message1',
114
+ 'Do you want keep the merge result of {0}?',
115
+ basename(inputModels[0].model.resultTextModel.uri)
116
+ ));
117
+ const hasUnhandledConflicts = ( inputModels.some((m) => m.model.hasUnhandledConflicts.get()));
118
+ const buttons = [
119
+ {
120
+ label: hasUnhandledConflicts ?
121
+ ( localizeWithPath(
122
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
123
+ { key: 'saveWithConflict', comment: ['&& denotes a mnemonic'] },
124
+ "&&Save With Conflicts"
125
+ )) :
126
+ ( localizeWithPath(
127
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
128
+ { key: 'save', comment: ['&& denotes a mnemonic'] },
129
+ "&&Save"
130
+ )),
131
+ run: () => 0
132
+ },
133
+ {
134
+ label: ( localizeWithPath(
135
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
136
+ { key: 'discard', comment: ['&& denotes a mnemonic'] },
137
+ "Do&&n't Save"
138
+ )),
139
+ run: () => 1
140
+ }
141
+ ];
142
+ choice = (await this.dialogService.prompt({
143
+ type: Severity.Info,
144
+ message,
145
+ detail: hasUnhandledConflicts
146
+ ? isMany
147
+ ? ( localizeWithPath(
148
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
149
+ 'detailNConflicts',
150
+ "The files contain unhandled conflicts. The merge results will be lost if you don't save them."
151
+ ))
152
+ : ( localizeWithPath(
153
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
154
+ 'detail1Conflicts',
155
+ "The file contains unhandled conflicts. The merge result will be lost if you don't save it."
156
+ ))
157
+ : isMany
158
+ ? ( localizeWithPath(
159
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
160
+ 'detailN',
161
+ "The merge results will be lost if you don't save them."
162
+ ))
163
+ : ( localizeWithPath(
164
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
165
+ 'detail1',
166
+ "The merge result will be lost if you don't save it."
167
+ )),
168
+ buttons,
169
+ cancelButton: {
170
+ run: () => 2
171
+ }
172
+ })).result;
173
+ }
174
+ else {
175
+ choice = 1 ;
176
+ }
177
+ if (choice === 0 ) {
178
+ await Promise.all(( inputModels.map(m => m.accept())));
179
+ }
180
+ else if (choice === 1 ) {
181
+ await Promise.all(( inputModels.map(m => m._discard())));
182
+ }
183
+ else ;
184
+ return choice;
185
+ }
186
+ async save(options) {
187
+ if (this.finished) {
188
+ return;
189
+ }
190
+ (async () => {
191
+ const { confirmed } = await this.dialogService.confirm({
192
+ message: ( localizeWithPath(
193
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
194
+ 'saveTempFile.message',
195
+ "Do you want to accept the merge result?"
196
+ )),
197
+ detail: ( localizeWithPath(
198
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
199
+ 'saveTempFile.detail',
200
+ "This will write the merge result to the original file and close the merge editor."
201
+ )),
202
+ primaryButton: ( localizeWithPath(
203
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
204
+ { key: 'acceptMerge', comment: ['&& denotes a mnemonic'] },
205
+ '&&Accept Merge'
206
+ ))
207
+ });
208
+ if (confirmed) {
209
+ await this.accept();
210
+ const editors = this.editorService.findEditors(this.resultUri).filter(e => e.editor.typeId === 'mergeEditor.Input');
211
+ await this.editorService.closeEditors(editors);
212
+ }
213
+ })();
214
+ }
215
+ async revert(options) {
216
+ }
217
+ };
218
+ TempFileMergeEditorInputModel = ( __decorate([
219
+ ( __param(4, ITextFileService)),
220
+ ( __param(5, IDialogService)),
221
+ ( __param(6, IEditorService))
222
+ ], TempFileMergeEditorInputModel));
223
+ let WorkspaceMergeEditorModeFactory = class WorkspaceMergeEditorModeFactory {
224
+ static { WorkspaceMergeEditorModeFactory_1 = this; }
225
+ constructor(_mergeEditorTelemetry, _instantiationService, _textModelService, textFileService) {
226
+ this._mergeEditorTelemetry = _mergeEditorTelemetry;
227
+ this._instantiationService = _instantiationService;
228
+ this._textModelService = _textModelService;
229
+ this.textFileService = textFileService;
230
+ }
231
+ static { this.FILE_SAVED_SOURCE = SaveSourceRegistry.registerSource('merge-editor.source', ( localizeWithPath(
232
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
233
+ 'merge-editor.source',
234
+ "Before Resolving Conflicts In Merge Editor"
235
+ ))); }
236
+ async createInputModel(args) {
237
+ const store = ( new DisposableStore());
238
+ let resultTextFileModel = undefined;
239
+ const modelListener = store.add(( new DisposableStore()));
240
+ const handleDidCreate = (model) => {
241
+ if (isEqual(args.result, model.resource)) {
242
+ modelListener.clear();
243
+ resultTextFileModel = model;
244
+ }
245
+ };
246
+ modelListener.add(this.textFileService.files.onDidCreate(handleDidCreate));
247
+ this.textFileService.files.models.forEach(handleDidCreate);
248
+ const [base, result, input1Data, input2Data,] = await Promise.all([
249
+ this._textModelService.createModelReference(args.base),
250
+ this._textModelService.createModelReference(args.result),
251
+ toInputData(args.input1, this._textModelService, store),
252
+ toInputData(args.input2, this._textModelService, store),
253
+ ]);
254
+ store.add(base);
255
+ store.add(result);
256
+ if (!resultTextFileModel) {
257
+ throw new BugIndicatingError();
258
+ }
259
+ await resultTextFileModel.save({ source: WorkspaceMergeEditorModeFactory_1.FILE_SAVED_SOURCE });
260
+ const lines = resultTextFileModel.textEditorModel.getLinesContent();
261
+ const hasConflictMarkers = ( lines.some(l => l.startsWith(conflictMarkers.start)));
262
+ const resetResult = hasConflictMarkers;
263
+ const mergeDiffComputer = this._instantiationService.createInstance(MergeDiffComputer);
264
+ const model = this._instantiationService.createInstance(MergeEditorModel, base.object.textEditorModel, input1Data, input2Data, result.object.textEditorModel, mergeDiffComputer, {
265
+ resetResult
266
+ }, this._mergeEditorTelemetry);
267
+ store.add(model);
268
+ await model.onInitialized;
269
+ return this._instantiationService.createInstance(WorkspaceMergeEditorInputModel, model, store, resultTextFileModel, this._mergeEditorTelemetry);
270
+ }
271
+ };
272
+ WorkspaceMergeEditorModeFactory = WorkspaceMergeEditorModeFactory_1 = ( __decorate([
273
+ ( __param(1, IInstantiationService)),
274
+ ( __param(2, ITextModelService)),
275
+ ( __param(3, ITextFileService))
276
+ ], WorkspaceMergeEditorModeFactory));
277
+ let WorkspaceMergeEditorInputModel = class WorkspaceMergeEditorInputModel extends EditorModel {
278
+ constructor(model, disposableStore, resultTextFileModel, telemetry, _dialogService, _storageService) {
279
+ super();
280
+ this.model = model;
281
+ this.disposableStore = disposableStore;
282
+ this.resultTextFileModel = resultTextFileModel;
283
+ this.telemetry = telemetry;
284
+ this._dialogService = _dialogService;
285
+ this._storageService = _storageService;
286
+ this.isDirty = observableFromEvent(Event.any(this.resultTextFileModel.onDidChangeDirty, this.resultTextFileModel.onDidSaveError), () => this.resultTextFileModel.isDirty());
287
+ this.reported = false;
288
+ this.dateTimeOpened = ( new Date());
289
+ }
290
+ dispose() {
291
+ this.disposableStore.dispose();
292
+ super.dispose();
293
+ this.reportClose(false);
294
+ }
295
+ reportClose(accepted) {
296
+ if (!this.reported) {
297
+ const remainingConflictCount = this.model.unhandledConflictsCount.get();
298
+ const durationOpenedMs = ( new Date()).getTime() - this.dateTimeOpened.getTime();
299
+ this.telemetry.reportMergeEditorClosed({
300
+ durationOpenedSecs: durationOpenedMs / 1000,
301
+ remainingConflictCount,
302
+ accepted,
303
+ conflictCount: this.model.conflictCount,
304
+ combinableConflictCount: this.model.combinableConflictCount,
305
+ conflictsResolvedWithBase: this.model.conflictsResolvedWithBase,
306
+ conflictsResolvedWithInput1: this.model.conflictsResolvedWithInput1,
307
+ conflictsResolvedWithInput2: this.model.conflictsResolvedWithInput2,
308
+ conflictsResolvedWithSmartCombination: this.model.conflictsResolvedWithSmartCombination,
309
+ manuallySolvedConflictCountThatEqualNone: this.model.manuallySolvedConflictCountThatEqualNone,
310
+ manuallySolvedConflictCountThatEqualSmartCombine: this.model.manuallySolvedConflictCountThatEqualSmartCombine,
311
+ manuallySolvedConflictCountThatEqualInput1: this.model.manuallySolvedConflictCountThatEqualInput1,
312
+ manuallySolvedConflictCountThatEqualInput2: this.model.manuallySolvedConflictCountThatEqualInput2,
313
+ manuallySolvedConflictCountThatEqualNoneAndStartedWithBase: this.model.manuallySolvedConflictCountThatEqualNoneAndStartedWithBase,
314
+ manuallySolvedConflictCountThatEqualNoneAndStartedWithInput1: this.model.manuallySolvedConflictCountThatEqualNoneAndStartedWithInput1,
315
+ manuallySolvedConflictCountThatEqualNoneAndStartedWithInput2: this.model.manuallySolvedConflictCountThatEqualNoneAndStartedWithInput2,
316
+ manuallySolvedConflictCountThatEqualNoneAndStartedWithBothNonSmart: this.model.manuallySolvedConflictCountThatEqualNoneAndStartedWithBothNonSmart,
317
+ manuallySolvedConflictCountThatEqualNoneAndStartedWithBothSmart: this.model.manuallySolvedConflictCountThatEqualNoneAndStartedWithBothSmart,
318
+ });
319
+ this.reported = true;
320
+ }
321
+ }
322
+ async accept() {
323
+ this.reportClose(true);
324
+ await this.resultTextFileModel.save();
325
+ }
326
+ get resultUri() {
327
+ return this.resultTextFileModel.resource;
328
+ }
329
+ async save(options) {
330
+ await this.resultTextFileModel.save(options);
331
+ }
332
+ async revert(options) {
333
+ await this.resultTextFileModel.revert(options);
334
+ }
335
+ shouldConfirmClose() {
336
+ return true;
337
+ }
338
+ async confirmClose(inputModels) {
339
+ const isMany = inputModels.length > 1;
340
+ const someDirty = ( inputModels.some(m => m.isDirty.get()));
341
+ const someUnhandledConflicts = ( inputModels.some(m => m.model.hasUnhandledConflicts.get()));
342
+ if (someDirty) {
343
+ const message = isMany
344
+ ? ( localizeWithPath(
345
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
346
+ 'workspace.messageN',
347
+ 'Do you want to save the changes you made to {0} files?',
348
+ inputModels.length
349
+ ))
350
+ : ( localizeWithPath(
351
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
352
+ 'workspace.message1',
353
+ 'Do you want to save the changes you made to {0}?',
354
+ basename(inputModels[0].resultUri)
355
+ ));
356
+ const { result } = await this._dialogService.prompt({
357
+ type: Severity.Info,
358
+ message,
359
+ detail: someUnhandledConflicts ?
360
+ isMany
361
+ ? ( localizeWithPath(
362
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
363
+ 'workspace.detailN.unhandled',
364
+ "The files contain unhandled conflicts. Your changes will be lost if you don't save them."
365
+ ))
366
+ : ( localizeWithPath(
367
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
368
+ 'workspace.detail1.unhandled',
369
+ "The file contains unhandled conflicts. Your changes will be lost if you don't save them."
370
+ ))
371
+ : isMany
372
+ ? ( localizeWithPath(
373
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
374
+ 'workspace.detailN.handled',
375
+ "Your changes will be lost if you don't save them."
376
+ ))
377
+ : ( localizeWithPath(
378
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
379
+ 'workspace.detail1.handled',
380
+ "Your changes will be lost if you don't save them."
381
+ )),
382
+ buttons: [
383
+ {
384
+ label: someUnhandledConflicts
385
+ ? ( localizeWithPath(
386
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
387
+ { key: 'workspace.saveWithConflict', comment: ['&& denotes a mnemonic'] },
388
+ '&&Save with Conflicts'
389
+ ))
390
+ : ( localizeWithPath(
391
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
392
+ { key: 'workspace.save', comment: ['&& denotes a mnemonic'] },
393
+ '&&Save'
394
+ )),
395
+ run: () => 0
396
+ },
397
+ {
398
+ label: ( localizeWithPath(
399
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
400
+ { key: 'workspace.doNotSave', comment: ['&& denotes a mnemonic'] },
401
+ "Do&&n't Save"
402
+ )),
403
+ run: () => 1
404
+ }
405
+ ],
406
+ cancelButton: {
407
+ run: () => 2
408
+ }
409
+ });
410
+ return result;
411
+ }
412
+ else if (someUnhandledConflicts && !this._storageService.getBoolean(StorageCloseWithConflicts, 0 , false)) {
413
+ const { confirmed, checkboxChecked } = await this._dialogService.confirm({
414
+ message: isMany
415
+ ? ( localizeWithPath(
416
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
417
+ 'workspace.messageN.nonDirty',
418
+ 'Do you want to close {0} merge editors?',
419
+ inputModels.length
420
+ ))
421
+ : ( localizeWithPath(
422
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
423
+ 'workspace.message1.nonDirty',
424
+ 'Do you want to close the merge editor for {0}?',
425
+ basename(inputModels[0].resultUri)
426
+ )),
427
+ detail: someUnhandledConflicts ?
428
+ isMany
429
+ ? ( localizeWithPath(
430
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
431
+ 'workspace.detailN.unhandled.nonDirty',
432
+ "The files contain unhandled conflicts."
433
+ ))
434
+ : ( localizeWithPath(
435
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
436
+ 'workspace.detail1.unhandled.nonDirty',
437
+ "The file contains unhandled conflicts."
438
+ ))
439
+ : undefined,
440
+ primaryButton: someUnhandledConflicts
441
+ ? ( localizeWithPath(
442
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
443
+ { key: 'workspace.closeWithConflicts', comment: ['&& denotes a mnemonic'] },
444
+ '&&Close with Conflicts'
445
+ ))
446
+ : ( localizeWithPath(
447
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
448
+ { key: 'workspace.close', comment: ['&& denotes a mnemonic'] },
449
+ '&&Close'
450
+ )),
451
+ checkbox: { label: ( localizeWithPath(
452
+ 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel',
453
+ 'noMoreWarn',
454
+ "Don't ask again"
455
+ )) }
456
+ });
457
+ if (checkboxChecked) {
458
+ this._storageService.store(StorageCloseWithConflicts, true, 0 , 0 );
459
+ }
460
+ return confirmed ? 0 : 2 ;
461
+ }
462
+ else {
463
+ return 0 ;
464
+ }
465
+ }
466
+ };
467
+ WorkspaceMergeEditorInputModel = ( __decorate([
468
+ ( __param(4, IDialogService)),
469
+ ( __param(5, IStorageService))
470
+ ], WorkspaceMergeEditorInputModel));
471
+ async function toInputData(data, textModelService, store) {
472
+ const ref = await textModelService.createModelReference(data.uri);
473
+ store.add(ref);
474
+ return {
475
+ textModel: ref.object.textEditorModel,
476
+ title: data.title,
477
+ description: data.description,
478
+ detail: data.detail,
479
+ };
480
+ }
481
+
482
+ export { TempFileMergeEditorModeFactory, WorkspaceMergeEditorModeFactory };
@@ -0,0 +1,6 @@
1
+ const conflictMarkers = {
2
+ start: '<<<<<<<',
3
+ end: '>>>>>>>',
4
+ };
5
+
6
+ export { conflictMarkers };
@@ -0,0 +1,85 @@
1
+ import { __decorate, __param } from '../../../../../../../../external/tslib/tslib.es6.js';
2
+ import { assertFn, checkAdjacentItems } from 'monaco-editor/esm/vs/base/common/assert.js';
3
+ import { IEditorWorkerService } from 'monaco-editor/esm/vs/editor/common/services/editorWorker.js';
4
+ import { IConfigurationService } from 'monaco-editor/esm/vs/platform/configuration/common/configuration.js';
5
+ import { LineRange } from './lineRange.js';
6
+ import { DetailedLineRangeMapping, RangeMapping } from './mapping.js';
7
+ import { observableConfigValue } from '../utils.js';
8
+
9
+ let MergeDiffComputer = class MergeDiffComputer {
10
+ constructor(editorWorkerService, configurationService) {
11
+ this.editorWorkerService = editorWorkerService;
12
+ this.configurationService = configurationService;
13
+ this.mergeAlgorithm = ( observableConfigValue('mergeEditor.diffAlgorithm', 'advanced', this.configurationService)
14
+ .map(v => v === 'smart' ? 'legacy' : v === 'experimental' ? 'advanced' : v));
15
+ }
16
+ async computeDiff(textModel1, textModel2, reader) {
17
+ const diffAlgorithm = this.mergeAlgorithm.read(reader);
18
+ const result = await this.editorWorkerService.computeDiff(textModel1.uri, textModel2.uri, {
19
+ ignoreTrimWhitespace: false,
20
+ maxComputationTimeMs: 0,
21
+ computeMoves: false,
22
+ }, diffAlgorithm);
23
+ if (!result) {
24
+ throw new Error('Diff computation failed');
25
+ }
26
+ if (textModel1.isDisposed() || textModel2.isDisposed()) {
27
+ return { diffs: null };
28
+ }
29
+ const changes = ( result.changes.map(c => ( new DetailedLineRangeMapping(
30
+ toLineRange(c.original),
31
+ textModel1,
32
+ toLineRange(c.modified),
33
+ textModel2,
34
+ c.innerChanges?.map(ic => toRangeMapping(ic))
35
+ ))));
36
+ assertFn(() => {
37
+ for (const c of changes) {
38
+ const inputRange = c.inputRange;
39
+ const outputRange = c.outputRange;
40
+ const inputTextModel = c.inputTextModel;
41
+ const outputTextModel = c.outputTextModel;
42
+ for (const map of c.rangeMappings) {
43
+ let inputRangesValid = inputRange.startLineNumber - 1 <= map.inputRange.startLineNumber
44
+ && map.inputRange.endLineNumber <= inputRange.endLineNumberExclusive;
45
+ if (inputRangesValid && map.inputRange.startLineNumber === inputRange.startLineNumber - 1) {
46
+ inputRangesValid = map.inputRange.endColumn >= inputTextModel.getLineMaxColumn(map.inputRange.startLineNumber);
47
+ }
48
+ if (inputRangesValid && map.inputRange.endLineNumber === inputRange.endLineNumberExclusive) {
49
+ inputRangesValid = map.inputRange.endColumn === 1;
50
+ }
51
+ let outputRangesValid = outputRange.startLineNumber - 1 <= map.outputRange.startLineNumber
52
+ && map.outputRange.endLineNumber <= outputRange.endLineNumberExclusive;
53
+ if (outputRangesValid && map.outputRange.startLineNumber === outputRange.startLineNumber - 1) {
54
+ outputRangesValid = map.outputRange.endColumn >= outputTextModel.getLineMaxColumn(map.outputRange.endLineNumber);
55
+ }
56
+ if (outputRangesValid && map.outputRange.endLineNumber === outputRange.endLineNumberExclusive) {
57
+ outputRangesValid = map.outputRange.endColumn === 1;
58
+ }
59
+ if (!inputRangesValid || !outputRangesValid) {
60
+ return false;
61
+ }
62
+ }
63
+ }
64
+ return changes.length === 0 || (changes[0].inputRange.startLineNumber === changes[0].outputRange.startLineNumber &&
65
+ checkAdjacentItems(changes, (m1, m2) => m2.inputRange.startLineNumber - m1.inputRange.endLineNumberExclusive === m2.outputRange.startLineNumber - m1.outputRange.endLineNumberExclusive &&
66
+ m1.inputRange.endLineNumberExclusive < m2.inputRange.startLineNumber &&
67
+ m1.outputRange.endLineNumberExclusive < m2.outputRange.startLineNumber));
68
+ });
69
+ return {
70
+ diffs: changes
71
+ };
72
+ }
73
+ };
74
+ MergeDiffComputer = ( __decorate([
75
+ ( __param(0, IEditorWorkerService)),
76
+ ( __param(1, IConfigurationService))
77
+ ], MergeDiffComputer));
78
+ function toLineRange(range) {
79
+ return ( new LineRange(range.startLineNumber, range.length));
80
+ }
81
+ function toRangeMapping(mapping) {
82
+ return ( new RangeMapping(mapping.originalRange, mapping.modifiedRange));
83
+ }
84
+
85
+ export { MergeDiffComputer, toLineRange, toRangeMapping };
@@ -0,0 +1,56 @@
1
+ import { equals } from 'monaco-editor/esm/vs/base/common/arrays.js';
2
+ import { Range } from 'monaco-editor/esm/vs/editor/common/core/range.js';
3
+
4
+ class LineRangeEdit {
5
+ constructor(range, newLines) {
6
+ this.range = range;
7
+ this.newLines = newLines;
8
+ }
9
+ equals(other) {
10
+ return this.range.equals(other.range) && equals(this.newLines, other.newLines);
11
+ }
12
+ toEdits(modelLineCount) {
13
+ return ( new LineEdits([this])).toEdits(modelLineCount);
14
+ }
15
+ }
16
+ class RangeEdit {
17
+ constructor(range, newText) {
18
+ this.range = range;
19
+ this.newText = newText;
20
+ }
21
+ equals(other) {
22
+ return Range.equalsRange(this.range, other.range) && this.newText === other.newText;
23
+ }
24
+ }
25
+ class LineEdits {
26
+ constructor(edits) {
27
+ this.edits = edits;
28
+ }
29
+ toEdits(modelLineCount) {
30
+ return ( this.edits.map((e) => {
31
+ if (e.range.endLineNumberExclusive <= modelLineCount) {
32
+ return {
33
+ range: ( new Range(e.range.startLineNumber, 1, e.range.endLineNumberExclusive, 1)),
34
+ text: ( e.newLines.map(s => s + '\n')).join(''),
35
+ };
36
+ }
37
+ if (e.range.startLineNumber === 1) {
38
+ return {
39
+ range: ( new Range(1, 1, modelLineCount, Number.MAX_SAFE_INTEGER)),
40
+ text: e.newLines.join('\n'),
41
+ };
42
+ }
43
+ return {
44
+ range: ( new Range(
45
+ e.range.startLineNumber - 1,
46
+ Number.MAX_SAFE_INTEGER,
47
+ modelLineCount,
48
+ Number.MAX_SAFE_INTEGER
49
+ )),
50
+ text: ( e.newLines.map(s => '\n' + s)).join(''),
51
+ };
52
+ }));
53
+ }
54
+ }
55
+
56
+ export { LineEdits, LineRangeEdit, RangeEdit };