From 42f322a112a2d0e3fd11f2d356237a008ca8b3e3 Mon Sep 17 00:00:00 2001 From: Corey Johnson & Nathan Sobo Date: Fri, 13 Jul 2012 15:10:37 -0600 Subject: [PATCH] CommandInterpreter uses project and edit sessions instead of editor to execute We don't want to pass view objects into it! --- .../command-interpreter-spec.coffee | 202 +++++++++--------- src/app/root-view.coffee | 3 + .../command-panel/command-interpreter.coffee | 14 +- .../command-panel/command-panel.coffee | 8 +- .../commands/address-range.coffee | 4 +- .../command-panel/commands/address.coffee | 4 +- .../commands/composite-command.coffee | 12 +- .../commands/current-selection-address.coffee | 4 +- .../command-panel/commands/eof-address.coffee | 7 +- .../commands/regex-address.coffee | 12 +- .../commands/select-all-matches.coffee | 6 +- .../commands/substitution.coffee | 6 +- .../commands/zero-address.coffee | 2 +- 13 files changed, 141 insertions(+), 143 deletions(-) diff --git a/spec/extensions/command-interpreter-spec.coffee b/spec/extensions/command-interpreter-spec.coffee index ebe05e3a0..c84bd7ea6 100644 --- a/spec/extensions/command-interpreter-spec.coffee +++ b/spec/extensions/command-interpreter-spec.coffee @@ -1,76 +1,74 @@ CommandInterpreter = require 'command-panel/command-interpreter' Buffer = require 'buffer' EditSession = require 'edit-session' -Editor = require 'editor' describe "CommandInterpreter", -> - [interpreter, editor, buffer] = [] + [interpreter, editSession, buffer] = [] beforeEach -> + interpreter = new CommandInterpreter(fixturesProject) editSession = fixturesProject.open('sample.js') buffer = editSession.buffer - editor = new Editor(editSession: editSession) - interpreter = new CommandInterpreter() afterEach -> - editor.remove() + editSession.destroy() describe "addresses", -> beforeEach -> - editor.addSelectionForBufferRange([[7,0], [7,11]]) - editor.addSelectionForBufferRange([[8,0], [8,11]]) + editSession.addSelectionForBufferRange([[7,0], [7,11]]) + editSession.addSelectionForBufferRange([[8,0], [8,11]]) describe "a line address", -> it "selects the specified line", -> - interpreter.eval(editor, '4') - expect(editor.getSelections().length).toBe 1 - expect(editor.getSelection().getBufferRange()).toEqual [[3, 0], [4, 0]] + interpreter.eval('4', editSession) + expect(editSession.getSelections().length).toBe 1 + expect(editSession.getSelection().getBufferRange()).toEqual [[3, 0], [4, 0]] describe "0", -> it "selects the zero-length string at the start of the file", -> - interpreter.eval(editor, '0') - expect(editor.getSelections().length).toBe 1 - expect(editor.getSelection().getBufferRange()).toEqual [[0,0], [0,0]] + interpreter.eval('0', editSession) + expect(editSession.getSelections().length).toBe 1 + expect(editSession.getSelection().getBufferRange()).toEqual [[0,0], [0,0]] - interpreter.eval(editor, '0,1') - expect(editor.getSelections().length).toBe 1 - expect(editor.getSelection().getBufferRange()).toEqual [[0,0], [1,0]] + interpreter.eval('0,1', editSession) + expect(editSession.getSelections().length).toBe 1 + expect(editSession.getSelection().getBufferRange()).toEqual [[0,0], [1,0]] describe "$", -> it "selects EOF", -> - interpreter.eval(editor, '$') - expect(editor.getSelections().length).toBe 1 - expect(editor.getSelection().getBufferRange()).toEqual [[12,2], [12,2]] + interpreter.eval('$', editSession) + expect(editSession.getSelections().length).toBe 1 + expect(editSession.getSelection().getBufferRange()).toEqual [[12,2], [12,2]] - interpreter.eval(editor, '1,$') - expect(editor.getSelections().length).toBe 1 - expect(editor.getSelection().getBufferRange()).toEqual [[0,0], [12,2]] + interpreter.eval('1,$', editSession) + expect(editSession.getSelections().length).toBe 1 + expect(editSession.getSelection().getBufferRange()).toEqual [[0,0], [12,2]] describe ".", -> describe "when a single selection", -> it 'maintains the current selection', -> - editor.clearSelections() - editor.setSelectedBufferRange([[1,1], [2,2]]) - interpreter.eval(editor, '.') - expect(editor.getSelection().getBufferRange()).toEqual [[1,1], [2,2]] + editSession.clearSelections() + editSession.setSelectedBufferRange([[1,1], [2,2]]) + interpreter.eval('.', editSession) + expect(editSession.getSelection().getBufferRange()).toEqual [[1,1], [2,2]] - editor.setSelectedBufferRange([[1,1], [2,2]]) - interpreter.eval(editor, '.,') - expect(editor.getSelection().getBufferRange()).toEqual [[1,1], [12,2]] + editSession.setSelectedBufferRange([[1,1], [2,2]]) + interpreter.eval('.,', editSession) + expect(editSession.getSelection().getBufferRange()).toEqual [[1,1], [12,2]] - editor.setSelectedBufferRange([[1,1], [2,2]]) - interpreter.eval(editor, ',.') - expect(editor.getSelection().getBufferRange()).toEqual [[0,0], [2,2]] + editSession.setSelectedBufferRange([[1,1], [2,2]]) + interpreter.eval(',.', editSession) + expect(editSession.getSelection().getBufferRange()).toEqual [[0,0], [2,2]] describe "with multiple selections", -> it "maintains the current selections", -> - preSelections = editor.getSelections() + preSelections = editSession.getSelections() expect(preSelections.length).toBe 3 [preRange1, preRange2, preRange3] = preSelections.map (s) -> s.getScreenRange() - interpreter.eval(editor, '.') + interpreter.eval('.', editSession) - selections = editor.getSelections() + selections = editSession.getSelections() expect(selections.length).toBe 3 [selection1, selection2, selection3] = selections expect(selection1.getScreenRange()).toEqual preRange1 @@ -79,72 +77,72 @@ describe "CommandInterpreter", -> describe "/regex/", -> beforeEach -> - editor.clearSelections() + editSession.clearSelections() it 'selects text matching regex after current selection', -> - editor.setSelectedBufferRange([[4,16], [4,20]]) - interpreter.eval(editor, '/pivot/') - expect(editor.getSelection().getBufferRange()).toEqual [[6,16], [6,21]] + editSession.setSelectedBufferRange([[4,16], [4,20]]) + interpreter.eval('/pivot/', editSession) + expect(editSession.getSelection().getBufferRange()).toEqual [[6,16], [6,21]] it 'does not require the trailing slash', -> - editor.setSelectedBufferRange([[4,16], [4,20]]) - interpreter.eval(editor, '/pivot') - expect(editor.getSelection().getBufferRange()).toEqual [[6,16], [6,21]] + editSession.setSelectedBufferRange([[4,16], [4,20]]) + interpreter.eval('/pivot', editSession) + expect(editSession.getSelection().getBufferRange()).toEqual [[6,16], [6,21]] it "searches from the end of each selection in the buffer", -> - editor.clearSelections() - editor.setSelectedBufferRange([[4,16], [4,20]]) - editor.addSelectionForBufferRange([[1,16], [2,20]]) - expect(editor.getSelections().length).toBe 2 - interpreter.eval(editor, '/pivot') - selections = editor.getSelections() + editSession.clearSelections() + editSession.setSelectedBufferRange([[4,16], [4,20]]) + editSession.addSelectionForBufferRange([[1,16], [2,20]]) + expect(editSession.getSelections().length).toBe 2 + interpreter.eval('/pivot', editSession) + selections = editSession.getSelections() expect(selections.length).toBe 2 expect(selections[0].getBufferRange()).toEqual [[3,8], [3,13]] expect(selections[1].getBufferRange()).toEqual [[6,16], [6,21]] it "wraps around to the beginning of the buffer, but doesn't infinitely loop if no matches are found", -> - editor.setSelectedBufferRange([[10, 0], [10,3]]) - interpreter.eval(editor, '/pivot') - expect(editor.getSelection().getBufferRange()).toEqual [[3,8], [3,13]] + editSession.setSelectedBufferRange([[10, 0], [10,3]]) + interpreter.eval('/pivot', editSession) + expect(editSession.getSelection().getBufferRange()).toEqual [[3,8], [3,13]] - interpreter.eval(editor, '/mike tyson') - expect(editor.getSelection().getBufferRange()).toEqual [[3,8], [3,13]] + interpreter.eval('/mike tyson', editSession) + expect(editSession.getSelection().getBufferRange()).toEqual [[3,8], [3,13]] it "searches in reverse when prefixed with a -", -> - editor.setSelectedBufferRange([[6, 16], [6, 22]]) - interpreter.eval(editor, '-/pivot') - expect(editor.getSelection().getBufferRange()).toEqual [[3,8], [3,13]] + editSession.setSelectedBufferRange([[6, 16], [6, 22]]) + interpreter.eval('-/pivot', editSession) + expect(editSession.getSelection().getBufferRange()).toEqual [[3,8], [3,13]] describe "address range", -> describe "when two addresses are specified", -> it "selects from the begining of the left address to the end of the right address", -> - interpreter.eval(editor, '4,7') - expect(editor.getSelections().length).toBe 1 - expect(editor.getSelection().getBufferRange()).toEqual [[3, 0], [7, 0]] + interpreter.eval('4,7', editSession) + expect(editSession.getSelections().length).toBe 1 + expect(editSession.getSelection().getBufferRange()).toEqual [[3, 0], [7, 0]] describe "when the left address is unspecified", -> it "selects from the begining of buffer to the end of the right address", -> - interpreter.eval(editor, ',7') - expect(editor.getSelections().length).toBe 1 - expect(editor.getSelection().getBufferRange()).toEqual [[0, 0], [7, 0]] + interpreter.eval(',7', editSession) + expect(editSession.getSelections().length).toBe 1 + expect(editSession.getSelection().getBufferRange()).toEqual [[0, 0], [7, 0]] describe "when the right address is unspecified", -> it "selects from the begining of left address to the end file", -> - interpreter.eval(editor, '4,') - expect(editor.getSelections().length).toBe 1 - expect(editor.getSelection().getBufferRange()).toEqual [[3, 0], [12, 2]] + interpreter.eval('4,', editSession) + expect(editSession.getSelections().length).toBe 1 + expect(editSession.getSelection().getBufferRange()).toEqual [[3, 0], [12, 2]] describe "when the neither address is specified", -> it "selects the entire file", -> - interpreter.eval(editor, ',') - expect(editor.getSelections().length).toBe 1 - expect(editor.getSelection().getBufferRange()).toEqual [[0, 0], [12, 2]] + interpreter.eval(',', editSession) + expect(editSession.getSelections().length).toBe 1 + expect(editSession.getSelection().getBufferRange()).toEqual [[0, 0], [12, 2]] describe "x/regex/", -> it "sets the current selection to every match of the regex in the current selection", -> - interpreter.eval(editor, '6,7 x/current/') + interpreter.eval('6,7 x/current/', editSession) - selections = editor.getSelections() + selections = editSession.getSelections() expect(selections.length).toBe 4 expect(selections[0].getBufferRange()).toEqual [[5,6], [5,13]] @@ -154,9 +152,9 @@ describe "CommandInterpreter", -> describe "when matching /$/", -> it "matches the end of each line in the selected region", -> - interpreter.eval(editor, '6,8 x/$/') + interpreter.eval('6,8 x/$/', editSession) - cursors = editor.getCursors() + cursors = editSession.getCursors() expect(cursors.length).toBe 3 expect(cursors[0].getBufferPosition()).toEqual [5, 30] @@ -164,12 +162,12 @@ describe "CommandInterpreter", -> expect(cursors[2].getBufferPosition()).toEqual [7, 5] it "loops through current selections and selects text matching the regex", -> - editor.setSelectedBufferRange [[3,0], [3,62]] - editor.addSelectionForBufferRange [[6,0], [6,65]] + editSession.setSelectedBufferRange [[3,0], [3,62]] + editSession.addSelectionForBufferRange [[6,0], [6,65]] - interpreter.eval(editor, 'x/current') + interpreter.eval('x/current', editSession) - selections = editor.getSelections() + selections = editSession.getSelections() expect(selections.length).toBe 4 expect(selections[0].getBufferRange()).toEqual [[3,31], [3,38]] @@ -179,35 +177,35 @@ describe "CommandInterpreter", -> describe "substitution", -> it "does nothing if there are no matches", -> - editor.setSelectedBufferRange([[6, 0], [6, 44]]) - interpreter.eval(editor, 's/not-in-text/foo/') + editSession.setSelectedBufferRange([[6, 0], [6, 44]]) + interpreter.eval('s/not-in-text/foo/', editSession) expect(buffer.lineForRow(6)).toBe ' current < pivot ? left.push(current) : right.push(current);' describe "when not global", -> describe "when there is a single selection", -> it "performs a single substitution within the current selection", -> - editor.setSelectedBufferRange([[6, 0], [6, 44]]) - interpreter.eval(editor, 's/current/foo/') + editSession.setSelectedBufferRange([[6, 0], [6, 44]]) + interpreter.eval('s/current/foo/', editSession) expect(buffer.lineForRow(6)).toBe ' foo < pivot ? left.push(current) : right.push(current);' describe "when there are multiple selections", -> it "performs a single substitutions within each of the selections", -> - editor.setSelectedBufferRange([[5, 0], [5, 20]]) - editor.addSelectionForBufferRange([[6, 0], [6, 44]]) + editSession.setSelectedBufferRange([[5, 0], [5, 20]]) + editSession.addSelectionForBufferRange([[6, 0], [6, 44]]) - interpreter.eval(editor, 's/current/foo/') + interpreter.eval('s/current/foo/', editSession) expect(buffer.lineForRow(5)).toBe ' foo = items.shift();' expect(buffer.lineForRow(6)).toBe ' foo < pivot ? left.push(current) : right.push(current);' describe "when global", -> it "performs a multiple substitutions within the current selection", -> - editor.setSelectedBufferRange([[6, 0], [6, 44]]) - interpreter.eval(editor, 's/current/foo/g') + editSession.setSelectedBufferRange([[6, 0], [6, 44]]) + interpreter.eval('s/current/foo/g', editSession) expect(buffer.lineForRow(6)).toBe ' foo < pivot ? left.push(foo) : right.push(current);' describe "when prefixed with an address", -> it "only makes substitutions within given lines", -> - interpreter.eval(editor, '4,6s/ /!/g') + interpreter.eval('4,6s/ /!/g', editSession) expect(buffer.lineForRow(2)).toBe ' if (items.length <= 1) return items;' expect(buffer.lineForRow(3)).toBe '!!!!var!pivot!=!items.shift(),!current,!left!=![],!right!=![];' expect(buffer.lineForRow(4)).toBe '!!!!while(items.length!>!0)!{' @@ -216,7 +214,7 @@ describe "CommandInterpreter", -> describe "when matching $", -> it "matches the end of each line and avoids infinitely looping on a zero-width match", -> - interpreter.eval(editor, ',s/$/!!!/g') + interpreter.eval(',s/$/!!!/g', editSession) expect(buffer.lineForRow(0)).toBe 'var quicksort = function () {!!!' expect(buffer.lineForRow(2)).toBe ' if (items.length <= 1) return items;!!!' expect(buffer.lineForRow(6)).toBe ' current < pivot ? left.push(current) : right.push(current);!!!' @@ -224,7 +222,7 @@ describe "CommandInterpreter", -> describe "when matching ^", -> it "matches the beginning of each line and avoids infinitely looping on a zero-width match", -> - interpreter.eval(editor, ',s/^/!!!/g') + interpreter.eval(',s/^/!!!/g', editSession) expect(buffer.lineForRow(0)).toBe '!!!var quicksort = function () {' expect(buffer.lineForRow(2)).toBe '!!! if (items.length <= 1) return items;' expect(buffer.lineForRow(6)).toBe '!!! current < pivot ? left.push(current) : right.push(current);' @@ -232,27 +230,27 @@ describe "CommandInterpreter", -> describe "when there are multiple selections", -> it "performs a multiple substitutions within each of the selections", -> - editor.setSelectedBufferRange([[5, 0], [5, 20]]) - editor.addSelectionForBufferRange([[6, 0], [6, 44]]) + editSession.setSelectedBufferRange([[5, 0], [5, 20]]) + editSession.addSelectionForBufferRange([[6, 0], [6, 44]]) - interpreter.eval(editor, 's/current/foo/g') + interpreter.eval('s/current/foo/g', editSession) expect(buffer.lineForRow(5)).toBe ' foo = items.shift();' expect(buffer.lineForRow(6)).toBe ' foo < pivot ? left.push(foo) : right.push(current);' describe "when prefixed with an address", -> it "restores the original selections upon completion if it is the last command", -> - editor.setSelectedBufferRanges([[[5, 0], [5, 20]], [[6, 0], [6, 44]]]) - interpreter.eval(editor, ',s/current/foo/g') - expect(editor.getSelectedBufferRanges()).toEqual [[[5, 0], [5, 16]], [[6, 0], [6, 36]]] + editSession.setSelectedBufferRanges([[[5, 0], [5, 20]], [[6, 0], [6, 44]]]) + interpreter.eval(',s/current/foo/g', editSession) + expect(editSession.getSelectedBufferRanges()).toEqual [[[5, 0], [5, 16]], [[6, 0], [6, 36]]] describe "when command selects folded text", -> it "unfolds lines that command selects", -> - editor.createFold(1, 9) - editor.createFold(5, 8) - editor.setSelectedBufferRange([[0,0], [0,0]]) + editSession.createFold(1, 9) + editSession.createFold(5, 8) + editSession.setSelectedBufferRange([[0,0], [0,0]]) - interpreter.eval(editor, '/push/') - expect(editor.getSelection().getBufferRange()).toEqual [[6,29], [6,33]] - expect(editor.lineForScreenRow(1).fold).toBeUndefined() - expect(editor.lineForScreenRow(5).fold).toBeUndefined() - expect(editor.lineForScreenRow(6).text).toBe buffer.lineForRow(6) + interpreter.eval('/push/', editSession) + expect(editSession.getSelection().getBufferRange()).toEqual [[6,29], [6,33]] + expect(editSession.lineForScreenRow(1).fold).toBeUndefined() + expect(editSession.lineForScreenRow(5).fold).toBeUndefined() + expect(editSession.lineForScreenRow(6).text).toBe buffer.lineForRow(6) diff --git a/src/app/root-view.coffee b/src/app/root-view.coffee index 8f42392f2..41d3dfe0e 100644 --- a/src/app/root-view.coffee +++ b/src/app/root-view.coffee @@ -162,6 +162,9 @@ class RootView extends View else @panes.find('.editor:first').view() + getActiveEditSession: -> + @getActiveEditor()?.activeEditSession + focusNextPane: -> panes = @panes.find('.pane') currentIndex = panes.toArray().indexOf(@getFocusedPane()[0]) diff --git a/src/extensions/command-panel/command-interpreter.coffee b/src/extensions/command-panel/command-interpreter.coffee index 0190a5e71..eb328c9b6 100644 --- a/src/extensions/command-panel/command-interpreter.coffee +++ b/src/extensions/command-panel/command-interpreter.coffee @@ -3,16 +3,16 @@ PEG = require 'pegjs' module.exports = class CommandInterpreter - constructor: -> + constructor: (@project) -> @parser = PEG.buildParser(fs.read(require.resolve 'command-panel/commands.pegjs')) - eval: (editor, string) -> + eval: (string, activeEditSession) -> compositeCommand = @parser.parse(string) @lastRelativeAddress = compositeCommand if compositeCommand.isRelativeAddress() - compositeCommand.execute(editor) + compositeCommand.execute(@project, activeEditSession) - repeatRelativeAddress: (editor) -> - @lastRelativeAddress?.execute(editor) + repeatRelativeAddress: (activeEditSession) -> + @lastRelativeAddress?.execute(@project, activeEditSession) - repeatRelativeAddressInReverse: (editor) -> - @lastRelativeAddress?.reverse().execute(editor) + repeatRelativeAddressInReverse: (activeEditSession) -> + @lastRelativeAddress?.reverse().execute(@project, activeEditSession) diff --git a/src/extensions/command-panel/command-panel.coffee b/src/extensions/command-panel/command-panel.coffee index 242374edc..677be9453 100644 --- a/src/extensions/command-panel/command-panel.coffee +++ b/src/extensions/command-panel/command-panel.coffee @@ -35,7 +35,7 @@ class CommandPanel extends View historyIndex: 0 initialize: (@rootView)-> - @commandInterpreter = new CommandInterpreter() + @commandInterpreter = new CommandInterpreter(@rootView.project) @history = [] @rootView.on 'command-panel:toggle', => @toggle() @@ -64,7 +64,7 @@ class CommandPanel extends View execute: (command = @miniEditor.getText()) -> try - @commandInterpreter.eval(@rootView.getActiveEditor(), command) + @commandInterpreter.eval(command, @rootView.getActiveEditSession()) catch error if error instanceof SyntaxError @flashError() @@ -87,10 +87,10 @@ class CommandPanel extends View @miniEditor.setText(@history[@historyIndex] or '') repeatRelativeAddress: -> - @commandInterpreter.repeatRelativeAddress(@rootView.getActiveEditor()) + @commandInterpreter.repeatRelativeAddress(@rootView.getActiveEditSession()) repeatRelativeAddressInReverse: -> - @commandInterpreter.repeatRelativeAddressInReverse(@rootView.getActiveEditor()) + @commandInterpreter.repeatRelativeAddressInReverse(@rootView.getActiveEditSession()) setSelectionAsLastRelativeAddress: -> selection = @rootView.getActiveEditor().getSelectedText() diff --git a/src/extensions/command-panel/commands/address-range.coffee b/src/extensions/command-panel/commands/address-range.coffee index e8f3c68dd..45cb5afda 100644 --- a/src/extensions/command-panel/commands/address-range.coffee +++ b/src/extensions/command-panel/commands/address-range.coffee @@ -5,8 +5,8 @@ module.exports = class AddressRange extends Address constructor: (@startAddress, @endAddress) -> - getRange: (editor, currentRange) -> - new Range(@startAddress.getRange(editor, currentRange).start, @endAddress.getRange(editor, currentRange).end) + getRange: (buffer, range) -> + new Range(@startAddress.getRange(buffer, range).start, @endAddress.getRange(buffer, range).end) isRelative: -> @startAddress.isRelative() and @endAddress.isRelative() diff --git a/src/extensions/command-panel/commands/address.coffee b/src/extensions/command-panel/commands/address.coffee index e6ef1e11b..6f8c6fdb0 100644 --- a/src/extensions/command-panel/commands/address.coffee +++ b/src/extensions/command-panel/commands/address.coffee @@ -2,7 +2,7 @@ Command = require 'command-panel/commands/command' module.exports = class Address extends Command - execute: (editor, currentRange) -> - [@getRange(editor, currentRange)] + execute: (project, buffer, range) -> + [@getRange(buffer, range)] isAddress: -> true diff --git a/src/extensions/command-panel/commands/composite-command.coffee b/src/extensions/command-panel/commands/composite-command.coffee index 32c3262e0..5b1db18a1 100644 --- a/src/extensions/command-panel/commands/composite-command.coffee +++ b/src/extensions/command-panel/commands/composite-command.coffee @@ -4,19 +4,17 @@ module.exports = class CompositeCommand constructor: (@subcommands) -> - execute: (editor) -> - currentRanges = editor.getSelectedBufferRanges() + execute: (project, activeEditSession) -> + currentRanges = activeEditSession.getSelectedBufferRanges() + for command in @subcommands newRanges = [] for range in currentRanges - newRanges.push(command.execute(editor, range)...) + newRanges.push(command.execute(project, activeEditSession.buffer, range)...) currentRanges = newRanges unless command.preserveSelections - for range in currentRanges - for row in [range.start.row..range.end.row] - editor.destroyFoldsContainingBufferRow(row) - editor.setSelectedBufferRanges(currentRanges) + activeEditSession.setSelectedBufferRanges(currentRanges) reverse: -> new CompositeCommand(@subcommands.map (command) -> command.reverse()) diff --git a/src/extensions/command-panel/commands/current-selection-address.coffee b/src/extensions/command-panel/commands/current-selection-address.coffee index fe4b67f2b..5a230f842 100644 --- a/src/extensions/command-panel/commands/current-selection-address.coffee +++ b/src/extensions/command-panel/commands/current-selection-address.coffee @@ -3,7 +3,7 @@ Range = require 'range' module.exports = class CurrentSelectionAddress extends Address - getRange: (editor, currentRange) -> - currentRange + getRange: (buffer, range) -> + range isRelative: -> true diff --git a/src/extensions/command-panel/commands/eof-address.coffee b/src/extensions/command-panel/commands/eof-address.coffee index c4f41b577..f84213420 100644 --- a/src/extensions/command-panel/commands/eof-address.coffee +++ b/src/extensions/command-panel/commands/eof-address.coffee @@ -3,9 +3,8 @@ Range = require 'range' module.exports = class EofAddress extends Address - getRange: (editor) -> - lastRow = editor.getLastBufferRow() - column = editor.lineLengthForBufferRow(lastRow) - new Range([lastRow, column], [lastRow, column]) + getRange: (buffer, range) -> + eof = buffer.getEofPosition() + new Range(eof, eof) isRelative: -> false diff --git a/src/extensions/command-panel/commands/regex-address.coffee b/src/extensions/command-panel/commands/regex-address.coffee index 8fbf13b78..37a4737ed 100644 --- a/src/extensions/command-panel/commands/regex-address.coffee +++ b/src/extensions/command-panel/commands/regex-address.coffee @@ -10,25 +10,25 @@ class RegexAddress extends Address @isReversed = isReversed @regex = new RegExp(pattern) - getRange: (editor, currentRange) -> - rangeBefore = new Range([0, 0], currentRange.start) - rangeAfter = new Range(currentRange.end, editor.getEofPosition()) + getRange: (buffer, range) -> + rangeBefore = new Range([0, 0], range.start) + rangeAfter = new Range(range.end, buffer.getEofPosition()) rangeToSearch = if @isReversed then rangeBefore else rangeAfter rangeToReturn = null scanMethodName = if @isReversed then "backwardsScanInRange" else "scanInRange" - editor[scanMethodName] @regex, rangeToSearch, (match, range) -> + buffer[scanMethodName] @regex, rangeToSearch, (match, range) -> rangeToReturn = range if rangeToReturn rangeToReturn else rangeToSearch = if @isReversed then rangeAfter else rangeBefore - editor[scanMethodName] @regex, rangeToSearch, (match, range) -> + buffer[scanMethodName] @regex, rangeToSearch, (match, range) -> rangeToReturn = range - rangeToReturn or currentRange + rangeToReturn or range isRelative: -> true diff --git a/src/extensions/command-panel/commands/select-all-matches.coffee b/src/extensions/command-panel/commands/select-all-matches.coffee index 0c8163e5f..1e390df8e 100644 --- a/src/extensions/command-panel/commands/select-all-matches.coffee +++ b/src/extensions/command-panel/commands/select-all-matches.coffee @@ -8,8 +8,8 @@ class SelectAllMatches extends Command constructor: (pattern) -> @regex = new RegExp(pattern, 'g') - execute: (editor, currentRange) -> + execute: (project, buffer, range) -> rangesToSelect = [] - editor.scanInRange @regex, currentRange, (match, range) -> - rangesToSelect.push(range) + buffer.scanInRange @regex, range, (match, matchRange) -> + rangesToSelect.push(matchRange) rangesToSelect diff --git a/src/extensions/command-panel/commands/substitution.coffee b/src/extensions/command-panel/commands/substitution.coffee index d2c7f7c2d..f56803839 100644 --- a/src/extensions/command-panel/commands/substitution.coffee +++ b/src/extensions/command-panel/commands/substitution.coffee @@ -10,7 +10,7 @@ class Substitution extends Command @replacementText = replacementText @regex = new RegExp(pattern, options.join('')) - execute: (editor, currentRange) -> - editor.scanInRange @regex, currentRange, (match, matchRange, { replace }) => + execute: (project, buffer, range) -> + buffer.scanInRange @regex, range, (match, matchRange, { replace }) => replace(@replacementText) - [currentRange] + [range] diff --git a/src/extensions/command-panel/commands/zero-address.coffee b/src/extensions/command-panel/commands/zero-address.coffee index c8c2dfb69..f40b6d377 100644 --- a/src/extensions/command-panel/commands/zero-address.coffee +++ b/src/extensions/command-panel/commands/zero-address.coffee @@ -3,7 +3,7 @@ Range = require 'range' module.exports = class ZeroAddress extends Address - getRange: (editor) -> + getRange: -> new Range([0, 0], [0, 0]) isRelative: -> false