mirror of
https://github.com/atom/atom.git
synced 2026-01-24 14:28:14 -05:00
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:
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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?
|
||||
|
||||
Reference in New Issue
Block a user