class RubyNext::Language::Rewriters::InPattern

Separate pattern matching rewriter for Ruby 2.7 to transpile only `in` patterns

Constants

MIN_SUPPORTED_VERSION
NAME
SYNTAX_PROBE

Public Instance Methods

on_case_match(node) click to toggle source

Make case-match no-op

# File lib/ruby-next/language/rewriters/in_pattern.rb, line 18
def on_case_match(node)
  node
end
on_match_pattern_p(node) click to toggle source
# File lib/ruby-next/language/rewriters/in_pattern.rb, line 22
def on_match_pattern_p(node)
  context.track! self

  @deconstructed_keys = {}
  @predicates = Predicates::Noop.new

  matchee =
    s(:begin, s(:lvasgn, MATCHEE, node.children[0]))

  pattern =
    locals.with(
      matchee: MATCHEE,
      arr: MATCHEE_ARR,
      hash: MATCHEE_HASH
    ) do
      send(
        :"#{node.children[1].type}_clause",
        node.children[1]
      )
    end

  node.updated(
    :and,
    [
      matchee,
      pattern
    ]
  ).tap do |new_node|
    replace(node.loc.expression, inline_blocks(unparse(new_node)))
  end
end