mirror of
https://github.com/atom/atom.git
synced 2026-01-24 22:38:20 -05:00
Merge pull request #7813 from atom/ns-display-buffer-invariant-assertion
More consistency checks for DisplayBuffer and TokenizedBuffer
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
|
||||
@@ -1194,6 +1204,9 @@ class DisplayBuffer extends Model
|
||||
screenDelta = screenLines.length - (endScreenRow - startScreenRow)
|
||||
|
||||
_.spliceWithArray(@screenLines, startScreenRow, endScreenRow - startScreenRow, screenLines, 10000)
|
||||
|
||||
@checkScreenLinesInvariant()
|
||||
|
||||
@rowMap.spliceRegions(startBufferRow, endBufferRow - startBufferRow, regions)
|
||||
@findMaxLineLength(startScreenRow, endScreenRow, screenLines, screenDelta)
|
||||
|
||||
@@ -1313,6 +1326,20 @@ class DisplayBuffer extends Model
|
||||
else
|
||||
delete @overlayDecorationsById[decoration.id]
|
||||
|
||||
checkScreenLinesInvariant: ->
|
||||
return if @isSoftWrapped()
|
||||
return if _.size(@foldsByMarkerId) > 0
|
||||
|
||||
screenLinesCount = @screenLines.length
|
||||
tokenizedLinesCount = @tokenizedBuffer.getLineCount()
|
||||
bufferLinesCount = @buffer.getLineCount()
|
||||
|
||||
atom.assert screenLinesCount is tokenizedLinesCount, "Display buffer line count out of sync with tokenized buffer", (error) ->
|
||||
error.metadata = {screenLinesCount, tokenizedLinesCount, bufferLinesCount}
|
||||
|
||||
atom.assert screenLinesCount is bufferLinesCount, "Display buffer line count out of sync with buffer", (error) ->
|
||||
error.metadata = {screenLinesCount, tokenizedLinesCount, bufferLinesCount}
|
||||
|
||||
if Grim.includeDeprecatedAPIs
|
||||
DisplayBuffer.properties
|
||||
softWrapped: null
|
||||
|
||||
@@ -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