Class: Yoda::Parsing::Scopes::Base
Abstract
- Inherits:
-
Object
- Object
- Yoda::Parsing::Scopes::Base
show all
- Defined in:
- lib/yoda/parsing/scopes/base.rb
Overview
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.
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_scopes ⇒ Array<Base>
14
15
16
|
# File 'lib/yoda/parsing/scopes/base.rb', line 14
def child_scopes
@child_scopes
end
|
17
18
19
|
# File 'lib/yoda/parsing/scopes/base.rb', line 17
def method_definitions
@method_definitions
end
|
#node ⇒ ::Parser::AST::Node
8
9
10
|
# File 'lib/yoda/parsing/scopes/base.rb', line 8
def node
@node
end
|
#parent ⇒ Namespace?
11
12
13
|
# File 'lib/yoda/parsing/scopes/base.rb', line 11
def parent
@parent
end
|
Instance Method Details
#ancestor_scopes ⇒ 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
38
39
40
|
# File 'lib/yoda/parsing/scopes/base.rb', line 38
def body_node
fail NotImplementedError
end
|
#body_nodes ⇒ 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?
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
44
45
46
|
# File 'lib/yoda/parsing/scopes/base.rb', line 44
def inner_location?(location)
location.included?(node.location)
end
|
#kind ⇒ Symbol
50
51
52
|
# File 'lib/yoda/parsing/scopes/base.rb', line 50
def kind
fail NotImplementedError
end
|
#method? ⇒ true, false
55
56
57
|
# File 'lib/yoda/parsing/scopes/base.rb', line 55
def method?
false
end
|