mirror of
https://github.com/atom/atom.git
synced 2026-01-23 05:48:10 -05:00
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.
This commit is contained in:
@@ -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])
|
||||
|
||||
@@ -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')
|
||||
})
|
||||
|
||||
@@ -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(() => {
|
||||
|
||||
Reference in New Issue
Block a user