module PryInline::CodeExtension

monkey patch for Pry::Code

Public Class Methods

current_binding() click to toggle source
# File lib/pry-inline/code_extension.rb, line 6
def self.current_binding
  @current_binding
end
current_binding=(value) click to toggle source
# File lib/pry-inline/code_extension.rb, line 10
def self.current_binding=(value)
  @current_binding = value
end

Public Instance Methods

print_to_output(output, color = false) click to toggle source
Calls superclass method

Private Instance Methods

debug_info(variables) click to toggle source
# File lib/pry-inline/code_extension.rb, line 95
def debug_info(variables)
  return '' if !variables || (variables & defined_variables).size <= 0
  ' # ' + variables.select { |k| defined_variables.include?(k) }
    .map { |k| "#{k}: #{CodeExtension.current_binding.eval(k).inspect.delete("\n")}" }
    .join(', ')
end
defined_variables() click to toggle source
# File lib/pry-inline/code_extension.rb, line 87
def defined_variables
  return [] unless CodeExtension.current_binding
  %w(local_variables global_variables
     self.instance_variables self.class.class_variables).map do |exp|
    CodeExtension.current_binding.eval(exp)
  end.flatten.to_set.map(&:to_s)
end
min_debug_info_width() click to toggle source
# File lib/pry-inline/code_extension.rb, line 102
def min_debug_info_width
  if Pry.config.inline.is_a?(Hash)
    min_width = Pry.config.inline[:min_debug_info_width]
  end
  min_width || 16
end
terminal_width() click to toggle source
# File lib/pry-inline/code_extension.rb, line 59
def terminal_width
  `tput cols`.to_i
end
traverse_sexp(sexp) click to toggle source
# File lib/pry-inline/code_extension.rb, line 63
def traverse_sexp(sexp)
  return unless sexp.is_a?(Array)
  event = sexp[0]

  return sexp.each { |s| traverse_sexp(s) } if event.is_a?(Array)
  return traverse_sexp_in_assignment(sexp[1]) if %i( assign opassign massign var_field ).include?(event)
  return traverse_sexp_in_assignment(sexp[1..-1]) if event == :params
  traverse_sexp(sexp[1..-1]) unless event.to_s.start_with?('@')
end
traverse_sexp_in_assignment(sexp) click to toggle source
# File lib/pry-inline/code_extension.rb, line 73
def traverse_sexp_in_assignment(sexp)
  return unless sexp.is_a?(Array)
  event = sexp[0]

  return sexp.each { |s| traverse_sexp_in_assignment(s) } if event.is_a?(Array)
  if %i( @ident @cvar @ivar @gvar ).include?(event)
    return @lineno_to_variables[sexp[2][0]] << sexp[1]
  elsif %i( @label ).include?(event)
    return @lineno_to_variables[sexp[2][0]] << sexp[1].slice(0..-2)
  end

  traverse_sexp_in_assignment(sexp[1..-1])
end