pry 0.10.4 → 0.14.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (159) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +439 -16
  3. data/LICENSE +1 -1
  4. data/README.md +362 -302
  5. data/bin/pry +4 -7
  6. data/lib/pry/basic_object.rb +10 -0
  7. data/lib/pry/block_command.rb +22 -0
  8. data/lib/pry/class_command.rb +194 -0
  9. data/lib/pry/cli.rb +84 -97
  10. data/lib/pry/code/code_file.rb +37 -26
  11. data/lib/pry/code/code_range.rb +7 -5
  12. data/lib/pry/code/loc.rb +26 -13
  13. data/lib/pry/code.rb +41 -32
  14. data/lib/pry/code_object.rb +53 -28
  15. data/lib/pry/color_printer.rb +46 -35
  16. data/lib/pry/command.rb +197 -369
  17. data/lib/pry/command_set.rb +89 -114
  18. data/lib/pry/command_state.rb +31 -0
  19. data/lib/pry/commands/amend_line.rb +86 -82
  20. data/lib/pry/commands/bang.rb +18 -14
  21. data/lib/pry/commands/bang_pry.rb +15 -11
  22. data/lib/pry/commands/cat/abstract_formatter.rb +23 -18
  23. data/lib/pry/commands/cat/exception_formatter.rb +85 -72
  24. data/lib/pry/commands/cat/file_formatter.rb +56 -46
  25. data/lib/pry/commands/cat/input_expression_formatter.rb +35 -30
  26. data/lib/pry/commands/cat.rb +62 -54
  27. data/lib/pry/commands/cd.rb +40 -35
  28. data/lib/pry/commands/change_inspector.rb +29 -22
  29. data/lib/pry/commands/change_prompt.rb +48 -23
  30. data/lib/pry/commands/clear_screen.rb +20 -0
  31. data/lib/pry/commands/code_collector.rb +148 -131
  32. data/lib/pry/commands/disable_pry.rb +23 -19
  33. data/lib/pry/commands/easter_eggs.rb +23 -34
  34. data/lib/pry/commands/edit/exception_patcher.rb +21 -17
  35. data/lib/pry/commands/edit/file_and_line_locator.rb +34 -23
  36. data/lib/pry/commands/edit.rb +185 -157
  37. data/lib/pry/commands/exit.rb +40 -35
  38. data/lib/pry/commands/exit_all.rb +24 -20
  39. data/lib/pry/commands/exit_program.rb +20 -16
  40. data/lib/pry/commands/find_method.rb +168 -162
  41. data/lib/pry/commands/fix_indent.rb +16 -12
  42. data/lib/pry/commands/help.rb +140 -133
  43. data/lib/pry/commands/hist.rb +151 -149
  44. data/lib/pry/commands/import_set.rb +20 -15
  45. data/lib/pry/commands/jump_to.rb +25 -21
  46. data/lib/pry/commands/list_inspectors.rb +35 -28
  47. data/lib/pry/commands/ls/constants.rb +59 -31
  48. data/lib/pry/commands/ls/formatter.rb +42 -36
  49. data/lib/pry/commands/ls/globals.rb +38 -36
  50. data/lib/pry/commands/ls/grep.rb +17 -15
  51. data/lib/pry/commands/ls/instance_vars.rb +29 -28
  52. data/lib/pry/commands/ls/interrogatable.rb +18 -12
  53. data/lib/pry/commands/ls/jruby_hacks.rb +47 -41
  54. data/lib/pry/commands/ls/local_names.rb +26 -24
  55. data/lib/pry/commands/ls/local_vars.rb +38 -30
  56. data/lib/pry/commands/ls/ls_entity.rb +47 -52
  57. data/lib/pry/commands/ls/methods.rb +49 -51
  58. data/lib/pry/commands/ls/methods_helper.rb +46 -42
  59. data/lib/pry/commands/ls/self_methods.rb +23 -21
  60. data/lib/pry/commands/ls.rb +124 -103
  61. data/lib/pry/commands/nesting.rb +21 -17
  62. data/lib/pry/commands/play.rb +92 -82
  63. data/lib/pry/commands/pry_backtrace.rb +22 -17
  64. data/lib/pry/commands/pry_version.rb +15 -11
  65. data/lib/pry/commands/raise_up.rb +33 -27
  66. data/lib/pry/commands/reload_code.rb +60 -48
  67. data/lib/pry/commands/reset.rb +16 -12
  68. data/lib/pry/commands/ri.rb +57 -42
  69. data/lib/pry/commands/save_file.rb +45 -43
  70. data/lib/pry/commands/shell_command.rb +56 -29
  71. data/lib/pry/commands/shell_mode.rb +22 -18
  72. data/lib/pry/commands/show_doc.rb +80 -70
  73. data/lib/pry/commands/show_info.rb +193 -160
  74. data/lib/pry/commands/show_input.rb +16 -11
  75. data/lib/pry/commands/show_source.rb +110 -42
  76. data/lib/pry/commands/stat.rb +35 -31
  77. data/lib/pry/commands/switch_to.rb +21 -15
  78. data/lib/pry/commands/toggle_color.rb +20 -16
  79. data/lib/pry/commands/watch_expression/expression.rb +32 -27
  80. data/lib/pry/commands/watch_expression.rb +89 -84
  81. data/lib/pry/commands/whereami.rb +155 -146
  82. data/lib/pry/commands/wtf.rb +78 -40
  83. data/lib/pry/config/attributable.rb +22 -0
  84. data/lib/pry/config/lazy_value.rb +29 -0
  85. data/lib/pry/config/memoized_value.rb +34 -0
  86. data/lib/pry/config/value.rb +24 -0
  87. data/lib/pry/config.rb +310 -20
  88. data/lib/pry/control_d_handler.rb +28 -0
  89. data/lib/pry/core_extensions.rb +22 -9
  90. data/lib/pry/editor.rb +56 -34
  91. data/lib/pry/env.rb +18 -0
  92. data/lib/pry/exception_handler.rb +43 -0
  93. data/lib/pry/exceptions.rb +13 -18
  94. data/lib/pry/forwardable.rb +27 -0
  95. data/lib/pry/helpers/base_helpers.rb +20 -62
  96. data/lib/pry/helpers/command_helpers.rb +52 -62
  97. data/lib/pry/helpers/documentation_helpers.rb +21 -12
  98. data/lib/pry/helpers/options_helpers.rb +15 -8
  99. data/lib/pry/helpers/platform.rb +55 -0
  100. data/lib/pry/helpers/table.rb +44 -32
  101. data/lib/pry/helpers/text.rb +96 -85
  102. data/lib/pry/helpers.rb +3 -0
  103. data/lib/pry/history.rb +81 -55
  104. data/lib/pry/hooks.rb +60 -110
  105. data/lib/pry/indent.rb +74 -68
  106. data/lib/pry/input_completer.rb +199 -158
  107. data/lib/pry/input_lock.rb +7 -10
  108. data/lib/pry/inspector.rb +36 -24
  109. data/lib/pry/last_exception.rb +45 -45
  110. data/lib/pry/method/disowned.rb +19 -5
  111. data/lib/pry/method/patcher.rb +14 -8
  112. data/lib/pry/method/weird_method_locator.rb +79 -45
  113. data/lib/pry/method.rb +178 -124
  114. data/lib/pry/object_path.rb +37 -28
  115. data/lib/pry/output.rb +102 -16
  116. data/lib/pry/pager.rb +187 -177
  117. data/lib/pry/prompt.rb +213 -25
  118. data/lib/pry/pry_class.rb +119 -98
  119. data/lib/pry/pry_instance.rb +261 -224
  120. data/lib/pry/repl.rb +83 -29
  121. data/lib/pry/repl_file_loader.rb +27 -22
  122. data/lib/pry/ring.rb +89 -0
  123. data/lib/pry/slop/LICENSE +20 -0
  124. data/lib/pry/slop/commands.rb +190 -0
  125. data/lib/pry/slop/option.rb +210 -0
  126. data/lib/pry/slop.rb +672 -0
  127. data/lib/pry/syntax_highlighter.rb +26 -0
  128. data/lib/pry/system_command_handler.rb +17 -0
  129. data/lib/pry/testable/evalable.rb +24 -0
  130. data/lib/pry/testable/mockable.rb +22 -0
  131. data/lib/pry/testable/pry_tester.rb +88 -0
  132. data/lib/pry/testable/utility.rb +34 -0
  133. data/lib/pry/testable/variables.rb +52 -0
  134. data/lib/pry/testable.rb +68 -0
  135. data/lib/pry/version.rb +3 -1
  136. data/lib/pry/warning.rb +20 -0
  137. data/lib/pry/{module_candidate.rb → wrapped_module/candidate.rb} +34 -32
  138. data/lib/pry/wrapped_module.rb +67 -63
  139. data/lib/pry.rb +133 -149
  140. metadata +52 -63
  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/gist.rb +0 -101
  147. data/lib/pry/commands/install_command.rb +0 -53
  148. data/lib/pry/commands/list_prompts.rb +0 -35
  149. data/lib/pry/commands/simple_prompt.rb +0 -22
  150. data/lib/pry/commands.rb +0 -6
  151. data/lib/pry/config/behavior.rb +0 -139
  152. data/lib/pry/config/convenience.rb +0 -25
  153. data/lib/pry/config/default.rb +0 -161
  154. data/lib/pry/history_array.rb +0 -121
  155. data/lib/pry/plugins.rb +0 -103
  156. data/lib/pry/rbx_path.rb +0 -22
  157. data/lib/pry/rubygem.rb +0 -82
  158. data/lib/pry/terminal.rb +0 -79
  159. data/lib/pry/test/helper.rb +0 -170
data/bin/pry CHANGED
@@ -1,16 +1,13 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  # (C) John Mair (banisterfiend)
4
5
  # MIT license
5
6
 
6
7
  $0 = 'pry'
7
8
 
8
- begin
9
- require 'pry'
10
- rescue LoadError
11
- require 'rubygems'
12
- require 'pry'
13
- end
9
+ require 'pry'
14
10
 
15
11
  # Process command line options and run Pry
16
- Pry::CLI.parse_options
12
+ opts = Pry::CLI.parse_options
13
+ Pry::CLI.start(opts)
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Pry
4
+ class BasicObject < BasicObject
5
+ %i[Kernel File Dir LoadError ENV Pry].each do |constant|
6
+ const_set constant, ::Object.const_get(constant)
7
+ end
8
+ include Kernel
9
+ end
10
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Pry
4
+ # A super-class for Commands that are created with a single block.
5
+ #
6
+ # This class ensures that the block is called with the correct number of
7
+ # arguments and the right context.
8
+ #
9
+ # Create subclasses using {Pry::CommandSet#command}.
10
+ class BlockCommand < Command
11
+ # Call the block that was registered with this command.
12
+ # @param [Array<String>] args The arguments passed
13
+ # @return [Object] The return value of the block
14
+ def call(*args)
15
+ instance_exec(*normalize_method_args(block, args), &block)
16
+ end
17
+
18
+ def help
19
+ "#{command_options[:listing].to_s.ljust(18)} #{description}"
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,194 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Pry
4
+ # A super-class of Commands with structure.
5
+ #
6
+ # This class implements the bare-minimum functionality that a command should
7
+ # have, namely a --help switch, and then delegates actual processing to its
8
+ # subclasses.
9
+ #
10
+ # Create subclasses using {Pry::CommandSet#create_command}, and override the
11
+ # `options(opt)` method to set up an instance of Pry::Slop, and the `process`
12
+ # method to actually run the command. If necessary, you can also override
13
+ # `setup` which will be called before `options`, for example to require any
14
+ # gems your command needs to run, or to set up state.
15
+ class ClassCommand < Command
16
+ class << self
17
+ # Ensure that subclasses inherit the options, description and
18
+ # match from a ClassCommand super class.
19
+ def inherited(klass)
20
+ klass.match match
21
+ klass.description description
22
+ klass.command_options options
23
+ end
24
+
25
+ def source
26
+ source_object.source
27
+ end
28
+
29
+ def doc
30
+ new.help
31
+ end
32
+
33
+ def source_location
34
+ source_object.source_location
35
+ end
36
+
37
+ def source_file
38
+ source_object.source_file
39
+ end
40
+ alias file source_file
41
+
42
+ def source_line
43
+ source_object.source_line
44
+ end
45
+ alias line source_line
46
+
47
+ private
48
+
49
+ # The object used to extract the source for the command.
50
+ #
51
+ # This should be a `Pry::Method(block)` for a command made with `create_command`
52
+ # and a `Pry::WrappedModule(self)` for a command that's a standard class.
53
+ # @return [Pry::WrappedModule, Pry::Method]
54
+ def source_object
55
+ @source_object ||= if name =~ /^[A-Z]/
56
+ Pry::WrappedModule(self)
57
+ else
58
+ Pry::Method(block)
59
+ end
60
+ end
61
+ end
62
+
63
+ attr_accessor :opts
64
+ attr_accessor :args
65
+
66
+ # Set up `opts` and `args`, and then call `process`.
67
+ #
68
+ # This method will display help if necessary.
69
+ #
70
+ # @param [Array<String>] args The arguments passed
71
+ # @return [Object] The return value of `process` or VOID_VALUE
72
+ def call(*args)
73
+ setup
74
+
75
+ self.opts = slop
76
+ self.args = opts.parse!(args)
77
+
78
+ if opts.present?(:help)
79
+ output.puts slop.help
80
+ void
81
+ else
82
+ process(*normalize_method_args(method(:process), args))
83
+ end
84
+ end
85
+
86
+ # Return the help generated by Pry::Slop for this command.
87
+ def help
88
+ slop.help
89
+ end
90
+
91
+ # Return an instance of Pry::Slop that can parse either subcommands or the
92
+ # options that this command accepts.
93
+ def slop
94
+ Pry::Slop.new do |opt|
95
+ opt.banner(unindent(self.class.banner))
96
+ subcommands(opt)
97
+ options(opt)
98
+ opt.on :h, :help, 'Show this message.'
99
+ end
100
+ end
101
+
102
+ # Generate shell completions
103
+ # @param [String] search The line typed so far
104
+ # @return [Array<String>] the words to complete
105
+ def complete(search)
106
+ slop.flat_map do |opt|
107
+ [opt.long && "--#{opt.long} " || opt.short && "-#{opt.short}"]
108
+ end.compact + super
109
+ end
110
+
111
+ # A method called just before `options(opt)` as part of `call`.
112
+ #
113
+ # This method can be used to set up any context your command needs to run,
114
+ # for example requiring gems, or setting default values for options.
115
+ #
116
+ # @example
117
+ # def setup
118
+ # require 'gist'
119
+ # @action = :method
120
+ # end
121
+ def setup; end
122
+
123
+ # A method to setup Pry::Slop commands so it can parse the subcommands your
124
+ # command expects. If you need to set up default values, use `setup`
125
+ # instead.
126
+ #
127
+ # @example A minimal example
128
+ # def subcommands(cmd)
129
+ # cmd.command :download do |opt|
130
+ # description 'Downloads a content from a server'
131
+ #
132
+ # opt.on :verbose, 'Use verbose output'
133
+ #
134
+ # run do |options, arguments|
135
+ # ContentDownloader.download(options, arguments)
136
+ # end
137
+ # end
138
+ # end
139
+ #
140
+ # @example Define the invokation block anywhere you want
141
+ # def subcommands(cmd)
142
+ # cmd.command :download do |opt|
143
+ # description 'Downloads a content from a server'
144
+ #
145
+ # opt.on :verbose, 'Use verbose output'
146
+ # end
147
+ # end
148
+ #
149
+ # def process
150
+ # # Perform calculations...
151
+ # opts.fetch_command(:download).run do |options, arguments|
152
+ # ContentDownloader.download(options, arguments)
153
+ # end
154
+ # # More calculations...
155
+ # end
156
+ def subcommands(cmd); end
157
+
158
+ # A method to setup Pry::Slop so it can parse the options your command expects.
159
+ #
160
+ # @note Please don't do anything side-effecty in the main part of this
161
+ # method, as it may be called by Pry at any time for introspection reasons.
162
+ # If you need to set up default values, use `setup` instead.
163
+ #
164
+ # @example
165
+ # def options(opt)
166
+ # opt.banner "Gists methods or classes"
167
+ # opt.on(:c, :class, "gist a class") do
168
+ # @action = :class
169
+ # end
170
+ # end
171
+ def options(opt); end
172
+
173
+ # The actual body of your command should go here.
174
+ #
175
+ # The `opts` mehod can be called to get the options that Pry::Slop has passed,
176
+ # and `args` gives the remaining, unparsed arguments.
177
+ #
178
+ # The return value of this method is discarded unless the command was
179
+ # created with `:keep_retval => true`, in which case it is returned to the
180
+ # repl.
181
+ #
182
+ # @example
183
+ # def process
184
+ # if opts.present?(:class)
185
+ # gist_class
186
+ # else
187
+ # gist_method
188
+ # end
189
+ # end
190
+ def process
191
+ raise CommandError, "command '#{command_name}' not implemented"
192
+ end
193
+ end
194
+ end
data/lib/pry/cli.rb CHANGED
@@ -1,12 +1,13 @@
1
- class Pry
1
+ # frozen_string_literal: true
2
+
3
+ require 'stringio'
2
4
 
5
+ class Pry
3
6
  # Manage the processing of command line options
4
7
  class CLI
5
-
6
8
  NoOptionsError = Class.new(StandardError)
7
9
 
8
10
  class << self
9
-
10
11
  # @return [Proc] The Proc defining the valid command line options.
11
12
  attr_accessor :options
12
13
 
@@ -19,7 +20,7 @@ class Pry
19
20
  # as CLI options.
20
21
  attr_accessor :input_args
21
22
 
22
- # Add another set of CLI options (a Slop block)
23
+ # Add another set of CLI options (a Pry::Slop block)
23
24
  def add_options(&block)
24
25
  if options
25
26
  old_options = options
@@ -34,15 +35,6 @@ class Pry
34
35
  self
35
36
  end
36
37
 
37
- # Bring in options defined in plugins
38
- def add_plugin_options
39
- Pry.plugins.values.each do |plugin|
40
- plugin.load_cli_options
41
- end
42
-
43
- self
44
- end
45
-
46
38
  # Add a block responsible for processing parsed options.
47
39
  def add_option_processor(&block)
48
40
  self.option_processors ||= []
@@ -57,66 +49,88 @@ class Pry
57
49
  self.option_processors = nil
58
50
  end
59
51
 
60
- def parse_options(args=ARGV)
52
+ def parse_options(args = ARGV)
61
53
  unless options
62
- 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."
63
57
  end
64
58
 
65
- 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
66
66
 
67
67
  begin
68
- opts = Slop.parse!(
69
- args,
70
- :help => true,
71
- :multiple_switches => false,
72
- :strict => true,
68
+ opts = Pry::Slop.parse!(
69
+ slop_args,
70
+ help: true,
71
+ multiple_switches: false,
72
+ strict: true,
73
73
  &options
74
74
  )
75
- rescue Slop::InvalidOptionError
75
+ rescue Pry::Slop::InvalidOptionError
76
76
  # Display help message on unknown switches and exit.
77
- puts Slop.new(&options)
78
- exit
77
+ puts Pry::Slop.new(&options)
78
+ Kernel.exit
79
79
  end
80
80
 
81
+ Pry.initial_session_setup
82
+ Pry.final_session_setup
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
- self
87
+ opts
87
88
  end
88
89
 
89
- end
90
+ def start(opts)
91
+ Kernel.exit if opts.help?
90
92
 
91
- reset
92
- end
93
- end
93
+ # invoked via cli
94
+ Pry.cli = true
94
95
 
96
+ # create the actual context
97
+ if opts[:context]
98
+ Pry.initial_session_setup
99
+ context = Pry.binding_for(eval(opts[:context])) # rubocop:disable Security/Eval
100
+ Pry.final_session_setup
101
+ else
102
+ context = Pry.toplevel_binding
103
+ end
95
104
 
96
- # String that is built to be executed on start (created by -e and -exec switches)
97
- exec_string = ""
105
+ if !@pass_argv && Pry::CLI.input_args.any? && Pry::CLI.input_args != ["pry"]
106
+ full_name = File.expand_path(Pry::CLI.input_args.first)
107
+ Pry.load_file_through_repl(full_name)
108
+ Kernel.exit
109
+ end
98
110
 
99
- # Bring in options defined by plugins
100
- Slop.new do
101
- on "no-plugins" do
102
- Pry.config.should_load_plugins = false
103
- end
104
- end.parse(ARGV.dup)
111
+ # Start the session (running any code passed with -e, if there is any)
112
+ Pry.start(context, input: StringIO.new(Pry.config.exec_string))
113
+ end
114
+ end
105
115
 
106
- if Pry.config.should_load_plugins
107
- Pry::CLI.add_plugin_options
116
+ reset
117
+ end
108
118
  end
109
119
 
110
120
  # The default Pry command line options (before plugin options are included)
111
121
  Pry::CLI.add_options do
112
- banner %{Usage: pry [OPTIONS]
113
- Start a Pry session.
114
- See http://pryrepl.org/ for more information.
115
- Copyright (c) 2013 John Mair (banisterfiend)
116
- --
117
- }
118
- on :e, :exec=, "A line of code to execute in context before the session starts" do |input|
119
- exec_string << input << "\n"
122
+ banner(
123
+ "Usage: pry [OPTIONS]\n" \
124
+ "Start a Pry session.\n" \
125
+ "See http://pry.github.io/ for more information.\n" \
126
+ "Copyright (c) 2016 John Mair (banisterfiend)" \
127
+ )
128
+
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?
133
+ Pry.config.exec_string += input
120
134
  end
121
135
 
122
136
  on "no-pager", "Disable pager for long output" do
@@ -124,61 +138,57 @@ Copyright (c) 2013 John Mair (banisterfiend)
124
138
  end
125
139
 
126
140
  on "no-history", "Disable history loading" do
127
- Pry.config.history.should_load = false
141
+ Pry.config.history_load = false
128
142
  end
129
143
 
130
144
  on "no-color", "Disable syntax highlighting for session" do
131
145
  Pry.config.color = false
132
146
  end
133
147
 
134
- on :f, "Suppress loading of ~/.pryrc and ./.pryrc" do
148
+ on :f, "Suppress loading of pryrc" do
135
149
  Pry.config.should_load_rc = false
136
150
  Pry.config.should_load_local_rc = false
137
151
  end
138
152
 
139
- on :s, "select-plugin=", "Only load specified plugin (and no others)." do |plugin_name|
140
- Pry.config.should_load_plugins = false
141
- 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"
142
155
  end
143
156
 
144
- on :d, "disable-plugin=", "Disable a specific plugin." do |plugin_name|
145
- 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"
146
159
  end
147
160
 
148
161
  on "no-plugins", "Suppress loading of plugins." do
149
- Pry.config.should_load_plugins = false
162
+ warn "The --no-plugins option is deprecated and has no effect"
150
163
  end
151
164
 
152
165
  on "plugins", "List installed plugins." do
153
- puts "Installed Plugins:"
154
- puts "--"
155
- Pry.locate_plugins.each do |plugin|
156
- puts "#{plugin.name}".ljust(18) << plugin.spec.summary
157
- end
158
- exit
166
+ warn "The --plugins option is deprecated and has no effect"
167
+ warn "Try using `gem list pry-`"
168
+ Kernel.exit
159
169
  end
160
170
 
161
171
  on "simple-prompt", "Enable simple prompt mode" do
162
- Pry.config.prompt = Pry::SIMPLE_PROMPT
172
+ Pry.config.prompt = Pry::Prompt[:simple]
163
173
  end
164
174
 
165
175
  on "noprompt", "No prompt mode" do
166
- Pry.config.prompt = Pry::NO_PROMPT
176
+ Pry.config.prompt = Pry::Prompt[:none]
167
177
  end
168
178
 
169
179
  on :r, :require=, "`require` a Ruby script at startup" do |file|
170
180
  Pry.config.requires << file
171
181
  end
172
182
 
173
- on :I=, "Add a path to the $LOAD_PATH", :as => Array, :delimiter => ":" do |load_path|
183
+ on(:I=, "Add a path to the $LOAD_PATH", as: Array, delimiter: ":") do |load_path|
174
184
  load_path.map! do |path|
175
- /\A\.\// =~ path ? path : File.expand_path(path)
185
+ %r{\A\./} =~ path ? path : File.expand_path(path)
176
186
  end
177
187
 
178
188
  $LOAD_PATH.unshift(*load_path)
179
189
  end
180
190
 
181
- on "gem", "Shorthand for -I./lib -rgemname" do |load_path|
191
+ on "gem", "Shorthand for -I./lib -rgemname" do |_load_path|
182
192
  $LOAD_PATH.unshift("./lib")
183
193
  Dir["./lib/*.rb"].each do |file|
184
194
  Pry.config.requires << file
@@ -187,34 +197,11 @@ Copyright (c) 2013 John Mair (banisterfiend)
187
197
 
188
198
  on :v, :version, "Display the Pry version" do
189
199
  puts "Pry version #{Pry::VERSION} on Ruby #{RUBY_VERSION}"
190
- exit
191
- end
192
-
193
- on(:c, :context=,
194
- "Start the session in the specified context. Equivalent to `context.pry` in a session.",
195
- :default => "Pry.toplevel_binding"
196
- )
197
- end.add_option_processor do |opts|
198
-
199
- exit if opts.help?
200
-
201
- # invoked via cli
202
- Pry.cli = true
203
-
204
- # create the actual context
205
- if opts[:context]
206
- Pry.initial_session_setup
207
- context = Pry.binding_for(eval(opts[:context]))
208
- else
209
- context = Pry.toplevel_binding
210
- end
211
-
212
- if Pry::CLI.input_args.any? && Pry::CLI.input_args != ["pry"]
213
- full_name = File.expand_path(Pry::CLI.input_args.first)
214
- Pry.load_file_through_repl(full_name)
215
- exit
200
+ Kernel.exit
216
201
  end
217
202
 
218
- # Start the session (running any code passed with -e, if there is any)
219
- Pry.start(context, :input => StringIO.new(exec_string))
203
+ on :c, :context=,
204
+ "Start the session in the specified context. Equivalent to " \
205
+ "`context.pry` in a session.",
206
+ default: "Pry.toplevel_binding"
220
207
  end
@@ -1,25 +1,37 @@
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) => :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
27
+
28
+ FILES = {
29
+ %w[Gemfile Rakefile Guardfile Capfile] => :ruby
30
+ }.freeze
31
+
32
+ # Store the current working directory. This allows show-source etc. to work if
33
+ # your process has changed directory since boot. [Issue #675]
34
+ INITIAL_PWD = Dir.pwd
23
35
 
24
36
  # @return [Symbol] The type of code stored in this wrapper.
25
37
  attr_reader :code_type
@@ -37,8 +49,6 @@ class Pry
37
49
  Pry.line_buffer.drop(1)
38
50
  elsif Pry::Method::Patcher.code_for(@filename)
39
51
  Pry::Method::Patcher.code_for(@filename)
40
- elsif RbxPath.is_core_path?(@filename)
41
- File.read(RbxPath.convert_path_to_full(@filename))
42
52
  else
43
53
  path = abs_path
44
54
  @code_type = type_from_filename(path)
@@ -52,16 +62,16 @@ class Pry
52
62
  # readable for some reason.
53
63
  # @return [String] absolute path for the given `filename`.
54
64
  def abs_path
55
- code_path.detect { |path| readable?(path) } or
56
- raise MethodSource::SourceNotFoundError,
57
- "Cannot open #{ @filename.inspect } for reading."
65
+ code_path.detect { |path| readable?(path) } ||
66
+ raise(MethodSource::SourceNotFoundError,
67
+ "Cannot open #{@filename.inspect} for reading.")
58
68
  end
59
69
 
60
70
  # @param [String] path
61
71
  # @return [Boolean] if the path, with or without the default ext,
62
72
  # is a readable file then `true`, otherwise `false`.
63
73
  def readable?(path)
64
- File.readable?(path) && !File.directory?(path) or
74
+ File.readable?(path) && !File.directory?(path) ||
65
75
  File.readable?(path << DEFAULT_EXT)
66
76
  end
67
77
 
@@ -74,11 +84,13 @@ class Pry
74
84
  # @param [String] filename
75
85
  # @param [Symbol] default (:unknown) the file type to assume if none could be
76
86
  # detected.
77
- # @return [Symbol, nil] The CodeRay type of a file from its extension, or
78
- # `nil` if `:unknown`.
87
+ # @return [Symbol, nil] The SyntaxHighlighter type of a file from its
88
+ # extension, or `nil` if `:unknown`.
79
89
  def type_from_filename(filename, default = :unknown)
80
90
  _, @code_type = EXTENSIONS.find do |k, _|
81
91
  k.any? { |ext| ext == File.extname(filename) }
92
+ end || FILES.find do |k, _|
93
+ k.any? { |file_name| file_name == File.basename(filename) }
82
94
  end
83
95
 
84
96
  code_type || default
@@ -91,13 +103,12 @@ class Pry
91
103
 
92
104
  # @return [String]
93
105
  def from_pry_init_pwd
94
- File.expand_path(@filename, Pry::INITIAL_PWD)
106
+ File.expand_path(@filename, INITIAL_PWD)
95
107
  end
96
108
 
97
109
  # @return [String]
98
110
  def from_load_path
99
111
  $LOAD_PATH.map { |path| File.expand_path(@filename, path) }
100
112
  end
101
-
102
113
  end
103
114
  end
@@ -1,11 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
4
  class Code
3
-
4
5
  # Represents a range of lines in a code listing.
5
6
  #
6
7
  # @api private
7
8
  class CodeRange
8
-
9
9
  # @param [Integer] start_line
10
10
  # @param [Integer?] end_line
11
11
  def initialize(start_line, end_line = nil)
@@ -22,8 +22,9 @@ class Pry
22
22
 
23
23
  private
24
24
 
25
- def start_line; @start_line; end
26
- def end_line; @end_line; end
25
+ attr_reader :start_line
26
+
27
+ attr_reader :end_line
27
28
 
28
29
  # If `end_line` is equal to `nil`, then calculate it from the first
29
30
  # parameter, `start_line`. Otherwise, leave it as it is.
@@ -48,12 +49,14 @@ class Pry
48
49
  # @return [Integer]
49
50
  def find_start_index(lines)
50
51
  return start_line if start_line < 0
52
+
51
53
  lines.index { |loc| loc.lineno >= start_line } || lines.length
52
54
  end
53
55
 
54
56
  # @return [Integer]
55
57
  def find_end_index(lines)
56
58
  return end_line if end_line < 0
59
+
57
60
  (lines.index { |loc| loc.lineno > end_line } || 0) - 1
58
61
  end
59
62
 
@@ -66,6 +69,5 @@ class Pry
66
69
  @start_line = start_line.first
67
70
  end
68
71
  end
69
-
70
72
  end
71
73
  end