module Pry::ExceptionHandler

def cause_text(cause)

def cause_text(cause)
  "Caused by #{cause.class}: #{cause}\n" \
  "from #{cause.backtrace.first}\n"
end

def exception_text(exception)

def exception_text(exception)
  "#{exception.class}: #{exception.message}\n" \
  "from #{exception.backtrace.first}\n"
end

def handle_exception(output, exception, _pry_instance)

Will only show the first line of the backtrace.
def handle_exception(output, exception, _pry_instance)
  if exception.is_a?(UserError) && exception.is_a?(SyntaxError)
    output.puts "SyntaxError: #{exception.message.sub(/.*syntax error, */m, '')}"
  else
    output.puts standard_error_text_for(exception)
  end
end

def standard_error_text_for(exception)

def standard_error_text_for(exception)
  text = exception_text(exception)
  return text unless exception.respond_to?(:cause)
  cause = exception.cause
  while cause
    text += cause_text(cause)
    cause = cause.cause
  end
  text
end