1
0
Fork 0
mirror of https://github.com/pry/pry.git synced 2022-11-09 12:35:05 -05:00

Fix Ruby 2.6 warning for Binding#source_location

eval('[__FILE__, __LINE__]') will not work in future Ruby.
Let's stop using it when Binding#source_location is available because it
prints noisy warnings.

Since Binding#source_location is added in Ruby 2.6
https://github.com/ruby/ruby/commit/571e48b7442, this commit is leaving
old code with branching by binding.respond_to?(:source_location).

Fixes #1871
This commit is contained in:
Takashi Kokubun 2018-12-10 21:14:11 +09:00
parent 54e6ce52f7
commit 272b3290b5
5 changed files with 50 additions and 9 deletions

View file

@ -3,7 +3,11 @@ class Pry
module FileAndLineLocator
class << self
def from_binding(target)
[target.eval("__FILE__"), target.eval("__LINE__")]
if target.respond_to?(:source_location)
target.source_location
else
[target.eval("__FILE__"), target.eval("__LINE__")]
end
end
def from_code_object(code_object, filename_argument)

View file

@ -86,7 +86,13 @@ class Pry
# The file to play from when no code object is specified.
# e.g `play --lines 4..10`
def default_file
target.eval("__FILE__") && File.expand_path(target.eval("__FILE__"))
file =
if target.respond_to?(:source_location)
target.source_location.first
else
target.eval("__FILE__")
end
file && File.expand_path(file)
end
def file_content

View file

@ -27,7 +27,13 @@ class Pry
private
def current_file
File.expand_path target.eval("__FILE__")
file =
if target.respond_to?(:source_location)
target.source_location.first
else
target.eval("__FILE__")
end
File.expand_path file
end
def reload_current_file

View file

@ -37,8 +37,13 @@ class Pry
BANNER
def setup
@file = expand_path(target.eval('__FILE__'))
@line = target.eval('__LINE__')
if target.respond_to?(:source_location)
file, @line = target.source_location
@file = expand_path(file)
else
@file = expand_path(target.eval('__FILE__'))
@line = target.eval('__LINE__')
end
@method = Pry::Method.from_binding(target)
end

View file

@ -25,7 +25,11 @@ class Pry
# @return [Boolean]
def normal_method?(method, b)
if method && method.source_file && method.source_range
binding_file, binding_line = b.eval('__FILE__'), b.eval('__LINE__')
if b.respond_to?(:source_location)
binding_file, binding_line = b.source_location
else
binding_file, binding_line = b.eval('__FILE__'), b.eval('__LINE__')
end
(File.expand_path(method.source_file) == File.expand_path(binding_file)) &&
method.source_range.include?(binding_line)
end
@ -77,15 +81,31 @@ class Pry
end
def target_file
pry_file? ? target.eval('__FILE__') : File.expand_path(target.eval('__FILE__'))
file =
if target.respond_to?(:source_location)
target.source_location.first
else
target.eval('__FILE__')
end
pry_file? ? file : File.expand_path(file)
end
def target_line
target.eval('__LINE__')
if target.respond_to?(:source_location)
target.source_location.last
else
target.eval('__LINE__')
end
end
def pry_file?
Pry.eval_path == target.eval('__FILE__')
file =
if target.respond_to?(:source_location)
target.source_location.first
else
target.eval('__FILE__')
end
Pry.eval_path == file
end
# it's possible in some cases that the method we find by this approach is a sub-method of