pry 0.12.2-java → 0.13.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +110 -1
  3. data/LICENSE +1 -1
  4. data/README.md +331 -269
  5. data/bin/pry +5 -0
  6. data/lib/pry.rb +133 -119
  7. data/lib/pry/basic_object.rb +8 -4
  8. data/lib/pry/block_command.rb +22 -0
  9. data/lib/pry/class_command.rb +194 -0
  10. data/lib/pry/cli.rb +40 -31
  11. data/lib/pry/code.rb +39 -27
  12. data/lib/pry/code/code_file.rb +28 -24
  13. data/lib/pry/code/code_range.rb +4 -2
  14. data/lib/pry/code/loc.rb +15 -8
  15. data/lib/pry/code_object.rb +40 -38
  16. data/lib/pry/color_printer.rb +47 -46
  17. data/lib/pry/command.rb +166 -369
  18. data/lib/pry/command_set.rb +76 -73
  19. data/lib/pry/command_state.rb +31 -0
  20. data/lib/pry/commands/amend_line.rb +86 -81
  21. data/lib/pry/commands/bang.rb +18 -14
  22. data/lib/pry/commands/bang_pry.rb +15 -11
  23. data/lib/pry/commands/cat.rb +61 -54
  24. data/lib/pry/commands/cat/abstract_formatter.rb +23 -18
  25. data/lib/pry/commands/cat/exception_formatter.rb +71 -60
  26. data/lib/pry/commands/cat/file_formatter.rb +55 -49
  27. data/lib/pry/commands/cat/input_expression_formatter.rb +35 -30
  28. data/lib/pry/commands/cd.rb +40 -35
  29. data/lib/pry/commands/change_inspector.rb +29 -22
  30. data/lib/pry/commands/change_prompt.rb +44 -39
  31. data/lib/pry/commands/clear_screen.rb +16 -10
  32. data/lib/pry/commands/code_collector.rb +148 -133
  33. data/lib/pry/commands/disable_pry.rb +23 -19
  34. data/lib/pry/commands/easter_eggs.rb +19 -30
  35. data/lib/pry/commands/edit.rb +184 -161
  36. data/lib/pry/commands/edit/exception_patcher.rb +21 -17
  37. data/lib/pry/commands/edit/file_and_line_locator.rb +34 -23
  38. data/lib/pry/commands/exit.rb +39 -35
  39. data/lib/pry/commands/exit_all.rb +24 -20
  40. data/lib/pry/commands/exit_program.rb +20 -16
  41. data/lib/pry/commands/find_method.rb +168 -160
  42. data/lib/pry/commands/fix_indent.rb +16 -12
  43. data/lib/pry/commands/help.rb +140 -133
  44. data/lib/pry/commands/hist.rb +151 -150
  45. data/lib/pry/commands/import_set.rb +20 -16
  46. data/lib/pry/commands/jump_to.rb +25 -21
  47. data/lib/pry/commands/list_inspectors.rb +35 -28
  48. data/lib/pry/commands/ls.rb +124 -102
  49. data/lib/pry/commands/ls/constants.rb +59 -42
  50. data/lib/pry/commands/ls/formatter.rb +50 -46
  51. data/lib/pry/commands/ls/globals.rb +38 -34
  52. data/lib/pry/commands/ls/grep.rb +17 -13
  53. data/lib/pry/commands/ls/instance_vars.rb +29 -27
  54. data/lib/pry/commands/ls/interrogatable.rb +18 -12
  55. data/lib/pry/commands/ls/jruby_hacks.rb +47 -41
  56. data/lib/pry/commands/ls/local_names.rb +26 -22
  57. data/lib/pry/commands/ls/local_vars.rb +38 -28
  58. data/lib/pry/commands/ls/ls_entity.rb +47 -51
  59. data/lib/pry/commands/ls/methods.rb +44 -43
  60. data/lib/pry/commands/ls/methods_helper.rb +46 -42
  61. data/lib/pry/commands/ls/self_methods.rb +23 -22
  62. data/lib/pry/commands/nesting.rb +21 -17
  63. data/lib/pry/commands/play.rb +93 -82
  64. data/lib/pry/commands/pry_backtrace.rb +24 -17
  65. data/lib/pry/commands/pry_version.rb +15 -11
  66. data/lib/pry/commands/raise_up.rb +27 -22
  67. data/lib/pry/commands/reload_code.rb +60 -48
  68. data/lib/pry/commands/reset.rb +16 -12
  69. data/lib/pry/commands/ri.rb +55 -45
  70. data/lib/pry/commands/save_file.rb +45 -43
  71. data/lib/pry/commands/shell_command.rb +51 -51
  72. data/lib/pry/commands/shell_mode.rb +21 -17
  73. data/lib/pry/commands/show_doc.rb +81 -68
  74. data/lib/pry/commands/show_info.rb +189 -171
  75. data/lib/pry/commands/show_input.rb +16 -11
  76. data/lib/pry/commands/show_source.rb +109 -45
  77. data/lib/pry/commands/stat.rb +35 -31
  78. data/lib/pry/commands/switch_to.rb +21 -15
  79. data/lib/pry/commands/toggle_color.rb +20 -16
  80. data/lib/pry/commands/watch_expression.rb +89 -86
  81. data/lib/pry/commands/watch_expression/expression.rb +32 -27
  82. data/lib/pry/commands/whereami.rb +156 -148
  83. data/lib/pry/commands/wtf.rb +75 -50
  84. data/lib/pry/config.rb +311 -25
  85. data/lib/pry/config/attributable.rb +22 -0
  86. data/lib/pry/config/lazy_value.rb +29 -0
  87. data/lib/pry/config/memoized_value.rb +34 -0
  88. data/lib/pry/config/value.rb +24 -0
  89. data/lib/pry/control_d_handler.rb +28 -0
  90. data/lib/pry/core_extensions.rb +9 -7
  91. data/lib/pry/editor.rb +48 -21
  92. data/lib/pry/env.rb +18 -0
  93. data/lib/pry/exception_handler.rb +43 -0
  94. data/lib/pry/exceptions.rb +13 -16
  95. data/lib/pry/forwardable.rb +5 -1
  96. data/lib/pry/helpers.rb +2 -0
  97. data/lib/pry/helpers/base_helpers.rb +68 -197
  98. data/lib/pry/helpers/command_helpers.rb +50 -61
  99. data/lib/pry/helpers/documentation_helpers.rb +20 -13
  100. data/lib/pry/helpers/options_helpers.rb +14 -7
  101. data/lib/pry/helpers/platform.rb +7 -5
  102. data/lib/pry/helpers/table.rb +33 -26
  103. data/lib/pry/helpers/text.rb +17 -14
  104. data/lib/pry/history.rb +48 -56
  105. data/lib/pry/hooks.rb +21 -12
  106. data/lib/pry/indent.rb +54 -50
  107. data/lib/pry/input_completer.rb +248 -230
  108. data/lib/pry/input_lock.rb +8 -9
  109. data/lib/pry/inspector.rb +36 -24
  110. data/lib/pry/last_exception.rb +45 -45
  111. data/lib/pry/method.rb +141 -94
  112. data/lib/pry/method/disowned.rb +16 -4
  113. data/lib/pry/method/patcher.rb +12 -3
  114. data/lib/pry/method/weird_method_locator.rb +68 -44
  115. data/lib/pry/object_path.rb +33 -25
  116. data/lib/pry/output.rb +121 -35
  117. data/lib/pry/pager.rb +41 -42
  118. data/lib/pry/plugins.rb +25 -8
  119. data/lib/pry/prompt.rb +123 -54
  120. data/lib/pry/pry_class.rb +61 -98
  121. data/lib/pry/pry_instance.rb +217 -215
  122. data/lib/pry/repl.rb +18 -22
  123. data/lib/pry/repl_file_loader.rb +27 -21
  124. data/lib/pry/ring.rb +11 -6
  125. data/lib/pry/slop.rb +574 -563
  126. data/lib/pry/slop/commands.rb +164 -169
  127. data/lib/pry/slop/option.rb +172 -168
  128. data/lib/pry/syntax_highlighter.rb +26 -0
  129. data/lib/pry/system_command_handler.rb +17 -0
  130. data/lib/pry/testable.rb +59 -61
  131. data/lib/pry/testable/evalable.rb +21 -12
  132. data/lib/pry/testable/mockable.rb +18 -10
  133. data/lib/pry/testable/pry_tester.rb +71 -56
  134. data/lib/pry/testable/utility.rb +29 -21
  135. data/lib/pry/testable/variables.rb +49 -43
  136. data/lib/pry/version.rb +3 -1
  137. data/lib/pry/warning.rb +27 -0
  138. data/lib/pry/wrapped_module.rb +51 -42
  139. data/lib/pry/wrapped_module/candidate.rb +21 -14
  140. metadata +31 -30
  141. data/lib/pry/commands.rb +0 -6
  142. data/lib/pry/commands/disabled_commands.rb +0 -2
  143. data/lib/pry/commands/gem_cd.rb +0 -26
  144. data/lib/pry/commands/gem_install.rb +0 -32
  145. data/lib/pry/commands/gem_list.rb +0 -33
  146. data/lib/pry/commands/gem_open.rb +0 -29
  147. data/lib/pry/commands/gem_readme.rb +0 -25
  148. data/lib/pry/commands/gem_search.rb +0 -40
  149. data/lib/pry/commands/gem_stats.rb +0 -83
  150. data/lib/pry/commands/gist.rb +0 -102
  151. data/lib/pry/commands/install_command.rb +0 -54
  152. data/lib/pry/config/behavior.rb +0 -255
  153. data/lib/pry/config/convenience.rb +0 -28
  154. data/lib/pry/config/default.rb +0 -159
  155. data/lib/pry/config/memoization.rb +0 -48
  156. data/lib/pry/platform.rb +0 -91
  157. data/lib/pry/rubygem.rb +0 -84
  158. data/lib/pry/terminal.rb +0 -91
@@ -1,27 +1,31 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
- class Command::DisablePry < Pry::ClassCommand
3
- match 'disable-pry'
4
- group 'Navigating Pry'
5
- description 'Stops all future calls to pry and exits the current session.'
4
+ class Command
5
+ class DisablePry < Pry::ClassCommand
6
+ match 'disable-pry'
7
+ group 'Navigating Pry'
8
+ description 'Stops all future calls to pry and exits the current session.'
6
9
 
7
- banner <<-'BANNER'
8
- Usage: disable-pry
10
+ banner <<-'BANNER'
11
+ Usage: disable-pry
9
12
 
10
- After this command is run any further calls to pry will immediately return `nil`
11
- without interrupting the flow of your program. This is particularly useful when
12
- you've debugged the problem you were having, and now wish the program to run to
13
- the end.
13
+ After this command is run any further calls to pry will immediately return `nil`
14
+ without interrupting the flow of your program. This is particularly useful when
15
+ you've debugged the problem you were having, and now wish the program to run to
16
+ the end.
14
17
 
15
- As alternatives, consider using `exit!` to force the current Ruby process
16
- to quit immediately; or using `edit-method -p` to remove the `binding.pry`
17
- from the code.
18
- BANNER
18
+ As alternatives, consider using `exit!` to force the current Ruby process
19
+ to quit immediately; or using `edit -p` to remove the `binding.pry`
20
+ from the code.
21
+ BANNER
19
22
 
20
- def process
21
- ENV['DISABLE_PRY'] = 'true'
22
- _pry_.run_command "exit"
23
+ def process
24
+ ENV['DISABLE_PRY'] = 'true'
25
+ pry_instance.run_command "exit"
26
+ end
23
27
  end
24
- end
25
28
 
26
- Pry::Commands.add_command(Pry::Command::DisablePry)
29
+ Pry::Commands.add_command(Pry::Command::DisablePry)
30
+ end
27
31
  end
@@ -1,26 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
4
  Pry::Commands.instance_eval do
3
- command "nyan-cat", "", requires_gem: ["nyancat"] do
4
- run ".nyancat"
5
- end
6
-
7
- command(/!s\/(.*?)\/(.*?)/, "") do |source, dest|
5
+ command(%r{!s/(.*?)/(.*?)}, "") do |source, dest|
8
6
  eval_string.gsub!(/#{source}/) { dest }
9
7
  run "show-input"
10
8
  end
11
9
 
12
- command "get-naked", "" do
13
- txt = %{
14
- --
15
- We dont have to take our clothes off to have a good time.
16
- We could dance & party all night And drink some cherry wine.
17
- -- Jermaine Stewart }
18
- output.puts txt
19
- txt
20
- end
21
-
22
10
  command "east-coker", "" do
23
- txt = %{
11
+ txt = %(
24
12
  --
25
13
  Now the light falls
26
14
  Across the open field, leaving the deep lane
@@ -33,13 +21,13 @@ class Pry
33
21
  The dahlias sleep in the empty silence.
34
22
  Wait for the early owl.
35
23
  -- T.S Eliot
36
- }
24
+ )
37
25
  output.puts txt
38
26
  txt
39
27
  end
40
28
 
41
29
  command "cohen-poem", "" do
42
- txt = %{
30
+ txt = %(
43
31
  --
44
32
  When this American woman,
45
33
  whose thighs are bound in casual red cloth,
@@ -56,7 +44,7 @@ class Pry
56
44
  that if you turn your head
57
45
  they are lost for hours.
58
46
  -- Leonard Cohen
59
- }
47
+ )
60
48
  output.puts txt
61
49
  txt
62
50
  end
@@ -79,34 +67,35 @@ class Pry
79
67
  O abstract hunger for things, impotent libido for moments,
80
68
  Intellectual orgy of feeling life!
81
69
  -- Fernando Pessoa
82
- TEXT
70
+ TEXT
83
71
  end
84
72
 
85
73
  command "test-ansi", "" do
86
- prev_color = _pry_.config.color
87
- _pry_.config.color = true
74
+ prev_color = pry_instance.config.color
75
+ pry_instance.config.color = true
88
76
 
89
- picture = unindent <<-'EOS'.gsub(/[[:alpha:]!]/) { |s| red(s) }
77
+ picture = unindent <<-'OUTPUT'.gsub(/[[:alpha:]!]/) { |s| red(s) }
90
78
  ____ _______________________
91
79
  / \ | A W G |
92
80
  / O O \ | N I O N ! |
93
81
  | | | S S R I ! |
94
82
  \ \__/ / __| I K ! |
95
83
  \____/ \________________________|
96
- EOS
84
+ OUTPUT
97
85
 
98
- if Helpers::Platform.windows_ansi?
99
- move_up = proc { |n| "\e[#{n}F" }
100
- else
101
- move_up = proc { |n| "\e[#{n}A\e[0G" }
102
- end
86
+ move_up =
87
+ if Helpers::Platform.windows_ansi?
88
+ proc { |n| "\e[#{n}F" }
89
+ else
90
+ proc { |n| "\e[#{n}A\e[0G" }
91
+ end
103
92
 
104
93
  output.puts "\n" * 6
105
94
  output.puts picture.lines.map(&:chomp).reverse.join(move_up[1])
106
95
  output.puts "\n" * 6
107
96
  output.puts "** ENV['TERM'] is #{ENV['TERM']} **\n\n"
108
97
 
109
- _pry_.config.color = prev_color
98
+ pry_instance.config.color = prev_color
110
99
  end
111
100
  end
112
101
  end
@@ -1,200 +1,223 @@
1
- class Pry
2
- class Command::Edit < Pry::ClassCommand
3
- require 'pry/commands/edit/exception_patcher'
4
- require 'pry/commands/edit/file_and_line_locator'
5
-
6
- match 'edit'
7
- group 'Editing'
8
- description 'Invoke the default editor on a file.'
9
-
10
- banner <<-'BANNER'
11
- Usage: edit [--no-reload|--reload|--patch] [--line LINE] [--temp|--ex|FILE[:LINE]|OBJECT|--in N]
12
-
13
- Open a text editor. When no FILE is given, edits the pry input buffer.
14
- When a method/module/command is given, the code is opened in an editor.
15
- Ensure `Pry.config.editor` or `_pry_.config.editor` is set to your editor of choice.
16
-
17
- edit sample.rb edit -p MyClass#my_method
18
- edit sample.rb --line 105 edit MyClass
19
- edit MyClass#my_method edit --ex
20
- edit --method edit --ex -p
21
-
22
- https://github.com/pry/pry/wiki/Editor-integration#wiki-Edit_command
23
- BANNER
24
-
25
- def options(opt)
26
- opt.on :e, :ex, "Open the file that raised the most recent exception (_ex_.file)",
27
- optional_argument: true, as: Integer
28
- opt.on :i, :in, "Open a temporary file containing the Nth input expression. N may be a range",
29
- optional_argument: true, as: Range, default: -1..-1
30
- opt.on :t, :temp, "Open an empty temporary file"
31
- opt.on :l, :line, "Jump to this line in the opened file",
32
- argument: true, as: Integer
33
- opt.on :n, :"no-reload", "Don't automatically reload the edited file"
34
- opt.on :c, :current, "Open the current __FILE__ and at __LINE__ (as returned by `whereami`)"
35
- opt.on :r, :reload, "Reload the edited code immediately (default for ruby files)"
36
- opt.on :p, :patch, "Instead of editing the object's file, try to edit in a tempfile and apply as a monkey patch"
37
- opt.on :m, :method, "Explicitly edit the _current_ method (when inside a method context)."
38
- end
1
+ # frozen_string_literal: true
39
2
 
40
- def process
41
- if bad_option_combination?
42
- raise CommandError, "Only one of --ex, --temp, --in, --method and FILE may be specified."
3
+ class Pry
4
+ class Command
5
+ class Edit < Pry::ClassCommand
6
+ match 'edit'
7
+ group 'Editing'
8
+ description 'Invoke the default editor on a file.'
9
+
10
+ banner <<-'BANNER'
11
+ Usage: edit [--no-reload|--reload|--patch] [--line LINE] [--temp|--ex|FILE[:LINE]|OBJECT|--in N]
12
+
13
+ Open a text editor. When no FILE is given, edits the pry input buffer.
14
+ When a method/module/command is given, the code is opened in an editor.
15
+ Ensure `Pry.config.editor` or `pry_instance.config.editor` is set to your editor of choice.
16
+
17
+ edit sample.rb edit -p MyClass#my_method
18
+ edit sample.rb --line 105 edit MyClass
19
+ edit MyClass#my_method edit --ex
20
+ edit --method edit --ex -p
21
+
22
+ https://github.com/pry/pry/wiki/Editor-integration#wiki-Edit_command
23
+ BANNER
24
+
25
+ def options(opt)
26
+ opt.on :e, :ex, "Open the file that raised the most recent exception " \
27
+ "(_ex_.file)",
28
+ optional_argument: true, as: Integer
29
+ opt.on :i, :in, "Open a temporary file containing the Nth input " \
30
+ "expression. N may be a range",
31
+ optional_argument: true, as: Range, default: -1..-1
32
+ opt.on :t, :temp, "Open an empty temporary file"
33
+ opt.on :l, :line, "Jump to this line in the opened file",
34
+ argument: true, as: Integer
35
+ opt.on :n, :"no-reload", "Don't automatically reload the edited file"
36
+ opt.on :c, :current, "Open the current __FILE__ and at __LINE__ (as " \
37
+ "returned by `whereami`)"
38
+ opt.on :r, :reload, "Reload the edited code immediately (default for " \
39
+ "ruby files)"
40
+ opt.on :p, :patch, "Instead of editing the object's file, try to edit " \
41
+ "in a tempfile and apply as a monkey patch"
42
+ opt.on :m, :method, "Explicitly edit the _current_ method (when " \
43
+ "inside a method context)."
43
44
  end
44
45
 
45
- if repl_edit?
46
- # code defined in pry, eval'd within pry.
47
- repl_edit
48
- elsif runtime_patch?
49
- # patch code without persisting changes, implies future changes are patches
50
- apply_runtime_patch
51
- else
52
- # code stored in actual files, eval'd at top-level
53
- file_edit
46
+ def process
47
+ if bad_option_combination?
48
+ raise CommandError, "Only one of --ex, --temp, --in, --method and " \
49
+ "FILE may be specified."
50
+ end
51
+
52
+ if repl_edit?
53
+ # code defined in pry, eval'd within pry.
54
+ repl_edit
55
+ elsif runtime_patch?
56
+ # patch code without persisting changes, implies future changes are patches
57
+ apply_runtime_patch
58
+ else
59
+ # code stored in actual files, eval'd at top-level
60
+ file_edit
61
+ end
54
62
  end
55
- end
56
63
 
57
- def repl_edit?
58
- !opts.present?(:ex) && !opts.present?(:current) && !opts.present?(:method) &&
59
- filename_argument.empty?
60
- end
64
+ def repl_edit?
65
+ !opts.present?(:ex) && !opts.present?(:current) && !opts.present?(:method) &&
66
+ filename_argument.empty?
67
+ end
61
68
 
62
- def repl_edit
63
- content = Pry::Editor.new(_pry_).edit_tempfile_with_content(initial_temp_file_content,
64
- initial_temp_file_content.lines.count)
65
- silence_warnings do
66
- eval_string.replace content
69
+ def repl_edit
70
+ content = Pry::Editor.new(pry_instance).edit_tempfile_with_content(
71
+ initial_temp_file_content,
72
+ initial_temp_file_content.lines.count
73
+ )
74
+ pry_instance.eval_string = content
75
+ Pry.history.push(content)
67
76
  end
68
- Pry.history.push(content)
69
- end
70
77
 
71
- def file_based_exception?
72
- opts.present?(:ex) && !opts.present?(:patch)
73
- end
78
+ def file_based_exception?
79
+ opts.present?(:ex) && !opts.present?(:patch)
80
+ end
74
81
 
75
- def runtime_patch?
76
- !file_based_exception? && (opts.present?(:patch) || previously_patched?(code_object) || pry_method?(code_object))
77
- end
82
+ def runtime_patch?
83
+ !file_based_exception? &&
84
+ (opts.present?(:patch) ||
85
+ previously_patched?(code_object) ||
86
+ pry_method?(code_object))
87
+ end
78
88
 
79
- def apply_runtime_patch
80
- if patch_exception?
81
- ExceptionPatcher.new(_pry_, state, file_and_line_for_current_exception).perform_patch
82
- else
83
- if code_object.is_a?(Pry::Method)
84
- code_object.redefine Pry::Editor.new(_pry_).edit_tempfile_with_content(code_object.source)
89
+ def apply_runtime_patch
90
+ if patch_exception?
91
+ ExceptionPatcher.new(
92
+ pry_instance, state, file_and_line_for_current_exception
93
+ ).perform_patch
94
+ elsif code_object.is_a?(Pry::Method)
95
+ code_object.redefine(
96
+ Pry::Editor.new(pry_instance).edit_tempfile_with_content(
97
+ code_object.source
98
+ )
99
+ )
85
100
  else
86
101
  raise NotImplementedError, "Cannot yet patch #{code_object} objects!"
87
102
  end
88
103
  end
89
- end
90
104
 
91
- def ensure_file_name_is_valid(file_name)
92
- raise CommandError, "Cannot find a valid file for #{filename_argument}" if !file_name
93
- raise CommandError, "#{file_name} is not a valid file name, cannot edit!" if not_a_real_file?(file_name)
94
- end
105
+ def ensure_file_name_is_valid(file_name)
106
+ unless file_name
107
+ raise CommandError, "Cannot find a valid file for #{filename_argument}"
108
+ end
95
109
 
96
- def file_and_line_for_current_exception
97
- FileAndLineLocator.from_exception(_pry_.last_exception, opts[:ex].to_i)
98
- end
110
+ return unless not_a_real_file?(file_name)
99
111
 
100
- def file_and_line
101
- file_name, line = if opts.present?(:current)
102
- FileAndLineLocator.from_binding(target)
103
- elsif opts.present?(:ex)
104
- file_and_line_for_current_exception
105
- elsif code_object
106
- FileAndLineLocator.from_code_object(code_object, filename_argument)
107
- else
108
- # when file and line are passed as a single arg, e.g my_file.rb:30
109
- FileAndLineLocator.from_filename_argument(filename_argument)
110
- end
111
-
112
- [file_name, opts.present?(:line) ? opts[:l].to_i : line]
113
- end
112
+ raise CommandError, "#{file_name} is not a valid file name, cannot edit!"
113
+ end
114
114
 
115
- def file_edit
116
- file_name, line = file_and_line
115
+ def file_and_line_for_current_exception
116
+ FileAndLineLocator.from_exception(pry_instance.last_exception, opts[:ex].to_i)
117
+ end
118
+
119
+ def file_and_line
120
+ file_name, line =
121
+ if opts.present?(:current)
122
+ FileAndLineLocator.from_binding(target)
123
+ elsif opts.present?(:ex)
124
+ file_and_line_for_current_exception
125
+ elsif code_object
126
+ FileAndLineLocator.from_code_object(code_object, filename_argument)
127
+ else
128
+ # when file and line are passed as a single arg, e.g my_file.rb:30
129
+ FileAndLineLocator.from_filename_argument(filename_argument)
130
+ end
131
+
132
+ [file_name, opts.present?(:line) ? opts[:l].to_i : line]
133
+ end
117
134
 
118
- ensure_file_name_is_valid(file_name)
135
+ def file_edit
136
+ file_name, line = file_and_line
119
137
 
120
- Pry::Editor.new(_pry_).invoke_editor(file_name, line, reload?(file_name))
121
- set_file_and_dir_locals(file_name)
138
+ ensure_file_name_is_valid(file_name)
122
139
 
123
- if reload?(file_name)
124
- silence_warnings do
125
- load file_name
126
- end
140
+ Pry::Editor.new(pry_instance).invoke_editor(file_name, line, reload?(file_name))
141
+ set_file_and_dir_locals(file_name)
142
+
143
+ return unless reload?(file_name)
144
+
145
+ silence_warnings { load(file_name) }
127
146
  end
128
- end
129
147
 
130
- def filename_argument
131
- args.join(' ')
132
- end
148
+ def filename_argument
149
+ args.join(' ')
150
+ end
133
151
 
134
- def code_object
135
- @code_object ||= !probably_a_file?(filename_argument) &&
136
- Pry::CodeObject.lookup(filename_argument, _pry_)
137
- end
152
+ def code_object
153
+ @code_object ||=
154
+ !probably_a_file?(filename_argument) &&
155
+ Pry::CodeObject.lookup(filename_argument, pry_instance)
156
+ end
138
157
 
139
- def pry_method?(code_object)
140
- code_object.is_a?(Pry::Method) &&
141
- code_object.pry_method?
142
- end
158
+ def pry_method?(code_object)
159
+ code_object.is_a?(Pry::Method) &&
160
+ code_object.pry_method?
161
+ end
143
162
 
144
- def previously_patched?(code_object)
145
- code_object.is_a?(Pry::Method) && Pry::Method::Patcher.code_for(code_object.source_location.first)
146
- end
163
+ def previously_patched?(code_object)
164
+ code_object.is_a?(Pry::Method) &&
165
+ Pry::Method::Patcher.code_for(code_object.source_location.first)
166
+ end
147
167
 
148
- def patch_exception?
149
- opts.present?(:ex) && opts.present?(:patch)
150
- end
168
+ def patch_exception?
169
+ opts.present?(:ex) && opts.present?(:patch)
170
+ end
151
171
 
152
- def bad_option_combination?
153
- [opts.present?(:ex), opts.present?(:temp),
154
- opts.present?(:in), opts.present?(:method), !filename_argument.empty?].count(true) > 1
155
- end
172
+ def bad_option_combination?
173
+ [
174
+ opts.present?(:ex), opts.present?(:temp),
175
+ opts.present?(:in), opts.present?(:method),
176
+ !filename_argument.empty?
177
+ ].count(true) > 1
178
+ end
156
179
 
157
- def input_expression
158
- case opts[:i]
159
- when Range
160
- (_pry_.input_ring[opts[:i]] || []).join
161
- when Integer
162
- _pry_.input_ring[opts[:i]] || ""
163
- else
164
- raise Pry::CommandError, "Not a valid range: #{opts[:i]}"
180
+ def input_expression
181
+ case opts[:i]
182
+ when Range
183
+ (pry_instance.input_ring[opts[:i]] || []).join
184
+ when Integer
185
+ pry_instance.input_ring[opts[:i]] || ""
186
+ else
187
+ raise Pry::CommandError, "Not a valid range: #{opts[:i]}"
188
+ end
165
189
  end
166
- end
167
190
 
168
- def reloadable?
169
- opts.present?(:reload) || opts.present?(:ex)
170
- end
191
+ def reloadable?
192
+ opts.present?(:reload) || opts.present?(:ex)
193
+ end
171
194
 
172
- def never_reload?
173
- opts.present?(:'no-reload') || _pry_.config.disable_auto_reload
174
- end
195
+ def never_reload?
196
+ opts.present?(:'no-reload') || pry_instance.config.disable_auto_reload
197
+ end
175
198
 
176
- def reload?(file_name = "")
177
- (reloadable? || file_name.end_with?(".rb")) && !never_reload?
178
- end
199
+ def reload?(file_name = "")
200
+ (reloadable? || file_name.end_with?(".rb")) && !never_reload?
201
+ end
179
202
 
180
- def initial_temp_file_content
181
- case
182
- when opts.present?(:temp)
183
- ""
184
- when opts.present?(:in)
185
- input_expression
186
- when eval_string.strip != ""
187
- eval_string
188
- else
189
- _pry_.input_ring.to_a.reverse_each.find { |x| x && x.strip != "" } || ""
203
+ def initial_temp_file_content
204
+ if opts.present?(:temp)
205
+ ""
206
+ elsif opts.present?(:in)
207
+ input_expression
208
+ elsif eval_string.strip != ""
209
+ eval_string
210
+ else
211
+ pry_instance.input_ring.to_a.reverse_each.find { |x| x && x.strip != "" } || ""
212
+ end
190
213
  end
191
- end
192
214
 
193
- def probably_a_file?(str)
194
- [".rb", ".c", ".py", ".yml", ".gemspec"].include?(File.extname(str)) ||
195
- str =~ /\/|\\/
215
+ def probably_a_file?(str)
216
+ [".rb", ".c", ".py", ".yml", ".gemspec"].include?(File.extname(str)) ||
217
+ str =~ %r{/|\\}
218
+ end
196
219
  end
197
- end
198
220
 
199
- Pry::Commands.add_command(Pry::Command::Edit)
221
+ Pry::Commands.add_command(Pry::Command::Edit)
222
+ end
200
223
  end