mirror of
https://github.com/atom/atom.git
synced 2026-01-26 07:19:06 -05:00
FoldSuggester can return a row range of a foldable syntactic region starting at a given row
This commit is contained in:
@@ -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]
|
||||
|
||||
|
||||
@@ -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])
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user