From 61ac3664919c5c5e7af75fa63eb700ed88c2d5bb Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Tue, 28 Nov 2017 12:12:40 -0800 Subject: [PATCH] Replace TokenizedBuffer.setVisible with simpler .startTokenizing We will still wait to tokenize a buffer until it is visible in *some* tab, but we no longer enable and disable tokenization as different editors become visible. --- spec/tokenized-buffer-spec.js | 14 +++++--------- src/text-editor.js | 10 +++++++--- src/tokenized-buffer.js | 10 +++++----- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/spec/tokenized-buffer-spec.js b/spec/tokenized-buffer-spec.js index 084f14e78..54601ba2d 100644 --- a/spec/tokenized-buffer-spec.js +++ b/spec/tokenized-buffer-spec.js @@ -23,12 +23,8 @@ describe('TokenizedBuffer', () => { tokenizedBuffer && tokenizedBuffer.destroy() }) - function startTokenizing (tokenizedBuffer) { - tokenizedBuffer.setVisible(true) - } - function fullyTokenize (tokenizedBuffer) { - tokenizedBuffer.setVisible(true) + tokenizedBuffer.startTokenizing() while (tokenizedBuffer.firstInvalidRow() != null) { advanceClock() } @@ -67,7 +63,7 @@ describe('TokenizedBuffer', () => { beforeEach(() => { buffer = atom.project.bufferForPathSync('sample.js') tokenizedBuffer = new TokenizedBuffer({buffer, config, config, grammar: atom.grammars.grammarForScopeName('source.js')}) - startTokenizing(tokenizedBuffer) + tokenizedBuffer.startTokenizing() }) it('stops tokenization', () => { @@ -83,7 +79,7 @@ describe('TokenizedBuffer', () => { buffer = atom.project.bufferForPathSync('sample.js') tokenizedBuffer = new TokenizedBuffer({buffer, config, grammar: atom.grammars.grammarForScopeName('source.js')}) buffer.setLanguageMode(tokenizedBuffer) - startTokenizing(tokenizedBuffer) + tokenizedBuffer.startTokenizing() }) afterEach(() => { @@ -298,7 +294,7 @@ describe('TokenizedBuffer', () => { buffer = atom.project.bufferForPathSync('sample-with-tabs.coffee') tokenizedBuffer = new TokenizedBuffer({buffer, config, grammar: atom.grammars.grammarForScopeName('source.coffee')}) - startTokenizing(tokenizedBuffer) + tokenizedBuffer.startTokenizing() }) afterEach(() => { @@ -445,7 +441,7 @@ describe('TokenizedBuffer', () => { const jsScopeStartId = grammar.startIdForScope(grammar.scopeName) const jsScopeEndId = grammar.endIdForScope(grammar.scopeName) - startTokenizing(tokenizedBuffer) + tokenizedBuffer.startTokenizing() expect(tokenizedBuffer.tokenizedLines[0]).toBeUndefined() expect(tokenizedBuffer.tokenizedLineForRow(0).text).toBe(line0) expect(tokenizedBuffer.tokenizedLineForRow(0).tags).toEqual([jsScopeStartId, line0.length, jsScopeEndId]) diff --git a/src/text-editor.js b/src/text-editor.js index 9f5c1f13b..c2b616ec2 100644 --- a/src/text-editor.js +++ b/src/text-editor.js @@ -953,8 +953,10 @@ class TextEditor { // Controls visibility based on the given {Boolean}. setVisible (visible) { - const languageMode = this.buffer.getLanguageMode() - languageMode.setVisible && languageMode.setVisible(visible) + if (visible) { + const languageMode = this.buffer.getLanguageMode() + if (languageMode.startTokenizing) languageMode.startTokenizing() + } } setMini (mini) { @@ -4130,7 +4132,9 @@ class TextEditor { } const languageMode = this.buffer.getLanguageMode() - if (languageMode.setVisible) languageMode.setVisible(this.component && this.component.visible) + if (this.component && this.component.visible && languageMode.startTokenizing) { + languageMode.startTokenizing() + } this.languageModeSubscription = languageMode.onDidTokenize && languageMode.onDidTokenize(() => { this.emitter.emit('did-tokenize') }) diff --git a/src/tokenized-buffer.js b/src/tokenized-buffer.js index 8f8c277a5..b29977616 100644 --- a/src/tokenized-buffer.js +++ b/src/tokenized-buffer.js @@ -23,7 +23,7 @@ class TokenizedBuffer { this.regexesByPattern = {} this.alive = true - this.visible = false + this.tokenizationStarted = false this.id = params.id != null ? params.id : nextId++ this.buffer = params.buffer this.largeFileMode = params.largeFileMode @@ -255,15 +255,15 @@ class TokenizedBuffer { } } - setVisible (visible) { - this.visible = visible - if (this.visible && this.grammar.name !== 'Null Grammar' && !this.largeFileMode) { + startTokenizing () { + this.tokenizationStarted = true + if (this.grammar.name !== 'Null Grammar' && !this.largeFileMode) { this.tokenizeInBackground() } } tokenizeInBackground () { - if (!this.visible || this.pendingChunk || !this.alive) return + if (!this.tokenizationStarted || this.pendingChunk || !this.alive) return this.pendingChunk = true _.defer(() => {