mirror of
https://github.com/atom/atom.git
synced 2026-01-25 06:48:28 -05:00
Add single-line addresses to command interpreter
This commit is contained in:
@@ -11,9 +11,15 @@ describe "CommandInterpreter", ->
|
||||
interpreter = new CommandInterpreter()
|
||||
|
||||
describe "addresses", ->
|
||||
it "selects the given lines", ->
|
||||
interpreter.eval(editor, '4,7')
|
||||
expect(editor.selection.getBufferRange()).toEqual [[3, 0], [6, 0]]
|
||||
describe "a line address", ->
|
||||
it "selects the specified line", ->
|
||||
interpreter.eval(editor, '4')
|
||||
expect(editor.selection.getBufferRange()).toEqual [[3, 0], [4, 0]]
|
||||
|
||||
describe "an address range with two line addresses", ->
|
||||
it "selects the given lines", ->
|
||||
interpreter.eval(editor, '4,7')
|
||||
expect(editor.selection.getBufferRange()).toEqual [[3, 0], [7, 0]]
|
||||
|
||||
describe "substitution", ->
|
||||
it "does nothing if there are no matches", ->
|
||||
@@ -34,7 +40,7 @@ describe "CommandInterpreter", ->
|
||||
|
||||
describe "when prefixed with an address", ->
|
||||
it "only makes substitutions within given lines", ->
|
||||
interpreter.eval(editor, '4,7s/ /!/g')
|
||||
interpreter.eval(editor, '4,6s/ /!/g')
|
||||
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)!{'
|
||||
|
||||
9
src/atom/command-interpreter/address-range.coffee
Normal file
9
src/atom/command-interpreter/address-range.coffee
Normal file
@@ -0,0 +1,9 @@
|
||||
Address = require 'command-interpreter/address'
|
||||
Range = require 'range'
|
||||
|
||||
module.exports =
|
||||
class AddressRange extends Address
|
||||
constructor: (@startAddress, @endAddress) ->
|
||||
|
||||
getRange: ->
|
||||
new Range(@startAddress.getRange().start, @endAddress.getRange().end)
|
||||
@@ -1,14 +1,4 @@
|
||||
Range = require 'range'
|
||||
|
||||
module.exports =
|
||||
class Address
|
||||
startRow: null
|
||||
endRow: null
|
||||
|
||||
constructor: (start, end) ->
|
||||
@startRow = start - 1
|
||||
@endRow = end - 1
|
||||
|
||||
execute: (editor) ->
|
||||
range = new Range([@startRow, 0], [@endRow, 0])
|
||||
editor.getSelection().setBufferRange(range)
|
||||
editor.getSelection().setBufferRange(@getRange())
|
||||
|
||||
10
src/atom/command-interpreter/line-address.coffee
Normal file
10
src/atom/command-interpreter/line-address.coffee
Normal file
@@ -0,0 +1,10 @@
|
||||
Address = require 'command-interpreter/address'
|
||||
Range = require 'range'
|
||||
|
||||
module.exports =
|
||||
class LineAddress extends Address
|
||||
constructor: (lineNumber) ->
|
||||
@row = lineNumber - 1
|
||||
|
||||
getRange: ->
|
||||
new Range([@row, 0], [@row + 1, 0])
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
var Substitution = require('command-interpreter/substitution');
|
||||
var Address = require('command-interpreter/address');
|
||||
var LineAddress = require('command-interpreter/line-address');
|
||||
var AddressRange = require('command-interpreter/address-range');
|
||||
}
|
||||
|
||||
start
|
||||
@@ -11,10 +12,13 @@ start
|
||||
return operations;
|
||||
}
|
||||
|
||||
address
|
||||
= start:integer _ ',' _ end:integer {
|
||||
return new Address(start, end)
|
||||
}
|
||||
address = addressRange / primitiveAddress
|
||||
|
||||
addressRange
|
||||
= start:primitiveAddress _ ',' _ end:address { return new AddressRange(start, end) }
|
||||
|
||||
primitiveAddress
|
||||
= lineNumber:integer { return new LineAddress(lineNumber) }
|
||||
|
||||
substitution
|
||||
= "s" _ "/" find:pattern "/" replace:pattern "/" _ options:[g]* {
|
||||
|
||||
Reference in New Issue
Block a user