diff --git a/src/vs/editor/common/model/mirrorModel.ts b/src/vs/editor/common/model/mirrorModel.ts index fc6a1c322b1c079e7a09773dfa4d7df510f9011e..4f962237e23f5105b4395d1adfb825020d214d90 100644 --- a/src/vs/editor/common/model/mirrorModel.ts +++ b/src/vs/editor/common/model/mirrorModel.ts @@ -13,7 +13,7 @@ import {TextModel} from 'vs/editor/common/model/textModel'; import {TextModelWithTokens} from 'vs/editor/common/model/textModelWithTokens'; import {IMode} from 'vs/editor/common/modes'; import {IResourceService} from 'vs/editor/common/services/resourceService'; -import {IPrefixSumIndexOfResult, PrefixSumComputer} from 'vs/editor/common/viewModel/prefixSumComputer'; +import {PrefixSumComputer} from 'vs/editor/common/viewModel/prefixSumComputer'; export interface IMirrorModelEvents { contentChanged: editorCommon.IModelContentChangedEvent[]; @@ -115,11 +115,8 @@ export class AbstractMirrorModel extends TextModelWithTokens implements editorCo } this._ensurePrefixSum(); - var r:IPrefixSumIndexOfResult = { - index: 0, - remainder: 0 - }; - this._lineStarts.getIndexOf(offset, r); + + let r = this._lineStarts.getIndexOf(offset); return { lineNumber: r.index + 1, column: this.getEOL().length + r.remainder diff --git a/src/vs/editor/common/viewModel/characterHardWrappingLineMapper.ts b/src/vs/editor/common/viewModel/characterHardWrappingLineMapper.ts index fe476ea7869ccbaa4bab79710cf1f64fd20ce545..f3cef973550a9c38b1e74b692046fb8c68809ace 100644 --- a/src/vs/editor/common/viewModel/characterHardWrappingLineMapper.ts +++ b/src/vs/editor/common/viewModel/characterHardWrappingLineMapper.ts @@ -7,12 +7,7 @@ import * as strings from 'vs/base/common/strings'; import {WrappingIndent} from 'vs/editor/common/editorCommon'; import {PrefixSumComputer} from 'vs/editor/common/viewModel/prefixSumComputer'; -import {ILineMapperFactory, ILineMapping, IOutputPosition} from 'vs/editor/common/viewModel/splitLinesCollection'; - -var throwawayIndexOfResult = { - index: -1, - remainder: -1 -}; +import {ILineMapperFactory, ILineMapping, OutputPosition} from 'vs/editor/common/viewModel/splitLinesCollection'; var BREAK_BEFORE_CLASS = 1; var BREAK_AFTER_CLASS = 2; @@ -244,9 +239,8 @@ export class CharacterHardWrappingLineMapping implements ILineMapping { } } - public getOutputPositionOfInputOffset(inputOffset:number, result:IOutputPosition): void { - this._prefixSums.getIndexOf(inputOffset, throwawayIndexOfResult); - result.outputLineIndex = throwawayIndexOfResult.index; - result.outputOffset = throwawayIndexOfResult.remainder; + public getOutputPositionOfInputOffset(inputOffset:number): OutputPosition { + let r = this._prefixSums.getIndexOf(inputOffset); + return new OutputPosition(r.index, r.remainder); } } \ No newline at end of file diff --git a/src/vs/editor/common/viewModel/prefixSumComputer.ts b/src/vs/editor/common/viewModel/prefixSumComputer.ts index a43856fae4855c5b1c61d5ced025238b92b02275..d026a3a052fd7d191139149d6a9bbd4f03576d7a 100644 --- a/src/vs/editor/common/viewModel/prefixSumComputer.ts +++ b/src/vs/editor/common/viewModel/prefixSumComputer.ts @@ -4,9 +4,16 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; -export interface IPrefixSumIndexOfResult { +export class PrefixSumIndexOfResult { + prefixSumIndexOfResultTrait: void; + index: number; remainder: number; + + constructor(index:number, remainder:number) { + this.index = index; + this.remainder = remainder; + } } export class PrefixSumComputer { @@ -29,7 +36,7 @@ export class PrefixSumComputer { constructor(values:number[]) { this.values = values; this.prefixSum = []; - for (var i = 0, len = this.values.length; i < len; i++) { + for (let i = 0, len = this.values.length; i < len; i++) { this.prefixSum[i] = 0; } this.prefixSumValidIndex = -1; @@ -40,6 +47,9 @@ export class PrefixSumComputer { } public insertValue(insertIndex:number, value:number): void { + insertIndex = Math.floor(insertIndex); //@perf + value = Math.floor(value); //@perf + this.values.splice(insertIndex, 0, value); this.prefixSum.splice(insertIndex, 0, 0); if (insertIndex - 1 < this.prefixSumValidIndex) { @@ -48,6 +58,8 @@ export class PrefixSumComputer { } public insertValues(insertIndex: number, values: number[]): void { + insertIndex = Math.floor(insertIndex); //@perf + if (values.length === 0) { return; } @@ -61,14 +73,19 @@ export class PrefixSumComputer { } private static _zeroArray(count: number): number[] { - var r: number[] = new Array(count); - for (var i = 0; i < count; i++) { + count = Math.floor(count); //@perf + + let r: number[] = []; + for (let i = 0; i < count; i++) { r[i] = 0; } return r; } public changeValue(index:number, value:number): void { + index = Math.floor(index); //@perf + value = Math.floor(value); //@perf + if (this.values[index] === value) { return; } @@ -79,6 +96,9 @@ export class PrefixSumComputer { } public removeValues(startIndex:number, cnt:number): void { + startIndex = Math.floor(startIndex); //@perf + cnt = Math.floor(cnt); //@perf + this.values.splice(startIndex, cnt); this.prefixSum.splice(startIndex, cnt); if (startIndex - 1 < this.prefixSumValidIndex) { @@ -94,6 +114,8 @@ export class PrefixSumComputer { } public getAccumulatedValue(index:number): number { + index = Math.floor(index); //@perf + if (index < 0) { return 0; } @@ -101,7 +123,7 @@ export class PrefixSumComputer { return this.prefixSum[index]; } - var startIndex = this.prefixSumValidIndex + 1; + let startIndex = this.prefixSumValidIndex + 1; if (startIndex === 0) { this.prefixSum[0] = this.values[0]; startIndex++; @@ -111,19 +133,21 @@ export class PrefixSumComputer { index = this.values.length - 1; } - for (var i = startIndex; i <= index; i++) { + for (let i = startIndex; i <= index; i++) { this.prefixSum[i] = this.prefixSum[i - 1] + this.values[i]; } this.prefixSumValidIndex = Math.max(this.prefixSumValidIndex, index); return this.prefixSum[index]; } - public getIndexOf(accumulatedValue:number, result:IPrefixSumIndexOfResult): void { - var low = 0, - high = this.values.length - 1, - mid:number, - midStart:number, - midStop:number; + public getIndexOf(accumulatedValue:number): PrefixSumIndexOfResult { + accumulatedValue = Math.floor(accumulatedValue); //@perf + + let low = 0; + let high = this.values.length - 1; + let mid:number; + let midStop:number; + let midStart:number; while (low <= high) { mid = low + ( (high-low)/2 ) | 0; @@ -140,7 +164,6 @@ export class PrefixSumComputer { } } - result.index = mid; - result.remainder = accumulatedValue - midStart; + return new PrefixSumIndexOfResult(mid, accumulatedValue - midStart); } -} \ No newline at end of file +} diff --git a/src/vs/editor/common/viewModel/splitLinesCollection.ts b/src/vs/editor/common/viewModel/splitLinesCollection.ts index 785588fc3a74744abba4b300b7bd10066bcd0df5..5ca1036a87d7f7f693bdef0fe8ae7d97cf43169a 100644 --- a/src/vs/editor/common/viewModel/splitLinesCollection.ts +++ b/src/vs/editor/common/viewModel/splitLinesCollection.ts @@ -8,32 +8,31 @@ import {Position} from 'vs/editor/common/core/position'; import {Range} from 'vs/editor/common/core/range'; import * as editorCommon from 'vs/editor/common/editorCommon'; import {FilteredLineTokens, IdentityFilteredLineTokens} from 'vs/editor/common/viewModel/filteredLineTokens'; -import {IPrefixSumIndexOfResult, PrefixSumComputer} from 'vs/editor/common/viewModel/prefixSumComputer'; +import {PrefixSumComputer} from 'vs/editor/common/viewModel/prefixSumComputer'; import {ILinesCollection} from 'vs/editor/common/viewModel/viewModel'; -export interface IOutputPosition { +export class OutputPosition { + _outputPositionTrait: void; outputLineIndex: number; outputOffset: number; + + constructor(outputLineIndex: number, outputOffset: number) { + this.outputLineIndex = outputLineIndex; + this.outputOffset = outputOffset; + } } export interface ILineMapping { getOutputLineCount(): number; getWrappedLinesIndent(): string; getInputOffsetOfOutputPosition(outputLineIndex:number, outputOffset:number): number; - getOutputPositionOfInputOffset(inputOffset:number, result:IOutputPosition): void; + getOutputPositionOfInputOffset(inputOffset:number): OutputPosition; } export interface ILineMapperFactory { createLineMapping(lineText: string, tabSize: number, wrappingColumn: number, columnsForFullWidthChar:number, wrappingIndent:editorCommon.WrappingIndent): ILineMapping; } - - -var tmpOutputPosition:IOutputPosition = { - outputLineIndex: 0, - outputOffset: 0 -}; - export interface IModel { getLineTokens(lineNumber:number, inaccurateTokensAcceptable?:boolean): editorCommon.ILineTokens; getLineContent(lineNumber:number): string; @@ -166,9 +165,9 @@ export class SplitLine implements ISplitLine { if (!this._isVisible) { throw new Error('Not supported'); } - var startOffset = this.getInputStartOffsetOfOutputLineIndex(outputLineIndex); - var endOffset = this.getInputEndOffsetOfOutputLineIndex(model, myLineNumber, outputLineIndex); - var r = model.getLineContent(myLineNumber).substring(startOffset, endOffset); + let startOffset = this.getInputStartOffsetOfOutputLineIndex(outputLineIndex); + let endOffset = this.getInputEndOffsetOfOutputLineIndex(model, myLineNumber, outputLineIndex); + let r = model.getLineContent(myLineNumber).substring(startOffset, endOffset); if (outputLineIndex > 0) { r = this.wrappedIndent + r; @@ -199,9 +198,9 @@ export class SplitLine implements ISplitLine { if (!this._isVisible) { throw new Error('Not supported'); } - var startOffset = this.getInputStartOffsetOfOutputLineIndex(outputLineIndex); - var endOffset = this.getInputEndOffsetOfOutputLineIndex(model, myLineNumber, outputLineIndex); - var deltaStartIndex = 0; + let startOffset = this.getInputStartOffsetOfOutputLineIndex(outputLineIndex); + let endOffset = this.getInputEndOffsetOfOutputLineIndex(model, myLineNumber, outputLineIndex); + let deltaStartIndex = 0; if (outputLineIndex > 0) { deltaStartIndex = this.wrappedIndentLength; } @@ -212,7 +211,7 @@ export class SplitLine implements ISplitLine { if (!this._isVisible) { throw new Error('Not supported'); } - var adjustedColumn = outputColumn - 1; + let adjustedColumn = outputColumn - 1; if (outputLineIndex > 0) { if (adjustedColumn < this.wrappedIndentLength) { adjustedColumn = 0; @@ -227,9 +226,9 @@ export class SplitLine implements ISplitLine { if (!this._isVisible) { throw new Error('Not supported'); } - this.positionMapper.getOutputPositionOfInputOffset(inputColumn - 1, tmpOutputPosition); - var outputLineIndex = tmpOutputPosition.outputLineIndex; - var outputColumn = tmpOutputPosition.outputOffset + 1; + let r = this.positionMapper.getOutputPositionOfInputOffset(inputColumn - 1); + let outputLineIndex = r.outputLineIndex; + let outputColumn = r.outputOffset + 1; if (outputLineIndex > 0) { outputColumn += this.wrappedIndentLength; @@ -241,7 +240,7 @@ export class SplitLine implements ISplitLine { } function createSplitLine(linePositionMapperFactory:ILineMapperFactory, text:string, tabSize:number, wrappingColumn:number, columnsForFullWidthChar:number, wrappingIndent:editorCommon.WrappingIndent, isVisible: boolean): ISplitLine { - var positionMapper = linePositionMapperFactory.createLineMapping(text, tabSize, wrappingColumn, columnsForFullWidthChar, wrappingIndent); + let positionMapper = linePositionMapperFactory.createLineMapping(text, tabSize, wrappingColumn, columnsForFullWidthChar, wrappingIndent); if (positionMapper === null) { // No mapping needed return new IdentitySplitLine(isVisible); @@ -263,7 +262,6 @@ export class SplitLinesCollection implements ILinesCollection { private prefixSumComputer:PrefixSumComputer; private linePositionMapperFactory:ILineMapperFactory; - private tmpIndexOfResult: IPrefixSumIndexOfResult; private hiddenAreasIds:string[]; constructor(model:editorCommon.IModel, linePositionMapperFactory:ILineMapperFactory, tabSize:number, wrappingColumn:number, columnsForFullWidthChar:number, wrappingIndent:editorCommon.WrappingIndent) { @@ -276,11 +274,6 @@ export class SplitLinesCollection implements ILinesCollection { this.linePositionMapperFactory = linePositionMapperFactory; this._constructLines(true); - - this.tmpIndexOfResult = { - index: 0, - remainder: 0 - }; } public dispose(): void { @@ -288,7 +281,7 @@ export class SplitLinesCollection implements ILinesCollection { } private _ensureValidState(): void { - var modelVersion = this.model.getVersionId(); + let modelVersion = this.model.getVersionId(); if (modelVersion !== this._validModelVersionId) { throw new Error('SplitLinesCollection: attempt to access a \'newer\' model'); } @@ -488,13 +481,13 @@ export class SplitLinesCollection implements ILinesCollection { } this._validModelVersionId = versionId; - var outputFromLineNumber = (fromLineNumber === 1 ? 1 : this.prefixSumComputer.getAccumulatedValue(fromLineNumber - 2) + 1); - var outputToLineNumber = this.prefixSumComputer.getAccumulatedValue(toLineNumber - 1); + let outputFromLineNumber = (fromLineNumber === 1 ? 1 : this.prefixSumComputer.getAccumulatedValue(fromLineNumber - 2) + 1); + let outputToLineNumber = this.prefixSumComputer.getAccumulatedValue(toLineNumber - 1); this.lines.splice(fromLineNumber - 1, toLineNumber - fromLineNumber + 1); this.prefixSumComputer.removeValues(fromLineNumber - 1, toLineNumber - fromLineNumber + 1); - var e:editorCommon.IViewLinesDeletedEvent = { + let e:editorCommon.IViewLinesDeletedEvent = { fromLineNumber: outputFromLineNumber, toLineNumber: outputToLineNumber }; @@ -507,30 +500,27 @@ export class SplitLinesCollection implements ILinesCollection { } this._validModelVersionId = versionId; - var hiddenAreas = this.getHiddenAreas(); - var isInHiddenArea = false; - var testPosition = new Position(fromLineNumber, 1); - for (var i = 0; i < hiddenAreas.length; i++) { + let hiddenAreas = this.getHiddenAreas(); + let isInHiddenArea = false; + let testPosition = new Position(fromLineNumber, 1); + for (let i = 0; i < hiddenAreas.length; i++) { if (hiddenAreas[i].containsPosition(testPosition)) { isInHiddenArea = true; break; } } - var outputFromLineNumber = (fromLineNumber === 1 ? 1 : this.prefixSumComputer.getAccumulatedValue(fromLineNumber - 2) + 1); - - var line: ISplitLine, - outputLineCount: number, - totalOutputLineCount = 0; + let outputFromLineNumber = (fromLineNumber === 1 ? 1 : this.prefixSumComputer.getAccumulatedValue(fromLineNumber - 2) + 1); - var insertLines: ISplitLine[] = [], - insertPrefixSumValues: number[] = []; + let totalOutputLineCount = 0; + let insertLines: ISplitLine[] = []; + let insertPrefixSumValues: number[] = []; - for (var i = 0, len = text.length; i < len; i++) { - var line = createSplitLine(this.linePositionMapperFactory, text[i], this.tabSize, this.wrappingColumn, this.columnsForFullWidthChar, this.wrappingIndent, !isInHiddenArea); + for (let i = 0, len = text.length; i < len; i++) { + let line = createSplitLine(this.linePositionMapperFactory, text[i], this.tabSize, this.wrappingColumn, this.columnsForFullWidthChar, this.wrappingIndent, !isInHiddenArea); insertLines.push(line); - outputLineCount = line.getOutputLineCount(); + let outputLineCount = line.getOutputLineCount(); totalOutputLineCount += outputLineCount; insertPrefixSumValues.push(outputLineCount); } @@ -539,7 +529,7 @@ export class SplitLinesCollection implements ILinesCollection { this.prefixSumComputer.insertValues(fromLineNumber - 1, insertPrefixSumValues); - var e:editorCommon.IViewLinesInsertedEvent = { + let e:editorCommon.IViewLinesInsertedEvent = { fromLineNumber: outputFromLineNumber, toLineNumber: outputFromLineNumber + totalOutputLineCount - 1 }; @@ -551,21 +541,21 @@ export class SplitLinesCollection implements ILinesCollection { return; } this._validModelVersionId = versionId; - var lineIndex = lineNumber - 1; + let lineIndex = lineNumber - 1; - var oldOutputLineCount = this.lines[lineIndex].getOutputLineCount(); - var isVisible = this.lines[lineIndex].isVisible(); - var line = createSplitLine(this.linePositionMapperFactory, newText, this.tabSize, this.wrappingColumn, this.columnsForFullWidthChar, this.wrappingIndent, isVisible); + let oldOutputLineCount = this.lines[lineIndex].getOutputLineCount(); + let isVisible = this.lines[lineIndex].isVisible(); + let line = createSplitLine(this.linePositionMapperFactory, newText, this.tabSize, this.wrappingColumn, this.columnsForFullWidthChar, this.wrappingIndent, isVisible); this.lines[lineIndex] = line; - var newOutputLineCount = this.lines[lineIndex].getOutputLineCount(); + let newOutputLineCount = this.lines[lineIndex].getOutputLineCount(); - var lineMappingChanged = false, - changeFrom = 0, - changeTo = -1, - insertFrom = 0, - insertTo = -1, - deleteFrom = 0, - deleteTo = -1; + let lineMappingChanged = false; + let changeFrom = 0; + let changeTo = -1; + let insertFrom = 0; + let insertTo = -1; + let deleteFrom = 0; + let deleteTo = -1; if (oldOutputLineCount > newOutputLineCount) { changeFrom = (lineNumber === 1 ? 1 : this.prefixSumComputer.getAccumulatedValue(lineNumber - 2) + 1); @@ -586,13 +576,12 @@ export class SplitLinesCollection implements ILinesCollection { this.prefixSumComputer.changeValue(lineIndex, newOutputLineCount); - var i:number, - e1:editorCommon.IViewLineChangedEvent, - e2:editorCommon.IViewLinesInsertedEvent, - e3:editorCommon.IViewLinesDeletedEvent; + let e1:editorCommon.IViewLineChangedEvent; + let e2:editorCommon.IViewLinesInsertedEvent; + let e3:editorCommon.IViewLinesDeletedEvent; if (changeFrom <= changeTo) { - for (var i = changeFrom; i <= changeTo; i++) { + for (let i = changeFrom; i <= changeTo; i++) { e1 = { lineNumber: i }; @@ -636,9 +625,9 @@ export class SplitLinesCollection implements ILinesCollection { public getOutputLineContent(outputLineNumber: number): string { this._ensureValidState(); outputLineNumber = this._toValidOutputLineNumber(outputLineNumber); - this.prefixSumComputer.getIndexOf(outputLineNumber - 1, this.tmpIndexOfResult); - var lineIndex = this.tmpIndexOfResult.index; - var remainder = this.tmpIndexOfResult.remainder; + let r = this.prefixSumComputer.getIndexOf(outputLineNumber - 1); + let lineIndex = r.index; + let remainder = r.remainder; return this.lines[lineIndex].getOutputLineContent(this.model, lineIndex + 1, remainder); } @@ -646,9 +635,9 @@ export class SplitLinesCollection implements ILinesCollection { public getOutputLineMinColumn(outputLineNumber:number): number { this._ensureValidState(); outputLineNumber = this._toValidOutputLineNumber(outputLineNumber); - this.prefixSumComputer.getIndexOf(outputLineNumber - 1, this.tmpIndexOfResult); - var lineIndex = this.tmpIndexOfResult.index; - var remainder = this.tmpIndexOfResult.remainder; + let r = this.prefixSumComputer.getIndexOf(outputLineNumber - 1); + let lineIndex = r.index; + let remainder = r.remainder; return this.lines[lineIndex].getOutputLineMinColumn(this.model, lineIndex + 1, remainder); } @@ -656,9 +645,9 @@ export class SplitLinesCollection implements ILinesCollection { public getOutputLineMaxColumn(outputLineNumber: number): number { this._ensureValidState(); outputLineNumber = this._toValidOutputLineNumber(outputLineNumber); - this.prefixSumComputer.getIndexOf(outputLineNumber - 1, this.tmpIndexOfResult); - var lineIndex = this.tmpIndexOfResult.index; - var remainder = this.tmpIndexOfResult.remainder; + let r = this.prefixSumComputer.getIndexOf(outputLineNumber - 1); + let lineIndex = r.index; + let remainder = r.remainder; return this.lines[lineIndex].getOutputLineMaxColumn(this.model, lineIndex + 1, remainder); } @@ -666,9 +655,9 @@ export class SplitLinesCollection implements ILinesCollection { public getOutputLineTokens(outputLineNumber: number, inaccurateTokensAcceptable: boolean): editorCommon.IViewLineTokens { this._ensureValidState(); outputLineNumber = this._toValidOutputLineNumber(outputLineNumber); - this.prefixSumComputer.getIndexOf(outputLineNumber - 1, this.tmpIndexOfResult); - var lineIndex = this.tmpIndexOfResult.index; - var remainder = this.tmpIndexOfResult.remainder; + let r = this.prefixSumComputer.getIndexOf(outputLineNumber - 1); + let lineIndex = r.index; + let remainder = r.remainder; return this.lines[lineIndex].getOutputLineTokens(this.model, lineIndex + 1, remainder, inaccurateTokensAcceptable); } @@ -677,11 +666,11 @@ export class SplitLinesCollection implements ILinesCollection { this._ensureValidState(); viewLineNumber = this._toValidOutputLineNumber(viewLineNumber); - this.prefixSumComputer.getIndexOf(viewLineNumber - 1, this.tmpIndexOfResult); - var lineIndex = this.tmpIndexOfResult.index; - var remainder = this.tmpIndexOfResult.remainder; + let r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1); + let lineIndex = r.index; + let remainder = r.remainder; - var inputColumn = this.lines[lineIndex].getInputColumnOfOutputPosition(remainder, viewColumn); + let inputColumn = this.lines[lineIndex].getInputColumnOfOutputPosition(remainder, viewColumn); // console.log('out -> in ' + viewLineNumber + ',' + viewColumn + ' ===> ' + (lineIndex+1) + ',' + inputColumn); return this.model.validatePosition(new Position(lineIndex+1, inputColumn)); } @@ -703,9 +692,9 @@ export class SplitLinesCollection implements ILinesCollection { // console.log('in -> out ' + inputLineNumber + ',' + inputColumn + ' ===> ' + 1 + ',' + 1); return new Position(1, 1); } - var deltaLineNumber = 1 + (lineIndex === 0 ? 0 : this.prefixSumComputer.getAccumulatedValue(lineIndex - 1)); + let deltaLineNumber = 1 + (lineIndex === 0 ? 0 : this.prefixSumComputer.getAccumulatedValue(lineIndex - 1)); - var r:editorCommon.IEditorPosition; + let r:editorCommon.IEditorPosition; if (lineIndexChanged) { r = this.lines[lineIndex].getOutputPositionOfInputPosition(deltaLineNumber, this.model.getLineMaxColumn(lineIndex + 1)); } else { diff --git a/src/vs/editor/test/common/viewModel/characterHardWrappingLineMapper.test.ts b/src/vs/editor/test/common/viewModel/characterHardWrappingLineMapper.test.ts index 4bbbdb7a99eb2d519dc364ecfc993ce7efbbc4a3..7f9ce7f6cda1260fa8ef1c1a0a9e289dc53c1ba2 100644 --- a/src/vs/editor/test/common/viewModel/characterHardWrappingLineMapper.test.ts +++ b/src/vs/editor/test/common/viewModel/characterHardWrappingLineMapper.test.ts @@ -7,7 +7,7 @@ import * as assert from 'assert'; import {WrappingIndent} from 'vs/editor/common/editorCommon'; import {CharacterHardWrappingLineMapperFactory} from 'vs/editor/common/viewModel/characterHardWrappingLineMapper'; -import {ILineMapperFactory, ILineMapping, IOutputPosition} from 'vs/editor/common/viewModel/splitLinesCollection'; +import {ILineMapperFactory, ILineMapping, OutputPosition} from 'vs/editor/common/viewModel/splitLinesCollection'; function safeGetOutputLineCount(mapper:ILineMapping): number { if (!mapper) { @@ -16,13 +16,11 @@ function safeGetOutputLineCount(mapper:ILineMapping): number { return mapper.getOutputLineCount(); } -function safeGetOutputPositionOfInputOffset(mapper:ILineMapping, inputOffset:number, result:IOutputPosition): void { +function safeGetOutputPositionOfInputOffset(mapper:ILineMapping, inputOffset:number): OutputPosition { if (!mapper) { - result.outputLineIndex = 0; - result.outputOffset = inputOffset; - return; + return new OutputPosition(0, inputOffset); } - mapper.getOutputPositionOfInputOffset(inputOffset, result); + return mapper.getOutputPositionOfInputOffset(inputOffset); } function safeGetInputOffsetOfOutputPosition(mapper:ILineMapping, outputLineIndex:number, outputOffset:number): number { @@ -34,26 +32,21 @@ function safeGetInputOffsetOfOutputPosition(mapper:ILineMapping, outputLineIndex function assertMappingIdentity(mapper:ILineMapping, offset:number, expectedLineIndex:number) { - var result = { - outputLineIndex: -1, - outputOffset: -1 - }; - - safeGetOutputPositionOfInputOffset(mapper, offset, result); + let result = safeGetOutputPositionOfInputOffset(mapper, offset); assert.ok(result.outputLineIndex !== -1); assert.ok(result.outputOffset !== -1); assert.equal(result.outputLineIndex, expectedLineIndex); - var actualOffset = safeGetInputOffsetOfOutputPosition(mapper, result.outputLineIndex, result.outputOffset); + let actualOffset = safeGetInputOffsetOfOutputPosition(mapper, result.outputLineIndex, result.outputOffset); assert.equal(actualOffset, offset); } function assertLineMapping(factory:ILineMapperFactory, tabSize:number, breakAfter:number, annotatedText:string) { - var rawText = ''; - var currentLineIndex = 0; - var lineIndices:number[] = []; - for (var i = 0, len = annotatedText.length; i < len; i++) { + let rawText = ''; + let currentLineIndex = 0; + let lineIndices:number[] = []; + for (let i = 0, len = annotatedText.length; i < len; i++) { if (annotatedText.charAt(i) === '|') { currentLineIndex++; } else { @@ -62,10 +55,10 @@ function assertLineMapping(factory:ILineMapperFactory, tabSize:number, breakAfte } } - var mapper = factory.createLineMapping(rawText, tabSize, breakAfter, 1, WrappingIndent.None); + let mapper = factory.createLineMapping(rawText, tabSize, breakAfter, 1, WrappingIndent.None); assert.equal(safeGetOutputLineCount(mapper), (lineIndices.length > 0 ? lineIndices[lineIndices.length - 1] + 1 : 1)); - for (var i = 0, len = rawText.length; i < len; i++) { + for (let i = 0, len = rawText.length; i < len; i++) { assertMappingIdentity(mapper, i, lineIndices[i]); } } @@ -73,7 +66,7 @@ function assertLineMapping(factory:ILineMapperFactory, tabSize:number, breakAfte suite('Editor ViewModel - CharacterHardWrappingLineMapper', () => { test('CharacterHardWrappingLineMapper', () => { - var factory = new CharacterHardWrappingLineMapperFactory('(', ')', '.'); + let factory = new CharacterHardWrappingLineMapperFactory('(', ')', '.'); // Empty string assertLineMapping(factory, 4, 5, ''); diff --git a/src/vs/editor/test/common/viewModel/prefixSumComputer.test.ts b/src/vs/editor/test/common/viewModel/prefixSumComputer.test.ts index 71647f9883a0a43c5cd266bac34c1bee2994c7dc..0ce599e7fca1dff81598eebde30f726b5aab5f27 100644 --- a/src/vs/editor/test/common/viewModel/prefixSumComputer.test.ts +++ b/src/vs/editor/test/common/viewModel/prefixSumComputer.test.ts @@ -5,15 +5,12 @@ 'use strict'; import * as assert from 'assert'; -import {IPrefixSumIndexOfResult, PrefixSumComputer} from 'vs/editor/common/viewModel/prefixSumComputer'; +import {PrefixSumComputer, PrefixSumIndexOfResult} from 'vs/editor/common/viewModel/prefixSumComputer'; suite('Editor ViewModel - PrefixSumComputer', () => { test('PrefixSumComputer', () => { - var indexOfResult:IPrefixSumIndexOfResult = { - index: 0, - remainder: 0 - }; + let indexOfResult:PrefixSumIndexOfResult; var psc = new PrefixSumComputer([1, 1, 2, 1, 3]); assert.equal(psc.getTotalValue(), 8); @@ -23,31 +20,31 @@ suite('Editor ViewModel - PrefixSumComputer', () => { assert.equal(psc.getAccumulatedValue(2), 4); assert.equal(psc.getAccumulatedValue(3), 5); assert.equal(psc.getAccumulatedValue(4), 8); - psc.getIndexOf(0, indexOfResult); + indexOfResult = psc.getIndexOf(0); assert.equal(indexOfResult.index, 0); assert.equal(indexOfResult.remainder, 0); - psc.getIndexOf(1, indexOfResult); + indexOfResult = psc.getIndexOf(1); assert.equal(indexOfResult.index, 1); assert.equal(indexOfResult.remainder, 0); - psc.getIndexOf(2, indexOfResult); + indexOfResult = psc.getIndexOf(2); assert.equal(indexOfResult.index, 2); assert.equal(indexOfResult.remainder, 0); - psc.getIndexOf(3, indexOfResult); + indexOfResult = psc.getIndexOf(3); assert.equal(indexOfResult.index, 2); assert.equal(indexOfResult.remainder, 1); - psc.getIndexOf(4, indexOfResult); + indexOfResult = psc.getIndexOf(4); assert.equal(indexOfResult.index, 3); assert.equal(indexOfResult.remainder, 0); - psc.getIndexOf(5, indexOfResult); + indexOfResult = psc.getIndexOf(5); assert.equal(indexOfResult.index, 4); assert.equal(indexOfResult.remainder, 0); - psc.getIndexOf(6, indexOfResult); + indexOfResult = psc.getIndexOf(6); assert.equal(indexOfResult.index, 4); assert.equal(indexOfResult.remainder, 1); - psc.getIndexOf(7, indexOfResult); + indexOfResult = psc.getIndexOf(7); assert.equal(indexOfResult.index, 4); assert.equal(indexOfResult.remainder, 2); - psc.getIndexOf(8, indexOfResult); + indexOfResult = psc.getIndexOf(8); assert.equal(indexOfResult.index, 4); assert.equal(indexOfResult.remainder, 3); @@ -68,28 +65,28 @@ suite('Editor ViewModel - PrefixSumComputer', () => { assert.equal(psc.getAccumulatedValue(2), 3); assert.equal(psc.getAccumulatedValue(3), 4); assert.equal(psc.getAccumulatedValue(4), 7); - psc.getIndexOf(0, indexOfResult); + indexOfResult = psc.getIndexOf(0); assert.equal(indexOfResult.index, 0); assert.equal(indexOfResult.remainder, 0); - psc.getIndexOf(1, indexOfResult); + indexOfResult = psc.getIndexOf(1); assert.equal(indexOfResult.index, 2); assert.equal(indexOfResult.remainder, 0); - psc.getIndexOf(2, indexOfResult); + indexOfResult = psc.getIndexOf(2); assert.equal(indexOfResult.index, 2); assert.equal(indexOfResult.remainder, 1); - psc.getIndexOf(3, indexOfResult); + indexOfResult = psc.getIndexOf(3); assert.equal(indexOfResult.index, 3); assert.equal(indexOfResult.remainder, 0); - psc.getIndexOf(4, indexOfResult); + indexOfResult = psc.getIndexOf(4); assert.equal(indexOfResult.index, 4); assert.equal(indexOfResult.remainder, 0); - psc.getIndexOf(5, indexOfResult); + indexOfResult = psc.getIndexOf(5); assert.equal(indexOfResult.index, 4); assert.equal(indexOfResult.remainder, 1); - psc.getIndexOf(6, indexOfResult); + indexOfResult = psc.getIndexOf(6); assert.equal(indexOfResult.index, 4); assert.equal(indexOfResult.remainder, 2); - psc.getIndexOf(7, indexOfResult); + indexOfResult = psc.getIndexOf(7); assert.equal(indexOfResult.index, 4); assert.equal(indexOfResult.remainder, 3); @@ -101,22 +98,22 @@ suite('Editor ViewModel - PrefixSumComputer', () => { assert.equal(psc.getAccumulatedValue(2), 1); assert.equal(psc.getAccumulatedValue(3), 2); assert.equal(psc.getAccumulatedValue(4), 5); - psc.getIndexOf(0, indexOfResult); + indexOfResult = psc.getIndexOf(0); assert.equal(indexOfResult.index, 0); assert.equal(indexOfResult.remainder, 0); - psc.getIndexOf(1, indexOfResult); + indexOfResult = psc.getIndexOf(1); assert.equal(indexOfResult.index, 3); assert.equal(indexOfResult.remainder, 0); - psc.getIndexOf(2, indexOfResult); + indexOfResult = psc.getIndexOf(2); assert.equal(indexOfResult.index, 4); assert.equal(indexOfResult.remainder, 0); - psc.getIndexOf(3, indexOfResult); + indexOfResult = psc.getIndexOf(3); assert.equal(indexOfResult.index, 4); assert.equal(indexOfResult.remainder, 1); - psc.getIndexOf(4, indexOfResult); + indexOfResult = psc.getIndexOf(4); assert.equal(indexOfResult.index, 4); assert.equal(indexOfResult.remainder, 2); - psc.getIndexOf(5, indexOfResult); + indexOfResult = psc.getIndexOf(5); assert.equal(indexOfResult.index, 4); assert.equal(indexOfResult.remainder, 3); @@ -128,19 +125,19 @@ suite('Editor ViewModel - PrefixSumComputer', () => { assert.equal(psc.getAccumulatedValue(2), 1); assert.equal(psc.getAccumulatedValue(3), 1); assert.equal(psc.getAccumulatedValue(4), 4); - psc.getIndexOf(0, indexOfResult); + indexOfResult = psc.getIndexOf(0); assert.equal(indexOfResult.index, 0); assert.equal(indexOfResult.remainder, 0); - psc.getIndexOf(1, indexOfResult); + indexOfResult = psc.getIndexOf(1); assert.equal(indexOfResult.index, 4); assert.equal(indexOfResult.remainder, 0); - psc.getIndexOf(2, indexOfResult); + indexOfResult = psc.getIndexOf(2); assert.equal(indexOfResult.index, 4); assert.equal(indexOfResult.remainder, 1); - psc.getIndexOf(3, indexOfResult); + indexOfResult = psc.getIndexOf(3); assert.equal(indexOfResult.index, 4); assert.equal(indexOfResult.remainder, 2); - psc.getIndexOf(4, indexOfResult); + indexOfResult = psc.getIndexOf(4); assert.equal(indexOfResult.index, 4); assert.equal(indexOfResult.remainder, 3); @@ -154,19 +151,19 @@ suite('Editor ViewModel - PrefixSumComputer', () => { assert.equal(psc.getAccumulatedValue(2), 2); assert.equal(psc.getAccumulatedValue(3), 3); assert.equal(psc.getAccumulatedValue(4), 4); - psc.getIndexOf(0, indexOfResult); + indexOfResult = psc.getIndexOf(0); assert.equal(indexOfResult.index, 0); assert.equal(indexOfResult.remainder, 0); - psc.getIndexOf(1, indexOfResult); + indexOfResult = psc.getIndexOf(1); assert.equal(indexOfResult.index, 1); assert.equal(indexOfResult.remainder, 0); - psc.getIndexOf(2, indexOfResult); + indexOfResult = psc.getIndexOf(2); assert.equal(indexOfResult.index, 3); assert.equal(indexOfResult.remainder, 0); - psc.getIndexOf(3, indexOfResult); + indexOfResult = psc.getIndexOf(3); assert.equal(indexOfResult.index, 4); assert.equal(indexOfResult.remainder, 0); - psc.getIndexOf(4, indexOfResult); + indexOfResult = psc.getIndexOf(4); assert.equal(indexOfResult.index, 4); assert.equal(indexOfResult.remainder, 1); }); diff --git a/src/vs/workbench/api/node/extHostDocuments.ts b/src/vs/workbench/api/node/extHostDocuments.ts index 3034ab02dc722fc78c80b64e1e90524908b5fd5f..0e2ed7fda70e5272351ba48c17b96fcf4bd8f2b0 100644 --- a/src/vs/workbench/api/node/extHostDocuments.ts +++ b/src/vs/workbench/api/node/extHostDocuments.ts @@ -8,7 +8,6 @@ import {toErrorMessage, onUnexpectedError} from 'vs/base/common/errors'; import {IEmitterEvent} from 'vs/base/common/eventEmitter'; import {IModelService} from 'vs/editor/common/services/modelService'; import * as EditorCommon from 'vs/editor/common/editorCommon'; -import {IPrefixSumIndexOfResult} from 'vs/editor/common/viewModel/prefixSumComputer'; import {MirrorModel2} from 'vs/editor/common/model/mirrorModel2'; import {Remotable, IThreadService} from 'vs/platform/thread/common/thread'; import Event, {Emitter} from 'vs/base/common/event'; @@ -378,8 +377,7 @@ export class ExtHostDocumentData extends MirrorModel2 { offset = Math.max(0, offset); this._ensureLineStarts(); - let out: IPrefixSumIndexOfResult = { index: 0, remainder: 0 }; - this._lineStarts.getIndexOf(offset, out); + let out = this._lineStarts.getIndexOf(offset); let lineLength = this._lines[out.index].length;