Class: Yoda::Parsing::Scopes::Base Abstract

Inherits:
Object
  • Object
show all
Defined in:
lib/yoda/parsing/scopes/base.rb

Overview

This class is abstract.

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(node, parent = nil) ⇒ Base

Returns a new instance of Base.

Parameters:

  • node (::Parser::AST::Node)
  • parent (Base, nil) (defaults to: nil)


21
22
23
24
25
26
27
28
# 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

Instance Attribute Details

#child_scopesArray<Base> (readonly)

Returns:



14
15
16
# File 'lib/yoda/parsing/scopes/base.rb', line 14

def child_scopes
  @child_scopes
end

#method_definitionsArray<MethodDefinition> (readonly)

Returns:



17
18
19
# File 'lib/yoda/parsing/scopes/base.rb', line 17

def method_definitions
  @method_definitions
end

#node::Parser::AST::Node (readonly)

Returns:

  • (::Parser::AST::Node)


8
9
10
# File 'lib/yoda/parsing/scopes/base.rb', line 8

def node
  @node
end

#parentNamespace? (readonly)

Returns:

  • (Namespace, nil)


11
12
13
# File 'lib/yoda/parsing/scopes/base.rb', line 11

def parent
  @parent
end

Instance Method Details

#ancestor_scopesArray<String>

Returns:

  • (Array<String>)


72
73
74
# File 'lib/yoda/parsing/scopes/base.rb', line 72

def ancestor_scopes
  [scope_name, *(parent ? parent.ancestor_scopes : [])]
end

#body_node::Parser::AST::Node

This method is abstract.

Returns:

  • (::Parser::AST::Node)


38
39
40
# File 'lib/yoda/parsing/scopes/base.rb', line 38

def body_node
  fail NotImplementedError
end

#body_nodesArray<::Parser::AST::Node>

This method is abstract.

Returns:

  • (Array<::Parser::AST::Node>)


32
33
34
# File 'lib/yoda/parsing/scopes/base.rb', line 32

def body_nodes
  fail NotImplementedError
end

#find_evaluation_root_scope(current_location) ⇒ Namespace?

Parameters:

Returns:

  • (Namespace, nil)


61
62
63
64
65
66
67
68
69
# 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) ⇒ true, false

Parameters:

Returns:

  • (true, false)


44
45
46
# File 'lib/yoda/parsing/scopes/base.rb', line 44

def inner_location?(location)
  location.included?(node.location)
end

#kindSymbol

This method is abstract.

Returns:

  • (Symbol)


50
51
52
# File 'lib/yoda/parsing/scopes/base.rb', line 50

def kind
  fail NotImplementedError
end

#method?true, false

Returns:

  • (true, false)


55
56
57
# File 'lib/yoda/parsing/scopes/base.rb', line 55

def method?
  false
end