Class: Mutant::AST::Structure::Node Private
- Inherits:
-
Object
- Object
- Mutant::AST::Structure::Node
- Includes:
- Unparser::Adamantium
- Defined in:
- lib/mutant/ast/structure.rb
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Defined Under Namespace
Class Method Summary collapse
- .fixed(values) ⇒ Object private
Instance Method Summary collapse
- #attribute(name) ⇒ Object private
- #attributes ⇒ Object private
- #descendant(name) ⇒ Object private
- #descendants ⇒ Object private
- #each_descendant(node, &block) ⇒ Object private
- #each_descendant_deep(node, &block) ⇒ Object private
- #each_node(node, &block) ⇒ Object private
- #maybe_attribute(name) ⇒ Object private
- #maybe_descendant(name) ⇒ Object private
Class Method Details
.fixed(values) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
99 100 101 102 103 |
# File 'lib/mutant/ast/structure.rb', line 99 def self.fixed(values) values.each_with_index.map do |(klass, name), index| klass.new(index:, name:) end end |
Instance Method Details
#attribute(name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
87 88 89 |
# File 'lib/mutant/ast/structure.rb', line 87 def attribute(name) maybe_attribute(name) or fail "Node #{type} does not have fixed attribute #{name}" end |
#attributes ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
79 80 81 |
# File 'lib/mutant/ast/structure.rb', line 79 def attributes fixed.select(&:attribute?).to_h { |child| [child.name, child] } end |
#descendant(name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
83 84 85 |
# File 'lib/mutant/ast/structure.rb', line 83 def descendant(name) maybe_descendant(name) or fail "Node #{type} does not have fixed descendant #{name}" end |
#descendants ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
75 76 77 |
# File 'lib/mutant/ast/structure.rb', line 75 def descendants fixed.select(&:descendant?).to_h { |child| [child.name, child] } end |
#each_descendant(node, &block) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/mutant/ast/structure.rb', line 61 def each_descendant(node, &block) descendants.each_value do |descendant| value = descendant.value(node) block.call(value) if value end variable_descendants(node).each do |value| block.call(value) if value end self end |
#each_descendant_deep(node, &block) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
49 50 51 52 53 54 |
# File 'lib/mutant/ast/structure.rb', line 49 def each_descendant_deep(node, &block) each_descendant(node) do |descendant| block.call(descendant) Structure.for(descendant.type).each_descendant_deep(descendant, &block) end end |
#each_node(node, &block) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
56 57 58 59 |
# File 'lib/mutant/ast/structure.rb', line 56 def each_node(node, &block) block.call(node) each_descendant_deep(node, &block) end |
#maybe_attribute(name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
91 92 93 |
# File 'lib/mutant/ast/structure.rb', line 91 def maybe_attribute(name) attributes[name] end |
#maybe_descendant(name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
95 96 97 |
# File 'lib/mutant/ast/structure.rb', line 95 def maybe_descendant(name) descendants[name] end |