Sha256: d1db9036d484cafee0077f9e242aa0932c80f0d920b9898647da3f3dc63f77f9

Contents?: true

Size: 1.69 KB

Versions: 6

Compression:

Stored size: 1.69 KB

Contents

# frozen_string_literal: true

module Mutant
  module AST
    module Regexp
      class Transformer
        # Transformer for named groups
        class NamedGroup < self
          register :regexp_named_group

          # Mapper from `Regexp::Expression` to `Parser::AST::Node`
          class ExpressionToAST < Transformer::ExpressionToAST

            # Transform named group into node
            #
            # @return [Parser::AST::Node]
            def call
              quantify(ast(expression.name, *children))
            end
          end # ExpressionToAST

          # Mapper from `Parser::AST::Node` to `Regexp::Expression`
          class ASTToExpression < Transformer::ASTToExpression
            include NamedChildren

            children :name

          private

            # Convert node into expression
            #
            # @return [Regexp::Expression::Group::Named]
            def transform
              named_group.tap do |expression|
                expression.expressions = subexpressions
              end
            end

            # Recursive mapping of children
            #
            # @return [Array<Regexp::Expression>]
            def subexpressions
              remaining_children.map(&Regexp.public_method(:to_expression))
            end

            # Named group instance constructed using name
            #
            # @return [Regexp::Expression::Group::Named]
            def named_group
              ::Regexp::Expression::Group::Named.new(
                ::Regexp::Token.new(:group, :named, "(?<#{name}>")
              )
            end
          end # ASTToExpression
        end # NamedGroup
      end # Transformer
    end # Regexp
  end # AST
end # Mutant

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
mutant-0.8.24 lib/mutant/ast/regexp/transformer/named_group.rb
mutant-0.8.23 lib/mutant/ast/regexp/transformer/named_group.rb
mutant-0.8.22 lib/mutant/ast/regexp/transformer/named_group.rb
mutant-0.8.21 lib/mutant/ast/regexp/transformer/named_group.rb
mutant-0.8.20 lib/mutant/ast/regexp/transformer/named_group.rb
mutant-0.8.19 lib/mutant/ast/regexp/transformer/named_group.rb