pry 0.12.2 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
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,3 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'stringio'
4
+
1
5
  class Pry
2
6
  # Manage the processing of command line options
3
7
  class CLI
@@ -33,9 +37,7 @@ class Pry
33
37
 
34
38
  # Bring in options defined in plugins
35
39
  def add_plugin_options
36
- Pry.plugins.values.each do |plugin|
37
- plugin.load_cli_options
38
- end
40
+ Pry.plugins.values.each(&:load_cli_options)
39
41
 
40
42
  self
41
43
  end
@@ -56,14 +58,22 @@ class Pry
56
58
 
57
59
  def parse_options(args = ARGV)
58
60
  unless options
59
- raise NoOptionsError, "No command line options defined! Use Pry::CLI.add_options to add command line options."
61
+ raise NoOptionsError,
62
+ "No command line options defined! Use Pry::CLI.add_options to " \
63
+ "add command line options."
60
64
  end
61
65
 
62
- self.input_args = args
66
+ @pass_argv = args.index { |cli_arg| %w[- --].include?(cli_arg) }
67
+ if @pass_argv
68
+ slop_args = args[0...@pass_argv]
69
+ self.input_args = args.replace(args[@pass_argv + 1..-1])
70
+ else
71
+ self.input_args = slop_args = args
72
+ end
63
73
 
64
74
  begin
65
75
  opts = Pry::Slop.parse!(
66
- args,
76
+ slop_args,
67
77
  help: true,
68
78
  multiple_switches: false,
69
79
  strict: true,
@@ -72,22 +82,20 @@ class Pry
72
82
  rescue Pry::Slop::InvalidOptionError
73
83
  # Display help message on unknown switches and exit.
74
84
  puts Pry::Slop.new(&options)
75
- exit
85
+ Kernel.exit
76
86
  end
77
87
 
78
88
  Pry.initial_session_setup
79
89
  Pry.final_session_setup
80
90
 
81
91
  # Option processors are optional.
82
- if option_processors
83
- option_processors.each { |processor| processor.call(opts) }
84
- end
92
+ option_processors.each { |processor| processor.call(opts) } if option_processors
85
93
 
86
94
  opts
87
95
  end
88
96
 
89
97
  def start(opts)
90
- exit if opts.help?
98
+ Kernel.exit if opts.help?
91
99
 
92
100
  # invoked via cli
93
101
  Pry.cli = true
@@ -95,16 +103,16 @@ class Pry
95
103
  # create the actual context
96
104
  if opts[:context]
97
105
  Pry.initial_session_setup
98
- context = Pry.binding_for(eval(opts[:context]))
106
+ context = Pry.binding_for(eval(opts[:context])) # rubocop:disable Security/Eval
99
107
  Pry.final_session_setup
100
108
  else
101
109
  context = Pry.toplevel_binding
102
110
  end
103
111
 
104
- if Pry::CLI.input_args.any? && Pry::CLI.input_args != ["pry"]
112
+ if !@pass_argv && Pry::CLI.input_args.any? && Pry::CLI.input_args != ["pry"]
105
113
  full_name = File.expand_path(Pry::CLI.input_args.first)
106
114
  Pry.load_file_through_repl(full_name)
107
- exit
115
+ Kernel.exit
108
116
  end
109
117
 
110
118
  # Start the session (running any code passed with -e, if there is any)
@@ -123,20 +131,21 @@ Pry::Slop.new do
123
131
  end
124
132
  end.parse(ARGV.dup)
125
133
 
126
- if Pry.config.should_load_plugins
127
- Pry::CLI.add_plugin_options
128
- end
134
+ Pry::CLI.add_plugin_options if Pry.config.should_load_plugins
129
135
 
130
136
  # The default Pry command line options (before plugin options are included)
131
137
  Pry::CLI.add_options do
132
138
  banner(
133
139
  "Usage: pry [OPTIONS]\n" \
134
140
  "Start a Pry session.\n" \
135
- "See http://pryrepl.org/ for more information.\n"
141
+ "See http://pryrepl.org/ for more information.\n" \
142
+ "Copyright (c) 2016 John Mair (banisterfiend)" \
136
143
  )
137
144
 
138
- on :e, :exec=, "A line of code to execute in context before the session starts" do |input|
139
- Pry.config.exec_string += "\n" if Pry.config.exec_string.length > 0
145
+ on(
146
+ :e, :exec=, "A line of code to execute in context before the session starts"
147
+ ) do |input|
148
+ Pry.config.exec_string += "\n" unless Pry.config.exec_string.empty?
140
149
  Pry.config.exec_string += input
141
150
  end
142
151
 
@@ -174,32 +183,32 @@ Pry::CLI.add_options do
174
183
  puts "Installed Plugins:"
175
184
  puts "--"
176
185
  Pry.locate_plugins.each do |plugin|
177
- puts "#{plugin.name}".ljust(18) << plugin.spec.summary
186
+ puts plugin.name.to_s.ljust(18) << plugin.spec.summary
178
187
  end
179
- exit
188
+ Kernel.exit
180
189
  end
181
190
 
182
191
  on "simple-prompt", "Enable simple prompt mode" do
183
- Pry.config.prompt = Pry::Prompt[:simple][:value]
192
+ Pry.config.prompt = Pry::Prompt[:simple]
184
193
  end
185
194
 
186
195
  on "noprompt", "No prompt mode" do
187
- Pry.config.prompt = Pry::Prompt[:none][:value]
196
+ Pry.config.prompt = Pry::Prompt[:none]
188
197
  end
189
198
 
190
199
  on :r, :require=, "`require` a Ruby script at startup" do |file|
191
200
  Pry.config.requires << file
192
201
  end
193
202
 
194
- on :I=, "Add a path to the $LOAD_PATH", as: Array, delimiter: ":" do |load_path|
203
+ on(:I=, "Add a path to the $LOAD_PATH", as: Array, delimiter: ":") do |load_path|
195
204
  load_path.map! do |path|
196
- /\A\.\// =~ path ? path : File.expand_path(path)
205
+ %r{\A\./} =~ path ? path : File.expand_path(path)
197
206
  end
198
207
 
199
208
  $LOAD_PATH.unshift(*load_path)
200
209
  end
201
210
 
202
- on "gem", "Shorthand for -I./lib -rgemname" do |load_path|
211
+ on "gem", "Shorthand for -I./lib -rgemname" do |_load_path|
203
212
  $LOAD_PATH.unshift("./lib")
204
213
  Dir["./lib/*.rb"].each do |file|
205
214
  Pry.config.requires << file
@@ -208,11 +217,11 @@ Pry::CLI.add_options do
208
217
 
209
218
  on :v, :version, "Display the Pry version" do
210
219
  puts "Pry version #{Pry::VERSION} on Ruby #{RUBY_VERSION}"
211
- exit
220
+ Kernel.exit
212
221
  end
213
222
 
214
- on(:c, :context=,
215
- "Start the session in the specified context. Equivalent to `context.pry` in a session.",
223
+ on :c, :context=,
224
+ "Start the session in the specified context. Equivalent to " \
225
+ "`context.pry` in a session.",
216
226
  default: "Pry.toplevel_binding"
217
- )
218
227
  end
@@ -1,6 +1,6 @@
1
- require 'pry/code/loc'
2
- require 'pry/code/code_range'
3
- require 'pry/code/code_file'
1
+ # frozen_string_literal: true
2
+
3
+ require 'method_source'
4
4
 
5
5
  class Pry
6
6
  class << self
@@ -85,11 +85,10 @@ class Pry
85
85
  # @param [Integer?] start_line
86
86
  # @param [Symbol?] code_type
87
87
  def initialize(lines = [], start_line = 1, code_type = :ruby)
88
- if lines.is_a? String
89
- lines = lines.lines
88
+ lines = lines.lines if lines.is_a? String
89
+ @lines = lines.each_with_index.map do |line, lineno|
90
+ LOC.new(line, lineno + start_line.to_i)
90
91
  end
91
- @lines = lines.each_with_index.map { |line, lineno|
92
- LOC.new(line, lineno + start_line.to_i) }
93
92
  @code_type = code_type
94
93
 
95
94
  @with_marker = @with_indentation = @with_line_numbers = nil
@@ -99,14 +98,10 @@ class Pry
99
98
  # line, unless specified otherwise.
100
99
  #
101
100
  # @param [String] line
102
- # @param [Integer?] lineno
103
- # @return [String] The inserted line.
104
- def push(line, lineno = nil)
105
- if lineno.nil?
106
- lineno = @lines.last.lineno + 1
107
- end
108
- @lines.push(LOC.new(line, lineno))
109
- line
101
+ # @return [void]
102
+ def push(line)
103
+ line_number = @lines.any? ? @lines.last.lineno + 1 : 1
104
+ @lines.push(LOC.new(line, line_number))
110
105
  end
111
106
  alias << push
112
107
 
@@ -120,6 +115,16 @@ class Pry
120
115
  end
121
116
  end
122
117
 
118
+ # Filter the lines using the given block.
119
+ #
120
+ # @yield [LOC]
121
+ # @return [Code]
122
+ def reject(&block)
123
+ alter do
124
+ @lines = @lines.reject(&block)
125
+ end
126
+ end
127
+
123
128
  # Remove all lines that aren't in the given range, expressed either as a
124
129
  # `Range` object or a first and last line number (inclusive). Negative
125
130
  # indices count from the end of the array of lines.
@@ -243,25 +248,20 @@ class Pry
243
248
  end
244
249
  end
245
250
 
246
- # @return [String]
247
- def inspect
248
- Object.instance_method(:to_s).bind(self).call
249
- end
250
-
251
251
  # @return [Integer] the number of digits in the last line.
252
252
  def max_lineno_width
253
- @lines.length > 0 ? @lines.last.lineno.to_s.length : 0
253
+ !@lines.empty? ? @lines.last.lineno.to_s.length : 0
254
254
  end
255
255
 
256
256
  # @return [String] a formatted representation (based on the configuration of
257
257
  # the object).
258
258
  def to_s
259
- print_to_output("", false)
259
+ print_to_output(''.dup, false)
260
260
  end
261
261
 
262
262
  # @return [String] a (possibly highlighted) copy of the source code.
263
263
  def highlighted
264
- print_to_output("", true)
264
+ print_to_output(''.dup, true)
265
265
  end
266
266
 
267
267
  # Writes a formatted representation (based on the configuration of the
@@ -332,14 +332,26 @@ class Pry
332
332
  end
333
333
 
334
334
  # Forward any missing methods to the output of `#to_s`.
335
- def method_missing(name, *args, &block)
336
- to_s.send(name, *args, &block)
335
+ def method_missing(method_name, *args, &block)
336
+ if (string = to_s).respond_to?(method_name)
337
+ string.__send__(method_name, *args, &block)
338
+ else
339
+ super
340
+ end
337
341
  end
338
342
  undef =~
339
343
 
340
344
  # Check whether String responds to missing methods.
341
- def respond_to_missing?(name, include_all = false)
342
- ''.respond_to?(name, include_all)
345
+ def respond_to_missing?(method_name, include_private = false)
346
+ ''.respond_to?(method_name, include_private) || super
347
+ end
348
+
349
+ if RUBY_VERSION.start_with?('1.9')
350
+ # @todo This is needed for Ruby 1.9 support where `lines` return an
351
+ # Enumerator. Newer Rubies return an Array
352
+ def lines
353
+ super.to_a
354
+ end
343
355
  end
344
356
 
345
357
  protected
@@ -1,29 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'method_source'
4
+
1
5
  class Pry
2
6
  class CodeFile
3
- DEFAULT_EXT = '.rb'
7
+ DEFAULT_EXT = '.rb'.freeze
4
8
 
5
9
  # List of all supported languages.
6
10
  # @return [Hash]
7
11
  EXTENSIONS = {
8
- %w(.py) => :python,
9
- %w(.js) => :javascript,
10
- %w(.css) => :css,
11
- %w(.xml) => :xml,
12
- %w(.php) => :php,
13
- %w(.html) => :html,
14
- %w(.diff) => :diff,
15
- %w(.java) => :java,
16
- %w(.json) => :json,
17
- %w(.c .h) => :c,
18
- %w(.rhtml) => :rhtml,
19
- %w(.yaml .yml) => :yaml,
20
- %w(.cpp .hpp .cc .h .cxx) => :cpp,
21
- %w(.rb .ru .irbrc .gemspec .pryrc .rake) => :ruby,
22
- }
12
+ %w[.py] => :python,
13
+ %w[.js] => :javascript,
14
+ %w[.css] => :css,
15
+ %w[.xml] => :xml,
16
+ %w[.php] => :php,
17
+ %w[.html] => :html,
18
+ %w[.diff] => :diff,
19
+ %w[.java] => :java,
20
+ %w[.json] => :json,
21
+ %w[.c .h] => :c,
22
+ %w[.rhtml] => :rhtml,
23
+ %w[.yaml .yml] => :yaml,
24
+ %w[.cpp .hpp .cc .h .cxx] => :cpp,
25
+ %w[.rb .ru .irbrc .gemspec .pryrc .rake] => :ruby
26
+ }.freeze
23
27
 
24
28
  FILES = {
25
- %w(Gemfile Rakefile Guardfile Capfile) => :ruby
26
- }
29
+ %w[Gemfile Rakefile Guardfile Capfile] => :ruby
30
+ }.freeze
27
31
 
28
32
  # Store the current working directory. This allows show-source etc. to work if
29
33
  # your process has changed directory since boot. [Issue #675]
@@ -58,16 +62,16 @@ class Pry
58
62
  # readable for some reason.
59
63
  # @return [String] absolute path for the given `filename`.
60
64
  def abs_path
61
- code_path.detect { |path| readable?(path) } or
62
- raise MethodSource::SourceNotFoundError,
63
- "Cannot open #{ @filename.inspect } for reading."
65
+ code_path.detect { |path| readable?(path) } ||
66
+ raise(MethodSource::SourceNotFoundError,
67
+ "Cannot open #{@filename.inspect} for reading.")
64
68
  end
65
69
 
66
70
  # @param [String] path
67
71
  # @return [Boolean] if the path, with or without the default ext,
68
72
  # is a readable file then `true`, otherwise `false`.
69
73
  def readable?(path)
70
- File.readable?(path) && !File.directory?(path) or
74
+ File.readable?(path) && !File.directory?(path) ||
71
75
  File.readable?(path << DEFAULT_EXT)
72
76
  end
73
77
 
@@ -80,8 +84,8 @@ class Pry
80
84
  # @param [String] filename
81
85
  # @param [Symbol] default (:unknown) the file type to assume if none could be
82
86
  # detected.
83
- # @return [Symbol, nil] The CodeRay type of a file from its extension, or
84
- # `nil` if `:unknown`.
87
+ # @return [Symbol, nil] The SyntaxHighlighter type of a file from its
88
+ # extension, or `nil` if `:unknown`.
85
89
  def type_from_filename(filename, default = :unknown)
86
90
  _, @code_type = EXTENSIONS.find do |k, _|
87
91
  k.any? { |ext| ext == File.extname(filename) }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
4
  class Code
3
5
  # Represents a range of lines in a code listing.
@@ -20,9 +22,9 @@ class Pry
20
22
 
21
23
  private
22
24
 
23
- def start_line; @start_line; end
25
+ attr_reader :start_line
24
26
 
25
- def end_line; @end_line; end
27
+ attr_reader :end_line
26
28
 
27
29
  # If `end_line` is equal to `nil`, then calculate it from the first
28
30
  # parameter, `start_line`. Otherwise, leave it as it is.
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
4
  class Code
3
- # Represents a line of code (which may, in fact, contain multiple lines if the
4
- # entirety was eval'd as a single unit following the `edit` command).
5
+ # Represents a line of code (which may, in fact, contain multiple lines if
6
+ # the entirety was eval'd as a single unit following the `edit` command).
5
7
  #
6
8
  # A line of code is a tuple, which consists of a line and a line number. A
7
9
  # `LOC` object's state (namely, the line parameter) can be changed via
@@ -52,7 +54,7 @@ class Pry
52
54
  # @param [Symbol] code_type
53
55
  # @return [void]
54
56
  def colorize(code_type)
55
- tuple[0] = CodeRay.scan(line, code_type).term
57
+ tuple[0] = SyntaxHighlighter.highlight(line, code_type)
56
58
  end
57
59
 
58
60
  # Prepends the line number `lineno` to the `line`.
@@ -61,9 +63,14 @@ class Pry
61
63
  # @return [void]
62
64
  def add_line_number(max_width = 0, color = false)
63
65
  padded = lineno.to_s.rjust(max_width)
64
- colorized_lineno = color ? Pry::Helpers::BaseHelpers.colorize_code(padded) : padded
66
+ colorized_lineno =
67
+ if color
68
+ Pry::Helpers::BaseHelpers.colorize_code(padded)
69
+ else
70
+ padded
71
+ end
65
72
  properly_padded_line = handle_multiline_entries_from_edit_command(line, max_width)
66
- tuple[0] = "#{ colorized_lineno }: #{ properly_padded_line }"
73
+ tuple[0] = "#{colorized_lineno}: #{properly_padded_line}"
67
74
  end
68
75
 
69
76
  # Prepends a marker "=>" or an empty marker to the +line+.
@@ -74,9 +81,9 @@ class Pry
74
81
  def add_marker(marker_lineno)
75
82
  tuple[0] =
76
83
  if lineno == marker_lineno
77
- " => #{ line }"
84
+ " => #{line}"
78
85
  else
79
- " #{ line }"
86
+ " #{line}"
80
87
  end
81
88
  end
82
89
 
@@ -85,7 +92,7 @@ class Pry
85
92
  # @param [Integer] distance
86
93
  # @return [void]
87
94
  def indent(distance)
88
- tuple[0] = "#{ ' ' * distance }#{ line }"
95
+ tuple[0] = "#{' ' * distance}#{line}"
89
96
  end
90
97
 
91
98
  def handle_multiline_entries_from_edit_command(line, max_width)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
4
  # This class is responsible for taking a string (identifying a
3
5
  # command/class/method/etc) and returning the relevant type of object.
@@ -42,29 +44,30 @@ class Pry
42
44
  # @note If a module defined by C was extended with a lot of methods written
43
45
  # in Ruby, this method would fail.
44
46
  def c_module?
45
- if is_a?(WrappedModule)
47
+ return unless is_a?(WrappedModule)
46
48
 
47
- method_locations = wrapped.methods(false).map do |m|
48
- wrapped.method(m).source_location
49
- end
49
+ method_locations = wrapped.methods(false).map do |m|
50
+ wrapped.method(m).source_location
51
+ end
50
52
 
51
- method_locations.concat(wrapped.instance_methods(false).map do |m|
52
- wrapped.instance_method(m).source_location
53
- end)
53
+ method_locations.concat(
54
+ wrapped.instance_methods(false).map do |m|
55
+ wrapped.instance_method(m).source_location
56
+ end
57
+ )
54
58
 
55
- c_methods = method_locations.grep(nil).count
56
- ruby_methods = method_locations.count - c_methods
59
+ c_methods = method_locations.grep(nil).count
60
+ ruby_methods = method_locations.count - c_methods
57
61
 
58
- c_methods > ruby_methods
59
- end
62
+ c_methods > ruby_methods
60
63
  end
61
64
  end
62
65
 
63
66
  include Pry::Helpers::CommandHelpers
64
67
 
65
68
  class << self
66
- def lookup(str, _pry_, options = {})
67
- co = new(str, _pry_, options)
69
+ def lookup(str, pry_instance, options = {})
70
+ co = new(str, pry_instance, options)
68
71
 
69
72
  co.default_lookup || co.method_or_class_lookup ||
70
73
  co.command_lookup || co.empty_lookup
@@ -73,24 +76,25 @@ class Pry
73
76
 
74
77
  attr_accessor :str
75
78
  attr_accessor :target
76
- attr_accessor :_pry_
79
+ attr_accessor :pry_instance
77
80
  attr_accessor :super_level
78
81
 
79
- def initialize(str, _pry_, options = {})
82
+ def initialize(str, pry_instance, options = {})
80
83
  options = {
81
- super: 0,
84
+ super: 0
82
85
  }.merge!(options)
83
86
 
84
87
  @str = str
85
- @_pry_ = _pry_
86
- @target = _pry_.current_context
88
+ @pry_instance = pry_instance
89
+ @target = pry_instance.current_context
87
90
  @super_level = options[:super]
88
91
  end
89
92
 
93
+ # TODO: just make it so find_command_by_match_or_listing doesn't raise?
90
94
  def command_lookup
91
- # TODO: just make it so find_command_by_match_or_listing doesn't
92
- # raise?
93
- _pry_.commands.find_command_by_match_or_listing(str) rescue nil
95
+ pry_instance.commands.find_command_by_match_or_listing(str)
96
+ rescue StandardError
97
+ nil
94
98
  end
95
99
 
96
100
  # when no paramter is given (i.e CodeObject.lookup(nil)), then we
@@ -112,8 +116,8 @@ class Pry
112
116
 
113
117
  # lookup variables and constants and `self` that are not modules
114
118
  def default_lookup
115
-
116
- # we skip instance methods as we want those to fall through to method_or_class_lookup()
119
+ # we skip instance methods as we want those to fall through to
120
+ # method_or_class_lookup()
117
121
  if safe_to_evaluate?(str) && !looks_like_an_instance_method?(str)
118
122
  obj = target.eval(str)
119
123
 
@@ -123,22 +127,22 @@ class Pry
123
127
  Pry::Method(obj)
124
128
  elsif !obj.is_a?(Module)
125
129
  Pry::WrappedModule(obj.class)
126
- else
127
- nil
128
130
  end
129
131
  end
130
-
131
132
  rescue Pry::RescuableException
132
133
  nil
133
134
  end
134
135
 
135
136
  def method_or_class_lookup
136
- obj = case str
137
- when /\S+\(\)\z/
138
- Pry::Method.from_str(str.sub(/\(\)\z/, ''),target) || Pry::WrappedModule.from_str(str, target)
139
- else
140
- Pry::WrappedModule.from_str(str,target) || Pry::Method.from_str(str, target)
141
- end
137
+ obj =
138
+ case str
139
+ when /\S+\(\)\z/
140
+ Pry::Method.from_str(str.sub(/\(\)\z/, ''), target) ||
141
+ Pry::WrappedModule.from_str(str, target)
142
+ else
143
+ Pry::WrappedModule.from_str(str, target) ||
144
+ Pry::Method.from_str(str, target)
145
+ end
142
146
 
143
147
  lookup_super(obj, super_level)
144
148
  end
@@ -182,14 +186,12 @@ class Pry
182
186
  # @param [Object] obj
183
187
  # @param [Fixnum] super_level How far up the super chain to ascend.
184
188
  def lookup_super(obj, super_level)
185
- return nil if !obj
189
+ return unless obj
186
190
 
187
191
  sup = obj.super(super_level)
188
- if !sup
189
- raise Pry::CommandError, "No superclass found for #{obj.wrapped}"
190
- else
191
- sup
192
- end
192
+ raise Pry::CommandError, "No superclass found for #{obj.wrapped}" unless sup
193
+
194
+ sup
193
195
  end
194
196
  end
195
197
  end