module RubyNext::Language::Runtime

Module responsible for runtime transformations

Public Class Methods

evaluate(code, filepath) click to toggle source
# File lib/ruby-next/language/runtime.rb, line 46
def evaluate(code, filepath)
  new_toplevel.eval(code, filepath)
end
feature_path(path) click to toggle source
# File lib/ruby-next/language/runtime.rb, line 37
def feature_path(path)
  path = resolve_feature_path(path)
  return if path.nil?
  return if File.extname(path) != ".rb"
  return unless Language.transformable?(path)
  path
end
load(path, wrap: false) click to toggle source
# File lib/ruby-next/language/runtime.rb, line 21
def load(path, wrap: false)
  raise "RubyNext cannot handle `load(smth, wrap: true)`" if wrap

  contents = File.read(path)
  new_contents = transform contents

  RubyNext.debug_source new_contents, path

  evaluate(new_contents, path)
  true
end
new_toplevel() click to toggle source
# File lib/ruby-next/language/runtime.rb, line 50
def new_toplevel
  # Create new "toplevel" binding to avoid lexical scope re-use
  # (aka "leaking refinements")
  eval "proc{binding}.call", TOPLEVEL_BINDING, __FILE__, __LINE__
end
transform(contents, **options) click to toggle source
# File lib/ruby-next/language/runtime.rb, line 33
def transform(contents, **options)
  Language.transform(contents, rewriters: Language.current_rewriters, **options)
end