1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
# frozen_string_literal: true
module Parser
module Source
##
# @api private
#
class Rewriter::Action
include Comparable
attr_reader :range, :replacement, :allow_multiple_insertions, :order
alias_method :allow_multiple_insertions?, :allow_multiple_insertions
def initialize(range, replacement='', allow_multiple_insertions = false, order = 0)
@range = range
@replacement = replacement
@allow_multiple_insertions = allow_multiple_insertions
@order = order
freeze
end
def <=>(other)
result = range.begin_pos <=> other.range.begin_pos
return result unless result.zero?
order <=> other.order
end
def to_s
if @range.length == 0 && @replacement.empty?
'do nothing'
elsif @range.length == 0
"insert #{@replacement.inspect}"
elsif @replacement.empty?
"remove #{@range.length} character(s)"
else
"replace #{@range.length} character(s) with #{@replacement.inspect}"
end
end
end
end
end
|