Sha256: 69d1e6f82031288ed76737dfdad79dd14c792a0b416a827c4b8af3baa086e378

Contents?: true

Size: 1.36 KB

Versions: 6

Compression:

Stored size: 1.36 KB

Contents

# frozen_string_literal: true

module RubyNext
  module Language
    module Rewriters
      using RubyNext

      # Separate pattern matching rewriter for Ruby <3.2 to
      # transpile patterns with variable (instance, class, global) binding
      class BindVarsPattern < PatternMatching
        NAME = "pattern-matching-find-pattern"
        SYNTAX_PROBE = "case 0; in @a; true; else; 1; end"
        MIN_SUPPORTED_VERSION = Gem::Version.new(RubyNext::NEXT_VERSION)

        def on_case_match(node)
          @has_vars_pattern = false
          process_regular_node(node).then do |new_node|
            return new_node unless has_vars_pattern
            super(node)
          end
        end

        def on_match_pattern(node)
          @has_vars_pattern = false
          process_regular_node(node).then do |new_node|
            return new_node unless has_vars_pattern
            super(node)
          end
        end

        def on_match_pattern_p(node)
          @has_vars_pattern = false
          process_regular_node(node).then do |new_node|
            return new_node unless has_vars_pattern
            super(node)
          end
        end

        def on_match_var(node)
          @has_vars_pattern = true if node.children[0].is_a?(::Parser::AST::Node)
          super(node)
        end

        private

        attr_reader :has_vars_pattern
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
ruby-next-core-0.15.3 lib/ruby-next/language/rewriters/proposed/bind_vars_pattern.rb
ruby-next-core-0.15.2 lib/ruby-next/language/rewriters/proposed/bind_vars_pattern.rb
ruby-next-core-0.15.1 lib/ruby-next/language/rewriters/proposed/bind_vars_pattern.rb
ruby-next-core-0.15.0 lib/ruby-next/language/rewriters/proposed/bind_vars_pattern.rb
ruby-next-core-0.14.1 lib/ruby-next/language/rewriters/proposed/bind_vars_pattern.rb
ruby-next-core-0.14.0 lib/ruby-next/language/rewriters/proposed/bind_vars_pattern.rb