From 50b01b4a4acc7d87f403a4d9e7484597898dddae Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Mon, 22 Jul 2019 10:05:02 +0200 Subject: [PATCH] Update tokens when the buffer changes --- .../textMate/electron-browser/textMateWorker.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/services/textMate/electron-browser/textMateWorker.ts b/src/vs/workbench/services/textMate/electron-browser/textMateWorker.ts index f52d1af496e..a5c24f1d7f7 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); -- GitLab