class RuboCop::AST::NodePattern::Compiler::Subcompiler

Base class for subcompilers Implements visitor pattern

Doc on how this fits in the compiling process:

/docs/modules/ROOT/pages/node_pattern.adoc

Attributes

registry[R]
compiler[R]
node[R]

@api private

Public Class Methods

new(compiler) click to toggle source
# File lib/rubocop/ast/node_pattern/compiler/subcompiler.rb, line 15
def initialize(compiler)
  @compiler = compiler
  @node = nil
end

Private Class Methods

inherited(base) click to toggle source
Calls superclass method
# File lib/rubocop/ast/node_pattern/compiler/subcompiler.rb, line 47
def inherited(base)
  us = self
  base.class_eval { @registry = us.registry.dup }
  super
end
method_added(method) click to toggle source
Calls superclass method
# File lib/rubocop/ast/node_pattern/compiler/subcompiler.rb, line 42
def method_added(method)
  @registry[Regexp.last_match(1).to_sym] = method if method =~ /^visit_(.*)/
  super
end

Public Instance Methods

compile(node) click to toggle source
# File lib/rubocop/ast/node_pattern/compiler/subcompiler.rb, line 20
def compile(node)
  prev = @node
  @node = node
  do_compile
ensure
  @node = prev
end

Private Instance Methods

do_compile() click to toggle source
# File lib/rubocop/ast/node_pattern/compiler/subcompiler.rb, line 34
def do_compile
  send(self.class.registry.fetch(node.type, :visit_other_type))
end