diff --git a/src/vs/editor/common/core/modeTransition.ts b/src/vs/editor/common/core/modeTransition.ts index 77cfa4b45b60fed765e3ab5bb782c25fed5f3e05..20e0c95080ec2f12ccbc78757fe45822c13fe1c7 100644 --- a/src/vs/editor/common/core/modeTransition.ts +++ b/src/vs/editor/common/core/modeTransition.ts @@ -7,17 +7,30 @@ import {IMode, IModeTransition} from 'vs/editor/common/modes'; import {Arrays} from 'vs/editor/common/core/arrays'; -export class ModeTransition { - _modeTransitionBrand: void; +export class ReducedModeTransition { + _reducedModeTransitionBrand: void; public startIndex:number; - public mode:IMode; public modeId: string; - constructor(startIndex:number, mode:IMode) { + constructor(startIndex:number, modeId:string) { this.startIndex = startIndex|0; + this.modeId = modeId; + } + + public static findIndexInSegmentsArray(arr:ReducedModeTransition[], desiredIndex: number): number { + return Arrays.findIndexInSegmentsArray(arr, desiredIndex); + } +} + +export class ModeTransition extends ReducedModeTransition { + _modeTransitionBrand: void; + + public mode:IMode; + + constructor(startIndex:number, mode:IMode) { + super(startIndex, mode.getId()); this.mode = mode; - this.modeId = mode.getId(); } public static findIndexInSegmentsArray(arr:ModeTransition[], desiredIndex: number): number { diff --git a/src/vs/editor/common/modes.ts b/src/vs/editor/common/modes.ts index b14485643e9a914501cb2b233f8e1a68df4aa985..7c909bfe0910125f3016fab69d990fd63ba6e2d2 100644 --- a/src/vs/editor/common/modes.ts +++ b/src/vs/editor/common/modes.ts @@ -10,7 +10,7 @@ import URI from 'vs/base/common/uri'; import {TPromise} from 'vs/base/common/winjs.base'; import {IFilter} from 'vs/base/common/filters'; import * as editorCommon from 'vs/editor/common/editorCommon'; -import {ModeTransition} from 'vs/editor/common/core/modeTransition'; +import {ReducedModeTransition} from 'vs/editor/common/core/modeTransition'; import LanguageFeatureRegistry from 'vs/editor/common/modes/languageFeatureRegistry'; import {CancellationToken} from 'vs/base/common/cancellation'; import {Position} from 'vs/editor/common/core/position'; @@ -170,7 +170,7 @@ export interface IModeDescriptor { export interface ILineContext { getLineContent(): string; - modeTransitions: ModeTransition[]; + modeTransitions: ReducedModeTransition[]; getTokenCount(): number; getTokenStartIndex(tokenIndex:number): number; diff --git a/src/vs/editor/common/modes/supports.ts b/src/vs/editor/common/modes/supports.ts index 0729035dda8e9a3d31d20dcf9fb20c8278ed58b8..20b7e0224a471e323ff40d0f6de477ee5b6ac106 100644 --- a/src/vs/editor/common/modes/supports.ts +++ b/src/vs/editor/common/modes/supports.ts @@ -6,7 +6,7 @@ import {TPromise} from 'vs/base/common/winjs.base'; import * as modes from 'vs/editor/common/modes'; -import {ModeTransition} from 'vs/editor/common/core/modeTransition'; +import {ModeTransition, ReducedModeTransition} from 'vs/editor/common/core/modeTransition'; export class Token implements modes.IToken { _tokenBrand: void; @@ -43,18 +43,18 @@ export class LineTokens implements modes.ILineTokens { } export function handleEvent(context:modes.ILineContext, offset:number, runner:(modeId:string, newContext:modes.ILineContext, offset:number)=>T):T { - var modeTransitions = context.modeTransitions; + let modeTransitions = context.modeTransitions; if (modeTransitions.length === 1) { return runner(modeTransitions[0].modeId, context, offset); } - var modeIndex = ModeTransition.findIndexInSegmentsArray(modeTransitions, offset); - var nestedMode = modeTransitions[modeIndex].mode; - var modeStartIndex = modeTransitions[modeIndex].startIndex; + let modeIndex = ReducedModeTransition.findIndexInSegmentsArray(modeTransitions, offset); + let nestedModeId = modeTransitions[modeIndex].modeId; + let modeStartIndex = modeTransitions[modeIndex].startIndex; - var firstTokenInModeIndex = context.findIndexOfOffset(modeStartIndex); - var nextCharacterAfterModeIndex = -1; - var nextTokenAfterMode = -1; + let firstTokenInModeIndex = context.findIndexOfOffset(modeStartIndex); + let nextCharacterAfterModeIndex = -1; + let nextTokenAfterMode = -1; if (modeIndex + 1 < modeTransitions.length) { nextTokenAfterMode = context.findIndexOfOffset(modeTransitions[modeIndex + 1].startIndex); nextCharacterAfterModeIndex = context.getTokenStartIndex(nextTokenAfterMode); @@ -63,14 +63,14 @@ export function handleEvent(context:modes.ILineContext, offset:number, runner nextCharacterAfterModeIndex = context.getLineContent().length; } - var firstTokenCharacterOffset = context.getTokenStartIndex(firstTokenInModeIndex); - var newCtx = new FilteredLineContext(context, nestedMode, firstTokenInModeIndex, nextTokenAfterMode, firstTokenCharacterOffset, nextCharacterAfterModeIndex); - return runner(nestedMode.getId(), newCtx, offset - firstTokenCharacterOffset); + let firstTokenCharacterOffset = context.getTokenStartIndex(firstTokenInModeIndex); + let newCtx = new FilteredLineContext(context, nestedModeId, firstTokenInModeIndex, nextTokenAfterMode, firstTokenCharacterOffset, nextCharacterAfterModeIndex); + return runner(nestedModeId, newCtx, offset - firstTokenCharacterOffset); } export class FilteredLineContext implements modes.ILineContext { - public modeTransitions: ModeTransition[]; + public modeTransitions: ReducedModeTransition[]; private _actual:modes.ILineContext; private _firstTokenInModeIndex:number; @@ -78,11 +78,11 @@ export class FilteredLineContext implements modes.ILineContext { private _firstTokenCharacterOffset:number; private _nextCharacterAfterModeIndex:number; - constructor(actual:modes.ILineContext, mode:modes.IMode, + constructor(actual:modes.ILineContext, modeId:string, firstTokenInModeIndex:number, nextTokenAfterMode:number, firstTokenCharacterOffset:number, nextCharacterAfterModeIndex:number) { - this.modeTransitions = [new ModeTransition(0, mode)]; + this.modeTransitions = [new ReducedModeTransition(0, modeId)]; this._actual = actual; this._firstTokenInModeIndex = firstTokenInModeIndex; this._nextTokenAfterMode = nextTokenAfterMode;