version bump 0.2.5pre1, added valid_expression? using rue maneuver

This commit is contained in:
John Mair 2010-12-14 23:54:26 +13:00
parent b243fa84b7
commit 23cb880422
4 changed files with 67 additions and 36 deletions

View File

@ -9,6 +9,18 @@ require "#{direc}/pry/input"
require "#{direc}/pry/output" require "#{direc}/pry/output"
class Pry class Pry
def self.start(target)
new.repl(target)
end
def self.view(obj)
case obj
when String, Symbol, nil
obj.inspect
else
obj.to_s
end
end
# class accessors # class accessors
class << self class << self
@ -16,29 +28,26 @@ class Pry
attr_accessor :last_result attr_accessor :last_result
end end
attr_accessor :input attr_accessor :input, :output
attr_accessor :output attr_reader :default_prompt, :wait_prompt, :last_result
attr_reader :last_result
attr_reader :default_prompt
attr_reader :wait_prompt
def initialize def initialize(input = Input.new, output = Output.new)
@output = Output.new @input = input
@input = Input.new @output = output
@default_prompt = proc do |v, nest| @default_prompt = proc do |v, nest|
if nest == 0 if nest == 0
"pry(#{v.inspect})> " "pry(#{Pry.view(v)})> "
else else
"pry(#{v.inspect}):#{nest.inspect}> " "pry(#{Pry.view(v)}):#{Pry.view(nest)}> "
end end
end end
@wait_prompt = proc do |v, nest| @wait_prompt = proc do |v, nest|
if nest == 0 if nest == 0
"pry(#{v.inspect})* " "pry(#{Pry.view(v)})* "
else else
"pry(#{v.inspect}):#{nest.inspect}* " "pry(#{Pry.view(v)}):#{Pry.view(nest)}* "
end end
end end
end end
@ -57,6 +66,7 @@ class Pry
self.class.nesting = v self.class.nesting = v
end end
# loop # loop
def repl(target=TOPLEVEL_BINDING) def repl(target=TOPLEVEL_BINDING)
target = binding_for(target) target = binding_for(target)
@ -97,7 +107,7 @@ class Pry
target = binding_for(target) target = binding_for(target)
Pry.last_result = target.eval r(target) Pry.last_result = target.eval r(target)
target.eval("_ = Pry.last_result") target.eval("_ = Pry.last_result")
rescue StandardError => e rescue Exception => e
e e
end end
@ -141,19 +151,7 @@ class Pry
when /show_method\s*(\w*)/ when /show_method\s*(\w*)/
meth_name = ($~.captures).first meth_name = ($~.captures).first
file, line = target.eval("method(:#{meth_name}).source_location") file, line = target.eval("method(:#{meth_name}).source_location")
input = Class.new do tp = Pry.new.tap { |v| v.input = SourceInput.new(file, line) }
define_method(:initialize) do
@f = File.open(file)
(line - 1).times { @f.readline }
end
def read(prompt)
@f.readline
end
end
tp = Pry.new
tp.input = input.new
tp.r.display tp.r.display
eval_string.clear eval_string.clear
when /jump_to\s*(\d*)/ when /jump_to\s*(\d*)/
@ -185,6 +183,28 @@ class Pry
end end
def valid_expression?(code) def valid_expression?(code)
test_bed = Object.new.instance_eval { binding }
begin
test_bed.eval(code)
rescue Exception => e
case e
when SyntaxError
case e.message
when /(parse|syntax) error.*?\$end/i, /unterminated/i
return false
else
return true
end
else
true
end
true
end
true
end
def old_valid_expression?(code)
RubyParser.new.parse(code) RubyParser.new.parse(code)
rescue Racc::ParseError, SyntaxError rescue Racc::ParseError, SyntaxError
false false
@ -206,7 +226,7 @@ class Pry
module ObjectExtensions module ObjectExtensions
def pry(target=self) def pry(target=self)
Pry.new.start(target) Pry.new.repl(target)
end end
end end
end end

View File

@ -6,4 +6,15 @@ class Pry
Readline.readline(prompt, true) Readline.readline(prompt, true)
end end
end end
class SourceInput
def initialize(file, line)
@f = File.open(file)
(line - 1).times { @f.readline }
end
def read(prompt)
@f.readline
end
end
end end

View File

@ -5,11 +5,11 @@ class Pry
end end
def session_start(obj) def session_start(obj)
puts "Beginning Pry session for #{obj.inspect}" puts "Beginning Pry session for #{Pry.view(obj)}"
end end
def session_end(obj) def session_end(obj)
puts "Ending Pry session for #{obj.inspect}" puts "Ending Pry session for #{Pry.view(obj)}"
end end
# the print component of READ-EVAL-PRINT-LOOP # the print component of READ-EVAL-PRINT-LOOP
@ -18,7 +18,7 @@ class Pry
when Exception when Exception
puts "#{value.class}: #{value.message}" puts "#{value.class}: #{value.message}"
else else
puts "=> #{value.inspect}" puts "=> #{Pry.view(value)}"
end end
end end
@ -40,9 +40,9 @@ class Pry
puts "--" puts "--"
nesting.each do |level, obj| nesting.each do |level, obj|
if level == 0 if level == 0
puts "#{level}. #{obj.inspect} (Pry top level)" puts "#{level}. #{Pry.view(obj)} (Pry top level)"
else else
puts "#{level}. #{obj.inspect}" puts "#{level}. #{Pry.view(obj)}"
end end
end end
end end
@ -50,10 +50,10 @@ class Pry
def show_status(nesting, target) def show_status(nesting, target)
puts "Status:" puts "Status:"
puts "--" puts "--"
puts "Receiver: #{target.eval('self').inspect}" puts "Receiver: #{Pry.view(target.eval('self'))}"
puts "Nesting level: #{nesting.level}" puts "Nesting level: #{nesting.level}"
puts "Local variables: #{target.eval("local_variables").inspect}" puts "Local variables: #{Pry.view(target.eval("local_variables"))}"
puts "Last result: #{Pry.last_result.inspect}" puts "Last result: #{Pry.view(Pry.last_result)}"
end end
def warn_already_at_level(nesting_level) def warn_already_at_level(nesting_level)

View File

@ -1,3 +1,3 @@
class Pry class Pry
VERSION = "0.2.0" VERSION = "0.2.5pre1"
end end