class Opal::REPL
def eval_ruby(code)
def eval_ruby(code) builder = Opal::Builder.new silencer = Silencer.new code = "#{@incomplete}#{code}" if code.start_with? 'ls ' eval_code = code[3..-1] mode = :ls elsif code == 'ls' eval_code = 'self' mode = :ls elsif code.start_with? 'show ' eval_code = code[5..-1] mode = :show else eval_code = code mode = :inspect end begin silencer.silence do builder.build_str(eval_code, '(irb)', irb: true, const_missing: true) end @incomplete = nil rescue Opal::SyntaxError => e if LINEBREAKS.include?(e.message) @incomplete = "#{code}\n" else @incomplete = nil if silencer.warnings.empty? warn e.full_message else # Most likely a parser error warn silencer.warnings end end return end builder.processed[0...-1].each { |js_code| eval_js(:silent, js_code.to_s) } last_processed_file = builder.processed.last.to_s if mode == :show puts last_processed_file return end eval_js(mode, last_processed_file) rescue Interrupt, SystemExit => e raise e rescue Exception => e # rubocop:disable Lint/RescueException puts e.full_message(highlight: true) end