Class: RSpec::Support::Source::Node Private
Do not use. This class is for internal use only.
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Subclasses:
RSpec::Support::Source::ExpressionSequenceNode
|
|
Super Chains via Extension / Inclusion / Inheritance | |
Instance Chain:
self,
Enumerable
|
|
Inherits: | Object |
Defined in: | rspec-support/lib/rspec/support/source/node.rb |
Overview
A wrapper for Ripper AST node which is generated with Ripper.sexp
.
Class Method Summary
- .new(ripper_sexp, parent = nil) ⇒ Node constructor Internal use only
- .sexp?(array) ⇒ Boolean Internal use only
Instance Attribute Summary
Instance Method Summary
Class Method Details
.sexp?(array) ⇒ Boolean
# File 'rspec-support/lib/rspec/support/source/node.rb', line 15
def self.sexp?(array) array.is_a?(Array) && array.first.is_a?(Symbol) end
Instance Attribute Details
#parent (readonly)
[ GitHub ]# File 'rspec-support/lib/rspec/support/source/node.rb', line 13
attr_reader :sexp, :parent
#sexp (readonly)
[ GitHub ]# File 'rspec-support/lib/rspec/support/source/node.rb', line 13
attr_reader :sexp, :parent
Instance Method Details
#args
[ GitHub ]# File 'rspec-support/lib/rspec/support/source/node.rb', line 28
def args @args ||= raw_args.map do |raw_arg| if Node.sexp?(raw_arg) Node.new(raw_arg, self) elsif Location.location?(raw_arg) Location.new(*raw_arg) elsif raw_arg.is_a?(Array) ExpressionSequenceNode.new(raw_arg, self) else raw_arg end end.freeze end
#children
[ GitHub ]# File 'rspec-support/lib/rspec/support/source/node.rb', line 42
def children @children ||= args.select { |arg| arg.is_a?(Node) }.freeze end
#each
We use a loop here (instead of recursion) to prevent SystemStackError
# File 'rspec-support/lib/rspec/support/source/node.rb', line 51
def each return to_enum(__method__) unless block_given? node_queue = [] node_queue << self while (current_node = node_queue.shift) yield current_node node_queue.concat(current_node.children) end end
#each_ancestor
[ GitHub ]# File 'rspec-support/lib/rspec/support/source/node.rb', line 63
def each_ancestor return to_enum(__method__) unless block_given? current_node = self while (current_node = current_node.parent) yield current_node end end
#inspect
[ GitHub ]# File 'rspec-support/lib/rspec/support/source/node.rb', line 73
def inspect "#<#{self.class} #{type}>" end
#location
[ GitHub ]#raw_args (private)
[ GitHub ]# File 'rspec-support/lib/rspec/support/source/node.rb', line 79
def raw_args sexp[1..-1] || [] end
#type
[ GitHub ]# File 'rspec-support/lib/rspec/support/source/node.rb', line 24
def type sexp[0] end