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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
# frozen_string_literal: true
module Parser
##
# {Parser::Rewriter} is deprecated. Use {Parser::TreeRewriter} instead.
# It has a backwards compatible API and uses {Parser::Source::TreeRewriter}
# instead of {Parser::Source::Rewriter}.
# Please check the documentation for {Parser::Source::Rewriter} for details.
#
# @api public
# @deprecated Use {Parser::TreeRewriter}
#
class Rewriter < Parser::AST::Processor
##
# Rewrites the AST/source buffer and returns a String containing the new
# version.
#
# @param [Parser::Source::Buffer] source_buffer
# @param [Parser::AST::Node] ast
# @return [String]
#
def rewrite(source_buffer, ast)
@source_rewriter = Source::Rewriter.new(source_buffer)
process(ast)
@source_rewriter.process
end
##
# Returns `true` if the specified node is an assignment node, returns false
# otherwise.
#
# @param [Parser::AST::Node] node
# @return [Boolean]
#
def assignment?(node)
[:lvasgn, :ivasgn, :gvasgn, :cvasgn, :casgn].include?(node.type)
end
##
# Removes the source range.
#
# @param [Parser::Source::Range] range
#
def remove(range)
@source_rewriter.remove(range)
end
##
# Wraps the given source range with the given values.
#
# @param [Parser::Source::Range] range
# @param [String] content
#
def wrap(range, before, after)
@source_rewriter.wrap(range, before, after)
end
##
# Inserts new code before the given source range.
#
# @param [Parser::Source::Range] range
# @param [String] content
#
def insert_before(range, content)
@source_rewriter.insert_before(range, content)
end
##
# Inserts new code after the given source range.
#
# @param [Parser::Source::Range] range
# @param [String] content
#
def insert_after(range, content)
@source_rewriter.insert_after(range, content)
end
##
# Replaces the code of the source range `range` with `content`.
#
# @param [Parser::Source::Range] range
# @param [String] content
#
def replace(range, content)
@source_rewriter.replace(range, content)
end
DEPRECATION_WARNING = [
'Parser::Rewriter is deprecated.',
'Please update your code to use Parser::TreeRewriter instead'
].join("\n").freeze
extend Deprecation
def initialize(*)
self.class.warn_of_deprecation
Source::Rewriter.warned_of_deprecation = true
super
end
end
end
|