Module: Ibex::NormalizeNamedReferences
- Included in:
- Normalizer
- Defined in:
- lib/ibex/normalize/named_references.rb,
sig/ibex/normalize/named_references.rbs
Overview
Named-reference collection and validation shared by ordinary and parameterized items.
Instance Method Summary collapse
- #add_named_reference(item, refs, index) ⇒ void
- #named_reference_in(item) ⇒ Frontend::AST::SymbolReference, ...
- #reject_group_named_references(group) ⇒ void
- #unwrap_reference(item) ⇒ Frontend::AST::SymbolReference, ...
Instance Method Details
#add_named_reference(item, refs, index) ⇒ void
This method returns an undefined value.
34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/ibex/normalize/named_references.rb', line 34 def add_named_reference(item, refs, index) # @type self: Normalizer reference = unwrap_reference(item) return unless reference name = reference.named_reference return unless name fail_at(reference.loc, "reserved named reference #{name}") if Normalizer::RESERVED_NAMES.include?(name) fail_at(reference.loc, "duplicate named reference #{name}") if refs.any? { |entry| entry[:name] == name } refs << { name: name, index: index } end |
#named_reference_in(item) ⇒ Frontend::AST::SymbolReference, ...
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/ibex/normalize/named_references.rb', line 16 def named_reference_in(item) # @type self: Normalizer if (item.is_a?(Frontend::AST::SymbolReference) || item.is_a?(Frontend::AST::ParameterizedReference)) && item.named_reference return item end if item.is_a?(Frontend::AST::Group) return item.alternatives.flatten.filter_map { |child| named_reference_in(child) }.first end if item.is_a?(Frontend::AST::Optional) || item.is_a?(Frontend::AST::Star) || item.is_a?(Frontend::AST::Plus) || item.is_a?(Frontend::AST::SeparatedList) return named_reference_in(item.item) end nil end |
#reject_group_named_references(group) ⇒ void
This method returns an undefined value.
9 10 11 12 13 |
# File 'lib/ibex/normalize/named_references.rb', line 9 def reject_group_named_references(group) # @type self: Normalizer reference = group.alternatives.flatten.filter_map { |item| named_reference_in(item) }.first fail_at(reference.loc, "named references inside EBNF groups are not supported") if reference end |
#unwrap_reference(item) ⇒ Frontend::AST::SymbolReference, ...
48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/ibex/normalize/named_references.rb', line 48 def unwrap_reference(item) # @type self: Normalizer return item if item.is_a?(Frontend::AST::SymbolReference) || item.is_a?(Frontend::AST::ParameterizedReference) if item.is_a?(Frontend::AST::Optional) || item.is_a?(Frontend::AST::Star) || item.is_a?(Frontend::AST::Plus) || item.is_a?(Frontend::AST::SeparatedList) return unwrap_reference(item.item) end nil end |