Class: RubyNext::Language::Rewriters::PinVarsPattern

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

Overview

Separate pattern matching rewriter for Ruby 2.7 and 3.0 to transpile only ^(ivar|cvar|gvar)

Constant Summary collapse

NAME =
"pattern-matching-pin-vars"
SYNTAX_PROBE =
"@a = 0; case 0; in ^@a; true; end"
MIN_SUPPORTED_VERSION =
Gem::Version.new("3.1.0")

Constants inherited from PatternMatching

RubyNext::Language::Rewriters::PatternMatching::ALTERNATION_MARKER, RubyNext::Language::Rewriters::PatternMatching::CURRENT_HASH_KEY, RubyNext::Language::Rewriters::PatternMatching::MATCHEE, RubyNext::Language::Rewriters::PatternMatching::MATCHEE_ARR, RubyNext::Language::Rewriters::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



15
16
17
18
19
20
21
# File 'lib/ruby-next/language/rewriters/3.1/pin_vars_pattern.rb', line 15

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

#on_match_pattern(node) ⇒ Object



23
24
25
26
27
28
29
# File 'lib/ruby-next/language/rewriters/3.1/pin_vars_pattern.rb', line 23

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

#on_match_pattern_p(node) ⇒ Object



31
32
33
34
35
36
37
# File 'lib/ruby-next/language/rewriters/3.1/pin_vars_pattern.rb', line 31

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

#on_pin(node) ⇒ Object



39
40
41
42
# File 'lib/ruby-next/language/rewriters/3.1/pin_vars_pattern.rb', line 39

def on_pin(node)
  @has_pin_vars = node.children.first.type != :lvar
  super(node)
end