Class: Prism::Merge::BeginNodeMergePlanner
- Inherits:
-
Object
- Object
- Prism::Merge::BeginNodeMergePlanner
- Defined in:
- lib/prism/merge/begin_node_merge_planner.rb
Defined Under Namespace
Classes: Step
Instance Attribute Summary collapse
-
#dest_node ⇒ Object
readonly
Returns the value of attribute dest_node.
-
#merger ⇒ Object
readonly
Returns the value of attribute merger.
-
#node_preference ⇒ Object
readonly
Returns the value of attribute node_preference.
-
#template_node ⇒ Object
readonly
Returns the value of attribute template_node.
Instance Method Summary collapse
-
#initialize(merger:, template_node:, dest_node:, node_preference:) ⇒ BeginNodeMergePlanner
constructor
A new instance of BeginNodeMergePlanner.
- #plan ⇒ Object
Constructor Details
#initialize(merger:, template_node:, dest_node:, node_preference:) ⇒ BeginNodeMergePlanner
Returns a new instance of BeginNodeMergePlanner.
23 24 25 26 27 28 |
# File 'lib/prism/merge/begin_node_merge_planner.rb', line 23 def initialize(merger:, template_node:, dest_node:, node_preference:) @merger = merger @template_node = template_node @dest_node = dest_node @node_preference = node_preference end |
Instance Attribute Details
#dest_node ⇒ Object (readonly)
Returns the value of attribute dest_node.
21 22 23 |
# File 'lib/prism/merge/begin_node_merge_planner.rb', line 21 def dest_node @dest_node end |
#merger ⇒ Object (readonly)
Returns the value of attribute merger.
21 22 23 |
# File 'lib/prism/merge/begin_node_merge_planner.rb', line 21 def merger @merger end |
#node_preference ⇒ Object (readonly)
Returns the value of attribute node_preference.
21 22 23 |
# File 'lib/prism/merge/begin_node_merge_planner.rb', line 21 def node_preference @node_preference end |
#template_node ⇒ Object (readonly)
Returns the value of attribute template_node.
21 22 23 |
# File 'lib/prism/merge/begin_node_merge_planner.rb', line 21 def template_node @template_node end |
Instance Method Details
#plan ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/prism/merge/begin_node_merge_planner.rb', line 30 def plan template_clause_regions = clause_regions_by_type(template_node) dest_clause_regions = clause_regions_by_type(dest_node) template_clause_nodes = merger.send(:begin_node_clause_nodes_by_type, template_node) dest_clause_nodes = merger.send(:begin_node_clause_nodes_by_type, dest_node) return [] if template_clause_regions.empty? && dest_clause_regions.empty? clause_types = if node_preference == :template merger.send(:merge_ordered_clause_types, template_clause_regions.keys, dest_clause_regions.keys) else merger.send(:merge_ordered_clause_types, dest_clause_regions.keys, template_clause_regions.keys) end clause_types = merger.send(:canonicalize_rescue_clause_order, clause_types) clause_types = merger.send(:canonicalize_begin_clause_kind_order, clause_types) clause_types.each_with_object([]) do |clause_type, steps| template_region = template_clause_regions[clause_type] dest_region = dest_clause_regions[clause_type] template_clause_node = template_clause_nodes[clause_type] dest_clause_node = dest_clause_nodes[clause_type] if template_region && dest_region && template_clause_node && dest_clause_node merged_step = build_shared_clause_step( clause_type: clause_type, template_region: template_region, dest_region: dest_region, template_clause_node: template_clause_node, dest_clause_node: dest_clause_node ) steps << merged_step next end unmatched_step = build_unmatched_clause_step( clause_type: clause_type, template_region: template_region, dest_region: dest_region, template_clause_node: template_clause_node, dest_clause_node: dest_clause_node ) steps << unmatched_step if unmatched_step end end |