class RubyNext::Language::Rewriters::Base
Attributes
context[R]
locals[R]
Public Class Methods
new(context)
click to toggle source
Calls superclass method
# File lib/ruby-next/language/rewriters/base.rb, line 85 def initialize(context) @context = context @locals = LocalsTracker.new super() end
unsupported_syntax?()
click to toggle source
Returns true if the syntax is supported by the current Ruby (performs syntax check, not version check)
# File lib/ruby-next/language/rewriters/base.rb, line 59 def unsupported_syntax? save_verbose, $VERBOSE = $VERBOSE, nil eval_mid = Kernel.respond_to?(:eval_without_ruby_next) ? :eval_without_ruby_next : :eval Kernel.send eval_mid, self::SYNTAX_PROBE, nil, __FILE__, __LINE__ false rescue SyntaxError, StandardError true ensure $VERBOSE = save_verbose end
unsupported_version?(version)
click to toggle source
Returns true if the syntax is supported by the specified version
# File lib/ruby-next/language/rewriters/base.rb, line 72 def unsupported_version?(version) self::MIN_SUPPORTED_VERSION > version end
Private Class Methods
transform(source)
click to toggle source
# File lib/ruby-next/language/rewriters/base.rb, line 78 def transform(source) Language.transform(source, rewriters: [self], using: false) end
Public Instance Methods
s(type, *children)
click to toggle source
# File lib/ruby-next/language/rewriters/base.rb, line 91 def s(type, *children) ::Parser::AST::Node.new(type, children) end
Private Instance Methods
find_child(node) { |child| ... }
click to toggle source
BFS with predicate block
# File lib/ruby-next/language/rewriters/base.rb, line 98 def find_child(node) queue = [node] loop do break if queue.empty? child = queue.shift next unless child.is_a?(::Parser::AST::Node) return child if yield child queue.push(*child.children) end nil end
insert_after(range, ast)
click to toggle source
# File lib/ruby-next/language/rewriters/base.rb, line 123 def insert_after(range, ast) @source_rewriter&.insert_after(range, unparse(ast)) end
insert_before(range, ast)
click to toggle source
# File lib/ruby-next/language/rewriters/base.rb, line 127 def insert_before(range, ast) @source_rewriter&.insert_before(range, unparse(ast)) end
remove(range)
click to toggle source
# File lib/ruby-next/language/rewriters/base.rb, line 119 def remove(range) @source_rewriter&.remove(range) end
replace(range, ast)
click to toggle source
# File lib/ruby-next/language/rewriters/base.rb, line 115 def replace(range, ast) @source_rewriter&.replace(range, unparse(ast)) end
unparse(ast)
click to toggle source
# File lib/ruby-next/language/rewriters/base.rb, line 131 def unparse(ast) return ast if ast.is_a?(String) Unparser.unparse(ast).chomp end