class Yoda::Parsing::Scopes::Base

Base class for wrapper classes of nodes which create lexical scopes. @abstract

Attributes

child_scopes[R]

@return [Array<Base>]

method_definitions[R]

@return [Array<MethodDefinition>]

node[R]

@return [::Parser::AST::Node]

parent[R]

@return [Namespace, nil]

Public Class Methods

new(node, parent = nil) click to toggle source

@param node [::Parser::AST::Node] @param parent [Base, nil]

# File lib/yoda/parsing/scopes/base.rb, line 21
def initialize(node, parent = nil)
  fail ArgumentError, node unless node.is_a?(::Parser::AST::Node)
  fail ArgumentError, parent if parent && !parent.is_a?(Base)
  @node = node
  @parent = parent
  @method_definitions = []
  @child_scopes = []
end

Public Instance Methods

ancestor_scopes() click to toggle source

@return [Array<String>]

# File lib/yoda/parsing/scopes/base.rb, line 72
def ancestor_scopes
  [scope_name, *(parent ? parent.ancestor_scopes : [])]
end
body_node() click to toggle source

@abstract @return [::Parser::AST::Node]

# File lib/yoda/parsing/scopes/base.rb, line 38
def body_node
  fail NotImplementedError
end
body_nodes() click to toggle source

@abstract @return [Array<::Parser::AST::Node>]

# File lib/yoda/parsing/scopes/base.rb, line 32
def body_nodes
  fail NotImplementedError
end
find_evaluation_root_scope(current_location) click to toggle source

@param current_location [Location] @return [Namespace, nil]

# File lib/yoda/parsing/scopes/base.rb, line 61
def find_evaluation_root_scope(current_location)
  return nil unless inner_location?(current_location)
  [*child_scopes, *method_definitions].each do |s|
    if scope = s.find_evaluation_root_scope(current_location)
      return scope
    end
  end
  return self
end
inner_location?(location) click to toggle source

@param location [Location] @return [true, false]

# File lib/yoda/parsing/scopes/base.rb, line 44
def inner_location?(location)
  location.included?(node.location)
end
kind() click to toggle source

@abstract @return [Symbol]

# File lib/yoda/parsing/scopes/base.rb, line 50
def kind
  fail NotImplementedError
end
method?() click to toggle source

@return [true, false]

# File lib/yoda/parsing/scopes/base.rb, line 55
def method?
  false
end