monaco-editor11 1.0.7 → 1.0.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.
- package/dist/assets/css.worker-C7FogG4G.js +93 -0
- package/dist/assets/editor.worker-iXcRX1Tq.js +26 -0
- package/dist/assets/html.worker-C8VxctEJ.js +470 -0
- package/dist/assets/json.worker-CMC9kgPL.js +58 -0
- package/dist/assets/ts.worker-CtTJ3hNN.js +67731 -0
- package/dist/index.d.ts +0 -6
- package/dist/monaco-editor11.es.js +49 -78
- package/dist/monaco-editor11.umd.js +1 -50
- package/dist/monaco.d.ts +8 -0
- package/dist/workers/common/initialize.js +16 -0
- package/dist/workers/common/workers.js +141 -0
- package/dist/workers/editor/common/abstractSyntaxTokenBackend.js +128 -0
- package/dist/workers/editor/common/abstractText.js +89 -0
- package/dist/workers/editor/common/ast.js +485 -0
- package/dist/workers/editor/common/autoIndent.js +390 -0
- package/dist/workers/editor/common/beforeEditPositionMapper.js +110 -0
- package/dist/workers/editor/common/bracketPairsImpl.js +717 -0
- package/dist/workers/editor/common/bracketPairsTree.js +343 -0
- package/dist/workers/editor/common/brackets.js +108 -0
- package/dist/workers/editor/common/characterClassifier.js +59 -0
- package/dist/workers/editor/common/characterPair.js +40 -0
- package/dist/workers/editor/common/colorizedBracketPairsDecorationProvider.js +97 -0
- package/dist/workers/editor/common/columnRange.js +35 -0
- package/dist/workers/editor/common/combineTextEditInfos.js +124 -0
- package/dist/workers/editor/common/common.js +20 -0
- package/dist/workers/editor/common/computeMovedLines.js +249 -0
- package/dist/workers/editor/common/concat23Trees.js +192 -0
- package/dist/workers/editor/common/contiguousMultilineTokens.js +32 -0
- package/dist/workers/editor/common/contiguousMultilineTokensBuilder.js +23 -0
- package/dist/workers/editor/common/contiguousTokensEditing.js +128 -0
- package/dist/workers/editor/common/contiguousTokensStore.js +207 -0
- package/dist/workers/editor/common/coordinatesConverter.js +51 -0
- package/dist/workers/editor/common/cursor.js +899 -0
- package/dist/workers/editor/common/cursorAtomicMoveOperations.js +145 -0
- package/dist/workers/editor/common/cursorCollection.js +194 -0
- package/dist/workers/editor/common/cursorColumnSelection.js +93 -0
- package/dist/workers/editor/common/cursorColumns.js +112 -0
- package/dist/workers/editor/common/cursorCommon.js +250 -0
- package/dist/workers/editor/common/cursorContext.js +15 -0
- package/dist/workers/editor/common/cursorDeleteOperations.js +231 -0
- package/dist/workers/editor/common/cursorMoveCommands.js +676 -0
- package/dist/workers/editor/common/cursorMoveOperations.js +290 -0
- package/dist/workers/editor/common/cursorTypeEditOperations.js +968 -0
- package/dist/workers/editor/common/cursorTypeOperations.js +173 -0
- package/dist/workers/editor/common/cursorUtils.js +75 -0
- package/dist/workers/editor/common/cursorWordOperations.js +720 -0
- package/dist/workers/editor/common/defaultDocumentColorsComputer.js +138 -0
- package/dist/workers/editor/common/defaultLinesDiffComputer.js +188 -0
- package/dist/workers/editor/common/diffAlgorithm.js +139 -0
- package/dist/workers/editor/common/diffEditor.js +38 -0
- package/dist/workers/editor/common/dynamicProgrammingDiffing.js +101 -0
- package/dist/workers/editor/common/edit.js +183 -0
- package/dist/workers/editor/common/editOperation.js +36 -0
- package/dist/workers/editor/common/editStack.js +363 -0
- package/dist/workers/editor/common/editorAction.js +26 -0
- package/dist/workers/editor/common/editorBaseApi.js +43 -0
- package/dist/workers/editor/common/editorColorRegistry.js +102 -0
- package/dist/workers/editor/common/editorCommon.js +13 -0
- package/dist/workers/editor/common/editorConfigurationSchema.js +338 -0
- package/dist/workers/editor/common/editorContextKeys.js +84 -0
- package/dist/workers/editor/common/editorFeatures.js +17 -0
- package/dist/workers/editor/common/editorOptions.js +3440 -0
- package/dist/workers/editor/common/editorTheme.js +23 -0
- package/dist/workers/editor/common/editorWebWorker.js +299 -0
- package/dist/workers/editor/common/editorWorker.js +9 -0
- package/dist/workers/editor/common/editorWorkerHost.js +15 -0
- package/dist/workers/editor/common/editorZoom.js +26 -0
- package/dist/workers/editor/common/electricCharacter.js +55 -0
- package/dist/workers/editor/common/encodedTokenAttributes.js +79 -0
- package/dist/workers/editor/common/enterAction.js +53 -0
- package/dist/workers/editor/common/eolCounter.js +44 -0
- package/dist/workers/editor/common/findSectionHeaders.js +128 -0
- package/dist/workers/editor/common/fixBrackets.js +67 -0
- package/dist/workers/editor/common/fixedArray.js +70 -0
- package/dist/workers/editor/common/fontInfo.js +172 -0
- package/dist/workers/editor/common/fontInfoFromSettings.js +29 -0
- package/dist/workers/editor/common/getIconClasses.js +106 -0
- package/dist/workers/editor/common/getPositionOffsetTransformerFromTextModel.js +24 -0
- package/dist/workers/editor/common/glyphLanesModel.js +61 -0
- package/dist/workers/editor/common/guidesTextModelPart.js +405 -0
- package/dist/workers/editor/common/heuristicSequenceOptimizations.js +374 -0
- package/dist/workers/editor/common/indentRules.js +63 -0
- package/dist/workers/editor/common/indentation.js +39 -0
- package/dist/workers/editor/common/indentationGuesser.js +178 -0
- package/dist/workers/editor/common/indentationLineProcessor.js +193 -0
- package/dist/workers/editor/common/inlineDecorations.js +26 -0
- package/dist/workers/editor/common/inplaceReplaceSupport.js +87 -0
- package/dist/workers/editor/common/inputMode.js +22 -0
- package/dist/workers/editor/common/intervalTree.js +1002 -0
- package/dist/workers/editor/common/language.js +9 -0
- package/dist/workers/editor/common/languageBracketsConfiguration.js +133 -0
- package/dist/workers/editor/common/languageConfiguration.js +138 -0
- package/dist/workers/editor/common/languageConfigurationRegistry.js +361 -0
- package/dist/workers/editor/common/languageFeatureDebounce.js +137 -0
- package/dist/workers/editor/common/languageFeatureRegistry.js +180 -0
- package/dist/workers/editor/common/languageFeatures.js +9 -0
- package/dist/workers/editor/common/languageFeaturesService.js +47 -0
- package/dist/workers/editor/common/languageSelector.js +112 -0
- package/dist/workers/editor/common/languageService.js +92 -0
- package/dist/workers/editor/common/languages.js +522 -0
- package/dist/workers/editor/common/languagesAssociations.js +193 -0
- package/dist/workers/editor/common/languagesRegistry.js +237 -0
- package/dist/workers/editor/common/legacyLinesDiffComputer.js +468 -0
- package/dist/workers/editor/common/length.js +129 -0
- package/dist/workers/editor/common/lineDecorations.js +208 -0
- package/dist/workers/editor/common/lineEdit.js +75 -0
- package/dist/workers/editor/common/lineHeights.js +370 -0
- package/dist/workers/editor/common/linePart.js +25 -0
- package/dist/workers/editor/common/lineRange.js +312 -0
- package/dist/workers/editor/common/lineSequence.js +36 -0
- package/dist/workers/editor/common/lineTokens.js +405 -0
- package/dist/workers/editor/common/linesDiffComputer.js +29 -0
- package/dist/workers/editor/common/linesDiffComputers.js +13 -0
- package/dist/workers/editor/common/linesLayout.js +765 -0
- package/dist/workers/editor/common/linesSliceCharSequence.js +205 -0
- package/dist/workers/editor/common/linkComputer.js +269 -0
- package/dist/workers/editor/common/markerDecorations.js +9 -0
- package/dist/workers/editor/common/markerDecorationsService.js +248 -0
- package/dist/workers/editor/common/minimapTokensColorTracker.js +58 -0
- package/dist/workers/editor/common/mirrorTextModel.js +117 -0
- package/dist/workers/editor/common/model.js +9 -0
- package/dist/workers/editor/common/modelLineProjection.js +350 -0
- package/dist/workers/editor/common/modelLineProjectionData.js +297 -0
- package/dist/workers/editor/common/modelService.js +413 -0
- package/dist/workers/editor/common/modesRegistry.js +75 -0
- package/dist/workers/editor/common/monospaceLineBreaksComputer.js +473 -0
- package/dist/workers/editor/common/myersDiffAlgorithm.js +159 -0
- package/dist/workers/editor/common/nodeReader.js +127 -0
- package/dist/workers/editor/common/nullTokenize.js +29 -0
- package/dist/workers/editor/common/offsetRange.js +225 -0
- package/dist/workers/editor/common/onEnter.js +109 -0
- package/dist/workers/editor/common/oneCursor.js +117 -0
- package/dist/workers/editor/common/overviewZoneManager.js +176 -0
- package/dist/workers/editor/common/parser.js +121 -0
- package/dist/workers/editor/common/pieceTreeBase.js +1473 -0
- package/dist/workers/editor/common/pieceTreeTextBuffer.js +461 -0
- package/dist/workers/editor/common/pieceTreeTextBufferBuilder.js +140 -0
- package/dist/workers/editor/common/point.js +50 -0
- package/dist/workers/editor/common/position.js +142 -0
- package/dist/workers/editor/common/positionToOffset.js +17 -0
- package/dist/workers/editor/common/positionToOffsetImpl.js +98 -0
- package/dist/workers/editor/common/prefixSumComputer.js +226 -0
- package/dist/workers/editor/common/range.js +421 -0
- package/dist/workers/editor/common/rangeMapping.js +229 -0
- package/dist/workers/editor/common/rangeSingleLine.js +17 -0
- package/dist/workers/editor/common/rbTreeBase.js +362 -0
- package/dist/workers/editor/common/rect.js +163 -0
- package/dist/workers/editor/common/replaceCommand.js +158 -0
- package/dist/workers/editor/common/resolverService.js +5 -0
- package/dist/workers/editor/common/rgba.js +35 -0
- package/dist/workers/editor/common/richEditBrackets.js +356 -0
- package/dist/workers/editor/common/selection.js +145 -0
- package/dist/workers/editor/common/semanticTokensDto.js +82 -0
- package/dist/workers/editor/common/semanticTokensProviderStyling.js +263 -0
- package/dist/workers/editor/common/semanticTokensStyling.js +9 -0
- package/dist/workers/editor/common/semanticTokensStylingService.js +47 -0
- package/dist/workers/editor/common/shiftCommand.js +241 -0
- package/dist/workers/editor/common/smallImmutableSet.js +108 -0
- package/dist/workers/editor/common/sparseMultilineTokens.js +548 -0
- package/dist/workers/editor/common/sparseTokensStore.js +210 -0
- package/dist/workers/editor/common/standaloneEnums.js +1017 -0
- package/dist/workers/editor/common/standaloneStrings.js +42 -0
- package/dist/workers/editor/common/stringBuilder.js +122 -0
- package/dist/workers/editor/common/stringEdit.js +165 -0
- package/dist/workers/editor/common/supports.js +58 -0
- package/dist/workers/editor/common/surroundSelectionCommand.js +44 -0
- package/dist/workers/editor/common/textChange.js +248 -0
- package/dist/workers/editor/common/textEdit.js +269 -0
- package/dist/workers/editor/common/textLength.js +87 -0
- package/dist/workers/editor/common/textModel.js +2031 -0
- package/dist/workers/editor/common/textModelBracketPairs.js +45 -0
- package/dist/workers/editor/common/textModelDefaults.js +18 -0
- package/dist/workers/editor/common/textModelEditSource.js +166 -0
- package/dist/workers/editor/common/textModelEvents.js +216 -0
- package/dist/workers/editor/common/textModelGuides.js +40 -0
- package/dist/workers/editor/common/textModelPart.js +23 -0
- package/dist/workers/editor/common/textModelSearch.js +455 -0
- package/dist/workers/editor/common/textModelStringEdit.js +11 -0
- package/dist/workers/editor/common/textModelSync.impl.js +307 -0
- package/dist/workers/editor/common/textModelText.js +26 -0
- package/dist/workers/editor/common/textModelTokens.js +436 -0
- package/dist/workers/editor/common/textResourceConfiguration.js +6 -0
- package/dist/workers/editor/common/textToHtmlTokenizer.js +139 -0
- package/dist/workers/editor/common/tokenStore.js +407 -0
- package/dist/workers/editor/common/tokenWithTextArray.js +73 -0
- package/dist/workers/editor/common/tokenization.js +287 -0
- package/dist/workers/editor/common/tokenizationRegistry.js +123 -0
- package/dist/workers/editor/common/tokenizationTextModelPart.js +275 -0
- package/dist/workers/editor/common/tokenizer.js +301 -0
- package/dist/workers/editor/common/tokenizerSyntaxTokenBackend.js +261 -0
- package/dist/workers/editor/common/treeSitterLibraryService.js +9 -0
- package/dist/workers/editor/common/treeSitterSyntaxTokenBackend.js +167 -0
- package/dist/workers/editor/common/treeSitterThemeService.js +9 -0
- package/dist/workers/editor/common/treeSitterTokenizationImpl.js +713 -0
- package/dist/workers/editor/common/treeSitterTree.js +395 -0
- package/dist/workers/editor/common/treeViewsDnd.js +24 -0
- package/dist/workers/editor/common/treeViewsDndService.js +12 -0
- package/dist/workers/editor/common/trimTrailingWhitespaceCommand.js +98 -0
- package/dist/workers/editor/common/unicodeTextModelHighlighter.js +188 -0
- package/dist/workers/editor/common/utils.js +62 -0
- package/dist/workers/editor/common/viewContext.js +22 -0
- package/dist/workers/editor/common/viewEventHandler.js +186 -0
- package/dist/workers/editor/common/viewEvents.js +180 -0
- package/dist/workers/editor/common/viewLayout.js +368 -0
- package/dist/workers/editor/common/viewLineRenderer.js +948 -0
- package/dist/workers/editor/common/viewLinesViewportData.js +30 -0
- package/dist/workers/editor/common/viewModel.js +98 -0
- package/dist/workers/editor/common/viewModelDecoration.js +55 -0
- package/dist/workers/editor/common/viewModelDecorations.js +132 -0
- package/dist/workers/editor/common/viewModelEventDispatcher.js +398 -0
- package/dist/workers/editor/common/viewModelImpl.js +1163 -0
- package/dist/workers/editor/common/viewModelLines.js +938 -0
- package/dist/workers/editor/common/wordCharacterClassifier.js +87 -0
- package/dist/workers/editor/common/wordHelper.js +127 -0
- package/dist/workers/editor/editor.worker.js +11 -0
- package/dist/workers/language/css.worker.js +8 -0
- package/dist/workers/language/cssMode.js +198 -0
- package/dist/workers/language/cssWorker.js +183 -0
- package/dist/workers/language/html.worker.js +8 -0
- package/dist/workers/language/htmlMode.js +213 -0
- package/dist/workers/language/htmlWorker.js +126 -0
- package/dist/workers/language/json.worker.js +8 -0
- package/dist/workers/language/jsonMode.js +224 -0
- package/dist/workers/language/jsonWorker.js +187 -0
- package/dist/workers/language/languageFeatures.js +1009 -0
- package/dist/workers/language/lib.index.js +103 -0
- package/dist/workers/language/lib.js +1107 -0
- package/dist/workers/language/lspLanguageFeatures.js +716 -0
- package/dist/workers/language/monaco.contribution.js +144 -0
- package/dist/workers/language/tokenization.js +189 -0
- package/dist/workers/language/ts.worker.js +14 -0
- package/dist/workers/language/tsMode.js +212 -0
- package/dist/workers/language/tsWorker.js +352 -0
- package/dist/workers/language/typescriptServices.js +210154 -0
- package/dist/workers/language/typescriptServicesMetadata.js +3 -0
- package/dist/workers/language/workerManager.js +65 -0
- package/package.json +3 -2
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
import { BugIndicatingError } from '../../../../base/common/errors.js';
|
|
2
|
+
import { OffsetRange } from './offsetRange.js';
|
|
3
|
+
import { Range } from '../range.js';
|
|
4
|
+
import { findFirstIdxMonotonousOrArrLen, findLastIdxMonotonous, findLastMonotonous } from '../../../../base/common/arraysFind.js';
|
|
5
|
+
import { compareBy, numberComparator } from '../../../../base/common/arrays.js';
|
|
6
|
+
|
|
7
|
+
/*---------------------------------------------------------------------------------------------
|
|
8
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
9
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
10
|
+
*--------------------------------------------------------------------------------------------*/
|
|
11
|
+
/**
|
|
12
|
+
* A range of lines (1-based).
|
|
13
|
+
*/
|
|
14
|
+
class LineRange {
|
|
15
|
+
static ofLength(startLineNumber, length) {
|
|
16
|
+
return new LineRange(startLineNumber, startLineNumber + length);
|
|
17
|
+
}
|
|
18
|
+
static fromRange(range) {
|
|
19
|
+
return new LineRange(range.startLineNumber, range.endLineNumber);
|
|
20
|
+
}
|
|
21
|
+
static fromRangeInclusive(range) {
|
|
22
|
+
return new LineRange(range.startLineNumber, range.endLineNumber + 1);
|
|
23
|
+
}
|
|
24
|
+
static { this.compareByStart = compareBy(l => l.startLineNumber, numberComparator); }
|
|
25
|
+
/**
|
|
26
|
+
* @param lineRanges An array of arrays of of sorted line ranges.
|
|
27
|
+
*/
|
|
28
|
+
static joinMany(lineRanges) {
|
|
29
|
+
if (lineRanges.length === 0) {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
let result = new LineRangeSet(lineRanges[0].slice());
|
|
33
|
+
for (let i = 1; i < lineRanges.length; i++) {
|
|
34
|
+
result = result.getUnion(new LineRangeSet(lineRanges[i].slice()));
|
|
35
|
+
}
|
|
36
|
+
return result.ranges;
|
|
37
|
+
}
|
|
38
|
+
static join(lineRanges) {
|
|
39
|
+
if (lineRanges.length === 0) {
|
|
40
|
+
throw new BugIndicatingError('lineRanges cannot be empty');
|
|
41
|
+
}
|
|
42
|
+
let startLineNumber = lineRanges[0].startLineNumber;
|
|
43
|
+
let endLineNumberExclusive = lineRanges[0].endLineNumberExclusive;
|
|
44
|
+
for (let i = 1; i < lineRanges.length; i++) {
|
|
45
|
+
startLineNumber = Math.min(startLineNumber, lineRanges[i].startLineNumber);
|
|
46
|
+
endLineNumberExclusive = Math.max(endLineNumberExclusive, lineRanges[i].endLineNumberExclusive);
|
|
47
|
+
}
|
|
48
|
+
return new LineRange(startLineNumber, endLineNumberExclusive);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* @internal
|
|
52
|
+
*/
|
|
53
|
+
static deserialize(lineRange) {
|
|
54
|
+
return new LineRange(lineRange[0], lineRange[1]);
|
|
55
|
+
}
|
|
56
|
+
constructor(startLineNumber, endLineNumberExclusive) {
|
|
57
|
+
if (startLineNumber > endLineNumberExclusive) {
|
|
58
|
+
throw new BugIndicatingError(`startLineNumber ${startLineNumber} cannot be after endLineNumberExclusive ${endLineNumberExclusive}`);
|
|
59
|
+
}
|
|
60
|
+
this.startLineNumber = startLineNumber;
|
|
61
|
+
this.endLineNumberExclusive = endLineNumberExclusive;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Indicates if this line range contains the given line number.
|
|
65
|
+
*/
|
|
66
|
+
contains(lineNumber) {
|
|
67
|
+
return this.startLineNumber <= lineNumber && lineNumber < this.endLineNumberExclusive;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Indicates if this line range is empty.
|
|
71
|
+
*/
|
|
72
|
+
get isEmpty() {
|
|
73
|
+
return this.startLineNumber === this.endLineNumberExclusive;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Moves this line range by the given offset of line numbers.
|
|
77
|
+
*/
|
|
78
|
+
delta(offset) {
|
|
79
|
+
return new LineRange(this.startLineNumber + offset, this.endLineNumberExclusive + offset);
|
|
80
|
+
}
|
|
81
|
+
deltaLength(offset) {
|
|
82
|
+
return new LineRange(this.startLineNumber, this.endLineNumberExclusive + offset);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The number of lines this line range spans.
|
|
86
|
+
*/
|
|
87
|
+
get length() {
|
|
88
|
+
return this.endLineNumberExclusive - this.startLineNumber;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Creates a line range that combines this and the given line range.
|
|
92
|
+
*/
|
|
93
|
+
join(other) {
|
|
94
|
+
return new LineRange(Math.min(this.startLineNumber, other.startLineNumber), Math.max(this.endLineNumberExclusive, other.endLineNumberExclusive));
|
|
95
|
+
}
|
|
96
|
+
toString() {
|
|
97
|
+
return `[${this.startLineNumber},${this.endLineNumberExclusive})`;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* The resulting range is empty if the ranges do not intersect, but touch.
|
|
101
|
+
* If the ranges don't even touch, the result is undefined.
|
|
102
|
+
*/
|
|
103
|
+
intersect(other) {
|
|
104
|
+
const startLineNumber = Math.max(this.startLineNumber, other.startLineNumber);
|
|
105
|
+
const endLineNumberExclusive = Math.min(this.endLineNumberExclusive, other.endLineNumberExclusive);
|
|
106
|
+
if (startLineNumber <= endLineNumberExclusive) {
|
|
107
|
+
return new LineRange(startLineNumber, endLineNumberExclusive);
|
|
108
|
+
}
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
intersectsStrict(other) {
|
|
112
|
+
return this.startLineNumber < other.endLineNumberExclusive && other.startLineNumber < this.endLineNumberExclusive;
|
|
113
|
+
}
|
|
114
|
+
intersectsOrTouches(other) {
|
|
115
|
+
return this.startLineNumber <= other.endLineNumberExclusive && other.startLineNumber <= this.endLineNumberExclusive;
|
|
116
|
+
}
|
|
117
|
+
equals(b) {
|
|
118
|
+
return this.startLineNumber === b.startLineNumber && this.endLineNumberExclusive === b.endLineNumberExclusive;
|
|
119
|
+
}
|
|
120
|
+
toInclusiveRange() {
|
|
121
|
+
if (this.isEmpty) {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
return new Range(this.startLineNumber, 1, this.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* @deprecated Using this function is discouraged because it might lead to bugs: The end position is not guaranteed to be a valid position!
|
|
128
|
+
*/
|
|
129
|
+
toExclusiveRange() {
|
|
130
|
+
return new Range(this.startLineNumber, 1, this.endLineNumberExclusive, 1);
|
|
131
|
+
}
|
|
132
|
+
mapToLineArray(f) {
|
|
133
|
+
const result = [];
|
|
134
|
+
for (let lineNumber = this.startLineNumber; lineNumber < this.endLineNumberExclusive; lineNumber++) {
|
|
135
|
+
result.push(f(lineNumber));
|
|
136
|
+
}
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
139
|
+
forEach(f) {
|
|
140
|
+
for (let lineNumber = this.startLineNumber; lineNumber < this.endLineNumberExclusive; lineNumber++) {
|
|
141
|
+
f(lineNumber);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* @internal
|
|
146
|
+
*/
|
|
147
|
+
serialize() {
|
|
148
|
+
return [this.startLineNumber, this.endLineNumberExclusive];
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Converts this 1-based line range to a 0-based offset range (subtracts 1!).
|
|
152
|
+
* @internal
|
|
153
|
+
*/
|
|
154
|
+
toOffsetRange() {
|
|
155
|
+
return new OffsetRange(this.startLineNumber - 1, this.endLineNumberExclusive - 1);
|
|
156
|
+
}
|
|
157
|
+
addMargin(marginTop, marginBottom) {
|
|
158
|
+
return new LineRange(this.startLineNumber - marginTop, this.endLineNumberExclusive + marginBottom);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
class LineRangeSet {
|
|
162
|
+
constructor(
|
|
163
|
+
/**
|
|
164
|
+
* Sorted by start line number.
|
|
165
|
+
* No two line ranges are touching or intersecting.
|
|
166
|
+
*/
|
|
167
|
+
_normalizedRanges = []) {
|
|
168
|
+
this._normalizedRanges = _normalizedRanges;
|
|
169
|
+
}
|
|
170
|
+
get ranges() {
|
|
171
|
+
return this._normalizedRanges;
|
|
172
|
+
}
|
|
173
|
+
addRange(range) {
|
|
174
|
+
if (range.length === 0) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
// Idea: Find joinRange such that:
|
|
178
|
+
// replaceRange = _normalizedRanges.replaceRange(joinRange, range.joinAll(joinRange.map(idx => this._normalizedRanges[idx])))
|
|
179
|
+
// idx of first element that touches range or that is after range
|
|
180
|
+
const joinRangeStartIdx = findFirstIdxMonotonousOrArrLen(this._normalizedRanges, r => r.endLineNumberExclusive >= range.startLineNumber);
|
|
181
|
+
// idx of element after { last element that touches range or that is before range }
|
|
182
|
+
const joinRangeEndIdxExclusive = findLastIdxMonotonous(this._normalizedRanges, r => r.startLineNumber <= range.endLineNumberExclusive) + 1;
|
|
183
|
+
if (joinRangeStartIdx === joinRangeEndIdxExclusive) {
|
|
184
|
+
// If there is no element that touches range, then joinRangeStartIdx === joinRangeEndIdxExclusive and that value is the index of the element after range
|
|
185
|
+
this._normalizedRanges.splice(joinRangeStartIdx, 0, range);
|
|
186
|
+
}
|
|
187
|
+
else if (joinRangeStartIdx === joinRangeEndIdxExclusive - 1) {
|
|
188
|
+
// Else, there is an element that touches range and in this case it is both the first and last element. Thus we can replace it
|
|
189
|
+
const joinRange = this._normalizedRanges[joinRangeStartIdx];
|
|
190
|
+
this._normalizedRanges[joinRangeStartIdx] = joinRange.join(range);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
// First and last element are different - we need to replace the entire range
|
|
194
|
+
const joinRange = this._normalizedRanges[joinRangeStartIdx].join(this._normalizedRanges[joinRangeEndIdxExclusive - 1]).join(range);
|
|
195
|
+
this._normalizedRanges.splice(joinRangeStartIdx, joinRangeEndIdxExclusive - joinRangeStartIdx, joinRange);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
contains(lineNumber) {
|
|
199
|
+
const rangeThatStartsBeforeEnd = findLastMonotonous(this._normalizedRanges, r => r.startLineNumber <= lineNumber);
|
|
200
|
+
return !!rangeThatStartsBeforeEnd && rangeThatStartsBeforeEnd.endLineNumberExclusive > lineNumber;
|
|
201
|
+
}
|
|
202
|
+
intersects(range) {
|
|
203
|
+
const rangeThatStartsBeforeEnd = findLastMonotonous(this._normalizedRanges, r => r.startLineNumber < range.endLineNumberExclusive);
|
|
204
|
+
return !!rangeThatStartsBeforeEnd && rangeThatStartsBeforeEnd.endLineNumberExclusive > range.startLineNumber;
|
|
205
|
+
}
|
|
206
|
+
getUnion(other) {
|
|
207
|
+
if (this._normalizedRanges.length === 0) {
|
|
208
|
+
return other;
|
|
209
|
+
}
|
|
210
|
+
if (other._normalizedRanges.length === 0) {
|
|
211
|
+
return this;
|
|
212
|
+
}
|
|
213
|
+
const result = [];
|
|
214
|
+
let i1 = 0;
|
|
215
|
+
let i2 = 0;
|
|
216
|
+
let current = null;
|
|
217
|
+
while (i1 < this._normalizedRanges.length || i2 < other._normalizedRanges.length) {
|
|
218
|
+
let next = null;
|
|
219
|
+
if (i1 < this._normalizedRanges.length && i2 < other._normalizedRanges.length) {
|
|
220
|
+
const lineRange1 = this._normalizedRanges[i1];
|
|
221
|
+
const lineRange2 = other._normalizedRanges[i2];
|
|
222
|
+
if (lineRange1.startLineNumber < lineRange2.startLineNumber) {
|
|
223
|
+
next = lineRange1;
|
|
224
|
+
i1++;
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
next = lineRange2;
|
|
228
|
+
i2++;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
else if (i1 < this._normalizedRanges.length) {
|
|
232
|
+
next = this._normalizedRanges[i1];
|
|
233
|
+
i1++;
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
next = other._normalizedRanges[i2];
|
|
237
|
+
i2++;
|
|
238
|
+
}
|
|
239
|
+
if (current === null) {
|
|
240
|
+
current = next;
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
if (current.endLineNumberExclusive >= next.startLineNumber) {
|
|
244
|
+
// merge
|
|
245
|
+
current = new LineRange(current.startLineNumber, Math.max(current.endLineNumberExclusive, next.endLineNumberExclusive));
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
// push
|
|
249
|
+
result.push(current);
|
|
250
|
+
current = next;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
if (current !== null) {
|
|
255
|
+
result.push(current);
|
|
256
|
+
}
|
|
257
|
+
return new LineRangeSet(result);
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Subtracts all ranges in this set from `range` and returns the result.
|
|
261
|
+
*/
|
|
262
|
+
subtractFrom(range) {
|
|
263
|
+
// idx of first element that touches range or that is after range
|
|
264
|
+
const joinRangeStartIdx = findFirstIdxMonotonousOrArrLen(this._normalizedRanges, r => r.endLineNumberExclusive >= range.startLineNumber);
|
|
265
|
+
// idx of element after { last element that touches range or that is before range }
|
|
266
|
+
const joinRangeEndIdxExclusive = findLastIdxMonotonous(this._normalizedRanges, r => r.startLineNumber <= range.endLineNumberExclusive) + 1;
|
|
267
|
+
if (joinRangeStartIdx === joinRangeEndIdxExclusive) {
|
|
268
|
+
return new LineRangeSet([range]);
|
|
269
|
+
}
|
|
270
|
+
const result = [];
|
|
271
|
+
let startLineNumber = range.startLineNumber;
|
|
272
|
+
for (let i = joinRangeStartIdx; i < joinRangeEndIdxExclusive; i++) {
|
|
273
|
+
const r = this._normalizedRanges[i];
|
|
274
|
+
if (r.startLineNumber > startLineNumber) {
|
|
275
|
+
result.push(new LineRange(startLineNumber, r.startLineNumber));
|
|
276
|
+
}
|
|
277
|
+
startLineNumber = r.endLineNumberExclusive;
|
|
278
|
+
}
|
|
279
|
+
if (startLineNumber < range.endLineNumberExclusive) {
|
|
280
|
+
result.push(new LineRange(startLineNumber, range.endLineNumberExclusive));
|
|
281
|
+
}
|
|
282
|
+
return new LineRangeSet(result);
|
|
283
|
+
}
|
|
284
|
+
toString() {
|
|
285
|
+
return this._normalizedRanges.map(r => r.toString()).join(', ');
|
|
286
|
+
}
|
|
287
|
+
getIntersection(other) {
|
|
288
|
+
const result = [];
|
|
289
|
+
let i1 = 0;
|
|
290
|
+
let i2 = 0;
|
|
291
|
+
while (i1 < this._normalizedRanges.length && i2 < other._normalizedRanges.length) {
|
|
292
|
+
const r1 = this._normalizedRanges[i1];
|
|
293
|
+
const r2 = other._normalizedRanges[i2];
|
|
294
|
+
const i = r1.intersect(r2);
|
|
295
|
+
if (i && !i.isEmpty) {
|
|
296
|
+
result.push(i);
|
|
297
|
+
}
|
|
298
|
+
if (r1.endLineNumberExclusive < r2.endLineNumberExclusive) {
|
|
299
|
+
i1++;
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
i2++;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return new LineRangeSet(result);
|
|
306
|
+
}
|
|
307
|
+
getWithDelta(value) {
|
|
308
|
+
return new LineRangeSet(this._normalizedRanges.map(r => r.delta(value)));
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
export { LineRange, LineRangeSet };
|
|
@@ -0,0 +1,36 @@
|
|
|
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
|
+
class LineSequence {
|
|
6
|
+
constructor(trimmedHash, lines) {
|
|
7
|
+
this.trimmedHash = trimmedHash;
|
|
8
|
+
this.lines = lines;
|
|
9
|
+
}
|
|
10
|
+
getElement(offset) {
|
|
11
|
+
return this.trimmedHash[offset];
|
|
12
|
+
}
|
|
13
|
+
get length() {
|
|
14
|
+
return this.trimmedHash.length;
|
|
15
|
+
}
|
|
16
|
+
getBoundaryScore(length) {
|
|
17
|
+
const indentationBefore = length === 0 ? 0 : getIndentation(this.lines[length - 1]);
|
|
18
|
+
const indentationAfter = length === this.lines.length ? 0 : getIndentation(this.lines[length]);
|
|
19
|
+
return 1000 - (indentationBefore + indentationAfter);
|
|
20
|
+
}
|
|
21
|
+
getText(range) {
|
|
22
|
+
return this.lines.slice(range.start, range.endExclusive).join('\n');
|
|
23
|
+
}
|
|
24
|
+
isStronglyEqual(offset1, offset2) {
|
|
25
|
+
return this.lines[offset1] === this.lines[offset2];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function getIndentation(str) {
|
|
29
|
+
let i = 0;
|
|
30
|
+
while (i < str.length && (str.charCodeAt(i) === 32 /* CharCode.Space */ || str.charCodeAt(i) === 9 /* CharCode.Tab */)) {
|
|
31
|
+
i++;
|
|
32
|
+
}
|
|
33
|
+
return i;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export { LineSequence };
|