123456789_123456789_123456789_123456789_123456789_

Class: RuboCop::AST::NodePattern::Compiler::Subcompiler

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Subclasses:
AtomSubcompiler, NodePatternSubcompiler, SequenceSubcompiler, RuboCop::AST::NodePattern::Compiler::Debug::NodePatternSubcompiler, RuboCop::AST::NodePattern::Compiler::Debug::SequenceSubcompiler
Inherits: Object
Defined in: lib/rubocop/ast/node_pattern/compiler/subcompiler.rb

Overview

Base class for subcompilers Implements visitor pattern

Doc on how this fits in the compiling process: /docs/modules/ROOT/pages/node_pattern.adoc

Class Attribute Summary

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(compiler) ⇒ Subcompiler

[ GitHub ]

  
# File 'lib/rubocop/ast/node_pattern/compiler/subcompiler.rb', line 15

def initialize(compiler)
  @compiler = compiler
  @node = nil
end

Class Attribute Details

.registry (readonly)

[ GitHub ]

  
# File 'lib/rubocop/ast/node_pattern/compiler/subcompiler.rb', line 40

attr_reader :registry

Class Method Details

.inherited(base)

[ GitHub ]

  
# 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)

[ GitHub ]

  
# 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

Instance Attribute Details

#compiler (readonly)

[ GitHub ]

  
# File 'lib/rubocop/ast/node_pattern/compiler/subcompiler.rb', line 13

attr_reader :compiler

#node (readonly, private)

[ GitHub ]

  
# File 'lib/rubocop/ast/node_pattern/compiler/subcompiler.rb', line 32

attr_reader :node

Instance Method Details

#compile(node)

[ GitHub ]

  
# File 'lib/rubocop/ast/node_pattern/compiler/subcompiler.rb', line 20

def compile(node)
  prev = @node
  @node = node
  do_compile
ensure
  @node = prev
end

#do_compile (private)

[ GitHub ]

  
# 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