diff --git a/src/vs/workbench/services/textMate/electron-browser/textMateWorker.ts b/src/vs/workbench/services/textMate/electron-browser/textMateWorker.ts index f52d1af496ee245fe18a101cb5d68b9b475baec9..a5c24f1d7f7d8448c5dc240c7114dfcaa1367d91 100644 --- a/src/vs/workbench/services/textMate/electron-browser/textMateWorker.ts +++ b/src/vs/workbench/services/textMate/electron-browser/textMateWorker.ts @@ -12,7 +12,7 @@ import { IModelChangedEvent, MirrorTextModel } from 'vs/editor/common/model/mirr import { TextMateWorkerHost } from 'vs/workbench/services/textMate/electron-browser/textMateService'; import { TokenizationStateStore } from 'vs/editor/common/model/textModelTokens'; import { IGrammar, StackElement, IRawTheme } from 'vscode-textmate'; -import { MultilineTokensBuilder } from 'vs/editor/common/model/tokensStore'; +import { MultilineTokensBuilder, countEOL } from 'vs/editor/common/model/tokensStore'; import { LineTokens } from 'vs/editor/common/core/lineTokens'; export interface IValidGrammarDefinitionDTO { @@ -64,6 +64,16 @@ class TextMateWorkerModel extends MirrorTextModel { this._resetTokenization(); } + onEvents(e: IModelChangedEvent): void { + super.onEvents(e); + for (let i = 0; i < e.changes.length; i++) { + const change = e.changes[i]; + const [eolCount] = countEOL(change.text); + this._tokenizationStateStore.applyEdits(change.range, eolCount); + } + this._ensureTokens(); + } + private _resetTokenization(): void { this._grammar = null; this._tokenizationStateStore.flush(null);