laughing-hipster/.atom/packages/sort-lines/lib/range-finder.coffee

41 lines
972 B
CoffeeScript

{Range} = require 'atom'
module.exports =
class RangeFinder
# Public
@rangesFor: (editor) ->
new RangeFinder(editor).ranges()
# Public
constructor: (@editor) ->
# Public
ranges: ->
selectionRanges = @selectionRanges()
if selectionRanges.length is 0
[@sortableRangeFrom(@sortableRangeForEntireBuffer())]
else
selectionRanges.map (selectionRange) =>
@sortableRangeFrom(selectionRange)
# Internal
selectionRanges: ->
@editor.getSelectedBufferRanges().filter (range) ->
not range.isEmpty()
# Internal
sortableRangeForEntireBuffer: ->
@editor.getBuffer().getRange()
# Internal
sortableRangeFrom: (selectionRange) ->
startRow = selectionRange.start.row
startCol = 0
endRow = if selectionRange.end.column == 0
selectionRange.end.row - 1
else
selectionRange.end.row
endCol = @editor.lineLengthForBufferRow(endRow)
new Range [startRow, startCol], [endRow, endCol]