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,142 @@
|
|
|
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
|
+
* A position in the editor.
|
|
7
|
+
*/
|
|
8
|
+
class Position {
|
|
9
|
+
constructor(lineNumber, column) {
|
|
10
|
+
this.lineNumber = lineNumber;
|
|
11
|
+
this.column = column;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Create a new position from this position.
|
|
15
|
+
*
|
|
16
|
+
* @param newLineNumber new line number
|
|
17
|
+
* @param newColumn new column
|
|
18
|
+
*/
|
|
19
|
+
with(newLineNumber = this.lineNumber, newColumn = this.column) {
|
|
20
|
+
if (newLineNumber === this.lineNumber && newColumn === this.column) {
|
|
21
|
+
return this;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
return new Position(newLineNumber, newColumn);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Derive a new position from this position.
|
|
29
|
+
*
|
|
30
|
+
* @param deltaLineNumber line number delta
|
|
31
|
+
* @param deltaColumn column delta
|
|
32
|
+
*/
|
|
33
|
+
delta(deltaLineNumber = 0, deltaColumn = 0) {
|
|
34
|
+
return this.with(Math.max(1, this.lineNumber + deltaLineNumber), Math.max(1, this.column + deltaColumn));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Test if this position equals other position
|
|
38
|
+
*/
|
|
39
|
+
equals(other) {
|
|
40
|
+
return Position.equals(this, other);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Test if position `a` equals position `b`
|
|
44
|
+
*/
|
|
45
|
+
static equals(a, b) {
|
|
46
|
+
if (!a && !b) {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
return (!!a &&
|
|
50
|
+
!!b &&
|
|
51
|
+
a.lineNumber === b.lineNumber &&
|
|
52
|
+
a.column === b.column);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Test if this position is before other position.
|
|
56
|
+
* If the two positions are equal, the result will be false.
|
|
57
|
+
*/
|
|
58
|
+
isBefore(other) {
|
|
59
|
+
return Position.isBefore(this, other);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Test if position `a` is before position `b`.
|
|
63
|
+
* If the two positions are equal, the result will be false.
|
|
64
|
+
*/
|
|
65
|
+
static isBefore(a, b) {
|
|
66
|
+
if (a.lineNumber < b.lineNumber) {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
if (b.lineNumber < a.lineNumber) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
return a.column < b.column;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Test if this position is before other position.
|
|
76
|
+
* If the two positions are equal, the result will be true.
|
|
77
|
+
*/
|
|
78
|
+
isBeforeOrEqual(other) {
|
|
79
|
+
return Position.isBeforeOrEqual(this, other);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Test if position `a` is before position `b`.
|
|
83
|
+
* If the two positions are equal, the result will be true.
|
|
84
|
+
*/
|
|
85
|
+
static isBeforeOrEqual(a, b) {
|
|
86
|
+
if (a.lineNumber < b.lineNumber) {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
if (b.lineNumber < a.lineNumber) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
return a.column <= b.column;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* A function that compares positions, useful for sorting
|
|
96
|
+
*/
|
|
97
|
+
static compare(a, b) {
|
|
98
|
+
const aLineNumber = a.lineNumber | 0;
|
|
99
|
+
const bLineNumber = b.lineNumber | 0;
|
|
100
|
+
if (aLineNumber === bLineNumber) {
|
|
101
|
+
const aColumn = a.column | 0;
|
|
102
|
+
const bColumn = b.column | 0;
|
|
103
|
+
return aColumn - bColumn;
|
|
104
|
+
}
|
|
105
|
+
return aLineNumber - bLineNumber;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Clone this position.
|
|
109
|
+
*/
|
|
110
|
+
clone() {
|
|
111
|
+
return new Position(this.lineNumber, this.column);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Convert to a human-readable representation.
|
|
115
|
+
*/
|
|
116
|
+
toString() {
|
|
117
|
+
return '(' + this.lineNumber + ',' + this.column + ')';
|
|
118
|
+
}
|
|
119
|
+
// ---
|
|
120
|
+
/**
|
|
121
|
+
* Create a `Position` from an `IPosition`.
|
|
122
|
+
*/
|
|
123
|
+
static lift(pos) {
|
|
124
|
+
return new Position(pos.lineNumber, pos.column);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Test if `obj` is an `IPosition`.
|
|
128
|
+
*/
|
|
129
|
+
static isIPosition(obj) {
|
|
130
|
+
return (!!obj
|
|
131
|
+
&& (typeof obj.lineNumber === 'number')
|
|
132
|
+
&& (typeof obj.column === 'number'));
|
|
133
|
+
}
|
|
134
|
+
toJSON() {
|
|
135
|
+
return {
|
|
136
|
+
lineNumber: this.lineNumber,
|
|
137
|
+
column: this.column
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export { Position };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { StringReplacement, StringEdit } from '../edits/stringEdit.js';
|
|
2
|
+
import { TextEdit, TextReplacement } from '../edits/textEdit.js';
|
|
3
|
+
import { _setPositionOffsetTransformerDependencies } from './positionToOffsetImpl.js';
|
|
4
|
+
export { PositionOffsetTransformer, PositionOffsetTransformerBase } from './positionToOffsetImpl.js';
|
|
5
|
+
import { TextLength } from './textLength.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
|
+
_setPositionOffsetTransformerDependencies({
|
|
12
|
+
StringEdit: StringEdit,
|
|
13
|
+
StringReplacement: StringReplacement,
|
|
14
|
+
TextReplacement: TextReplacement,
|
|
15
|
+
TextEdit: TextEdit,
|
|
16
|
+
TextLength: TextLength,
|
|
17
|
+
});
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { findLastIdxMonotonous } from '../../../../base/common/arraysFind.js';
|
|
2
|
+
import { OffsetRange } from '../ranges/offsetRange.js';
|
|
3
|
+
import { Position } from '../position.js';
|
|
4
|
+
import { Range } from '../range.js';
|
|
5
|
+
|
|
6
|
+
/*---------------------------------------------------------------------------------------------
|
|
7
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
8
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
9
|
+
*--------------------------------------------------------------------------------------------*/
|
|
10
|
+
class PositionOffsetTransformerBase {
|
|
11
|
+
getOffsetRange(range) {
|
|
12
|
+
return new OffsetRange(this.getOffset(range.getStartPosition()), this.getOffset(range.getEndPosition()));
|
|
13
|
+
}
|
|
14
|
+
getRange(offsetRange) {
|
|
15
|
+
return Range.fromPositions(this.getPosition(offsetRange.start), this.getPosition(offsetRange.endExclusive));
|
|
16
|
+
}
|
|
17
|
+
getStringReplacement(edit) {
|
|
18
|
+
return new Deps.deps.StringReplacement(this.getOffsetRange(edit.range), edit.text);
|
|
19
|
+
}
|
|
20
|
+
getTextReplacement(edit) {
|
|
21
|
+
return new Deps.deps.TextReplacement(this.getRange(edit.replaceRange), edit.newText);
|
|
22
|
+
}
|
|
23
|
+
getTextEdit(edit) {
|
|
24
|
+
const edits = edit.replacements.map(e => this.getTextReplacement(e));
|
|
25
|
+
return new Deps.deps.TextEdit(edits);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
class Deps {
|
|
29
|
+
static { this._deps = undefined; }
|
|
30
|
+
static get deps() {
|
|
31
|
+
if (!this._deps) {
|
|
32
|
+
throw new Error('Dependencies not set. Call _setDependencies first.');
|
|
33
|
+
}
|
|
34
|
+
return this._deps;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** This is to break circular module dependencies. */
|
|
38
|
+
function _setPositionOffsetTransformerDependencies(deps) {
|
|
39
|
+
Deps._deps = deps;
|
|
40
|
+
}
|
|
41
|
+
class PositionOffsetTransformer extends PositionOffsetTransformerBase {
|
|
42
|
+
constructor(text) {
|
|
43
|
+
super();
|
|
44
|
+
this.text = text;
|
|
45
|
+
this.lineStartOffsetByLineIdx = [];
|
|
46
|
+
this.lineEndOffsetByLineIdx = [];
|
|
47
|
+
this.lineStartOffsetByLineIdx.push(0);
|
|
48
|
+
for (let i = 0; i < text.length; i++) {
|
|
49
|
+
if (text.charAt(i) === '\n') {
|
|
50
|
+
this.lineStartOffsetByLineIdx.push(i + 1);
|
|
51
|
+
if (i > 0 && text.charAt(i - 1) === '\r') {
|
|
52
|
+
this.lineEndOffsetByLineIdx.push(i - 1);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
this.lineEndOffsetByLineIdx.push(i);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
this.lineEndOffsetByLineIdx.push(text.length);
|
|
60
|
+
}
|
|
61
|
+
getOffset(position) {
|
|
62
|
+
const valPos = this._validatePosition(position);
|
|
63
|
+
return this.lineStartOffsetByLineIdx[valPos.lineNumber - 1] + valPos.column - 1;
|
|
64
|
+
}
|
|
65
|
+
_validatePosition(position) {
|
|
66
|
+
if (position.lineNumber < 1) {
|
|
67
|
+
return new Position(1, 1);
|
|
68
|
+
}
|
|
69
|
+
const lineCount = this.textLength.lineCount + 1;
|
|
70
|
+
if (position.lineNumber > lineCount) {
|
|
71
|
+
const lineLength = this.getLineLength(lineCount);
|
|
72
|
+
return new Position(lineCount, lineLength + 1);
|
|
73
|
+
}
|
|
74
|
+
if (position.column < 1) {
|
|
75
|
+
return new Position(position.lineNumber, 1);
|
|
76
|
+
}
|
|
77
|
+
const lineLength = this.getLineLength(position.lineNumber);
|
|
78
|
+
if (position.column - 1 > lineLength) {
|
|
79
|
+
return new Position(position.lineNumber, lineLength + 1);
|
|
80
|
+
}
|
|
81
|
+
return position;
|
|
82
|
+
}
|
|
83
|
+
getPosition(offset) {
|
|
84
|
+
const idx = findLastIdxMonotonous(this.lineStartOffsetByLineIdx, i => i <= offset);
|
|
85
|
+
const lineNumber = idx + 1;
|
|
86
|
+
const column = offset - this.lineStartOffsetByLineIdx[idx] + 1;
|
|
87
|
+
return new Position(lineNumber, column);
|
|
88
|
+
}
|
|
89
|
+
get textLength() {
|
|
90
|
+
const lineIdx = this.lineStartOffsetByLineIdx.length - 1;
|
|
91
|
+
return new Deps.deps.TextLength(lineIdx, this.text.length - this.lineStartOffsetByLineIdx[lineIdx]);
|
|
92
|
+
}
|
|
93
|
+
getLineLength(lineNumber) {
|
|
94
|
+
return this.lineEndOffsetByLineIdx[lineNumber - 1] - this.lineStartOffsetByLineIdx[lineNumber - 1];
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export { PositionOffsetTransformer, PositionOffsetTransformerBase, _setPositionOffsetTransformerDependencies };
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { arrayInsert } from '../../../base/common/arrays.js';
|
|
2
|
+
import { toUint32 } from '../../../base/common/uint.js';
|
|
3
|
+
|
|
4
|
+
/*---------------------------------------------------------------------------------------------
|
|
5
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
6
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
7
|
+
*--------------------------------------------------------------------------------------------*/
|
|
8
|
+
class PrefixSumComputer {
|
|
9
|
+
constructor(values) {
|
|
10
|
+
this.values = values;
|
|
11
|
+
this.prefixSum = new Uint32Array(values.length);
|
|
12
|
+
this.prefixSumValidIndex = new Int32Array(1);
|
|
13
|
+
this.prefixSumValidIndex[0] = -1;
|
|
14
|
+
}
|
|
15
|
+
insertValues(insertIndex, insertValues) {
|
|
16
|
+
insertIndex = toUint32(insertIndex);
|
|
17
|
+
const oldValues = this.values;
|
|
18
|
+
const oldPrefixSum = this.prefixSum;
|
|
19
|
+
const insertValuesLen = insertValues.length;
|
|
20
|
+
if (insertValuesLen === 0) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
this.values = new Uint32Array(oldValues.length + insertValuesLen);
|
|
24
|
+
this.values.set(oldValues.subarray(0, insertIndex), 0);
|
|
25
|
+
this.values.set(oldValues.subarray(insertIndex), insertIndex + insertValuesLen);
|
|
26
|
+
this.values.set(insertValues, insertIndex);
|
|
27
|
+
if (insertIndex - 1 < this.prefixSumValidIndex[0]) {
|
|
28
|
+
this.prefixSumValidIndex[0] = insertIndex - 1;
|
|
29
|
+
}
|
|
30
|
+
this.prefixSum = new Uint32Array(this.values.length);
|
|
31
|
+
if (this.prefixSumValidIndex[0] >= 0) {
|
|
32
|
+
this.prefixSum.set(oldPrefixSum.subarray(0, this.prefixSumValidIndex[0] + 1));
|
|
33
|
+
}
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
setValue(index, value) {
|
|
37
|
+
index = toUint32(index);
|
|
38
|
+
value = toUint32(value);
|
|
39
|
+
if (this.values[index] === value) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
this.values[index] = value;
|
|
43
|
+
if (index - 1 < this.prefixSumValidIndex[0]) {
|
|
44
|
+
this.prefixSumValidIndex[0] = index - 1;
|
|
45
|
+
}
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
removeValues(startIndex, count) {
|
|
49
|
+
startIndex = toUint32(startIndex);
|
|
50
|
+
count = toUint32(count);
|
|
51
|
+
const oldValues = this.values;
|
|
52
|
+
const oldPrefixSum = this.prefixSum;
|
|
53
|
+
if (startIndex >= oldValues.length) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
const maxCount = oldValues.length - startIndex;
|
|
57
|
+
if (count >= maxCount) {
|
|
58
|
+
count = maxCount;
|
|
59
|
+
}
|
|
60
|
+
if (count === 0) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
this.values = new Uint32Array(oldValues.length - count);
|
|
64
|
+
this.values.set(oldValues.subarray(0, startIndex), 0);
|
|
65
|
+
this.values.set(oldValues.subarray(startIndex + count), startIndex);
|
|
66
|
+
this.prefixSum = new Uint32Array(this.values.length);
|
|
67
|
+
if (startIndex - 1 < this.prefixSumValidIndex[0]) {
|
|
68
|
+
this.prefixSumValidIndex[0] = startIndex - 1;
|
|
69
|
+
}
|
|
70
|
+
if (this.prefixSumValidIndex[0] >= 0) {
|
|
71
|
+
this.prefixSum.set(oldPrefixSum.subarray(0, this.prefixSumValidIndex[0] + 1));
|
|
72
|
+
}
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
getTotalSum() {
|
|
76
|
+
if (this.values.length === 0) {
|
|
77
|
+
return 0;
|
|
78
|
+
}
|
|
79
|
+
return this._getPrefixSum(this.values.length - 1);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Returns the sum of the first `index + 1` many items.
|
|
83
|
+
* @returns `SUM(0 <= j <= index, values[j])`.
|
|
84
|
+
*/
|
|
85
|
+
getPrefixSum(index) {
|
|
86
|
+
if (index < 0) {
|
|
87
|
+
return 0;
|
|
88
|
+
}
|
|
89
|
+
index = toUint32(index);
|
|
90
|
+
return this._getPrefixSum(index);
|
|
91
|
+
}
|
|
92
|
+
_getPrefixSum(index) {
|
|
93
|
+
if (index <= this.prefixSumValidIndex[0]) {
|
|
94
|
+
return this.prefixSum[index];
|
|
95
|
+
}
|
|
96
|
+
let startIndex = this.prefixSumValidIndex[0] + 1;
|
|
97
|
+
if (startIndex === 0) {
|
|
98
|
+
this.prefixSum[0] = this.values[0];
|
|
99
|
+
startIndex++;
|
|
100
|
+
}
|
|
101
|
+
if (index >= this.values.length) {
|
|
102
|
+
index = this.values.length - 1;
|
|
103
|
+
}
|
|
104
|
+
for (let i = startIndex; i <= index; i++) {
|
|
105
|
+
this.prefixSum[i] = this.prefixSum[i - 1] + this.values[i];
|
|
106
|
+
}
|
|
107
|
+
this.prefixSumValidIndex[0] = Math.max(this.prefixSumValidIndex[0], index);
|
|
108
|
+
return this.prefixSum[index];
|
|
109
|
+
}
|
|
110
|
+
getIndexOf(sum) {
|
|
111
|
+
sum = Math.floor(sum);
|
|
112
|
+
// Compute all sums (to get a fully valid prefixSum)
|
|
113
|
+
this.getTotalSum();
|
|
114
|
+
let low = 0;
|
|
115
|
+
let high = this.values.length - 1;
|
|
116
|
+
let mid = 0;
|
|
117
|
+
let midStop = 0;
|
|
118
|
+
let midStart = 0;
|
|
119
|
+
while (low <= high) {
|
|
120
|
+
mid = low + ((high - low) / 2) | 0;
|
|
121
|
+
midStop = this.prefixSum[mid];
|
|
122
|
+
midStart = midStop - this.values[mid];
|
|
123
|
+
if (sum < midStart) {
|
|
124
|
+
high = mid - 1;
|
|
125
|
+
}
|
|
126
|
+
else if (sum >= midStop) {
|
|
127
|
+
low = mid + 1;
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return new PrefixSumIndexOfResult(mid, sum - midStart);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* {@link getIndexOf} has an amortized runtime complexity of O(1).
|
|
138
|
+
*
|
|
139
|
+
* ({@link PrefixSumComputer.getIndexOf} is just O(log n))
|
|
140
|
+
*/
|
|
141
|
+
class ConstantTimePrefixSumComputer {
|
|
142
|
+
constructor(values) {
|
|
143
|
+
this._values = values;
|
|
144
|
+
this._isValid = false;
|
|
145
|
+
this._validEndIndex = -1;
|
|
146
|
+
this._prefixSum = [];
|
|
147
|
+
this._indexBySum = [];
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* @returns SUM(0 <= j < values.length, values[j])
|
|
151
|
+
*/
|
|
152
|
+
getTotalSum() {
|
|
153
|
+
this._ensureValid();
|
|
154
|
+
return this._indexBySum.length;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Returns the sum of the first `count` many items.
|
|
158
|
+
* @returns `SUM(0 <= j < count, values[j])`.
|
|
159
|
+
*/
|
|
160
|
+
getPrefixSum(count) {
|
|
161
|
+
this._ensureValid();
|
|
162
|
+
if (count === 0) {
|
|
163
|
+
return 0;
|
|
164
|
+
}
|
|
165
|
+
return this._prefixSum[count - 1];
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* @returns `result`, such that `getPrefixSum(result.index) + result.remainder = sum`
|
|
169
|
+
*/
|
|
170
|
+
getIndexOf(sum) {
|
|
171
|
+
this._ensureValid();
|
|
172
|
+
const idx = this._indexBySum[sum];
|
|
173
|
+
const viewLinesAbove = idx > 0 ? this._prefixSum[idx - 1] : 0;
|
|
174
|
+
return new PrefixSumIndexOfResult(idx, sum - viewLinesAbove);
|
|
175
|
+
}
|
|
176
|
+
removeValues(start, deleteCount) {
|
|
177
|
+
this._values.splice(start, deleteCount);
|
|
178
|
+
this._invalidate(start);
|
|
179
|
+
}
|
|
180
|
+
insertValues(insertIndex, insertArr) {
|
|
181
|
+
this._values = arrayInsert(this._values, insertIndex, insertArr);
|
|
182
|
+
this._invalidate(insertIndex);
|
|
183
|
+
}
|
|
184
|
+
_invalidate(index) {
|
|
185
|
+
this._isValid = false;
|
|
186
|
+
this._validEndIndex = Math.min(this._validEndIndex, index - 1);
|
|
187
|
+
}
|
|
188
|
+
_ensureValid() {
|
|
189
|
+
if (this._isValid) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
for (let i = this._validEndIndex + 1, len = this._values.length; i < len; i++) {
|
|
193
|
+
const value = this._values[i];
|
|
194
|
+
const sumAbove = i > 0 ? this._prefixSum[i - 1] : 0;
|
|
195
|
+
this._prefixSum[i] = sumAbove + value;
|
|
196
|
+
for (let j = 0; j < value; j++) {
|
|
197
|
+
this._indexBySum[sumAbove + j] = i;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// trim things
|
|
201
|
+
this._prefixSum.length = this._values.length;
|
|
202
|
+
this._indexBySum.length = this._prefixSum[this._prefixSum.length - 1];
|
|
203
|
+
// mark as valid
|
|
204
|
+
this._isValid = true;
|
|
205
|
+
this._validEndIndex = this._values.length - 1;
|
|
206
|
+
}
|
|
207
|
+
setValue(index, value) {
|
|
208
|
+
if (this._values[index] === value) {
|
|
209
|
+
// no change
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
this._values[index] = value;
|
|
213
|
+
this._invalidate(index);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
class PrefixSumIndexOfResult {
|
|
217
|
+
constructor(index, remainder) {
|
|
218
|
+
this.index = index;
|
|
219
|
+
this.remainder = remainder;
|
|
220
|
+
this._prefixSumIndexOfResultBrand = undefined;
|
|
221
|
+
this.index = index;
|
|
222
|
+
this.remainder = remainder;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
export { ConstantTimePrefixSumComputer, PrefixSumComputer, PrefixSumIndexOfResult };
|