ruby-next-core 0.8.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +47 -0
- data/README.md +85 -11
- data/bin/transform +9 -1
- data/lib/.rbnext/2.3/ruby-next/commands/core_ext.rb +167 -0
- data/lib/.rbnext/2.3/ruby-next/commands/nextify.rb +198 -0
- data/lib/.rbnext/2.3/ruby-next/language/eval.rb +66 -0
- data/lib/.rbnext/2.3/ruby-next/language/rewriters/base.rb +121 -0
- data/lib/.rbnext/2.3/ruby-next/language/rewriters/endless_range.rb +63 -0
- data/lib/.rbnext/2.3/ruby-next/language/rewriters/pattern_matching.rb +944 -0
- data/lib/.rbnext/2.3/ruby-next/utils.rb +65 -0
- data/lib/ruby-next.rb +8 -5
- data/lib/ruby-next/cli.rb +2 -2
- data/lib/ruby-next/commands/core_ext.rb +2 -2
- data/lib/ruby-next/commands/nextify.rb +64 -22
- data/lib/ruby-next/core.rb +39 -22
- data/lib/ruby-next/core/array/deconstruct.rb +9 -9
- data/lib/ruby-next/core/array/difference_union_intersection.rb +12 -12
- data/lib/ruby-next/core/constants/no_matching_pattern_error.rb +3 -3
- data/lib/ruby-next/core/enumerable/filter.rb +8 -8
- data/lib/ruby-next/core/enumerable/filter_map.rb +25 -25
- data/lib/ruby-next/core/enumerable/tally.rb +7 -7
- data/lib/ruby-next/core/enumerator/produce.rb +12 -12
- data/lib/ruby-next/core/hash/deconstruct_keys.rb +9 -9
- data/lib/ruby-next/core/hash/except.rb +11 -0
- data/lib/ruby-next/core/hash/merge.rb +8 -8
- data/lib/ruby-next/core/kernel/then.rb +2 -2
- data/lib/ruby-next/core/proc/compose.rb +11 -11
- data/lib/ruby-next/core/string/split.rb +6 -6
- data/lib/ruby-next/core/struct/deconstruct.rb +2 -2
- data/lib/ruby-next/core/struct/deconstruct_keys.rb +17 -17
- data/lib/ruby-next/core/symbol/end_with.rb +4 -4
- data/lib/ruby-next/core/symbol/start_with.rb +4 -4
- data/lib/ruby-next/core/time/ceil.rb +6 -5
- data/lib/ruby-next/core/time/floor.rb +4 -4
- data/lib/ruby-next/core/unboundmethod/bind_call.rb +4 -4
- data/lib/ruby-next/core_ext.rb +2 -2
- data/lib/ruby-next/language.rb +31 -5
- data/lib/ruby-next/language/eval.rb +10 -8
- data/lib/ruby-next/language/proposed.rb +3 -0
- data/lib/ruby-next/language/rewriters/args_forward.rb +24 -20
- data/lib/ruby-next/language/rewriters/base.rb +2 -2
- data/lib/ruby-next/language/rewriters/endless_method.rb +26 -3
- data/lib/ruby-next/language/rewriters/endless_range.rb +1 -0
- data/lib/ruby-next/language/rewriters/find_pattern.rb +44 -0
- data/lib/ruby-next/language/rewriters/method_reference.rb +2 -1
- data/lib/ruby-next/language/rewriters/numbered_params.rb +1 -0
- data/lib/ruby-next/language/rewriters/pattern_matching.rb +105 -13
- data/lib/ruby-next/language/rewriters/right_hand_assignment.rb +2 -1
- data/lib/ruby-next/language/rewriters/runtime.rb +6 -0
- data/lib/ruby-next/language/rewriters/runtime/dir.rb +32 -0
- data/lib/ruby-next/language/rewriters/safe_navigation.rb +87 -0
- data/lib/ruby-next/language/rewriters/shorthand_hash.rb +47 -0
- data/lib/ruby-next/language/rewriters/squiggly_heredoc.rb +36 -0
- data/lib/ruby-next/language/runtime.rb +3 -2
- data/lib/ruby-next/logging.rb +1 -1
- data/lib/ruby-next/rubocop.rb +15 -9
- data/lib/ruby-next/setup_self.rb +22 -0
- data/lib/ruby-next/utils.rb +30 -0
- data/lib/ruby-next/version.rb +1 -1
- data/lib/uby-next.rb +8 -4
- metadata +22 -7
| @@ -4,8 +4,9 @@ module RubyNext | |
| 4 4 | 
             
              module Language
         | 
| 5 5 | 
             
                module Rewriters
         | 
| 6 6 | 
             
                  class RightHandAssignment < Base
         | 
| 7 | 
            +
                    NAME = "right-hand-assignment"
         | 
| 7 8 | 
             
                    SYNTAX_PROBE = "1 + 2 => a"
         | 
| 8 | 
            -
                    MIN_SUPPORTED_VERSION = Gem::Version.new(" | 
| 9 | 
            +
                    MIN_SUPPORTED_VERSION = Gem::Version.new("3.0.0")
         | 
| 9 10 |  | 
| 10 11 | 
             
                    def on_rasgn(node)
         | 
| 11 12 | 
             
                      context.track! self
         | 
| @@ -0,0 +1,32 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module RubyNext
         | 
| 4 | 
            +
              module Language
         | 
| 5 | 
            +
                module Rewriters
         | 
| 6 | 
            +
                  # Special rewriter for Ruby <=2.3, which doesn't support __dir__ in iseq.eval
         | 
| 7 | 
            +
                  class Dir < Base
         | 
| 8 | 
            +
                    SYNTAX_PROBE = "defined?(RubyVM::InstructionSequence) && RubyVM::InstructionSequence.compile('raise SyntaxError if __dir__.nil?', 'test.rb').eval"
         | 
| 9 | 
            +
                    MIN_SUPPORTED_VERSION = Gem::Version.new("2.4.0")
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    def on_send(node)
         | 
| 12 | 
            +
                      return super(node) unless node.children[1] == :__dir__
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                      context.track! self
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                      replace(node.loc.expression, "File.dirname(__FILE__)")
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                      process(
         | 
| 19 | 
            +
                        node.updated(
         | 
| 20 | 
            +
                          nil,
         | 
| 21 | 
            +
                          [
         | 
| 22 | 
            +
                            s(:const, nil, :File),
         | 
| 23 | 
            +
                            :dirname,
         | 
| 24 | 
            +
                            s(:send, nil, "__FILE__")
         | 
| 25 | 
            +
                          ]
         | 
| 26 | 
            +
                        )
         | 
| 27 | 
            +
                      )
         | 
| 28 | 
            +
                    end
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
            end
         | 
| @@ -0,0 +1,87 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module RubyNext
         | 
| 4 | 
            +
              module Language
         | 
| 5 | 
            +
                module Rewriters
         | 
| 6 | 
            +
                  class SafeNavigation < Base
         | 
| 7 | 
            +
                    NAME = "safe-navigation"
         | 
| 8 | 
            +
                    SYNTAX_PROBE = "nil&.x&.nil?"
         | 
| 9 | 
            +
                    MIN_SUPPORTED_VERSION = Gem::Version.new("2.3.0")
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    def on_csend(node)
         | 
| 12 | 
            +
                      node = super(node)
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                      context.track! self
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                      receiver, *args = *node
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                      new_node = node.updated(
         | 
| 19 | 
            +
                        :and,
         | 
| 20 | 
            +
                        [
         | 
| 21 | 
            +
                          process(safe_navigation(receiver)),
         | 
| 22 | 
            +
                          s(:send, decsendize(receiver), *args)
         | 
| 23 | 
            +
                        ]
         | 
| 24 | 
            +
                      )
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                      replace(node.loc.expression, new_node)
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                      new_node
         | 
| 29 | 
            +
                    end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                    def on_block(node)
         | 
| 32 | 
            +
                      return super(node) unless node.children[0].type == :csend
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                      context.track!(self)
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                      new_node = super(node.updated(
         | 
| 37 | 
            +
                        :and,
         | 
| 38 | 
            +
                        [
         | 
| 39 | 
            +
                          process(safe_navigation(node.children[0].children[0])),
         | 
| 40 | 
            +
                          process(node.updated(nil, node.children.map(&method(:decsendize))))
         | 
| 41 | 
            +
                        ]
         | 
| 42 | 
            +
                      ))
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                      replace(node.loc.expression, new_node)
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                      new_node
         | 
| 47 | 
            +
                    end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                    def on_op_asgn(node)
         | 
| 50 | 
            +
                      return super(node) unless node.children[0].type == :csend
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                      context.track!(self)
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                      new_node = super(node.updated(
         | 
| 55 | 
            +
                        :and,
         | 
| 56 | 
            +
                        [
         | 
| 57 | 
            +
                          process(safe_navigation(node.children[0].children[0])),
         | 
| 58 | 
            +
                          process(node.updated(nil, node.children.map(&method(:decsendize))))
         | 
| 59 | 
            +
                        ]
         | 
| 60 | 
            +
                      ))
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                      replace(node.loc.expression, new_node)
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                      new_node
         | 
| 65 | 
            +
                    end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                    private
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                    def decsendize(node)
         | 
| 70 | 
            +
                      return node unless node.is_a?(::Parser::AST::Node) && node.type == :csend
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                      node.updated(:send, node.children.map(&method(:decsendize)))
         | 
| 73 | 
            +
                    end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                    # Transform: x&.y -> (!x.nil? && x.y) || nil
         | 
| 76 | 
            +
                    # This allows us to handle `false&.to_s == "false"`
         | 
| 77 | 
            +
                    def safe_navigation(node)
         | 
| 78 | 
            +
                      s(:or,
         | 
| 79 | 
            +
                        s(:send,
         | 
| 80 | 
            +
                          s(:send, node, :nil?),
         | 
| 81 | 
            +
                          :!),
         | 
| 82 | 
            +
                        s(:nil))
         | 
| 83 | 
            +
                    end
         | 
| 84 | 
            +
                  end
         | 
| 85 | 
            +
                end
         | 
| 86 | 
            +
              end
         | 
| 87 | 
            +
            end
         | 
| @@ -0,0 +1,47 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module RubyNext
         | 
| 4 | 
            +
              module Language
         | 
| 5 | 
            +
                module Rewriters
         | 
| 6 | 
            +
                  class ShorthandHash < Base
         | 
| 7 | 
            +
                    NAME = "shorthand-hash"
         | 
| 8 | 
            +
                    SYNTAX_PROBE = "data = {x}"
         | 
| 9 | 
            +
                    MIN_SUPPORTED_VERSION = Gem::Version.new("3.0.0")
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    def on_ipair(node)
         | 
| 12 | 
            +
                      context.track! self
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                      ident, = *node.children
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                      key = key_from_ident(ident)
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                      replace(
         | 
| 19 | 
            +
                        node.loc.expression,
         | 
| 20 | 
            +
                        "#{key}: #{key}"
         | 
| 21 | 
            +
                      )
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                      node.updated(
         | 
| 24 | 
            +
                        :pair,
         | 
| 25 | 
            +
                        [
         | 
| 26 | 
            +
                          s(:sym, key),
         | 
| 27 | 
            +
                          ident
         | 
| 28 | 
            +
                        ]
         | 
| 29 | 
            +
                      )
         | 
| 30 | 
            +
                    end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                    private
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                    def key_from_ident(node)
         | 
| 35 | 
            +
                      case node.type
         | 
| 36 | 
            +
                      when :send
         | 
| 37 | 
            +
                        node.children[1]
         | 
| 38 | 
            +
                      when :lvar
         | 
| 39 | 
            +
                        node.children[0]
         | 
| 40 | 
            +
                      else
         | 
| 41 | 
            +
                        raise ArgumentError, "Unsupport ipair node: #{node}"
         | 
| 42 | 
            +
                      end
         | 
| 43 | 
            +
                    end
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
            end
         | 
| @@ -0,0 +1,36 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module RubyNext
         | 
| 4 | 
            +
              module Language
         | 
| 5 | 
            +
                module Rewriters
         | 
| 6 | 
            +
                  class SquigglyHeredoc < Base
         | 
| 7 | 
            +
                    NAME = "squiggly-heredoc"
         | 
| 8 | 
            +
                    SYNTAX_PROBE = "txt = <<~TXT\n  bla\n      TXT"
         | 
| 9 | 
            +
                    MIN_SUPPORTED_VERSION = Gem::Version.new("2.3.0")
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    def on_str(node)
         | 
| 12 | 
            +
                      node = super(node) if defined?(super_method)
         | 
| 13 | 
            +
                      return node unless node.loc.respond_to?(:heredoc_body) && node.loc.expression.source.include?("<<~")
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                      context.track! self
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                      replace(node.loc.expression, node.loc.expression.source.tr("~", "-"))
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                      heredoc_loc = node.loc.heredoc_body.join(node.loc.heredoc_end)
         | 
| 20 | 
            +
                      heredoc_source, heredoc_end = heredoc_loc.source.split(/\n([^\n]+)\z/)
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                      indent = heredoc_source.lines.map { |line| line.match(/^\s*/)[0].size }.min
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                      new_source = heredoc_source.gsub!(%r{^\s{#{indent}}}, "")
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                      replace(heredoc_loc, [new_source, heredoc_end].join("\n"))
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                      node
         | 
| 29 | 
            +
                    end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                    alias on_dstr on_str
         | 
| 32 | 
            +
                    alias on_xstr on_str
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
            end
         | 
| @@ -42,7 +42,7 @@ module RubyNext | |
| 42 42 | 
             
                      path
         | 
| 43 43 | 
             
                    end
         | 
| 44 44 |  | 
| 45 | 
            -
                    if defined?(JRUBY_VERSION)
         | 
| 45 | 
            +
                    if defined?(JRUBY_VERSION) || defined?(TruffleRuby)
         | 
| 46 46 | 
             
                      def evaluate(code, filepath)
         | 
| 47 47 | 
             
                        new_toplevel.eval(code, filepath)
         | 
| 48 48 | 
             
                      end
         | 
| @@ -89,7 +89,8 @@ module Kernel | |
| 89 89 |  | 
| 90 90 | 
             
              alias_method :require_relative_without_ruby_next, :require_relative
         | 
| 91 91 | 
             
              def require_relative(path)
         | 
| 92 | 
            -
                 | 
| 92 | 
            +
                loc = caller_locations(1..1).first
         | 
| 93 | 
            +
                from = loc.absolute_path || loc.path || File.join(Dir.pwd, "main")
         | 
| 93 94 | 
             
                realpath = File.absolute_path(
         | 
| 94 95 | 
             
                  File.join(
         | 
| 95 96 | 
             
                    File.dirname(File.absolute_path(from)),
         | 
    
        data/lib/ruby-next/logging.rb
    CHANGED
    
    
    
        data/lib/ruby-next/rubocop.rb
    CHANGED
    
    | @@ -46,23 +46,25 @@ module RuboCop | |
| 46 46 | 
             
              end
         | 
| 47 47 | 
             
            end
         | 
| 48 48 |  | 
| 49 | 
            +
            # Let's make this file Ruby 2.2 compatible to avoid transpiling
         | 
| 50 | 
            +
            # rubocop:disable Layout/HeredocIndentation
         | 
| 49 51 | 
             
            module RuboCop
         | 
| 50 52 | 
             
              module AST
         | 
| 51 53 | 
             
                module Traversal
         | 
| 52 54 | 
             
                  # Fixed in https://github.com/rubocop-hq/rubocop/pull/7786
         | 
| 53 | 
            -
                   | 
| 54 | 
            -
                     | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
                    end
         | 
| 55 | 
            +
                  %i[case_match in_pattern find_pattern].each do |type|
         | 
| 56 | 
            +
                    next if method_defined?(:"on_#{type}")
         | 
| 57 | 
            +
                    module_eval(<<-RUBY, __FILE__, __LINE__ + 1)
         | 
| 58 | 
            +
            def on_#{type}(node)
         | 
| 59 | 
            +
            node.children.each { |child| send(:"on_\#{child.type}", child) if child }
         | 
| 60 | 
            +
            nil
         | 
| 61 | 
            +
            end
         | 
| 62 | 
            +
                    RUBY
         | 
| 62 63 | 
             
                  end
         | 
| 63 64 | 
             
                end
         | 
| 64 65 | 
             
              end
         | 
| 65 66 | 
             
            end
         | 
| 67 | 
            +
            # rubocop:enable Layout/HeredocIndentation
         | 
| 66 68 |  | 
| 67 69 | 
             
            module RuboCop
         | 
| 68 70 | 
             
              module Cop
         | 
| @@ -73,6 +75,10 @@ module RuboCop | |
| 73 75 | 
             
                    trigger_responding_cops(:on_meth_ref, node)
         | 
| 74 76 | 
             
                  end
         | 
| 75 77 |  | 
| 78 | 
            +
                  def on_ipair(node)
         | 
| 79 | 
            +
                    trigger_responding_cops(:on_ipair, node)
         | 
| 80 | 
            +
                  end
         | 
| 81 | 
            +
             | 
| 76 82 | 
             
                  unless method_defined?(:on_numblock)
         | 
| 77 83 | 
             
                    def on_numblock(node)
         | 
| 78 84 | 
             
                      children = node.children
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # This file setup LOAD_PATH to load Ruby Next own transpiled paths
         | 
| 4 | 
            +
            # (we cannot use language/setup here, 'cause it requires Core to be loaded)
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            version = RubyNext.next_version
         | 
| 7 | 
            +
            next_dirname = File.join(__dir__, "..", ".rbnext")
         | 
| 8 | 
            +
            lib_path = File.realpath(File.join(__dir__, ".."))
         | 
| 9 | 
            +
            current_index = $LOAD_PATH.index(lib_path)
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            loop do
         | 
| 12 | 
            +
              break unless version
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              version_dir = File.join(next_dirname, version.segments[0..1].join("."))
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              if File.exist?(version_dir)
         | 
| 17 | 
            +
                $LOAD_PATH.insert current_index, version_dir
         | 
| 18 | 
            +
                current_index += 1
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              version = RubyNext.next_version(version)
         | 
| 22 | 
            +
            end
         | 
    
        data/lib/ruby-next/utils.rb
    CHANGED
    
    | @@ -33,5 +33,35 @@ module RubyNext | |
| 33 33 | 
             
                    lines.unshift "   0:  # source: #{path}"
         | 
| 34 34 | 
             
                  end
         | 
| 35 35 | 
             
                end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                # Returns true if modules refinement is supported in current version
         | 
| 38 | 
            +
                def refine_modules?
         | 
| 39 | 
            +
                  @refine_modules ||=
         | 
| 40 | 
            +
                    begin
         | 
| 41 | 
            +
                      # Make sure that including modules within refinements works
         | 
| 42 | 
            +
                      # See https://github.com/oracle/truffleruby/issues/2026
         | 
| 43 | 
            +
                      eval <<~RUBY, TOPLEVEL_BINDING, __FILE__, __LINE__ + 1
         | 
| 44 | 
            +
                        module RubyNext::Utils::A; end
         | 
| 45 | 
            +
                        class RubyNext::Utils::B
         | 
| 46 | 
            +
                          include RubyNext::Utils::A
         | 
| 47 | 
            +
                        end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                        using(Module.new do
         | 
| 50 | 
            +
                          refine RubyNext::Utils::A do
         | 
| 51 | 
            +
                            include(Module.new do
         | 
| 52 | 
            +
                              def i_am_refinement
         | 
| 53 | 
            +
                                "yes, you are!"
         | 
| 54 | 
            +
                              end
         | 
| 55 | 
            +
                            end)
         | 
| 56 | 
            +
                          end
         | 
| 57 | 
            +
                        end)
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                        RubyNext::Utils::B.new.i_am_refinement
         | 
| 60 | 
            +
                      RUBY
         | 
| 61 | 
            +
                      true
         | 
| 62 | 
            +
                    rescue TypeError, NoMethodError
         | 
| 63 | 
            +
                      false
         | 
| 64 | 
            +
                    end
         | 
| 65 | 
            +
                end
         | 
| 36 66 | 
             
              end
         | 
| 37 67 | 
             
            end
         | 
    
        data/lib/ruby-next/version.rb
    CHANGED
    
    
    
        data/lib/uby-next.rb
    CHANGED
    
    | @@ -43,11 +43,14 @@ at_exit do | |
| 43 43 | 
             
                end
         | 
| 44 44 |  | 
| 45 45 | 
             
                if $0 == "-e" && e_script.nil?
         | 
| 46 | 
            -
                   | 
| 46 | 
            +
                  if File.file?("/proc/self/cmdline")
         | 
| 47 | 
            +
                    File.read("/proc/self/cmdline")
         | 
| 48 | 
            +
                  else
         | 
| 49 | 
            +
                    `ps axw`.split("\n").find { |ps| ps[/\A\s*#{$$}/] }
         | 
| 50 | 
            +
                  end.then do |command|
         | 
| 47 51 | 
             
                    next unless command
         | 
| 48 | 
            -
                    command. | 
| 49 | 
            -
                    command. | 
| 50 | 
            -
                    command.match(/\-e(.*)/m)
         | 
| 52 | 
            +
                    command.gsub!(/(\\012|\u0000)/, "\n")
         | 
| 53 | 
            +
                    command.match(/-e(.*)/m)
         | 
| 51 54 | 
             
                  end.then do |matches|
         | 
| 52 55 | 
             
                    next unless matches
         | 
| 53 56 |  | 
| @@ -63,6 +66,7 @@ at_exit do | |
| 63 66 |  | 
| 64 67 | 
             
                if e_script
         | 
| 65 68 | 
             
                  new_e_script = RubyNext::Language::Runtime.transform(e_script)
         | 
| 69 | 
            +
                  RubyNext.debug_source new_e_script, $0
         | 
| 66 70 | 
             
                  TOPLEVEL_BINDING.eval(new_e_script, $0)
         | 
| 67 71 | 
             
                  exit!(0)
         | 
| 68 72 | 
             
                end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: ruby-next-core
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.10.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Vladimir Dementyev
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2020- | 
| 11 | 
            +
            date: 2020-09-02 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: ruby-next-parser
         | 
| @@ -16,28 +16,28 @@ dependencies: | |
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - ">="
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version:  | 
| 19 | 
            +
                    version: 3.0.0.0
         | 
| 20 20 | 
             
              type: :development
         | 
| 21 21 | 
             
              prerelease: false
         | 
| 22 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 23 | 
             
                requirements:
         | 
| 24 24 | 
             
                - - ">="
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version:  | 
| 26 | 
            +
                    version: 3.0.0.0
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 28 | 
             
              name: unparser
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 31 | 
             
                - - ">="
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version: 0.4. | 
| 33 | 
            +
                    version: 0.4.8
         | 
| 34 34 | 
             
              type: :development
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 38 | 
             
                - - ">="
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version: 0.4. | 
| 40 | 
            +
                    version: 0.4.8
         | 
| 41 41 | 
             
            description: "\n    Ruby Next Core is a zero deps version of Ruby Next meant to be
         | 
| 42 42 | 
             
              used\n    as as dependency in your gems.\n\n    It contains all the polyfills and
         | 
| 43 43 | 
             
              utility files but doesn't require transpiler\n    dependencies to be install.\n
         | 
| @@ -55,6 +55,13 @@ files: | |
| 55 55 | 
             
            - bin/parse
         | 
| 56 56 | 
             
            - bin/ruby-next
         | 
| 57 57 | 
             
            - bin/transform
         | 
| 58 | 
            +
            - lib/.rbnext/2.3/ruby-next/commands/core_ext.rb
         | 
| 59 | 
            +
            - lib/.rbnext/2.3/ruby-next/commands/nextify.rb
         | 
| 60 | 
            +
            - lib/.rbnext/2.3/ruby-next/language/eval.rb
         | 
| 61 | 
            +
            - lib/.rbnext/2.3/ruby-next/language/rewriters/base.rb
         | 
| 62 | 
            +
            - lib/.rbnext/2.3/ruby-next/language/rewriters/endless_range.rb
         | 
| 63 | 
            +
            - lib/.rbnext/2.3/ruby-next/language/rewriters/pattern_matching.rb
         | 
| 64 | 
            +
            - lib/.rbnext/2.3/ruby-next/utils.rb
         | 
| 58 65 | 
             
            - lib/ruby-next.rb
         | 
| 59 66 | 
             
            - lib/ruby-next/cli.rb
         | 
| 60 67 | 
             
            - lib/ruby-next/commands/base.rb
         | 
| @@ -69,6 +76,7 @@ files: | |
| 69 76 | 
             
            - lib/ruby-next/core/enumerable/tally.rb
         | 
| 70 77 | 
             
            - lib/ruby-next/core/enumerator/produce.rb
         | 
| 71 78 | 
             
            - lib/ruby-next/core/hash/deconstruct_keys.rb
         | 
| 79 | 
            +
            - lib/ruby-next/core/hash/except.rb
         | 
| 72 80 | 
             
            - lib/ruby-next/core/hash/merge.rb
         | 
| 73 81 | 
             
            - lib/ruby-next/core/kernel/then.rb
         | 
| 74 82 | 
             
            - lib/ruby-next/core/proc/compose.rb
         | 
| @@ -92,15 +100,22 @@ files: | |
| 92 100 | 
             
            - lib/ruby-next/language/rewriters/base.rb
         | 
| 93 101 | 
             
            - lib/ruby-next/language/rewriters/endless_method.rb
         | 
| 94 102 | 
             
            - lib/ruby-next/language/rewriters/endless_range.rb
         | 
| 103 | 
            +
            - lib/ruby-next/language/rewriters/find_pattern.rb
         | 
| 95 104 | 
             
            - lib/ruby-next/language/rewriters/method_reference.rb
         | 
| 96 105 | 
             
            - lib/ruby-next/language/rewriters/numbered_params.rb
         | 
| 97 106 | 
             
            - lib/ruby-next/language/rewriters/pattern_matching.rb
         | 
| 98 107 | 
             
            - lib/ruby-next/language/rewriters/right_hand_assignment.rb
         | 
| 108 | 
            +
            - lib/ruby-next/language/rewriters/runtime.rb
         | 
| 109 | 
            +
            - lib/ruby-next/language/rewriters/runtime/dir.rb
         | 
| 110 | 
            +
            - lib/ruby-next/language/rewriters/safe_navigation.rb
         | 
| 111 | 
            +
            - lib/ruby-next/language/rewriters/shorthand_hash.rb
         | 
| 112 | 
            +
            - lib/ruby-next/language/rewriters/squiggly_heredoc.rb
         | 
| 99 113 | 
             
            - lib/ruby-next/language/runtime.rb
         | 
| 100 114 | 
             
            - lib/ruby-next/language/setup.rb
         | 
| 101 115 | 
             
            - lib/ruby-next/language/unparser.rb
         | 
| 102 116 | 
             
            - lib/ruby-next/logging.rb
         | 
| 103 117 | 
             
            - lib/ruby-next/rubocop.rb
         | 
| 118 | 
            +
            - lib/ruby-next/setup_self.rb
         | 
| 104 119 | 
             
            - lib/ruby-next/utils.rb
         | 
| 105 120 | 
             
            - lib/ruby-next/version.rb
         | 
| 106 121 | 
             
            - lib/uby-next.rb
         | 
| @@ -121,7 +136,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 121 136 | 
             
              requirements:
         | 
| 122 137 | 
             
              - - ">="
         | 
| 123 138 | 
             
                - !ruby/object:Gem::Version
         | 
| 124 | 
            -
                  version: 2. | 
| 139 | 
            +
                  version: 2.2.0
         | 
| 125 140 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 126 141 | 
             
              requirements:
         | 
| 127 142 | 
             
              - - ">="
         |