Simplify DisplayBuffer's change event handling

This commit is contained in:
Nathan Sobo
2012-11-15 14:16:28 -07:00
parent cf4e87103e
commit ea2e025400
2 changed files with 11 additions and 24 deletions

View File

@@ -65,7 +65,6 @@ describe "DisplayBuffer", ->
[[event]]= changeHandler.argsForCall
expect(event.oldRange).toEqual([[7, 0], [8, 20]])
expect(event.newRange).toEqual([[7, 0], [7, 47]])
expect(event.lineNumbersChanged).toBeTruthy()
describe "when the update causes a line to softwrap an additional time", ->
it "rewraps the line and emits a change event", ->
@@ -79,7 +78,6 @@ describe "DisplayBuffer", ->
[[event]] = changeHandler.argsForCall
expect(event.oldRange).toEqual([[7, 0], [8, 20]])
expect(event.newRange).toEqual([[7, 0], [9, 20]])
expect(event.lineNumbersChanged).toBeTruthy()
describe "when buffer lines are inserted", ->
it "inserts / updates wrapped lines and emits a change event", ->
@@ -93,7 +91,6 @@ describe "DisplayBuffer", ->
[event] = changeHandler.argsForCall[0]
expect(event.oldRange).toEqual([[7, 0], [8, 20]])
expect(event.newRange).toEqual([[7, 0], [10, 20]])
expect(event.lineNumbersChanged).toBeTruthy()
describe "when buffer lines are removed", ->
it "removes lines and emits a change event", ->
@@ -107,7 +104,6 @@ describe "DisplayBuffer", ->
[event] = changeHandler.argsForCall[0]
expect(event.oldRange).toEqual([[3, 0], [9, 5]])
expect(event.newRange).toEqual([[3, 0], [3, 22]])
expect(event.lineNumbersChanged).toBeTruthy()
describe "position translation", ->
it "translates positions accounting for wrapped lines", ->
@@ -142,7 +138,6 @@ describe "DisplayBuffer", ->
[event] = changeHandler.argsForCall[0]
expect(event.oldRange).toEqual([[0, 0], [15, 2]])
expect(event.newRange).toEqual([[0, 0], [18, 2]])
expect(event.lineNumbersChanged).toBeTruthy()
describe "structural folding", ->
describe ".unfoldAll()", ->
@@ -237,7 +232,6 @@ describe "DisplayBuffer", ->
[event] = changeHandler.argsForCall[0]
expect(event.oldRange).toEqual [[4, 0], [7, 1]]
expect(event.newRange).toEqual [[4, 0], [4, 101]]
expect(event.lineNumbersChanged).toBeTruthy()
changeHandler.reset()
fold.destroy()
@@ -251,7 +245,6 @@ describe "DisplayBuffer", ->
[[event]] = changeHandler.argsForCall
expect(event.oldRange).toEqual [[4, 0], [4, 101]]
expect(event.newRange).toEqual [[4, 0], [7, 1]]
expect(event.lineNumbersChanged).toBeTruthy()
describe "when a fold spans a single line", ->
it "renders a fold placeholder for the folded line but does not skip any lines", ->
@@ -270,7 +263,6 @@ describe "DisplayBuffer", ->
# Line numbers don't actually change, but it's not worth the complexity to have this
# be false for single line folds since they are so rare
expect(event.lineNumbersChanged).toBeTruthy()
changeHandler.reset()
fold.destroy()
@@ -285,7 +277,6 @@ describe "DisplayBuffer", ->
[[event]] = changeHandler.argsForCall
expect(event.oldRange).toEqual [[4, 0], [4, 101]]
expect(event.newRange).toEqual [[4, 0], [4, 101]]
expect(event.lineNumbersChanged).toBeTruthy()
changeHandler.reset()
describe "when a fold is nested within another fold", ->
@@ -368,7 +359,6 @@ describe "DisplayBuffer", ->
[[event]] = changeHandler.argsForCall
expect(event.oldRange).toEqual [[1, 0], [3, 1]]
expect(event.newRange).toEqual [[1, 0], [1, 6]]
expect(event.lineNumbersChanged).toBeTruthy()
describe "when the old range surrounds two nested folds", ->
it "removes both folds and replaces the selection with the new text", ->
@@ -385,7 +375,6 @@ describe "DisplayBuffer", ->
[[event]] = changeHandler.argsForCall
expect(event.oldRange).toEqual [[1, 0], [3, 2]]
expect(event.newRange).toEqual [[1, 0], [1, 9]]
expect(event.lineNumbersChanged).toBeTruthy()
describe "when multiple changes happen above the fold", ->
it "repositions folds correctly", ->
@@ -410,7 +399,6 @@ describe "DisplayBuffer", ->
[[event]] = changeHandler.argsForCall
expect(event.oldRange).toEqual [[0, 0], [1, 1]]
expect(event.newRange).toEqual [[0, 0], [0, 3]]
expect(event.lineNumbersChanged).toBeTruthy()
changeHandler.reset()
fold1.destroy()
@@ -425,7 +413,6 @@ describe "DisplayBuffer", ->
[[event]] = changeHandler.argsForCall
expect(event.oldRange).toEqual [[1, 0], [1, 1]]
expect(event.newRange).toEqual [[1, 0], [3, 101]]
expect(event.lineNumbersChanged).toBeTruthy()
describe "when the old range straddles the beginning of a fold", ->
it "replaces lines in the portion of the range that precedes the fold and adjusts the end of the fold to encompass additional lines", ->
@@ -452,7 +439,6 @@ describe "DisplayBuffer", ->
[[event]] = changeHandler.argsForCall
expect(event.oldRange).toEqual [[6, 0], [7, 2]] # Expands ranges to encompes entire line
expect(event.newRange).toEqual [[6, 0], [6, 5]]
expect(event.lineNumbersChanged).toBeTruthy()
describe "when the old range is inside a fold", ->
describe "when the end of the new range precedes the end of the fold", ->
@@ -473,7 +459,6 @@ describe "DisplayBuffer", ->
[[event]] = changeHandler.argsForCall
expect(event.oldRange).toEqual [[2, 0], [2, 1]]
expect(event.newRange).toEqual [[2, 0], [2, 1]]
expect(event.lineNumbersChanged).toBeTruthy()
describe "when the end of the new range exceeds the end of the fold", ->
it "expands the fold to contain all the inserted lines", ->
@@ -493,7 +478,6 @@ describe "DisplayBuffer", ->
[[event]] = changeHandler.argsForCall
expect(event.oldRange).toEqual [[2, 0], [2, 1]]
expect(event.newRange).toEqual [[2, 0], [2, 1]]
expect(event.lineNumbersChanged).toBeTruthy()
describe "when the old range straddles the end of the fold", ->
describe "when the end of the new range precedes the end of the fold", ->
@@ -519,7 +503,6 @@ describe "DisplayBuffer", ->
[[event]] = changeHandler.argsForCall
expect(event.oldRange).toEqual [[3, 0], [3, 1]]
expect(event.newRange).toEqual [[3, 0], [4, 1]]
expect(event.lineNumbersChanged).toBeTruthy()
describe "position translation", ->
it "translates positions to account for folded lines and characters and the placeholder", ->

View File

@@ -35,7 +35,7 @@ class DisplayBuffer
oldRange = @rangeForAllLines()
@buildLineMap()
newRange = @rangeForAllLines()
@trigger 'change', { oldRange, newRange, lineNumbersChanged: true }
@trigger 'change', { oldRange, newRange }
lineForRow: (row) ->
@lineMap.lineForScreenRow(row)
@@ -87,7 +87,7 @@ class DisplayBuffer
@lineMap.replaceScreenRows(oldScreenRange.start.row, oldScreenRange.end.row, lines)
newScreenRange = @screenLineRangeForBufferRange(bufferRange)
@trigger 'change', oldRange: oldScreenRange, newRange: newScreenRange, lineNumbersChanged: true
@trigger 'change', oldRange: oldScreenRange, newRange: newScreenRange
fold
@@ -111,7 +111,7 @@ class DisplayBuffer
@lineMap.replaceScreenRows(oldScreenRange.start.row, oldScreenRange.end.row, lines)
newScreenRange = @screenLineRangeForBufferRange(bufferRange)
@trigger 'change', oldRange: oldScreenRange, newRange: newScreenRange, lineNumbersChanged: true
@trigger 'change', oldRange: oldScreenRange, newRange: newScreenRange
destroyFoldsContainingBufferRow: (bufferRow) ->
for row, folds of @activeFolds
@@ -195,10 +195,15 @@ class DisplayBuffer
handleTokenizedBufferChange: (e) ->
@handleBufferChange(e.bufferChange) if e.bufferChange
newRange = e.newRange.copy()
newRange.start.row = @bufferRowForScreenRow(@screenRowForBufferRow(newRange.start.row))
{ oldRange, newRange } = e
oldRange = oldRange.copy()
newRange = newRange.copy()
oldScreenRange = @screenLineRangeForBufferRange(e.oldRange)
foldAdjustedStartRow = @bufferRowForScreenRow(@screenRowForBufferRow(newRange.start.row))
oldRange.start.row = foldAdjustedStartRow
newRange.start.row = foldAdjustedStartRow
oldScreenRange = @screenLineRangeForBufferRange(oldRange)
newScreenLines = @buildLinesForBufferRows(newRange.start.row, newRange.end.row)
@lineMap.replaceScreenRows oldScreenRange.start.row, oldScreenRange.end.row, newScreenLines
@@ -208,7 +213,6 @@ class DisplayBuffer
oldRange: oldScreenRange
newRange: newScreenRange
bufferChange: e.bufferChange
lineNumbersChanged: !e.oldRange.coversSameRows(newRange) or !oldScreenRange.coversSameRows(newScreenRange)
buildLineForBufferRow: (bufferRow) ->
@buildLinesForBufferRows(bufferRow, bufferRow)