Module: Antlers::Parser
- Defined in:
- lib/parser.rb
Class Method Summary collapse
-
.branch(node:, sequence:) ⇒ Object
rubocop:disable Metrics/AbcSize.
- .parse(sequence, id: :root_node) ⇒ Object
- .sub_branch(node:, sequence:, end_key:, end_name: nil) ⇒ Object
Class Method Details
.branch(node:, sequence:) ⇒ Object
rubocop:disable Metrics/AbcSize
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/parser.rb', line 13 def branch(node:, sequence:) # rubocop:disable Metrics/AbcSize until sequence.empty? segment = sequence.shift if segment.is_a?(String) node.children << segment elsif segment[:var] node.children << NodeFactory.var_node(segment:) elsif segment[:prop] node.children << NodeFactory.prop_node(segment:) elsif segment[:slot] node.children << NodeFactory.yield_node(segment:) elsif segment[:slot_def] slot_node = NodeFactory.slot_node(segment:) node.children << slot_node sub_branch(node: slot_node, sequence:, end_key: :slot_end, end_name: slot_node.name) elsif segment[:for_def] for_node = NodeFactory.for_node(segment:) node.children << for_node sub_branch(node: for_node, sequence:, end_key: :for_end, end_name: 'level_1') end end node end |
.parse(sequence, id: :root_node) ⇒ Object
9 10 11 |
# File 'lib/parser.rb', line 9 def parse(sequence, id: :root_node) branch(node: RootNode.new(name: id), sequence:) end |
.sub_branch(node:, sequence:, end_key:, end_name: nil) ⇒ Object
39 40 41 42 43 44 |
# File 'lib/parser.rb', line 39 def sub_branch(node:, sequence:, end_key:, end_name: nil) sub_sequence = [] sub_sequence << sequence.shift until sequence.first.is_a?(Hash) && sequence.first[end_key] == end_name branch(node:, sequence: sub_sequence) end |