module RubyNext::Utils

Public Instance Methods

refine_modules?() click to toggle source

Returns true if modules refinement is supported in current version

# File lib/ruby-next/utils.rb, line 38
    def refine_modules?
      @refine_modules ||=
        begin
          # Make sure that including modules within refinements works
          # See https://github.com/oracle/truffleruby/issues/2026
          eval <<~RUBY, TOPLEVEL_BINDING, __FILE__, __LINE__ + 1
            module RubyNext::Utils::A; end
            class RubyNext::Utils::B
              include RubyNext::Utils::A
            end

            using(Module.new do
              refine RubyNext::Utils::A do
                include(Module.new do
                  def i_am_refinement
                    "yes, you are!"
                  end
                end)
              end
            end)

            RubyNext::Utils::B.new.i_am_refinement
          RUBY
          true
        rescue TypeError, NoMethodError
          false
        end
    end
resolve_feature_path(feature) click to toggle source
# File lib/ruby-next/utils.rb, line 8
def resolve_feature_path(feature)
  $LOAD_PATH.resolve_feature_path(feature)&.last
rescue LoadError
end
source_with_lines(source, path) click to toggle source
# File lib/ruby-next/utils.rb, line 29
def source_with_lines(source, path)
  source.lines.map.with_index do |line, i|
    "#{(i + 1).to_s.rjust(4)}:  #{line}"
  end.tap do |lines|
    lines.unshift "   0:  # source: #{path}"
  end
end