Class: RubyNext::Language::Rewriters::BindVarsPattern

Inherits:
PatternMatching show all
Defined in:
lib/ruby-next/language/rewriters/proposed/bind_vars_pattern.rb

Overview

Separate pattern matching rewriter for Ruby <3.2 to transpile patterns with variable (instance, class, global) binding

Constant Summary collapse

NAME =
"pattern-matching-find-pattern"
SYNTAX_PROBE =
"case 0; in @a; true; else; 1; end"
MIN_SUPPORTED_VERSION =
Gem::Version.new(RubyNext::NEXT_VERSION)

Constants inherited from PatternMatching

PatternMatching::ALTERNATION_MARKER, PatternMatching::CURRENT_HASH_KEY, PatternMatching::MATCHEE, PatternMatching::MATCHEE_ARR, PatternMatching::MATCHEE_HASH

Instance Attribute Summary

Attributes inherited from Base

#locals

Instance Method Summary collapse

Methods inherited from Base

ast?, #initialize, #s

Methods inherited from Abstract

ast?, #initialize, text?, unsupported_syntax?, unsupported_version?

Constructor Details

This class inherits a constructor from RubyNext::Language::Rewriters::Base

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class RubyNext::Language::Rewriters::PatternMatching

Instance Method Details

#on_case_match(node) ⇒ Object



18
19
20
21
22
23
24
# File 'lib/ruby-next/language/rewriters/proposed/bind_vars_pattern.rb', line 18

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

#on_match_pattern(node) ⇒ Object



26
27
28
29
30
31
32
# File 'lib/ruby-next/language/rewriters/proposed/bind_vars_pattern.rb', line 26

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

#on_match_pattern_p(node) ⇒ Object



34
35
36
37
38
39
40
# File 'lib/ruby-next/language/rewriters/proposed/bind_vars_pattern.rb', line 34

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

#on_match_var(node) ⇒ Object



42
43
44
45
# File 'lib/ruby-next/language/rewriters/proposed/bind_vars_pattern.rb', line 42

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