Only emit the tokenized event after the first full tokenization

This commit is contained in:
probablycorey
2014-05-28 15:56:08 -07:00
parent 2c60b0463e
commit 89dc5f26ad
2 changed files with 19 additions and 1 deletions

View File

@@ -398,6 +398,22 @@ describe "TokenizedBuffer", ->
tokenizedBuffer.on 'tokenized', tokenizedHandler
fullyTokenize(tokenizedBuffer)
expect(tokenizedHandler.callCount).toBe(1)
it "doesn't re-emit the `tokenized` event when a line is edited", ->
editor = null
tokenizedHandler = jasmine.createSpy("tokenized handler")
waitsForPromise ->
atom.project.open('sample.js').then (o) -> editor = o
runs ->
tokenizedBuffer = editor.displayBuffer.tokenizedBuffer
fullyTokenize(tokenizedBuffer)
tokenizedBuffer.on 'tokenized', tokenizedHandler
editor.getBuffer().insert([0, 0], "'")
fullyTokenize(tokenizedBuffer)
expect(tokenizedHandler).not.toHaveBeenCalled()
buffer = null
tokenizedBuffer = null
tokenizedHandler = jasmine.createSpy("tokenized handler")

View File

@@ -78,6 +78,7 @@ class TokenizedBuffer extends Model
@tokenizedLines = @buildPlaceholderTokenizedLinesForRows(0, @buffer.getLastRow())
@invalidRows = []
@invalidateRow(0)
@fullyTokenized = false
setVisible: (@visible) ->
@tokenizeInBackground() if @visible
@@ -127,7 +128,8 @@ class TokenizedBuffer extends Model
if @firstInvalidRow()?
@tokenizeInBackground()
else
@emit "tokenized"
@emit "tokenized" unless @fullyTokenized
@fullyTokenized = true
firstInvalidRow: ->
@invalidRows[0]