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