Sha256: 633115d990ac18f7076afa2c8a1ba9664a7180f2314aa35da9d776c561de305b
Contents?: true
Size: 1.46 KB
Versions: 5
Compression:
Stored size: 1.46 KB
Contents
# frozen_string_literal: true module RubyNext module Language module Rewriters class EndlessRange < Base NAME = "endless-range" SYNTAX_PROBE = "[0, 1][1..]" MIN_SUPPORTED_VERSION = Gem::Version.new("2.6.0") 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 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 alias_method :on_irange, :on_erange private attr_reader :current_index def index_arg?(node) ((!(((!current_index.nil?) || nil) && current_index.children).nil?) || nil) && (((!current_index.nil?) || nil) && current_index.children).include?(node) end end end end end
Version data entries
5 entries across 5 versions & 1 rubygems