diff --git a/spec/app/display-buffer-spec.coffee b/spec/app/display-buffer-spec.coffee index 7475ba31e..0ecf550fe 100644 --- a/spec/app/display-buffer-spec.coffee +++ b/spec/app/display-buffer-spec.coffee @@ -194,6 +194,15 @@ describe "DisplayBuffer", -> expect(fold.startRow).toBe 1 expect(fold.endRow).toBe 9 + describe "when the bufferRow is already folded", -> + it "searches upward for the first row that begins a syntatic region containing the folded row (and folds it)", -> + displayBuffer.foldBufferRow(2) + expect(displayBuffer.lineForRow(1).fold).toBeDefined() + expect(displayBuffer.lineForRow(0).fold).not.toBeDefined() + + displayBuffer.foldBufferRow(1) + expect(displayBuffer.lineForRow(0).fold).toBeDefined() + describe ".unfoldBufferRow(bufferRow)", -> describe "when bufferRow can be unfolded", -> it "destroys a fold based on the syntactic region starting at the given row", -> diff --git a/src/app/display-buffer.coffee b/src/app/display-buffer.coffee index 7e8452e31..a4b5e4392 100644 --- a/src/app/display-buffer.coffee +++ b/src/app/display-buffer.coffee @@ -61,18 +61,14 @@ class DisplayBuffer [startRow, endRow] = @tokenizedBuffer.rowRangeForFoldAtBufferRow(currentRow) ? [] continue unless startRow? and startRow <= bufferRow <= endRow fold = @largestFoldStartingAtBufferRow(startRow) - @createFold(startRow, endRow) unless fold + continue if fold + + @createFold(startRow, endRow) return unfoldBufferRow: (bufferRow) -> - for currentRow in [bufferRow..0] - [startRow, endRow] = @tokenizedBuffer.rowRangeForFoldAtBufferRow(currentRow) ? [] - continue unless startRow? and startRow <= bufferRow <= endRow - fold = @largestFoldStartingAtBufferRow(startRow) - fold.destroy() if fold - - return + @largestFoldContainingBufferRow(bufferRow)?.destroy() createFold: (startRow, endRow) -> return fold if fold = @foldFor(startRow, endRow)