class RubyNext::Language::Rewriters::EndlessRange

Constants

MIN_SUPPORTED_VERSION
NAME
SYNTAX_PROBE

Attributes

current_index[R]

Public Instance Methods

on_erange(node) click to toggle source
# File lib/ruby-next/language/rewriters/endless_range.rb, line 25
def on_erange(node)
  return unless node.children.last.nil?

  context.track! self

  new_end =
    if index_arg?(node)
      s(:int, -1)
    else
      s(:const,
        s(:const,
          s(:cbase), :Float),
        :INFINITY)
    end

  replace(node.loc.expression, "#{node.children.first.loc.expression.source}..#{unparse(new_end)}")

  node.updated(
    :irange,
    [
      node.children.first,
      new_end
    ]
  )
end
Also aliased as: on_irange
on_index(node) click to toggle source
# File lib/ruby-next/language/rewriters/endless_range.rb, line 11
def on_index(node)
  @current_index = node
  new_index = process(node.children.last)
  return unless new_index != node.children.last

  node.updated(
    nil,
    [
      node.children.first,
      new_index
    ]
  )
end
on_irange(node)
Alias for: on_erange

Private Instance Methods

index_arg?(node) click to toggle source
# File lib/ruby-next/language/rewriters/endless_range.rb, line 57
def index_arg?(node)
  current_index&.children&.include?(node)
end