monaco-editor11 1.0.9 → 1.1.1
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.
- package/dist/index.d.ts +1 -1
- package/dist/monaco-editor11.es.js +12 -16
- package/dist/monaco-editor11.umd.js +1 -1
- package/package.json +2 -2
- package/dist/monaco.d.ts +0 -8
- package/dist/workers/common/initialize.js +0 -16
- package/dist/workers/common/workers.js +0 -141
- package/dist/workers/editor/common/abstractSyntaxTokenBackend.js +0 -128
- package/dist/workers/editor/common/abstractText.js +0 -89
- package/dist/workers/editor/common/ast.js +0 -485
- package/dist/workers/editor/common/autoIndent.js +0 -390
- package/dist/workers/editor/common/beforeEditPositionMapper.js +0 -110
- package/dist/workers/editor/common/bracketPairsImpl.js +0 -717
- package/dist/workers/editor/common/bracketPairsTree.js +0 -343
- package/dist/workers/editor/common/brackets.js +0 -108
- package/dist/workers/editor/common/characterClassifier.js +0 -59
- package/dist/workers/editor/common/characterPair.js +0 -40
- package/dist/workers/editor/common/colorizedBracketPairsDecorationProvider.js +0 -97
- package/dist/workers/editor/common/columnRange.js +0 -35
- package/dist/workers/editor/common/combineTextEditInfos.js +0 -124
- package/dist/workers/editor/common/common.js +0 -20
- package/dist/workers/editor/common/computeMovedLines.js +0 -249
- package/dist/workers/editor/common/concat23Trees.js +0 -192
- package/dist/workers/editor/common/contiguousMultilineTokens.js +0 -32
- package/dist/workers/editor/common/contiguousMultilineTokensBuilder.js +0 -23
- package/dist/workers/editor/common/contiguousTokensEditing.js +0 -128
- package/dist/workers/editor/common/contiguousTokensStore.js +0 -207
- package/dist/workers/editor/common/coordinatesConverter.js +0 -51
- package/dist/workers/editor/common/cursor.js +0 -899
- package/dist/workers/editor/common/cursorAtomicMoveOperations.js +0 -145
- package/dist/workers/editor/common/cursorCollection.js +0 -194
- package/dist/workers/editor/common/cursorColumnSelection.js +0 -93
- package/dist/workers/editor/common/cursorColumns.js +0 -112
- package/dist/workers/editor/common/cursorCommon.js +0 -250
- package/dist/workers/editor/common/cursorContext.js +0 -15
- package/dist/workers/editor/common/cursorDeleteOperations.js +0 -231
- package/dist/workers/editor/common/cursorMoveCommands.js +0 -676
- package/dist/workers/editor/common/cursorMoveOperations.js +0 -290
- package/dist/workers/editor/common/cursorTypeEditOperations.js +0 -968
- package/dist/workers/editor/common/cursorTypeOperations.js +0 -173
- package/dist/workers/editor/common/cursorUtils.js +0 -75
- package/dist/workers/editor/common/cursorWordOperations.js +0 -720
- package/dist/workers/editor/common/defaultDocumentColorsComputer.js +0 -138
- package/dist/workers/editor/common/defaultLinesDiffComputer.js +0 -188
- package/dist/workers/editor/common/diffAlgorithm.js +0 -139
- package/dist/workers/editor/common/diffEditor.js +0 -38
- package/dist/workers/editor/common/dynamicProgrammingDiffing.js +0 -101
- package/dist/workers/editor/common/edit.js +0 -183
- package/dist/workers/editor/common/editOperation.js +0 -36
- package/dist/workers/editor/common/editStack.js +0 -363
- package/dist/workers/editor/common/editorAction.js +0 -26
- package/dist/workers/editor/common/editorBaseApi.js +0 -43
- package/dist/workers/editor/common/editorColorRegistry.js +0 -102
- package/dist/workers/editor/common/editorCommon.js +0 -13
- package/dist/workers/editor/common/editorConfigurationSchema.js +0 -338
- package/dist/workers/editor/common/editorContextKeys.js +0 -84
- package/dist/workers/editor/common/editorFeatures.js +0 -17
- package/dist/workers/editor/common/editorOptions.js +0 -3440
- package/dist/workers/editor/common/editorTheme.js +0 -23
- package/dist/workers/editor/common/editorWebWorker.js +0 -299
- package/dist/workers/editor/common/editorWorker.js +0 -9
- package/dist/workers/editor/common/editorWorkerHost.js +0 -15
- package/dist/workers/editor/common/editorZoom.js +0 -26
- package/dist/workers/editor/common/electricCharacter.js +0 -55
- package/dist/workers/editor/common/encodedTokenAttributes.js +0 -79
- package/dist/workers/editor/common/enterAction.js +0 -53
- package/dist/workers/editor/common/eolCounter.js +0 -44
- package/dist/workers/editor/common/findSectionHeaders.js +0 -128
- package/dist/workers/editor/common/fixBrackets.js +0 -67
- package/dist/workers/editor/common/fixedArray.js +0 -70
- package/dist/workers/editor/common/fontInfo.js +0 -172
- package/dist/workers/editor/common/fontInfoFromSettings.js +0 -29
- package/dist/workers/editor/common/getIconClasses.js +0 -106
- package/dist/workers/editor/common/getPositionOffsetTransformerFromTextModel.js +0 -24
- package/dist/workers/editor/common/glyphLanesModel.js +0 -61
- package/dist/workers/editor/common/guidesTextModelPart.js +0 -405
- package/dist/workers/editor/common/heuristicSequenceOptimizations.js +0 -374
- package/dist/workers/editor/common/indentRules.js +0 -63
- package/dist/workers/editor/common/indentation.js +0 -39
- package/dist/workers/editor/common/indentationGuesser.js +0 -178
- package/dist/workers/editor/common/indentationLineProcessor.js +0 -193
- package/dist/workers/editor/common/inlineDecorations.js +0 -26
- package/dist/workers/editor/common/inplaceReplaceSupport.js +0 -87
- package/dist/workers/editor/common/inputMode.js +0 -22
- package/dist/workers/editor/common/intervalTree.js +0 -1002
- package/dist/workers/editor/common/language.js +0 -9
- package/dist/workers/editor/common/languageBracketsConfiguration.js +0 -133
- package/dist/workers/editor/common/languageConfiguration.js +0 -138
- package/dist/workers/editor/common/languageConfigurationRegistry.js +0 -361
- package/dist/workers/editor/common/languageFeatureDebounce.js +0 -137
- package/dist/workers/editor/common/languageFeatureRegistry.js +0 -180
- package/dist/workers/editor/common/languageFeatures.js +0 -9
- package/dist/workers/editor/common/languageFeaturesService.js +0 -47
- package/dist/workers/editor/common/languageSelector.js +0 -112
- package/dist/workers/editor/common/languageService.js +0 -92
- package/dist/workers/editor/common/languages.js +0 -522
- package/dist/workers/editor/common/languagesAssociations.js +0 -193
- package/dist/workers/editor/common/languagesRegistry.js +0 -237
- package/dist/workers/editor/common/legacyLinesDiffComputer.js +0 -468
- package/dist/workers/editor/common/length.js +0 -129
- package/dist/workers/editor/common/lineDecorations.js +0 -208
- package/dist/workers/editor/common/lineEdit.js +0 -75
- package/dist/workers/editor/common/lineHeights.js +0 -370
- package/dist/workers/editor/common/linePart.js +0 -25
- package/dist/workers/editor/common/lineRange.js +0 -312
- package/dist/workers/editor/common/lineSequence.js +0 -36
- package/dist/workers/editor/common/lineTokens.js +0 -405
- package/dist/workers/editor/common/linesDiffComputer.js +0 -29
- package/dist/workers/editor/common/linesDiffComputers.js +0 -13
- package/dist/workers/editor/common/linesLayout.js +0 -765
- package/dist/workers/editor/common/linesSliceCharSequence.js +0 -205
- package/dist/workers/editor/common/linkComputer.js +0 -269
- package/dist/workers/editor/common/markerDecorations.js +0 -9
- package/dist/workers/editor/common/markerDecorationsService.js +0 -248
- package/dist/workers/editor/common/minimapTokensColorTracker.js +0 -58
- package/dist/workers/editor/common/mirrorTextModel.js +0 -117
- package/dist/workers/editor/common/model.js +0 -9
- package/dist/workers/editor/common/modelLineProjection.js +0 -350
- package/dist/workers/editor/common/modelLineProjectionData.js +0 -297
- package/dist/workers/editor/common/modelService.js +0 -413
- package/dist/workers/editor/common/modesRegistry.js +0 -75
- package/dist/workers/editor/common/monospaceLineBreaksComputer.js +0 -473
- package/dist/workers/editor/common/myersDiffAlgorithm.js +0 -159
- package/dist/workers/editor/common/nodeReader.js +0 -127
- package/dist/workers/editor/common/nullTokenize.js +0 -29
- package/dist/workers/editor/common/offsetRange.js +0 -225
- package/dist/workers/editor/common/onEnter.js +0 -109
- package/dist/workers/editor/common/oneCursor.js +0 -117
- package/dist/workers/editor/common/overviewZoneManager.js +0 -176
- package/dist/workers/editor/common/parser.js +0 -121
- package/dist/workers/editor/common/pieceTreeBase.js +0 -1473
- package/dist/workers/editor/common/pieceTreeTextBuffer.js +0 -461
- package/dist/workers/editor/common/pieceTreeTextBufferBuilder.js +0 -140
- package/dist/workers/editor/common/point.js +0 -50
- package/dist/workers/editor/common/position.js +0 -142
- package/dist/workers/editor/common/positionToOffset.js +0 -17
- package/dist/workers/editor/common/positionToOffsetImpl.js +0 -98
- package/dist/workers/editor/common/prefixSumComputer.js +0 -226
- package/dist/workers/editor/common/range.js +0 -421
- package/dist/workers/editor/common/rangeMapping.js +0 -229
- package/dist/workers/editor/common/rangeSingleLine.js +0 -17
- package/dist/workers/editor/common/rbTreeBase.js +0 -362
- package/dist/workers/editor/common/rect.js +0 -163
- package/dist/workers/editor/common/replaceCommand.js +0 -158
- package/dist/workers/editor/common/resolverService.js +0 -5
- package/dist/workers/editor/common/rgba.js +0 -35
- package/dist/workers/editor/common/richEditBrackets.js +0 -356
- package/dist/workers/editor/common/selection.js +0 -145
- package/dist/workers/editor/common/semanticTokensDto.js +0 -82
- package/dist/workers/editor/common/semanticTokensProviderStyling.js +0 -263
- package/dist/workers/editor/common/semanticTokensStyling.js +0 -9
- package/dist/workers/editor/common/semanticTokensStylingService.js +0 -47
- package/dist/workers/editor/common/shiftCommand.js +0 -241
- package/dist/workers/editor/common/smallImmutableSet.js +0 -108
- package/dist/workers/editor/common/sparseMultilineTokens.js +0 -548
- package/dist/workers/editor/common/sparseTokensStore.js +0 -210
- package/dist/workers/editor/common/standaloneEnums.js +0 -1017
- package/dist/workers/editor/common/standaloneStrings.js +0 -42
- package/dist/workers/editor/common/stringBuilder.js +0 -122
- package/dist/workers/editor/common/stringEdit.js +0 -165
- package/dist/workers/editor/common/supports.js +0 -58
- package/dist/workers/editor/common/surroundSelectionCommand.js +0 -44
- package/dist/workers/editor/common/textChange.js +0 -248
- package/dist/workers/editor/common/textEdit.js +0 -269
- package/dist/workers/editor/common/textLength.js +0 -87
- package/dist/workers/editor/common/textModel.js +0 -2031
- package/dist/workers/editor/common/textModelBracketPairs.js +0 -45
- package/dist/workers/editor/common/textModelDefaults.js +0 -18
- package/dist/workers/editor/common/textModelEditSource.js +0 -166
- package/dist/workers/editor/common/textModelEvents.js +0 -216
- package/dist/workers/editor/common/textModelGuides.js +0 -40
- package/dist/workers/editor/common/textModelPart.js +0 -23
- package/dist/workers/editor/common/textModelSearch.js +0 -455
- package/dist/workers/editor/common/textModelStringEdit.js +0 -11
- package/dist/workers/editor/common/textModelSync.impl.js +0 -307
- package/dist/workers/editor/common/textModelText.js +0 -26
- package/dist/workers/editor/common/textModelTokens.js +0 -436
- package/dist/workers/editor/common/textResourceConfiguration.js +0 -6
- package/dist/workers/editor/common/textToHtmlTokenizer.js +0 -139
- package/dist/workers/editor/common/tokenStore.js +0 -407
- package/dist/workers/editor/common/tokenWithTextArray.js +0 -73
- package/dist/workers/editor/common/tokenization.js +0 -287
- package/dist/workers/editor/common/tokenizationRegistry.js +0 -123
- package/dist/workers/editor/common/tokenizationTextModelPart.js +0 -275
- package/dist/workers/editor/common/tokenizer.js +0 -301
- package/dist/workers/editor/common/tokenizerSyntaxTokenBackend.js +0 -261
- package/dist/workers/editor/common/treeSitterLibraryService.js +0 -9
- package/dist/workers/editor/common/treeSitterSyntaxTokenBackend.js +0 -167
- package/dist/workers/editor/common/treeSitterThemeService.js +0 -9
- package/dist/workers/editor/common/treeSitterTokenizationImpl.js +0 -713
- package/dist/workers/editor/common/treeSitterTree.js +0 -395
- package/dist/workers/editor/common/treeViewsDnd.js +0 -24
- package/dist/workers/editor/common/treeViewsDndService.js +0 -12
- package/dist/workers/editor/common/trimTrailingWhitespaceCommand.js +0 -98
- package/dist/workers/editor/common/unicodeTextModelHighlighter.js +0 -188
- package/dist/workers/editor/common/utils.js +0 -62
- package/dist/workers/editor/common/viewContext.js +0 -22
- package/dist/workers/editor/common/viewEventHandler.js +0 -186
- package/dist/workers/editor/common/viewEvents.js +0 -180
- package/dist/workers/editor/common/viewLayout.js +0 -368
- package/dist/workers/editor/common/viewLineRenderer.js +0 -948
- package/dist/workers/editor/common/viewLinesViewportData.js +0 -30
- package/dist/workers/editor/common/viewModel.js +0 -98
- package/dist/workers/editor/common/viewModelDecoration.js +0 -55
- package/dist/workers/editor/common/viewModelDecorations.js +0 -132
- package/dist/workers/editor/common/viewModelEventDispatcher.js +0 -398
- package/dist/workers/editor/common/viewModelImpl.js +0 -1163
- package/dist/workers/editor/common/viewModelLines.js +0 -938
- package/dist/workers/editor/common/wordCharacterClassifier.js +0 -87
- package/dist/workers/editor/common/wordHelper.js +0 -127
- package/dist/workers/language/cssMode.js +0 -198
- package/dist/workers/language/cssWorker.js +0 -183
- package/dist/workers/language/htmlMode.js +0 -213
- package/dist/workers/language/htmlWorker.js +0 -126
- package/dist/workers/language/jsonMode.js +0 -224
- package/dist/workers/language/jsonWorker.js +0 -187
- package/dist/workers/language/languageFeatures.js +0 -1009
- package/dist/workers/language/lib.index.js +0 -103
- package/dist/workers/language/lib.js +0 -1107
- package/dist/workers/language/lspLanguageFeatures.js +0 -716
- package/dist/workers/language/monaco.contribution.js +0 -144
- package/dist/workers/language/tokenization.js +0 -189
- package/dist/workers/language/tsMode.js +0 -212
- package/dist/workers/language/tsWorker.js +0 -352
- package/dist/workers/language/typescriptServices.js +0 -210154
- package/dist/workers/language/typescriptServicesMetadata.js +0 -3
- package/dist/workers/language/workerManager.js +0 -65
- /package/dist/workers/{language/css.worker.js → css.worker.js} +0 -0
- /package/dist/workers/{editor/editor.worker.js → editor.worker.js} +0 -0
- /package/dist/workers/{language/html.worker.js → html.worker.js} +0 -0
- /package/dist/workers/{language/json.worker.js → json.worker.js} +0 -0
- /package/dist/workers/{language/ts.worker.js → ts.worker.js} +0 -0
|
@@ -1,421 +0,0 @@
|
|
|
1
|
-
import { Position } from './position.js';
|
|
2
|
-
|
|
3
|
-
/*---------------------------------------------------------------------------------------------
|
|
4
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
5
|
-
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
6
|
-
*--------------------------------------------------------------------------------------------*/
|
|
7
|
-
/**
|
|
8
|
-
* A range in the editor. (startLineNumber,startColumn) is <= (endLineNumber,endColumn)
|
|
9
|
-
*/
|
|
10
|
-
class Range {
|
|
11
|
-
constructor(startLineNumber, startColumn, endLineNumber, endColumn) {
|
|
12
|
-
if ((startLineNumber > endLineNumber) || (startLineNumber === endLineNumber && startColumn > endColumn)) {
|
|
13
|
-
this.startLineNumber = endLineNumber;
|
|
14
|
-
this.startColumn = endColumn;
|
|
15
|
-
this.endLineNumber = startLineNumber;
|
|
16
|
-
this.endColumn = startColumn;
|
|
17
|
-
}
|
|
18
|
-
else {
|
|
19
|
-
this.startLineNumber = startLineNumber;
|
|
20
|
-
this.startColumn = startColumn;
|
|
21
|
-
this.endLineNumber = endLineNumber;
|
|
22
|
-
this.endColumn = endColumn;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Test if this range is empty.
|
|
27
|
-
*/
|
|
28
|
-
isEmpty() {
|
|
29
|
-
return Range.isEmpty(this);
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Test if `range` is empty.
|
|
33
|
-
*/
|
|
34
|
-
static isEmpty(range) {
|
|
35
|
-
return (range.startLineNumber === range.endLineNumber && range.startColumn === range.endColumn);
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Test if position is in this range. If the position is at the edges, will return true.
|
|
39
|
-
*/
|
|
40
|
-
containsPosition(position) {
|
|
41
|
-
return Range.containsPosition(this, position);
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Test if `position` is in `range`. If the position is at the edges, will return true.
|
|
45
|
-
*/
|
|
46
|
-
static containsPosition(range, position) {
|
|
47
|
-
if (position.lineNumber < range.startLineNumber || position.lineNumber > range.endLineNumber) {
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
if (position.lineNumber === range.startLineNumber && position.column < range.startColumn) {
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
if (position.lineNumber === range.endLineNumber && position.column > range.endColumn) {
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Test if `position` is in `range`. If the position is at the edges, will return false.
|
|
60
|
-
* @internal
|
|
61
|
-
*/
|
|
62
|
-
static strictContainsPosition(range, position) {
|
|
63
|
-
if (position.lineNumber < range.startLineNumber || position.lineNumber > range.endLineNumber) {
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
if (position.lineNumber === range.startLineNumber && position.column <= range.startColumn) {
|
|
67
|
-
return false;
|
|
68
|
-
}
|
|
69
|
-
if (position.lineNumber === range.endLineNumber && position.column >= range.endColumn) {
|
|
70
|
-
return false;
|
|
71
|
-
}
|
|
72
|
-
return true;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Test if range is in this range. If the range is equal to this range, will return true.
|
|
76
|
-
*/
|
|
77
|
-
containsRange(range) {
|
|
78
|
-
return Range.containsRange(this, range);
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Test if `otherRange` is in `range`. If the ranges are equal, will return true.
|
|
82
|
-
*/
|
|
83
|
-
static containsRange(range, otherRange) {
|
|
84
|
-
if (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) {
|
|
85
|
-
return false;
|
|
86
|
-
}
|
|
87
|
-
if (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) {
|
|
88
|
-
return false;
|
|
89
|
-
}
|
|
90
|
-
if (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn < range.startColumn) {
|
|
91
|
-
return false;
|
|
92
|
-
}
|
|
93
|
-
if (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn > range.endColumn) {
|
|
94
|
-
return false;
|
|
95
|
-
}
|
|
96
|
-
return true;
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Test if `range` is strictly in this range. `range` must start after and end before this range for the result to be true.
|
|
100
|
-
*/
|
|
101
|
-
strictContainsRange(range) {
|
|
102
|
-
return Range.strictContainsRange(this, range);
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Test if `otherRange` is strictly in `range` (must start after, and end before). If the ranges are equal, will return false.
|
|
106
|
-
*/
|
|
107
|
-
static strictContainsRange(range, otherRange) {
|
|
108
|
-
if (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) {
|
|
109
|
-
return false;
|
|
110
|
-
}
|
|
111
|
-
if (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) {
|
|
112
|
-
return false;
|
|
113
|
-
}
|
|
114
|
-
if (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn <= range.startColumn) {
|
|
115
|
-
return false;
|
|
116
|
-
}
|
|
117
|
-
if (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn >= range.endColumn) {
|
|
118
|
-
return false;
|
|
119
|
-
}
|
|
120
|
-
return true;
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* A reunion of the two ranges.
|
|
124
|
-
* The smallest position will be used as the start point, and the largest one as the end point.
|
|
125
|
-
*/
|
|
126
|
-
plusRange(range) {
|
|
127
|
-
return Range.plusRange(this, range);
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* A reunion of the two ranges.
|
|
131
|
-
* The smallest position will be used as the start point, and the largest one as the end point.
|
|
132
|
-
*/
|
|
133
|
-
static plusRange(a, b) {
|
|
134
|
-
let startLineNumber;
|
|
135
|
-
let startColumn;
|
|
136
|
-
let endLineNumber;
|
|
137
|
-
let endColumn;
|
|
138
|
-
if (b.startLineNumber < a.startLineNumber) {
|
|
139
|
-
startLineNumber = b.startLineNumber;
|
|
140
|
-
startColumn = b.startColumn;
|
|
141
|
-
}
|
|
142
|
-
else if (b.startLineNumber === a.startLineNumber) {
|
|
143
|
-
startLineNumber = b.startLineNumber;
|
|
144
|
-
startColumn = Math.min(b.startColumn, a.startColumn);
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
startLineNumber = a.startLineNumber;
|
|
148
|
-
startColumn = a.startColumn;
|
|
149
|
-
}
|
|
150
|
-
if (b.endLineNumber > a.endLineNumber) {
|
|
151
|
-
endLineNumber = b.endLineNumber;
|
|
152
|
-
endColumn = b.endColumn;
|
|
153
|
-
}
|
|
154
|
-
else if (b.endLineNumber === a.endLineNumber) {
|
|
155
|
-
endLineNumber = b.endLineNumber;
|
|
156
|
-
endColumn = Math.max(b.endColumn, a.endColumn);
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
endLineNumber = a.endLineNumber;
|
|
160
|
-
endColumn = a.endColumn;
|
|
161
|
-
}
|
|
162
|
-
return new Range(startLineNumber, startColumn, endLineNumber, endColumn);
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* A intersection of the two ranges.
|
|
166
|
-
*/
|
|
167
|
-
intersectRanges(range) {
|
|
168
|
-
return Range.intersectRanges(this, range);
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* A intersection of the two ranges.
|
|
172
|
-
*/
|
|
173
|
-
static intersectRanges(a, b) {
|
|
174
|
-
let resultStartLineNumber = a.startLineNumber;
|
|
175
|
-
let resultStartColumn = a.startColumn;
|
|
176
|
-
let resultEndLineNumber = a.endLineNumber;
|
|
177
|
-
let resultEndColumn = a.endColumn;
|
|
178
|
-
const otherStartLineNumber = b.startLineNumber;
|
|
179
|
-
const otherStartColumn = b.startColumn;
|
|
180
|
-
const otherEndLineNumber = b.endLineNumber;
|
|
181
|
-
const otherEndColumn = b.endColumn;
|
|
182
|
-
if (resultStartLineNumber < otherStartLineNumber) {
|
|
183
|
-
resultStartLineNumber = otherStartLineNumber;
|
|
184
|
-
resultStartColumn = otherStartColumn;
|
|
185
|
-
}
|
|
186
|
-
else if (resultStartLineNumber === otherStartLineNumber) {
|
|
187
|
-
resultStartColumn = Math.max(resultStartColumn, otherStartColumn);
|
|
188
|
-
}
|
|
189
|
-
if (resultEndLineNumber > otherEndLineNumber) {
|
|
190
|
-
resultEndLineNumber = otherEndLineNumber;
|
|
191
|
-
resultEndColumn = otherEndColumn;
|
|
192
|
-
}
|
|
193
|
-
else if (resultEndLineNumber === otherEndLineNumber) {
|
|
194
|
-
resultEndColumn = Math.min(resultEndColumn, otherEndColumn);
|
|
195
|
-
}
|
|
196
|
-
// Check if selection is now empty
|
|
197
|
-
if (resultStartLineNumber > resultEndLineNumber) {
|
|
198
|
-
return null;
|
|
199
|
-
}
|
|
200
|
-
if (resultStartLineNumber === resultEndLineNumber && resultStartColumn > resultEndColumn) {
|
|
201
|
-
return null;
|
|
202
|
-
}
|
|
203
|
-
return new Range(resultStartLineNumber, resultStartColumn, resultEndLineNumber, resultEndColumn);
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* Test if this range equals other.
|
|
207
|
-
*/
|
|
208
|
-
equalsRange(other) {
|
|
209
|
-
return Range.equalsRange(this, other);
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* Test if range `a` equals `b`.
|
|
213
|
-
*/
|
|
214
|
-
static equalsRange(a, b) {
|
|
215
|
-
if (!a && !b) {
|
|
216
|
-
return true;
|
|
217
|
-
}
|
|
218
|
-
return (!!a &&
|
|
219
|
-
!!b &&
|
|
220
|
-
a.startLineNumber === b.startLineNumber &&
|
|
221
|
-
a.startColumn === b.startColumn &&
|
|
222
|
-
a.endLineNumber === b.endLineNumber &&
|
|
223
|
-
a.endColumn === b.endColumn);
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* Return the end position (which will be after or equal to the start position)
|
|
227
|
-
*/
|
|
228
|
-
getEndPosition() {
|
|
229
|
-
return Range.getEndPosition(this);
|
|
230
|
-
}
|
|
231
|
-
/**
|
|
232
|
-
* Return the end position (which will be after or equal to the start position)
|
|
233
|
-
*/
|
|
234
|
-
static getEndPosition(range) {
|
|
235
|
-
return new Position(range.endLineNumber, range.endColumn);
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* Return the start position (which will be before or equal to the end position)
|
|
239
|
-
*/
|
|
240
|
-
getStartPosition() {
|
|
241
|
-
return Range.getStartPosition(this);
|
|
242
|
-
}
|
|
243
|
-
/**
|
|
244
|
-
* Return the start position (which will be before or equal to the end position)
|
|
245
|
-
*/
|
|
246
|
-
static getStartPosition(range) {
|
|
247
|
-
return new Position(range.startLineNumber, range.startColumn);
|
|
248
|
-
}
|
|
249
|
-
/**
|
|
250
|
-
* Transform to a user presentable string representation.
|
|
251
|
-
*/
|
|
252
|
-
toString() {
|
|
253
|
-
return '[' + this.startLineNumber + ',' + this.startColumn + ' -> ' + this.endLineNumber + ',' + this.endColumn + ']';
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Create a new range using this range's start position, and using endLineNumber and endColumn as the end position.
|
|
257
|
-
*/
|
|
258
|
-
setEndPosition(endLineNumber, endColumn) {
|
|
259
|
-
return new Range(this.startLineNumber, this.startColumn, endLineNumber, endColumn);
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Create a new range using this range's end position, and using startLineNumber and startColumn as the start position.
|
|
263
|
-
*/
|
|
264
|
-
setStartPosition(startLineNumber, startColumn) {
|
|
265
|
-
return new Range(startLineNumber, startColumn, this.endLineNumber, this.endColumn);
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Create a new empty range using this range's start position.
|
|
269
|
-
*/
|
|
270
|
-
collapseToStart() {
|
|
271
|
-
return Range.collapseToStart(this);
|
|
272
|
-
}
|
|
273
|
-
/**
|
|
274
|
-
* Create a new empty range using this range's start position.
|
|
275
|
-
*/
|
|
276
|
-
static collapseToStart(range) {
|
|
277
|
-
return new Range(range.startLineNumber, range.startColumn, range.startLineNumber, range.startColumn);
|
|
278
|
-
}
|
|
279
|
-
/**
|
|
280
|
-
* Create a new empty range using this range's end position.
|
|
281
|
-
*/
|
|
282
|
-
collapseToEnd() {
|
|
283
|
-
return Range.collapseToEnd(this);
|
|
284
|
-
}
|
|
285
|
-
/**
|
|
286
|
-
* Create a new empty range using this range's end position.
|
|
287
|
-
*/
|
|
288
|
-
static collapseToEnd(range) {
|
|
289
|
-
return new Range(range.endLineNumber, range.endColumn, range.endLineNumber, range.endColumn);
|
|
290
|
-
}
|
|
291
|
-
/**
|
|
292
|
-
* Moves the range by the given amount of lines.
|
|
293
|
-
*/
|
|
294
|
-
delta(lineCount) {
|
|
295
|
-
return new Range(this.startLineNumber + lineCount, this.startColumn, this.endLineNumber + lineCount, this.endColumn);
|
|
296
|
-
}
|
|
297
|
-
isSingleLine() {
|
|
298
|
-
return this.startLineNumber === this.endLineNumber;
|
|
299
|
-
}
|
|
300
|
-
// ---
|
|
301
|
-
static fromPositions(start, end = start) {
|
|
302
|
-
return new Range(start.lineNumber, start.column, end.lineNumber, end.column);
|
|
303
|
-
}
|
|
304
|
-
static lift(range) {
|
|
305
|
-
if (!range) {
|
|
306
|
-
return null;
|
|
307
|
-
}
|
|
308
|
-
return new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Test if `obj` is an `IRange`.
|
|
312
|
-
*/
|
|
313
|
-
static isIRange(obj) {
|
|
314
|
-
return (!!obj
|
|
315
|
-
&& (typeof obj.startLineNumber === 'number')
|
|
316
|
-
&& (typeof obj.startColumn === 'number')
|
|
317
|
-
&& (typeof obj.endLineNumber === 'number')
|
|
318
|
-
&& (typeof obj.endColumn === 'number'));
|
|
319
|
-
}
|
|
320
|
-
/**
|
|
321
|
-
* Test if the two ranges are touching in any way.
|
|
322
|
-
*/
|
|
323
|
-
static areIntersectingOrTouching(a, b) {
|
|
324
|
-
// Check if `a` is before `b`
|
|
325
|
-
if (a.endLineNumber < b.startLineNumber || (a.endLineNumber === b.startLineNumber && a.endColumn < b.startColumn)) {
|
|
326
|
-
return false;
|
|
327
|
-
}
|
|
328
|
-
// Check if `b` is before `a`
|
|
329
|
-
if (b.endLineNumber < a.startLineNumber || (b.endLineNumber === a.startLineNumber && b.endColumn < a.startColumn)) {
|
|
330
|
-
return false;
|
|
331
|
-
}
|
|
332
|
-
// These ranges must intersect
|
|
333
|
-
return true;
|
|
334
|
-
}
|
|
335
|
-
/**
|
|
336
|
-
* Test if the two ranges are intersecting. If the ranges are touching it returns true.
|
|
337
|
-
*/
|
|
338
|
-
static areIntersecting(a, b) {
|
|
339
|
-
// Check if `a` is before `b`
|
|
340
|
-
if (a.endLineNumber < b.startLineNumber || (a.endLineNumber === b.startLineNumber && a.endColumn <= b.startColumn)) {
|
|
341
|
-
return false;
|
|
342
|
-
}
|
|
343
|
-
// Check if `b` is before `a`
|
|
344
|
-
if (b.endLineNumber < a.startLineNumber || (b.endLineNumber === a.startLineNumber && b.endColumn <= a.startColumn)) {
|
|
345
|
-
return false;
|
|
346
|
-
}
|
|
347
|
-
// These ranges must intersect
|
|
348
|
-
return true;
|
|
349
|
-
}
|
|
350
|
-
/**
|
|
351
|
-
* Test if the two ranges are intersecting, but not touching at all.
|
|
352
|
-
*/
|
|
353
|
-
static areOnlyIntersecting(a, b) {
|
|
354
|
-
// Check if `a` is before `b`
|
|
355
|
-
if (a.endLineNumber < (b.startLineNumber - 1) || (a.endLineNumber === b.startLineNumber && a.endColumn < (b.startColumn - 1))) {
|
|
356
|
-
return false;
|
|
357
|
-
}
|
|
358
|
-
// Check if `b` is before `a`
|
|
359
|
-
if (b.endLineNumber < (a.startLineNumber - 1) || (b.endLineNumber === a.startLineNumber && b.endColumn < (a.startColumn - 1))) {
|
|
360
|
-
return false;
|
|
361
|
-
}
|
|
362
|
-
// These ranges must intersect
|
|
363
|
-
return true;
|
|
364
|
-
}
|
|
365
|
-
/**
|
|
366
|
-
* A function that compares ranges, useful for sorting ranges
|
|
367
|
-
* It will first compare ranges on the startPosition and then on the endPosition
|
|
368
|
-
*/
|
|
369
|
-
static compareRangesUsingStarts(a, b) {
|
|
370
|
-
if (a && b) {
|
|
371
|
-
const aStartLineNumber = a.startLineNumber | 0;
|
|
372
|
-
const bStartLineNumber = b.startLineNumber | 0;
|
|
373
|
-
if (aStartLineNumber === bStartLineNumber) {
|
|
374
|
-
const aStartColumn = a.startColumn | 0;
|
|
375
|
-
const bStartColumn = b.startColumn | 0;
|
|
376
|
-
if (aStartColumn === bStartColumn) {
|
|
377
|
-
const aEndLineNumber = a.endLineNumber | 0;
|
|
378
|
-
const bEndLineNumber = b.endLineNumber | 0;
|
|
379
|
-
if (aEndLineNumber === bEndLineNumber) {
|
|
380
|
-
const aEndColumn = a.endColumn | 0;
|
|
381
|
-
const bEndColumn = b.endColumn | 0;
|
|
382
|
-
return aEndColumn - bEndColumn;
|
|
383
|
-
}
|
|
384
|
-
return aEndLineNumber - bEndLineNumber;
|
|
385
|
-
}
|
|
386
|
-
return aStartColumn - bStartColumn;
|
|
387
|
-
}
|
|
388
|
-
return aStartLineNumber - bStartLineNumber;
|
|
389
|
-
}
|
|
390
|
-
const aExists = (a ? 1 : 0);
|
|
391
|
-
const bExists = (b ? 1 : 0);
|
|
392
|
-
return aExists - bExists;
|
|
393
|
-
}
|
|
394
|
-
/**
|
|
395
|
-
* A function that compares ranges, useful for sorting ranges
|
|
396
|
-
* It will first compare ranges on the endPosition and then on the startPosition
|
|
397
|
-
*/
|
|
398
|
-
static compareRangesUsingEnds(a, b) {
|
|
399
|
-
if (a.endLineNumber === b.endLineNumber) {
|
|
400
|
-
if (a.endColumn === b.endColumn) {
|
|
401
|
-
if (a.startLineNumber === b.startLineNumber) {
|
|
402
|
-
return a.startColumn - b.startColumn;
|
|
403
|
-
}
|
|
404
|
-
return a.startLineNumber - b.startLineNumber;
|
|
405
|
-
}
|
|
406
|
-
return a.endColumn - b.endColumn;
|
|
407
|
-
}
|
|
408
|
-
return a.endLineNumber - b.endLineNumber;
|
|
409
|
-
}
|
|
410
|
-
/**
|
|
411
|
-
* Test if the range spans multiple lines.
|
|
412
|
-
*/
|
|
413
|
-
static spansMultipleLines(range) {
|
|
414
|
-
return range.endLineNumber > range.startLineNumber;
|
|
415
|
-
}
|
|
416
|
-
toJSON() {
|
|
417
|
-
return this;
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
export { Range };
|
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
import { groupAdjacentBy } from '../../../base/common/arrays.js';
|
|
2
|
-
import { assertFn, checkAdjacentItems } from '../../../base/common/assert.js';
|
|
3
|
-
import { BugIndicatingError } from '../../../base/common/errors.js';
|
|
4
|
-
import { LineRange } from '../core/ranges/lineRange.js';
|
|
5
|
-
import { Position } from '../core/position.js';
|
|
6
|
-
import { Range } from '../core/range.js';
|
|
7
|
-
import { TextReplacement } from '../core/edits/textEdit.js';
|
|
8
|
-
|
|
9
|
-
/*---------------------------------------------------------------------------------------------
|
|
10
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
11
|
-
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
12
|
-
*--------------------------------------------------------------------------------------------*/
|
|
13
|
-
/**
|
|
14
|
-
* Maps a line range in the original text model to a line range in the modified text model.
|
|
15
|
-
*/
|
|
16
|
-
class LineRangeMapping {
|
|
17
|
-
static inverse(mapping, originalLineCount, modifiedLineCount) {
|
|
18
|
-
const result = [];
|
|
19
|
-
let lastOriginalEndLineNumber = 1;
|
|
20
|
-
let lastModifiedEndLineNumber = 1;
|
|
21
|
-
for (const m of mapping) {
|
|
22
|
-
const r = new LineRangeMapping(new LineRange(lastOriginalEndLineNumber, m.original.startLineNumber), new LineRange(lastModifiedEndLineNumber, m.modified.startLineNumber));
|
|
23
|
-
if (!r.modified.isEmpty) {
|
|
24
|
-
result.push(r);
|
|
25
|
-
}
|
|
26
|
-
lastOriginalEndLineNumber = m.original.endLineNumberExclusive;
|
|
27
|
-
lastModifiedEndLineNumber = m.modified.endLineNumberExclusive;
|
|
28
|
-
}
|
|
29
|
-
const r = new LineRangeMapping(new LineRange(lastOriginalEndLineNumber, originalLineCount + 1), new LineRange(lastModifiedEndLineNumber, modifiedLineCount + 1));
|
|
30
|
-
if (!r.modified.isEmpty) {
|
|
31
|
-
result.push(r);
|
|
32
|
-
}
|
|
33
|
-
return result;
|
|
34
|
-
}
|
|
35
|
-
static clip(mapping, originalRange, modifiedRange) {
|
|
36
|
-
const result = [];
|
|
37
|
-
for (const m of mapping) {
|
|
38
|
-
const original = m.original.intersect(originalRange);
|
|
39
|
-
const modified = m.modified.intersect(modifiedRange);
|
|
40
|
-
if (original && !original.isEmpty && modified && !modified.isEmpty) {
|
|
41
|
-
result.push(new LineRangeMapping(original, modified));
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return result;
|
|
45
|
-
}
|
|
46
|
-
constructor(originalRange, modifiedRange) {
|
|
47
|
-
this.original = originalRange;
|
|
48
|
-
this.modified = modifiedRange;
|
|
49
|
-
}
|
|
50
|
-
toString() {
|
|
51
|
-
return `{${this.original.toString()}->${this.modified.toString()}}`;
|
|
52
|
-
}
|
|
53
|
-
flip() {
|
|
54
|
-
return new LineRangeMapping(this.modified, this.original);
|
|
55
|
-
}
|
|
56
|
-
join(other) {
|
|
57
|
-
return new LineRangeMapping(this.original.join(other.original), this.modified.join(other.modified));
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* This method assumes that the LineRangeMapping describes a valid diff!
|
|
61
|
-
* I.e. if one range is empty, the other range cannot be the entire document.
|
|
62
|
-
* It avoids various problems when the line range points to non-existing line-numbers.
|
|
63
|
-
*/
|
|
64
|
-
toRangeMapping() {
|
|
65
|
-
const origInclusiveRange = this.original.toInclusiveRange();
|
|
66
|
-
const modInclusiveRange = this.modified.toInclusiveRange();
|
|
67
|
-
if (origInclusiveRange && modInclusiveRange) {
|
|
68
|
-
return new RangeMapping(origInclusiveRange, modInclusiveRange);
|
|
69
|
-
}
|
|
70
|
-
else if (this.original.startLineNumber === 1 || this.modified.startLineNumber === 1) {
|
|
71
|
-
if (!(this.modified.startLineNumber === 1 && this.original.startLineNumber === 1)) {
|
|
72
|
-
// If one line range starts at 1, the other one must start at 1 as well.
|
|
73
|
-
throw new BugIndicatingError('not a valid diff');
|
|
74
|
-
}
|
|
75
|
-
// Because one range is empty and both ranges start at line 1, none of the ranges can cover all lines.
|
|
76
|
-
// Thus, `endLineNumberExclusive` is a valid line number.
|
|
77
|
-
return new RangeMapping(new Range(this.original.startLineNumber, 1, this.original.endLineNumberExclusive, 1), new Range(this.modified.startLineNumber, 1, this.modified.endLineNumberExclusive, 1));
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
// We can assume here that both startLineNumbers are greater than 1.
|
|
81
|
-
return new RangeMapping(new Range(this.original.startLineNumber - 1, Number.MAX_SAFE_INTEGER, this.original.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), new Range(this.modified.startLineNumber - 1, Number.MAX_SAFE_INTEGER, this.modified.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER));
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* This method assumes that the LineRangeMapping describes a valid diff!
|
|
86
|
-
* I.e. if one range is empty, the other range cannot be the entire document.
|
|
87
|
-
* It avoids various problems when the line range points to non-existing line-numbers.
|
|
88
|
-
*/
|
|
89
|
-
toRangeMapping2(original, modified) {
|
|
90
|
-
if (isValidLineNumber(this.original.endLineNumberExclusive, original)
|
|
91
|
-
&& isValidLineNumber(this.modified.endLineNumberExclusive, modified)) {
|
|
92
|
-
return new RangeMapping(new Range(this.original.startLineNumber, 1, this.original.endLineNumberExclusive, 1), new Range(this.modified.startLineNumber, 1, this.modified.endLineNumberExclusive, 1));
|
|
93
|
-
}
|
|
94
|
-
if (!this.original.isEmpty && !this.modified.isEmpty) {
|
|
95
|
-
return new RangeMapping(Range.fromPositions(new Position(this.original.startLineNumber, 1), normalizePosition(new Position(this.original.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), original)), Range.fromPositions(new Position(this.modified.startLineNumber, 1), normalizePosition(new Position(this.modified.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), modified)));
|
|
96
|
-
}
|
|
97
|
-
if (this.original.startLineNumber > 1 && this.modified.startLineNumber > 1) {
|
|
98
|
-
return new RangeMapping(Range.fromPositions(normalizePosition(new Position(this.original.startLineNumber - 1, Number.MAX_SAFE_INTEGER), original), normalizePosition(new Position(this.original.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), original)), Range.fromPositions(normalizePosition(new Position(this.modified.startLineNumber - 1, Number.MAX_SAFE_INTEGER), modified), normalizePosition(new Position(this.modified.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), modified)));
|
|
99
|
-
}
|
|
100
|
-
// Situation now: one range is empty and one range touches the last line and one range starts at line 1.
|
|
101
|
-
// I don't think this can happen.
|
|
102
|
-
throw new BugIndicatingError();
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
function normalizePosition(position, content) {
|
|
106
|
-
if (position.lineNumber < 1) {
|
|
107
|
-
return new Position(1, 1);
|
|
108
|
-
}
|
|
109
|
-
if (position.lineNumber > content.length) {
|
|
110
|
-
return new Position(content.length, content[content.length - 1].length + 1);
|
|
111
|
-
}
|
|
112
|
-
const line = content[position.lineNumber - 1];
|
|
113
|
-
if (position.column > line.length + 1) {
|
|
114
|
-
return new Position(position.lineNumber, line.length + 1);
|
|
115
|
-
}
|
|
116
|
-
return position;
|
|
117
|
-
}
|
|
118
|
-
function isValidLineNumber(lineNumber, lines) {
|
|
119
|
-
return lineNumber >= 1 && lineNumber <= lines.length;
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Maps a line range in the original text model to a line range in the modified text model.
|
|
123
|
-
* Also contains inner range mappings.
|
|
124
|
-
*/
|
|
125
|
-
class DetailedLineRangeMapping extends LineRangeMapping {
|
|
126
|
-
static fromRangeMappings(rangeMappings) {
|
|
127
|
-
const originalRange = LineRange.join(rangeMappings.map(r => LineRange.fromRangeInclusive(r.originalRange)));
|
|
128
|
-
const modifiedRange = LineRange.join(rangeMappings.map(r => LineRange.fromRangeInclusive(r.modifiedRange)));
|
|
129
|
-
return new DetailedLineRangeMapping(originalRange, modifiedRange, rangeMappings);
|
|
130
|
-
}
|
|
131
|
-
constructor(originalRange, modifiedRange, innerChanges) {
|
|
132
|
-
super(originalRange, modifiedRange);
|
|
133
|
-
this.innerChanges = innerChanges;
|
|
134
|
-
}
|
|
135
|
-
flip() {
|
|
136
|
-
return new DetailedLineRangeMapping(this.modified, this.original, this.innerChanges?.map(c => c.flip()));
|
|
137
|
-
}
|
|
138
|
-
withInnerChangesFromLineRanges() {
|
|
139
|
-
return new DetailedLineRangeMapping(this.original, this.modified, [this.toRangeMapping()]);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Maps a range in the original text model to a range in the modified text model.
|
|
144
|
-
*/
|
|
145
|
-
class RangeMapping {
|
|
146
|
-
static fromEdit(edit) {
|
|
147
|
-
const newRanges = edit.getNewRanges();
|
|
148
|
-
const result = edit.replacements.map((e, idx) => new RangeMapping(e.range, newRanges[idx]));
|
|
149
|
-
return result;
|
|
150
|
-
}
|
|
151
|
-
static assertSorted(rangeMappings) {
|
|
152
|
-
for (let i = 1; i < rangeMappings.length; i++) {
|
|
153
|
-
const previous = rangeMappings[i - 1];
|
|
154
|
-
const current = rangeMappings[i];
|
|
155
|
-
if (!(previous.originalRange.getEndPosition().isBeforeOrEqual(current.originalRange.getStartPosition())
|
|
156
|
-
&& previous.modifiedRange.getEndPosition().isBeforeOrEqual(current.modifiedRange.getStartPosition()))) {
|
|
157
|
-
throw new BugIndicatingError('Range mappings must be sorted');
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
constructor(originalRange, modifiedRange) {
|
|
162
|
-
this.originalRange = originalRange;
|
|
163
|
-
this.modifiedRange = modifiedRange;
|
|
164
|
-
}
|
|
165
|
-
toString() {
|
|
166
|
-
return `{${this.originalRange.toString()}->${this.modifiedRange.toString()}}`;
|
|
167
|
-
}
|
|
168
|
-
flip() {
|
|
169
|
-
return new RangeMapping(this.modifiedRange, this.originalRange);
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Creates a single text edit that describes the change from the original to the modified text.
|
|
173
|
-
*/
|
|
174
|
-
toTextEdit(modified) {
|
|
175
|
-
const newText = modified.getValueOfRange(this.modifiedRange);
|
|
176
|
-
return new TextReplacement(this.originalRange, newText);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
function lineRangeMappingFromRangeMappings(alignments, originalLines, modifiedLines, dontAssertStartLine = false) {
|
|
180
|
-
const changes = [];
|
|
181
|
-
for (const g of groupAdjacentBy(alignments.map(a => getLineRangeMapping(a, originalLines, modifiedLines)), (a1, a2) => a1.original.intersectsOrTouches(a2.original)
|
|
182
|
-
|| a1.modified.intersectsOrTouches(a2.modified))) {
|
|
183
|
-
const first = g[0];
|
|
184
|
-
const last = g[g.length - 1];
|
|
185
|
-
changes.push(new DetailedLineRangeMapping(first.original.join(last.original), first.modified.join(last.modified), g.map(a => a.innerChanges[0])));
|
|
186
|
-
}
|
|
187
|
-
assertFn(() => {
|
|
188
|
-
if (!dontAssertStartLine && changes.length > 0) {
|
|
189
|
-
if (changes[0].modified.startLineNumber !== changes[0].original.startLineNumber) {
|
|
190
|
-
return false;
|
|
191
|
-
}
|
|
192
|
-
if (modifiedLines.length.lineCount - changes[changes.length - 1].modified.endLineNumberExclusive !== originalLines.length.lineCount - changes[changes.length - 1].original.endLineNumberExclusive) {
|
|
193
|
-
return false;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
return checkAdjacentItems(changes, (m1, m2) => m2.original.startLineNumber - m1.original.endLineNumberExclusive === m2.modified.startLineNumber - m1.modified.endLineNumberExclusive &&
|
|
197
|
-
// There has to be an unchanged line in between (otherwise both diffs should have been joined)
|
|
198
|
-
m1.original.endLineNumberExclusive < m2.original.startLineNumber &&
|
|
199
|
-
m1.modified.endLineNumberExclusive < m2.modified.startLineNumber);
|
|
200
|
-
});
|
|
201
|
-
return changes;
|
|
202
|
-
}
|
|
203
|
-
function getLineRangeMapping(rangeMapping, originalLines, modifiedLines) {
|
|
204
|
-
let lineStartDelta = 0;
|
|
205
|
-
let lineEndDelta = 0;
|
|
206
|
-
// rangeMapping describes the edit that replaces `rangeMapping.originalRange` with `newText := getText(modifiedLines, rangeMapping.modifiedRange)`.
|
|
207
|
-
// original: ]xxx \n <- this line is not modified
|
|
208
|
-
// modified: ]xx \n
|
|
209
|
-
if (rangeMapping.modifiedRange.endColumn === 1 && rangeMapping.originalRange.endColumn === 1
|
|
210
|
-
&& rangeMapping.originalRange.startLineNumber + lineStartDelta <= rangeMapping.originalRange.endLineNumber
|
|
211
|
-
&& rangeMapping.modifiedRange.startLineNumber + lineStartDelta <= rangeMapping.modifiedRange.endLineNumber) {
|
|
212
|
-
// We can only do this if the range is not empty yet
|
|
213
|
-
lineEndDelta = -1;
|
|
214
|
-
}
|
|
215
|
-
// original: xxx[ \n <- this line is not modified
|
|
216
|
-
// modified: xxx[ \n
|
|
217
|
-
if (rangeMapping.modifiedRange.startColumn - 1 >= modifiedLines.getLineLength(rangeMapping.modifiedRange.startLineNumber)
|
|
218
|
-
&& rangeMapping.originalRange.startColumn - 1 >= originalLines.getLineLength(rangeMapping.originalRange.startLineNumber)
|
|
219
|
-
&& rangeMapping.originalRange.startLineNumber <= rangeMapping.originalRange.endLineNumber + lineEndDelta
|
|
220
|
-
&& rangeMapping.modifiedRange.startLineNumber <= rangeMapping.modifiedRange.endLineNumber + lineEndDelta) {
|
|
221
|
-
// We can only do this if the range is not empty yet
|
|
222
|
-
lineStartDelta = 1;
|
|
223
|
-
}
|
|
224
|
-
const originalLineRange = new LineRange(rangeMapping.originalRange.startLineNumber + lineStartDelta, rangeMapping.originalRange.endLineNumber + 1 + lineEndDelta);
|
|
225
|
-
const modifiedLineRange = new LineRange(rangeMapping.modifiedRange.startLineNumber + lineStartDelta, rangeMapping.modifiedRange.endLineNumber + 1 + lineEndDelta);
|
|
226
|
-
return new DetailedLineRangeMapping(originalLineRange, modifiedLineRange, [rangeMapping]);
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
export { DetailedLineRangeMapping, LineRangeMapping, RangeMapping, getLineRangeMapping, lineRangeMappingFromRangeMappings };
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/*---------------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
|
-
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
/**
|
|
6
|
-
* Represents a column range in a single line.
|
|
7
|
-
*/
|
|
8
|
-
class RangeSingleLine {
|
|
9
|
-
constructor(
|
|
10
|
-
/** 1-based */
|
|
11
|
-
lineNumber, columnRange) {
|
|
12
|
-
this.lineNumber = lineNumber;
|
|
13
|
-
this.columnRange = columnRange;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export { RangeSingleLine };
|