diff --git a/spec/app/renderer-spec.coffee b/spec/app/renderer-spec.coffee index aef53f199..f42bcf9ab 100644 --- a/spec/app/renderer-spec.coffee +++ b/spec/app/renderer-spec.coffee @@ -141,21 +141,29 @@ describe "Renderer", -> expect(event.newRange).toEqual([[0, 0], [18, 2]]) expect(event.lineNumbersChanged).toBeTruthy() - describe "fold markers", -> - it "sets 'foldable' to true for screen lines that start a foldable region", -> - expect(renderer.lineForRow(0).foldable).toBeTruthy() - expect(renderer.lineForRow(1).foldable).toBeTruthy() - expect(renderer.lineForRow(2).foldable).toBeFalsy() - expect(renderer.lineForRow(3).foldable).toBeFalsy() - - describe "when a foldable line is wrapped", -> - it "only marks the first screen line as foldable", -> - renderer.setMaxLineLength(20) + describe "fold suggestion", -> + describe "the foldable flag on screen lines", -> + it "sets 'foldable' to true for screen lines that start a foldable region", -> expect(renderer.lineForRow(0).foldable).toBeTruthy() - expect(renderer.lineForRow(1).foldable).toBeFalsy() - expect(renderer.lineForRow(2).foldable).toBeTruthy() + expect(renderer.lineForRow(1).foldable).toBeTruthy() + expect(renderer.lineForRow(2).foldable).toBeFalsy() expect(renderer.lineForRow(3).foldable).toBeFalsy() + describe "when a foldable line is wrapped", -> + it "only marks the first screen line as foldable", -> + renderer.setMaxLineLength(20) + expect(renderer.lineForRow(0).foldable).toBeTruthy() + expect(renderer.lineForRow(1).foldable).toBeFalsy() + expect(renderer.lineForRow(2).foldable).toBeTruthy() + expect(renderer.lineForRow(3).foldable).toBeFalsy() + + describe ".createFoldAtBufferRow(bufferRow)", -> + it "creates a fold based on the syntactic region starting at the given row", -> + renderer.createFoldAtBufferRow(1) + fold = renderer.lineForRow(2).fold + expect(fold.startRow).toBe 2 + expect(fold.endRow).toBe 9 + describe "folding", -> beforeEach -> buffer = new Buffer(require.resolve 'fixtures/two-hundred.txt') diff --git a/src/app/renderer.coffee b/src/app/renderer.coffee index 06aba78c8..ec723b95c 100644 --- a/src/app/renderer.coffee +++ b/src/app/renderer.coffee @@ -23,7 +23,7 @@ class Renderer constructor: (@buffer, options={}) -> @id = @constructor.idCounter++ @highlighter = new Highlighter(@buffer, options.tabText ? ' ') - @foldSuggester = new FoldSuggester(@buffer) + @foldSuggester = new FoldSuggester(@highlighter) @maxLineLength = options.maxLineLength ? Infinity @activeFolds = {} @foldsById = {} @@ -53,6 +53,10 @@ class Renderer bufferRowsForScreenRows: (startRow, endRow) -> @lineMap.bufferRowsForScreenRows(startRow, endRow) + createFoldAtBufferRow: (bufferRow) -> + [startRow, endRow] = @foldSuggester.rowRangeForFoldAtBufferRow(bufferRow) + @createFold(startRow, endRow) + createFold: (startRow, endRow) -> fold = new Fold(this, startRow, endRow) @registerFold(fold)