From 84318277ba403e76262b878424ec4d861bba3d05 Mon Sep 17 00:00:00 2001 From: Corey Johnson & Nathan Sobo Date: Wed, 30 May 2012 16:00:59 -0600 Subject: [PATCH] FoldSuggester can return a row range of a foldable syntactic region starting at a given row --- spec/app/fold-suggester-spec.coffee | 12 +++++++++++- src/app/ace-fold-adaptor.coffee | 9 ++++++++- src/app/fold-suggester.coffee | 11 +++++++++-- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/spec/app/fold-suggester-spec.coffee b/spec/app/fold-suggester-spec.coffee index 5b68ac415..b60693656 100644 --- a/spec/app/fold-suggester-spec.coffee +++ b/spec/app/fold-suggester-spec.coffee @@ -1,12 +1,14 @@ FoldSuggester = require 'fold-suggester' Buffer = require 'buffer' +Highlighter = require 'highlighter' describe "FoldSuggester", -> foldSuggester = null beforeEach -> buffer = new Buffer(require.resolve 'fixtures/sample.js') - foldSuggester = new FoldSuggester(buffer) + highlighter = new Highlighter(buffer) + foldSuggester = new FoldSuggester(highlighter) describe ".isBufferRowFoldable(bufferRow)", -> it "returns true only when the buffer row starts a foldable region", -> @@ -14,3 +16,11 @@ describe "FoldSuggester", -> expect(foldSuggester.isBufferRowFoldable(1)).toBeTruthy() expect(foldSuggester.isBufferRowFoldable(2)).toBeFalsy() expect(foldSuggester.isBufferRowFoldable(3)).toBeFalsy() + + describe ".rowRangeForFoldAtBufferRow(bufferRow)", -> + it "returns the start/end rows of the foldable region starting at the given row", -> + expect(foldSuggester.rowRangeForFoldAtBufferRow(0)).toEqual [1, 12] + expect(foldSuggester.rowRangeForFoldAtBufferRow(1)).toEqual [2, 9] + expect(foldSuggester.rowRangeForFoldAtBufferRow(2)).toBeNull() + expect(foldSuggester.rowRangeForFoldAtBufferRow(4)).toEqual [5, 7] + diff --git a/src/app/ace-fold-adaptor.coffee b/src/app/ace-fold-adaptor.coffee index 34b029d27..42f633145 100644 --- a/src/app/ace-fold-adaptor.coffee +++ b/src/app/ace-fold-adaptor.coffee @@ -1,6 +1,13 @@ module.exports = class AceFoldAdaptor - constructor: (@buffer) -> + foldWidgets: {} + + constructor: (@highlighter) -> + @buffer = @highlighter.buffer getLine: (bufferRow) -> @buffer.lineForRow(bufferRow) + + $findClosingBracket: (bracketType, bufferPosition) -> + @highlighter.findClosingBracket([bufferPosition.row, bufferPosition.column - 1]) + diff --git a/src/app/fold-suggester.coffee b/src/app/fold-suggester.coffee index f2bf67d8c..a44c7bc15 100644 --- a/src/app/fold-suggester.coffee +++ b/src/app/fold-suggester.coffee @@ -2,9 +2,16 @@ AceFoldAdaptor = require 'ace-fold-adaptor' module.exports = class FoldSuggester - constructor: (@buffer) -> + constructor: (@highlighter) -> + @buffer = @highlighter.buffer @aceFoldMode = @buffer.getMode().foldingRules - @aceFoldAdaptor = new AceFoldAdaptor(@buffer) + @aceFoldAdaptor = new AceFoldAdaptor(@highlighter) isBufferRowFoldable: (bufferRow) -> @aceFoldMode?.getFoldWidget(@aceFoldAdaptor, null, bufferRow) == "start" + + rowRangeForFoldAtBufferRow: (bufferRow) -> + if aceRange = @aceFoldMode?.getFoldWidgetRange(@aceFoldAdaptor, null, bufferRow) + [aceRange.start.row + 1, aceRange.end.row] + else + null