pry 0.12.0 → 0.14.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 +4 -4
  2. data/CHANGELOG.md +162 -1
  3. data/LICENSE +1 -1
  4. data/README.md +331 -269
  5. data/bin/pry +5 -0
  6. data/lib/pry.rb +132 -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 +43 -51
  11. data/lib/pry/code.rb +40 -28
  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 +22 -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 +80 -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 +110 -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 +307 -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 +186 -180
  118. data/lib/pry/prompt.rb +123 -54
  119. data/lib/pry/pry_class.rb +61 -103
  120. data/lib/pry/pry_instance.rb +217 -215
  121. data/lib/pry/repl.rb +18 -22
  122. data/lib/pry/repl_file_loader.rb +27 -21
  123. data/lib/pry/ring.rb +11 -6
  124. data/lib/pry/slop.rb +574 -563
  125. data/lib/pry/slop/commands.rb +164 -169
  126. data/lib/pry/slop/option.rb +172 -168
  127. data/lib/pry/syntax_highlighter.rb +26 -0
  128. data/lib/pry/system_command_handler.rb +17 -0
  129. data/lib/pry/testable.rb +59 -61
  130. data/lib/pry/testable/evalable.rb +21 -12
  131. data/lib/pry/testable/mockable.rb +18 -10
  132. data/lib/pry/testable/pry_tester.rb +71 -56
  133. data/lib/pry/testable/utility.rb +29 -21
  134. data/lib/pry/testable/variables.rb +49 -43
  135. data/lib/pry/version.rb +3 -1
  136. data/lib/pry/warning.rb +27 -0
  137. data/lib/pry/wrapped_module.rb +51 -42
  138. data/lib/pry/wrapped_module/candidate.rb +21 -14
  139. metadata +35 -35
  140. data/lib/pry/commands.rb +0 -6
  141. data/lib/pry/commands/disabled_commands.rb +0 -2
  142. data/lib/pry/commands/gem_cd.rb +0 -26
  143. data/lib/pry/commands/gem_install.rb +0 -32
  144. data/lib/pry/commands/gem_list.rb +0 -33
  145. data/lib/pry/commands/gem_open.rb +0 -29
  146. data/lib/pry/commands/gem_readme.rb +0 -25
  147. data/lib/pry/commands/gem_search.rb +0 -40
  148. data/lib/pry/commands/gem_stats.rb +0 -83
  149. data/lib/pry/commands/gist.rb +0 -102
  150. data/lib/pry/commands/install_command.rb +0 -54
  151. data/lib/pry/config/behavior.rb +0 -255
  152. data/lib/pry/config/convenience.rb +0 -28
  153. data/lib/pry/config/default.rb +0 -159
  154. data/lib/pry/config/memoization.rb +0 -48
  155. data/lib/pry/platform.rb +0 -91
  156. data/lib/pry/plugins.rb +0 -122
  157. data/lib/pry/rubygem.rb +0 -84
  158. data/lib/pry/terminal.rb +0 -91
data/lib/pry/cli.rb CHANGED
@@ -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
@@ -31,15 +35,6 @@ class Pry
31
35
  self
32
36
  end
33
37
 
34
- # Bring in options defined in plugins
35
- def add_plugin_options
36
- Pry.plugins.values.each do |plugin|
37
- plugin.load_cli_options
38
- end
39
-
40
- self
41
- end
42
-
43
38
  # Add a block responsible for processing parsed options.
44
39
  def add_option_processor(&block)
45
40
  self.option_processors ||= []
@@ -56,14 +51,22 @@ class Pry
56
51
 
57
52
  def parse_options(args = ARGV)
58
53
  unless options
59
- raise NoOptionsError, "No command line options defined! Use Pry::CLI.add_options to add command line options."
54
+ raise NoOptionsError,
55
+ "No command line options defined! Use Pry::CLI.add_options to " \
56
+ "add command line options."
60
57
  end
61
58
 
62
- self.input_args = args
59
+ @pass_argv = args.index { |cli_arg| %w[- --].include?(cli_arg) }
60
+ if @pass_argv
61
+ slop_args = args[0...@pass_argv]
62
+ self.input_args = args.replace(args[@pass_argv + 1..-1])
63
+ else
64
+ self.input_args = slop_args = args
65
+ end
63
66
 
64
67
  begin
65
68
  opts = Pry::Slop.parse!(
66
- args,
69
+ slop_args,
67
70
  help: true,
68
71
  multiple_switches: false,
69
72
  strict: true,
@@ -72,22 +75,20 @@ class Pry
72
75
  rescue Pry::Slop::InvalidOptionError
73
76
  # Display help message on unknown switches and exit.
74
77
  puts Pry::Slop.new(&options)
75
- exit
78
+ Kernel.exit
76
79
  end
77
80
 
78
81
  Pry.initial_session_setup
79
82
  Pry.final_session_setup
80
83
 
81
84
  # Option processors are optional.
82
- if option_processors
83
- option_processors.each { |processor| processor.call(opts) }
84
- end
85
+ option_processors.each { |processor| processor.call(opts) } if option_processors
85
86
 
86
87
  opts
87
88
  end
88
89
 
89
90
  def start(opts)
90
- exit if opts.help?
91
+ Kernel.exit if opts.help?
91
92
 
92
93
  # invoked via cli
93
94
  Pry.cli = true
@@ -95,16 +96,16 @@ class Pry
95
96
  # create the actual context
96
97
  if opts[:context]
97
98
  Pry.initial_session_setup
98
- context = Pry.binding_for(eval(opts[:context]))
99
+ context = Pry.binding_for(eval(opts[:context])) # rubocop:disable Security/Eval
99
100
  Pry.final_session_setup
100
101
  else
101
102
  context = Pry.toplevel_binding
102
103
  end
103
104
 
104
- if Pry::CLI.input_args.any? && Pry::CLI.input_args != ["pry"]
105
+ if !@pass_argv && Pry::CLI.input_args.any? && Pry::CLI.input_args != ["pry"]
105
106
  full_name = File.expand_path(Pry::CLI.input_args.first)
106
107
  Pry.load_file_through_repl(full_name)
107
- exit
108
+ Kernel.exit
108
109
  end
109
110
 
110
111
  # Start the session (running any code passed with -e, if there is any)
@@ -116,27 +117,19 @@ class Pry
116
117
  end
117
118
  end
118
119
 
119
- # Bring in options defined by plugins
120
- Pry::Slop.new do
121
- on "no-plugins" do
122
- Pry.config.should_load_plugins = false
123
- end
124
- end.parse(ARGV.dup)
125
-
126
- if Pry.config.should_load_plugins
127
- Pry::CLI.add_plugin_options
128
- end
129
-
130
120
  # The default Pry command line options (before plugin options are included)
131
121
  Pry::CLI.add_options do
132
122
  banner(
133
123
  "Usage: pry [OPTIONS]\n" \
134
124
  "Start a Pry session.\n" \
135
- "See http://pryrepl.org/ for more information.\n"
125
+ "See http://pryrepl.org/ for more information.\n" \
126
+ "Copyright (c) 2016 John Mair (banisterfiend)" \
136
127
  )
137
128
 
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
129
+ on(
130
+ :e, :exec=, "A line of code to execute in context before the session starts"
131
+ ) do |input|
132
+ Pry.config.exec_string += "\n" unless Pry.config.exec_string.empty?
140
133
  Pry.config.exec_string += input
141
134
  end
142
135
 
@@ -157,49 +150,48 @@ Pry::CLI.add_options do
157
150
  Pry.config.should_load_local_rc = false
158
151
  end
159
152
 
160
- on :s, "select-plugin=", "Only load specified plugin (and no others)." do |plugin_name|
161
- Pry.config.should_load_plugins = false
162
- Pry.plugins[plugin_name].activate!
153
+ on :s, "select-plugin=", "Only load specified plugin (and no others)." do |_plugin_name|
154
+ warn "The --select-plugin option is deprecated and has no effect"
163
155
  end
164
156
 
165
- on :d, "disable-plugin=", "Disable a specific plugin." do |plugin_name|
166
- Pry.plugins[plugin_name].disable!
157
+ on :d, "disable-plugin=", "Disable a specific plugin." do |_plugin_name|
158
+ warn "The --disable-plugin option is deprecated and has no effect"
167
159
  end
168
160
 
169
161
  on "no-plugins", "Suppress loading of plugins." do
170
- Pry.config.should_load_plugins = false
162
+ warn "The --no-plugins option is deprecated and has no effect"
171
163
  end
172
164
 
173
165
  on "plugins", "List installed plugins." do
174
166
  puts "Installed Plugins:"
175
167
  puts "--"
176
168
  Pry.locate_plugins.each do |plugin|
177
- puts "#{plugin.name}".ljust(18) << plugin.spec.summary
169
+ puts plugin.name.to_s.ljust(18) << plugin.spec.summary
178
170
  end
179
- exit
171
+ Kernel.exit
180
172
  end
181
173
 
182
174
  on "simple-prompt", "Enable simple prompt mode" do
183
- Pry.config.prompt = Pry::Prompt[:simple][:value]
175
+ Pry.config.prompt = Pry::Prompt[:simple]
184
176
  end
185
177
 
186
178
  on "noprompt", "No prompt mode" do
187
- Pry.config.prompt = Pry::Prompt[:none][:value]
179
+ Pry.config.prompt = Pry::Prompt[:none]
188
180
  end
189
181
 
190
182
  on :r, :require=, "`require` a Ruby script at startup" do |file|
191
183
  Pry.config.requires << file
192
184
  end
193
185
 
194
- on :I=, "Add a path to the $LOAD_PATH", as: Array, delimiter: ":" do |load_path|
186
+ on(:I=, "Add a path to the $LOAD_PATH", as: Array, delimiter: ":") do |load_path|
195
187
  load_path.map! do |path|
196
- /\A\.\// =~ path ? path : File.expand_path(path)
188
+ %r{\A\./} =~ path ? path : File.expand_path(path)
197
189
  end
198
190
 
199
191
  $LOAD_PATH.unshift(*load_path)
200
192
  end
201
193
 
202
- on "gem", "Shorthand for -I./lib -rgemname" do |load_path|
194
+ on "gem", "Shorthand for -I./lib -rgemname" do |_load_path|
203
195
  $LOAD_PATH.unshift("./lib")
204
196
  Dir["./lib/*.rb"].each do |file|
205
197
  Pry.config.requires << file
@@ -208,11 +200,11 @@ Pry::CLI.add_options do
208
200
 
209
201
  on :v, :version, "Display the Pry version" do
210
202
  puts "Pry version #{Pry::VERSION} on Ruby #{RUBY_VERSION}"
211
- exit
203
+ Kernel.exit
212
204
  end
213
205
 
214
- on(:c, :context=,
215
- "Start the session in the specified context. Equivalent to `context.pry` in a session.",
206
+ on :c, :context=,
207
+ "Start the session in the specified context. Equivalent to " \
208
+ "`context.pry` in a session.",
216
209
  default: "Pry.toplevel_binding"
217
- )
218
210
  end
data/lib/pry/code.rb CHANGED
@@ -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
- undef =~
342
+ undef =~ if method_defined?(:=~)
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.
data/lib/pry/code/loc.rb CHANGED
@@ -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)