Maintain change counts for debugging purposes

When we have an unexpected display-buffer or tokenized-buffer state,
we can include the change counts to make sure that every change to the
buffer has been processed by display-buffer and tokenized-buffer. If
they haven’t, there’s something wrong with our event ordering. If they
have, there’s a logic error somewhere else.
This commit is contained in:
Nathan Sobo
2015-07-09 01:39:08 -05:00
parent afa6c9a786
commit 4567601ae9
3 changed files with 17 additions and 2 deletions

View File

@@ -57,7 +57,7 @@
"space-pen": "3.8.2",
"stacktrace-parser": "0.1.1",
"temp": "0.8.1",
"text-buffer": "6.3.8",
"text-buffer": "6.3.9",
"theorist": "^1.0.2",
"typescript-simple": "1.0.0",
"underscore-plus": "^1.6.6",

View File

@@ -23,6 +23,7 @@ class DisplayBuffer extends Model
verticalScrollMargin: 2
horizontalScrollMargin: 6
scopedCharacterWidthsChangeCount: 0
changeCount: 0
constructor: ({tabLength, @editorWidthInChars, @tokenizedBuffer, buffer, ignoreInvisibles, @largeFileMode}={}) ->
super
@@ -800,6 +801,11 @@ class DisplayBuffer extends Model
foldCount: @findFoldMarkers().length
lastBufferRow: @buffer.getLastRow()
lastScreenRow: @getLastRow()
bufferRow: row
screenRow: screenRow
displayBufferChangeCount: @changeCount
tokenizedBufferChangeCount: @tokenizedBuffer.changeCount
bufferChangeCount: @buffer.changeCount
maxBufferColumn = screenLine.getMaxBufferColumn()
if screenLine.isSoftWrapped() and column > maxBufferColumn
@@ -898,6 +904,9 @@ class DisplayBuffer extends Model
screenColumn: column
maxScreenRow: @getLastRow()
screenLinesDefined: @screenLines.map (sl) -> sl?
displayBufferChangeCount: @changeCount
tokenizedBufferChangeCount: @tokenizedBuffer.changeCount
bufferChangeCount: @buffer.changeCount
}
throw error
@@ -1179,6 +1188,7 @@ class DisplayBuffer extends Model
@tokenizedBuffer.rootScopeDescriptor
handleTokenizedBufferChange: (tokenizedBufferChange) =>
@changeCount = @tokenizedBuffer.changeCount
{start, end, delta, bufferChange} = tokenizedBufferChange
@updateScreenLines(start, end + 1, delta, refreshMarkers: false)
@setScrollTop(Math.min(@getScrollTop(), @getMaxScrollTop())) if delta < 0

View File

@@ -23,6 +23,7 @@ class TokenizedBuffer extends Model
invalidRows: null
visible: false
configSettings: null
changeCount: 0
constructor: ({@buffer, @tabLength, @ignoreInvisibles, @largeFileMode}) ->
@emitter = new Emitter
@@ -229,6 +230,8 @@ class TokenizedBuffer extends Model
row + delta
handleBufferChange: (e) ->
@changeCount = @buffer.changeCount
{oldRange, newRange} = e
start = oldRange.start.row
end = oldRange.end.row
@@ -296,10 +299,12 @@ class TokenizedBuffer extends Model
# undefined. This should paper over the problem but we want to figure out
# what is happening:
tokenizedLine = @tokenizedLineForRow(row)
atom.assert tokenizedLine?, "TokenizedLine is defined", (error) =>
atom.assert tokenizedLine?, "TokenizedLine is undefined", (error) =>
error.metadata = {
row: row
rowCount: @tokenizedLines.length
tokenizedBufferChangeCount: @changeCount
bufferChangeCount: @buffer.changeCount
}
return false unless tokenizedLine?