提交 94ccb584 编写于 作者: A Alex Dima

Use concrete types

上级 ba6f665c
...@@ -5,8 +5,8 @@ ...@@ -5,8 +5,8 @@
'use strict'; 'use strict';
import * as strings from 'vs/base/common/strings'; import * as strings from 'vs/base/common/strings';
import {ILineTokens, IReadOnlyLineMarker, ITokensInflatorMap} from 'vs/editor/common/editorCommon'; import {ILineTokens, IReadOnlyLineMarker, ITokensInflatorMap, LineToken} from 'vs/editor/common/editorCommon';
import {IMode, IModeTransition, IState, IToken} from 'vs/editor/common/modes'; import {IMode, IState} from 'vs/editor/common/modes';
import * as TokensBinaryEncoding from 'vs/editor/common/model/tokensBinaryEncoding'; import * as TokensBinaryEncoding from 'vs/editor/common/model/tokensBinaryEncoding';
import {ModeTransition} from 'vs/editor/common/core/modeTransition'; import {ModeTransition} from 'vs/editor/common/core/modeTransition';
...@@ -104,13 +104,6 @@ export class ModelLine { ...@@ -104,13 +104,6 @@ export class ModelLine {
// --- BEGIN MODE TRANSITIONS // --- BEGIN MODE TRANSITIONS
private _setModeTransitions(topLevelMode:IMode, modeTransitions:IModeTransition[]): void {
let desired = toModeTransitions(topLevelMode, modeTransitions);
this._modeTransitions = desired;
}
public getModeTransitions(topLevelMode:IMode): ModeTransition[] { public getModeTransitions(topLevelMode:IMode): ModeTransition[] {
if (this._modeTransitions) { if (this._modeTransitions) {
return this._modeTransitions; return this._modeTransitions;
...@@ -123,23 +116,13 @@ export class ModelLine { ...@@ -123,23 +116,13 @@ export class ModelLine {
// --- BEGIN TOKENS // --- BEGIN TOKENS
public setTokens(map: ITokensInflatorMap, tokens: IToken[], topLevelMode:IMode, modeTransitions:IModeTransition[]): void { public setTokens(map: ITokensInflatorMap, tokens: LineToken[], topLevelMode:IMode, modeTransitions:ModeTransition[]): void {
this._setLineTokensFromInflated(map, tokens); this._lineTokens = toLineTokensFromInflated(map, tokens, this._text.length);
this._setModeTransitions(topLevelMode, modeTransitions); this._modeTransitions = toModeTransitions(topLevelMode, modeTransitions);
}
private _setLineTokensFromInflated(map:ITokensInflatorMap, tokens:IToken[]): void {
let desired = toLineTokensFromInflated(map, tokens, this._text.length);
this._lineTokens = desired;
} }
private _setLineTokensFromDeflated(map:ITokensInflatorMap, tokens:number[]): void { private _setLineTokensFromDeflated(map:ITokensInflatorMap, tokens:number[]): void {
let desired = toLineTokensFromDeflated(map, tokens, this._text.length); this._lineTokens = toLineTokensFromDeflated(map, tokens, this._text.length);
this._lineTokens = desired;
} }
public getTokens(): ILineTokens { public getTokens(): ILineTokens {
...@@ -642,7 +625,7 @@ export class ModelLine { ...@@ -642,7 +625,7 @@ export class ModelLine {
} }
} }
function toLineTokensFromInflated(map:ITokensInflatorMap, tokens:IToken[], textLength:number): ILineTokens { function toLineTokensFromInflated(map:ITokensInflatorMap, tokens:LineToken[], textLength:number): ILineTokens {
if (textLength === 0) { if (textLength === 0) {
return null; return null;
} }
...@@ -683,7 +666,7 @@ export class LineTokens implements ILineTokens { ...@@ -683,7 +666,7 @@ export class LineTokens implements ILineTokens {
private map:ITokensInflatorMap; private map:ITokensInflatorMap;
private _tokens:number[]; private _tokens:number[];
constructor(map:ITokensInflatorMap, tokens:/*IToken[]|*/number[]) { constructor(map:ITokensInflatorMap, tokens:number[]) {
this.map = map; this.map = map;
this._tokens = tokens; this._tokens = tokens;
} }
...@@ -805,7 +788,7 @@ export class DefaultLineTokens implements ILineTokens { ...@@ -805,7 +788,7 @@ export class DefaultLineTokens implements ILineTokens {
} }
function toModeTransitions(topLevelMode:IMode, modeTransitions:IModeTransition[]): ModeTransition[] { function toModeTransitions(topLevelMode:IMode, modeTransitions:ModeTransition[]): ModeTransition[] {
if (!modeTransitions || modeTransitions.length === 0) { if (!modeTransitions || modeTransitions.length === 0) {
return null; return null;
...@@ -813,5 +796,5 @@ function toModeTransitions(topLevelMode:IMode, modeTransitions:IModeTransition[] ...@@ -813,5 +796,5 @@ function toModeTransitions(topLevelMode:IMode, modeTransitions:IModeTransition[]
return null; return null;
} }
return ModeTransition.create(modeTransitions); return modeTransitions;
} }
...@@ -18,7 +18,7 @@ import {ModelLine} from 'vs/editor/common/model/modelLine'; ...@@ -18,7 +18,7 @@ import {ModelLine} from 'vs/editor/common/model/modelLine';
import {TextModel} from 'vs/editor/common/model/textModel'; import {TextModel} from 'vs/editor/common/model/textModel';
import {WordHelper} from 'vs/editor/common/model/textModelWithTokensHelpers'; import {WordHelper} from 'vs/editor/common/model/textModelWithTokensHelpers';
import {TokenIterator} from 'vs/editor/common/model/tokenIterator'; import {TokenIterator} from 'vs/editor/common/model/tokenIterator';
import {ILineContext, ILineTokens, IMode, IState} from 'vs/editor/common/modes'; import {ILineContext, ILineTokens, IToken, IModeTransition, IMode, IState} from 'vs/editor/common/modes';
import {NullMode, NullState, nullTokenize} from 'vs/editor/common/modes/nullMode'; import {NullMode, NullState, nullTokenize} from 'vs/editor/common/modes/nullMode';
import {ignoreBracketsInToken} from 'vs/editor/common/modes/supports'; import {ignoreBracketsInToken} from 'vs/editor/common/modes/supports';
import {BracketsUtils} from 'vs/editor/common/modes/supports/richEditBrackets'; import {BracketsUtils} from 'vs/editor/common/modes/supports/richEditBrackets';
...@@ -535,8 +535,36 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke ...@@ -535,8 +535,36 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke
} }
} }
_updateLineTokens(lineIndex:number, map:editorCommon.ITokensInflatorMap, topLevelMode:IMode, r:ILineTokens): void { private static _toLineTokens(tokens:IToken[]): editorCommon.LineToken[] {
this._lines[lineIndex].setTokens(map, r.tokens, topLevelMode, r.modeTransitions); if (!tokens || tokens.length === 0) {
return [];
}
if (tokens[0] instanceof editorCommon.LineToken) {
return <editorCommon.LineToken[]>tokens;
}
let result:editorCommon.LineToken[] = [];
for (let i = 0, len = tokens.length; i < len; i++) {
result[i] = new editorCommon.LineToken(tokens[i].startIndex, tokens[i].type);
}
return result;
}
private static _toModeTransitions(modeTransitions:IModeTransition[]): ModeTransition[] {
if (!modeTransitions || modeTransitions.length === 0) {
return [];
}
if (modeTransitions[0] instanceof ModeTransition) {
return <ModeTransition[]>modeTransitions;
}
let result:ModeTransition[] = [];
for (let i = 0, len = modeTransitions.length; i < len; i++) {
result[i] = new ModeTransition(modeTransitions[i].startIndex, modeTransitions[i].mode);
}
return result;
}
private _updateLineTokens(lineIndex:number, map:editorCommon.ITokensInflatorMap, topLevelMode:IMode, r:ILineTokens): void {
this._lines[lineIndex].setTokens(map, TextModelWithTokens._toLineTokens(r.tokens), topLevelMode, TextModelWithTokens._toModeTransitions(r.modeTransitions));
} }
private _beginBackgroundTokenization(): void { private _beginBackgroundTokenization(): void {
......
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
import {onUnexpectedError} from 'vs/base/common/errors'; import {onUnexpectedError} from 'vs/base/common/errors';
import * as strings from 'vs/base/common/strings'; import * as strings from 'vs/base/common/strings';
import {ITokensInflatorMap, LineToken} from 'vs/editor/common/editorCommon'; import {ITokensInflatorMap, LineToken} from 'vs/editor/common/editorCommon';
import {IToken} from 'vs/editor/common/modes';
export var START_INDEX_MASK = 0xffffffff; export var START_INDEX_MASK = 0xffffffff;
export var TYPE_MASK = 0xffff; export var TYPE_MASK = 0xffff;
...@@ -20,7 +19,7 @@ var DEFLATED_TOKENS_EMPTY_TEXT:number[] = []; ...@@ -20,7 +19,7 @@ var DEFLATED_TOKENS_EMPTY_TEXT:number[] = [];
var INFLATED_TOKENS_NON_EMPTY_TEXT:LineToken[] = [DEFAULT_TOKEN]; var INFLATED_TOKENS_NON_EMPTY_TEXT:LineToken[] = [DEFAULT_TOKEN];
var DEFLATED_TOKENS_NON_EMPTY_TEXT:number[] = [0]; var DEFLATED_TOKENS_NON_EMPTY_TEXT:number[] = [0];
export function deflateArr(map:ITokensInflatorMap, tokens:IToken[]): number[] { export function deflateArr(map:ITokensInflatorMap, tokens:LineToken[]): number[] {
if (tokens.length === 0) { if (tokens.length === 0) {
return DEFLATED_TOKENS_EMPTY_TEXT; return DEFLATED_TOKENS_EMPTY_TEXT;
} }
...@@ -32,7 +31,7 @@ export function deflateArr(map:ITokensInflatorMap, tokens:IToken[]): number[] { ...@@ -32,7 +31,7 @@ export function deflateArr(map:ITokensInflatorMap, tokens:IToken[]): number[] {
len:number, len:number,
deflatedToken:number, deflatedToken:number,
deflated:number, deflated:number,
token:IToken, token:LineToken,
inflateMap = map._inflate, inflateMap = map._inflate,
deflateMap = map._deflate, deflateMap = map._deflate,
prevStartIndex:number = -1, prevStartIndex:number = -1,
...@@ -80,7 +79,7 @@ export function deflateArr(map:ITokensInflatorMap, tokens:IToken[]): number[] { ...@@ -80,7 +79,7 @@ export function deflateArr(map:ITokensInflatorMap, tokens:IToken[]): number[] {
return result; return result;
} }
export function inflate(map:ITokensInflatorMap, binaryEncodedToken:number): IToken { export function inflate(map:ITokensInflatorMap, binaryEncodedToken:number): LineToken {
if (binaryEncodedToken === 0) { if (binaryEncodedToken === 0) {
return DEFAULT_TOKEN; return DEFAULT_TOKEN;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册