From ea2e0254003860b1d22fc60928a5e14b62deb1a7 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 15 Nov 2012 14:16:28 -0700 Subject: [PATCH] Simplify `DisplayBuffer`'s change event handling --- spec/app/display-buffer-spec.coffee | 17 ----------------- src/app/display-buffer.coffee | 18 +++++++++++------- 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/spec/app/display-buffer-spec.coffee b/spec/app/display-buffer-spec.coffee index d3db0b6f0..b4d57ef52 100644 --- a/spec/app/display-buffer-spec.coffee +++ b/spec/app/display-buffer-spec.coffee @@ -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", -> diff --git a/src/app/display-buffer.coffee b/src/app/display-buffer.coffee index 50d355cb7..2610bd685 100644 --- a/src/app/display-buffer.coffee +++ b/src/app/display-buffer.coffee @@ -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)