diff options
author | John Mair <jrmair@gmail.com> | 2018-11-02 16:46:26 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-02 16:46:26 +0100 |
commit | 64fff2206c38fe0cf883017bceac56250d444c5b (patch) | |
tree | 19a833aa40a1c7acb36b2d5659cb77d64190be72 /lib/method_source/code_helpers.rb | |
parent | 39021edb3f40ecf6bc70ff9809ce93fe6e3fface (diff) | |
parent | 20fb1efde4530c78f7627d8b5b4e0b3f43cf821d (diff) | |
download | method_source-64fff2206c38fe0cf883017bceac56250d444c5b.tar.gz |
Merge pull request #51 from kyrylo/jruby-9200-fix
method_source: fix broken Procs on JRuby 9.2.0.0
Diffstat (limited to 'lib/method_source/code_helpers.rb')
-rw-r--r-- | lib/method_source/code_helpers.rb | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/method_source/code_helpers.rb b/lib/method_source/code_helpers.rb index 9d9da55..e431742 100644 --- a/lib/method_source/code_helpers.rb +++ b/lib/method_source/code_helpers.rb @@ -1,6 +1,9 @@ module MethodSource module CodeHelpers + # @return [Boolean] + JRUBY_9200 = (defined?(JRUBY_VERSION) || false) && JRUBY_VERSION == '9.2.0.0' + # Retrieve the first expression starting on the given line of the given file. # # This is useful to get module or method source code. @@ -29,6 +32,26 @@ module MethodSource extract_first_expression(relevant_lines, options[:consume]) rescue SyntaxError => e + # JRuby 9.2.0.0 breaks #source_location for Procs (it reports line number + # as the last line of the Proc). This raises SyntaxError. + # See https://github.com/pry/pry/issues/1804 for details. + # + # To fix this, this hack rewinds source location one step at a time and + # tries to see if the new location is a complete expression. + # + # TODO: delete this once latest JRuby version is bumped. + # See https://github.com/banister/method_source/issues/52 + if JRUBY_9200 && line_number > 0 + loop do + line_number -= 1 + + # Skip empty lines since they are not real expressions. + break unless lines[line_number - 1] == "\n" + end + + retry + end + raise if options[:strict] begin |