pry 0.9.12.6-i386-mingw32 → 0.10.0-i386-mingw32
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +702 -0
- data/LICENSE +2 -2
- data/{README.markdown → README.md} +37 -31
- data/lib/pry.rb +38 -151
- data/lib/pry/cli.rb +35 -17
- data/lib/pry/code.rb +19 -63
- data/lib/pry/code/code_file.rb +103 -0
- data/lib/pry/code/code_range.rb +2 -1
- data/lib/pry/code/loc.rb +2 -2
- data/lib/pry/code_object.rb +40 -21
- data/lib/pry/color_printer.rb +55 -0
- data/lib/pry/command.rb +12 -9
- data/lib/pry/command_set.rb +81 -38
- data/lib/pry/commands.rb +1 -1
- data/lib/pry/commands/amend_line.rb +2 -2
- data/lib/pry/commands/bang.rb +1 -1
- data/lib/pry/commands/cat.rb +11 -2
- data/lib/pry/commands/cat/exception_formatter.rb +6 -7
- data/lib/pry/commands/cat/file_formatter.rb +15 -32
- data/lib/pry/commands/cat/input_expression_formatter.rb +1 -1
- data/lib/pry/commands/cd.rb +14 -3
- data/lib/pry/commands/change_inspector.rb +27 -0
- data/lib/pry/commands/change_prompt.rb +26 -0
- data/lib/pry/commands/code_collector.rb +4 -4
- data/lib/pry/commands/easter_eggs.rb +3 -3
- data/lib/pry/commands/edit.rb +10 -22
- data/lib/pry/commands/edit/exception_patcher.rb +2 -2
- data/lib/pry/commands/edit/file_and_line_locator.rb +0 -2
- data/lib/pry/commands/exit_program.rb +0 -1
- data/lib/pry/commands/find_method.rb +16 -22
- data/lib/pry/commands/gem_install.rb +5 -2
- data/lib/pry/commands/gem_open.rb +1 -1
- data/lib/pry/commands/gist.rb +10 -11
- data/lib/pry/commands/help.rb +14 -14
- data/lib/pry/commands/hist.rb +27 -8
- data/lib/pry/commands/install_command.rb +14 -12
- data/lib/pry/commands/list_inspectors.rb +35 -0
- data/lib/pry/commands/list_prompts.rb +35 -0
- data/lib/pry/commands/ls.rb +72 -296
- data/lib/pry/commands/ls/constants.rb +47 -0
- data/lib/pry/commands/ls/formatter.rb +49 -0
- data/lib/pry/commands/ls/globals.rb +48 -0
- data/lib/pry/commands/ls/grep.rb +21 -0
- data/lib/pry/commands/ls/instance_vars.rb +39 -0
- data/lib/pry/commands/ls/interrogatable.rb +18 -0
- data/lib/pry/commands/ls/jruby_hacks.rb +49 -0
- data/lib/pry/commands/ls/local_names.rb +35 -0
- data/lib/pry/commands/ls/local_vars.rb +39 -0
- data/lib/pry/commands/ls/ls_entity.rb +70 -0
- data/lib/pry/commands/ls/methods.rb +57 -0
- data/lib/pry/commands/ls/methods_helper.rb +46 -0
- data/lib/pry/commands/ls/self_methods.rb +32 -0
- data/lib/pry/commands/play.rb +44 -10
- data/lib/pry/commands/pry_backtrace.rb +1 -2
- data/lib/pry/commands/raise_up.rb +2 -2
- data/lib/pry/commands/reload_code.rb +16 -19
- data/lib/pry/commands/ri.rb +7 -3
- data/lib/pry/commands/shell_command.rb +18 -13
- data/lib/pry/commands/shell_mode.rb +2 -4
- data/lib/pry/commands/show_doc.rb +5 -0
- data/lib/pry/commands/show_info.rb +8 -13
- data/lib/pry/commands/show_source.rb +15 -3
- data/lib/pry/commands/simple_prompt.rb +1 -1
- data/lib/pry/commands/toggle_color.rb +8 -4
- data/lib/pry/commands/watch_expression.rb +105 -0
- data/lib/pry/commands/watch_expression/expression.rb +38 -0
- data/lib/pry/commands/whereami.rb +18 -10
- data/lib/pry/commands/wtf.rb +3 -3
- data/lib/pry/config.rb +20 -254
- data/lib/pry/config/behavior.rb +139 -0
- data/lib/pry/config/convenience.rb +26 -0
- data/lib/pry/config/default.rb +165 -0
- data/lib/pry/core_extensions.rb +31 -21
- data/lib/pry/editor.rb +107 -103
- data/lib/pry/exceptions.rb +77 -0
- data/lib/pry/helpers/base_helpers.rb +22 -109
- data/lib/pry/helpers/command_helpers.rb +10 -8
- data/lib/pry/helpers/documentation_helpers.rb +1 -2
- data/lib/pry/helpers/text.rb +4 -5
- data/lib/pry/history.rb +46 -45
- data/lib/pry/history_array.rb +6 -1
- data/lib/pry/hooks.rb +9 -29
- data/lib/pry/indent.rb +6 -6
- data/lib/pry/input_completer.rb +242 -0
- data/lib/pry/input_lock.rb +132 -0
- data/lib/pry/inspector.rb +27 -0
- data/lib/pry/last_exception.rb +61 -0
- data/lib/pry/method.rb +82 -87
- data/lib/pry/{commands/edit/method_patcher.rb → method/patcher.rb} +41 -38
- data/lib/pry/module_candidate.rb +4 -14
- data/lib/pry/object_path.rb +82 -0
- data/lib/pry/output.rb +50 -0
- data/lib/pry/pager.rb +193 -48
- data/lib/pry/plugins.rb +1 -1
- data/lib/pry/prompt.rb +26 -0
- data/lib/pry/pry_class.rb +149 -230
- data/lib/pry/pry_instance.rb +302 -413
- data/lib/pry/rbx_path.rb +1 -1
- data/lib/pry/repl.rb +202 -0
- data/lib/pry/repl_file_loader.rb +20 -26
- data/lib/pry/rubygem.rb +13 -5
- data/lib/pry/terminal.rb +2 -1
- data/lib/pry/test/helper.rb +26 -41
- data/lib/pry/version.rb +1 -1
- data/lib/pry/wrapped_module.rb +45 -59
- metadata +62 -225
- data/.document +0 -2
- data/.gitignore +0 -16
- data/.travis.yml +0 -25
- data/.yardopts +0 -1
- data/CHANGELOG +0 -534
- data/CONTRIBUTORS +0 -55
- data/Gemfile +0 -12
- data/Rakefile +0 -140
- data/TODO +0 -117
- data/lib/pry/completion.rb +0 -321
- data/lib/pry/custom_completions.rb +0 -6
- data/lib/pry/rbx_method.rb +0 -13
- data/man/pry.1 +0 -195
- data/man/pry.1.html +0 -204
- data/man/pry.1.ronn +0 -141
- data/pry.gemspec +0 -29
- data/spec/Procfile +0 -3
- data/spec/cli_spec.rb +0 -78
- data/spec/code_object_spec.rb +0 -277
- data/spec/code_spec.rb +0 -219
- data/spec/command_helpers_spec.rb +0 -29
- data/spec/command_integration_spec.rb +0 -644
- data/spec/command_set_spec.rb +0 -627
- data/spec/command_spec.rb +0 -821
- data/spec/commands/amend_line_spec.rb +0 -247
- data/spec/commands/bang_spec.rb +0 -19
- data/spec/commands/cat_spec.rb +0 -164
- data/spec/commands/cd_spec.rb +0 -250
- data/spec/commands/disable_pry_spec.rb +0 -25
- data/spec/commands/edit_spec.rb +0 -727
- data/spec/commands/exit_all_spec.rb +0 -34
- data/spec/commands/exit_program_spec.rb +0 -19
- data/spec/commands/exit_spec.rb +0 -34
- data/spec/commands/find_method_spec.rb +0 -70
- data/spec/commands/gem_list_spec.rb +0 -26
- data/spec/commands/gist_spec.rb +0 -79
- data/spec/commands/help_spec.rb +0 -56
- data/spec/commands/hist_spec.rb +0 -181
- data/spec/commands/jump_to_spec.rb +0 -15
- data/spec/commands/ls_spec.rb +0 -181
- data/spec/commands/play_spec.rb +0 -140
- data/spec/commands/raise_up_spec.rb +0 -56
- data/spec/commands/save_file_spec.rb +0 -177
- data/spec/commands/show_doc_spec.rb +0 -510
- data/spec/commands/show_input_spec.rb +0 -17
- data/spec/commands/show_source_spec.rb +0 -782
- data/spec/commands/whereami_spec.rb +0 -203
- data/spec/completion_spec.rb +0 -241
- data/spec/control_d_handler_spec.rb +0 -58
- data/spec/documentation_helper_spec.rb +0 -73
- data/spec/editor_spec.rb +0 -79
- data/spec/exception_whitelist_spec.rb +0 -21
- data/spec/fixtures/candidate_helper1.rb +0 -11
- data/spec/fixtures/candidate_helper2.rb +0 -8
- data/spec/fixtures/example.erb +0 -5
- data/spec/fixtures/example_nesting.rb +0 -33
- data/spec/fixtures/show_source_doc_examples.rb +0 -15
- data/spec/fixtures/testrc +0 -2
- data/spec/fixtures/testrcbad +0 -2
- data/spec/fixtures/whereami_helper.rb +0 -6
- data/spec/helper.rb +0 -34
- data/spec/helpers/bacon.rb +0 -86
- data/spec/helpers/mock_pry.rb +0 -43
- data/spec/helpers/table_spec.rb +0 -105
- data/spec/history_array_spec.rb +0 -67
- data/spec/hooks_spec.rb +0 -522
- data/spec/indent_spec.rb +0 -301
- data/spec/input_stack_spec.rb +0 -90
- data/spec/method_spec.rb +0 -482
- data/spec/prompt_spec.rb +0 -60
- data/spec/pry_defaults_spec.rb +0 -419
- data/spec/pry_history_spec.rb +0 -99
- data/spec/pry_output_spec.rb +0 -95
- data/spec/pry_spec.rb +0 -515
- data/spec/run_command_spec.rb +0 -25
- data/spec/sticky_locals_spec.rb +0 -157
- data/spec/syntax_checking_spec.rb +0 -81
- data/spec/wrapped_module_spec.rb +0 -261
- data/wiki/Customizing-pry.md +0 -397
- data/wiki/Home.md +0 -4
data/lib/pry/cli.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
class Pry
|
3
2
|
|
4
3
|
# Manage the processing of command line options
|
@@ -11,7 +10,9 @@ class Pry
|
|
11
10
|
# @return [Proc] The Proc defining the valid command line options.
|
12
11
|
attr_accessor :options
|
13
12
|
|
14
|
-
# @return [Array] The Procs that process the parsed options.
|
13
|
+
# @return [Array] The Procs that process the parsed options. Plugins can
|
14
|
+
# utilize this facility in order to add and process their own Pry
|
15
|
+
# options.
|
15
16
|
attr_accessor :option_processors
|
16
17
|
|
17
18
|
# @return [Array<String>] The input array of strings to process
|
@@ -43,7 +44,7 @@ class Pry
|
|
43
44
|
end
|
44
45
|
|
45
46
|
# Add a block responsible for processing parsed options.
|
46
|
-
def
|
47
|
+
def add_option_processor(&block)
|
47
48
|
self.option_processors ||= []
|
48
49
|
option_processors << block
|
49
50
|
|
@@ -56,14 +57,26 @@ class Pry
|
|
56
57
|
self.option_processors = nil
|
57
58
|
end
|
58
59
|
|
59
|
-
def parse_options(args=ARGV
|
60
|
+
def parse_options(args=ARGV)
|
60
61
|
unless options
|
61
62
|
raise NoOptionsError, "No command line options defined! Use Pry::CLI.add_options to add command line options."
|
62
63
|
end
|
63
64
|
|
64
65
|
self.input_args = args
|
65
66
|
|
66
|
-
|
67
|
+
begin
|
68
|
+
opts = Slop.parse!(
|
69
|
+
args,
|
70
|
+
:help => true,
|
71
|
+
:multiple_switches => false,
|
72
|
+
:strict => true,
|
73
|
+
&options
|
74
|
+
)
|
75
|
+
rescue Slop::InvalidOptionError
|
76
|
+
# Display help message on unknown switches and exit.
|
77
|
+
puts Slop.new(&options)
|
78
|
+
exit
|
79
|
+
end
|
67
80
|
|
68
81
|
# Option processors are optional.
|
69
82
|
if option_processors
|
@@ -91,19 +104,19 @@ Slop.new do
|
|
91
104
|
end.parse(ARGV.dup)
|
92
105
|
|
93
106
|
if Pry.config.should_load_plugins
|
94
|
-
Pry::CLI.add_plugin_options
|
107
|
+
Pry::CLI.add_plugin_options
|
95
108
|
end
|
96
109
|
|
97
110
|
# The default Pry command line options (before plugin options are included)
|
98
111
|
Pry::CLI.add_options do
|
99
112
|
banner %{Usage: pry [OPTIONS]
|
100
113
|
Start a Pry session.
|
101
|
-
See
|
114
|
+
See http://pryrepl.org/ for more information.
|
102
115
|
Copyright (c) 2013 John Mair (banisterfiend)
|
103
116
|
--
|
104
117
|
}
|
105
118
|
on :e, :exec=, "A line of code to execute in context before the session starts" do |input|
|
106
|
-
exec_string << input
|
119
|
+
exec_string << input << "\n"
|
107
120
|
end
|
108
121
|
|
109
122
|
on "no-pager", "Disable pager for long output" do
|
@@ -115,7 +128,7 @@ Copyright (c) 2013 John Mair (banisterfiend)
|
|
115
128
|
end
|
116
129
|
|
117
130
|
on "no-color", "Disable syntax highlighting for session" do
|
118
|
-
Pry.color = false
|
131
|
+
Pry.config.color = false
|
119
132
|
end
|
120
133
|
|
121
134
|
on :f, "Suppress loading of ~/.pryrc and ./.pryrc" do
|
@@ -136,11 +149,11 @@ Copyright (c) 2013 John Mair (banisterfiend)
|
|
136
149
|
Pry.config.should_load_plugins = false
|
137
150
|
end
|
138
151
|
|
139
|
-
on "
|
152
|
+
on "plugins", "List installed plugins." do
|
140
153
|
puts "Installed Plugins:"
|
141
154
|
puts "--"
|
142
155
|
Pry.locate_plugins.each do |plugin|
|
143
|
-
puts "#{plugin.name}".ljust(18)
|
156
|
+
puts "#{plugin.name}".ljust(18) << plugin.spec.summary
|
144
157
|
end
|
145
158
|
exit
|
146
159
|
end
|
@@ -149,6 +162,10 @@ Copyright (c) 2013 John Mair (banisterfiend)
|
|
149
162
|
Pry.config.prompt = Pry::SIMPLE_PROMPT
|
150
163
|
end
|
151
164
|
|
165
|
+
on "noprompt", "No prompt mode" do
|
166
|
+
Pry.config.prompt = Pry::NO_PROMPT
|
167
|
+
end
|
168
|
+
|
152
169
|
on :r, :require=, "`require` a Ruby script at startup" do |file|
|
153
170
|
Pry.config.requires << file
|
154
171
|
end
|
@@ -177,7 +194,7 @@ Copyright (c) 2013 John Mair (banisterfiend)
|
|
177
194
|
"Start the session in the specified context. Equivalent to `context.pry` in a session.",
|
178
195
|
:default => "Pry.toplevel_binding"
|
179
196
|
)
|
180
|
-
end.
|
197
|
+
end.add_option_processor do |opts|
|
181
198
|
|
182
199
|
exit if opts.help?
|
183
200
|
|
@@ -185,7 +202,12 @@ end.process_options do |opts|
|
|
185
202
|
Pry.cli = true
|
186
203
|
|
187
204
|
# create the actual context
|
188
|
-
|
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
|
189
211
|
|
190
212
|
if Pry::CLI.input_args.any? && Pry::CLI.input_args != ["pry"]
|
191
213
|
full_name = File.expand_path(Pry::CLI.input_args.first)
|
@@ -193,10 +215,6 @@ end.process_options do |opts|
|
|
193
215
|
exit
|
194
216
|
end
|
195
217
|
|
196
|
-
if Pry.config.should_load_plugins
|
197
|
-
parser = Slop.new
|
198
|
-
end
|
199
|
-
|
200
218
|
# Start the session (running any code passed with -e, if there is any)
|
201
219
|
Pry.start(context, :input => StringIO.new(exec_string))
|
202
220
|
end
|
data/lib/pry/code.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'pry/code/loc'
|
2
2
|
require 'pry/code/code_range'
|
3
|
+
require 'pry/code/code_file'
|
3
4
|
|
4
5
|
class Pry
|
5
6
|
class << self
|
@@ -29,26 +30,6 @@ class Pry
|
|
29
30
|
# arbitrary chaining of formatting methods without mutating the original
|
30
31
|
# object.
|
31
32
|
class Code
|
32
|
-
|
33
|
-
# List of all supported languages.
|
34
|
-
# @return [Hash]
|
35
|
-
EXTENSIONS = {
|
36
|
-
%w(.py) => :python,
|
37
|
-
%w(.js) => :javascript,
|
38
|
-
%w(.css) => :css,
|
39
|
-
%w(.xml) => :xml,
|
40
|
-
%w(.php) => :php,
|
41
|
-
%w(.html) => :html,
|
42
|
-
%w(.diff) => :diff,
|
43
|
-
%w(.java) => :java,
|
44
|
-
%w(.json) => :json,
|
45
|
-
%w(.c .h) => :c,
|
46
|
-
%w(.rhtml) => :rhtml,
|
47
|
-
%w(.yaml .yml) => :yaml,
|
48
|
-
%w(.cpp .hpp .cc .h cxx) => :cpp,
|
49
|
-
%w(.rb .ru .irbrc .gemspec .pryrc) => :ruby,
|
50
|
-
}
|
51
|
-
|
52
33
|
class << self
|
53
34
|
include MethodSource::CodeHelpers
|
54
35
|
|
@@ -58,13 +39,9 @@ class Pry
|
|
58
39
|
# @param [String] filename The name of a file, or "(pry)".
|
59
40
|
# @param [Symbol] code_type The type of code the file contains.
|
60
41
|
# @return [Code]
|
61
|
-
def from_file(filename, code_type =
|
62
|
-
|
63
|
-
|
64
|
-
else
|
65
|
-
File.read(abs_path(filename))
|
66
|
-
end
|
67
|
-
new(code, 1, code_type)
|
42
|
+
def from_file(filename, code_type = nil)
|
43
|
+
code_file = CodeFile.new(filename, code_type)
|
44
|
+
new(code_file.code, 1, code_file.code_type)
|
68
45
|
end
|
69
46
|
|
70
47
|
# Instantiate a `Code` object containing code extracted from a
|
@@ -94,35 +71,6 @@ class Pry
|
|
94
71
|
start_line ||= candidate.line
|
95
72
|
new(candidate.source, start_line, :ruby)
|
96
73
|
end
|
97
|
-
|
98
|
-
protected
|
99
|
-
|
100
|
-
# Guess the CodeRay type of a file from its extension, or nil if
|
101
|
-
# unknown.
|
102
|
-
#
|
103
|
-
# @param [String] filename
|
104
|
-
# @param [Symbol] default (:ruby) the file type to assume if none could be
|
105
|
-
# detected.
|
106
|
-
# @return [Symbol, nil]
|
107
|
-
def type_from_filename(filename, default = :ruby)
|
108
|
-
_, type = Pry::Code::EXTENSIONS.find do |k, _|
|
109
|
-
k.any? { |ext| ext == File.extname(filename) }
|
110
|
-
end
|
111
|
-
|
112
|
-
type || default
|
113
|
-
end
|
114
|
-
|
115
|
-
# @param [String] filename
|
116
|
-
# @raise [MethodSource::SourceNotFoundError] if the +filename+ is not
|
117
|
-
# readable for some reason.
|
118
|
-
# @return [String] absolute path for the given +filename+.
|
119
|
-
def abs_path(filename)
|
120
|
-
abs_path = [File.expand_path(filename, Dir.pwd),
|
121
|
-
File.expand_path(filename, Pry::INITIAL_PWD)
|
122
|
-
].detect { |abs_path| File.readable?(abs_path) }
|
123
|
-
abs_path or raise MethodSource::SourceNotFoundError,
|
124
|
-
"Cannot open #{filename.inspect} for reading."
|
125
|
-
end
|
126
74
|
end
|
127
75
|
|
128
76
|
# @return [Symbol] The type of code stored in this wrapper.
|
@@ -197,7 +145,7 @@ class Pry
|
|
197
145
|
if start_line >= 0
|
198
146
|
@lines.index { |loc| loc.lineno >= start_line } || @lines.length
|
199
147
|
else
|
200
|
-
@lines.length + start_line
|
148
|
+
[@lines.length + start_line, 0].max
|
201
149
|
end
|
202
150
|
|
203
151
|
alter do
|
@@ -305,14 +253,22 @@ class Pry
|
|
305
253
|
# @return [String] a formatted representation (based on the configuration of
|
306
254
|
# the object).
|
307
255
|
def to_s
|
308
|
-
|
256
|
+
print_to_output("")
|
257
|
+
end
|
258
|
+
|
259
|
+
# Writes a formatted representation (based on the configuration of the
|
260
|
+
# object) to the given output, which must respond to `#<<`.
|
261
|
+
def print_to_output(output, color=false)
|
262
|
+
@lines.each do |loc|
|
309
263
|
loc = loc.dup
|
310
|
-
loc.colorize(@code_type)
|
311
|
-
loc.add_line_number(max_lineno_width) if @with_line_numbers
|
264
|
+
loc.colorize(@code_type)
|
265
|
+
loc.add_line_number(max_lineno_width, color) if @with_line_numbers
|
312
266
|
loc.add_marker(@marker_lineno) if @with_marker
|
313
267
|
loc.indent(@indentation_num) if @with_indentation
|
314
|
-
loc.line
|
315
|
-
|
268
|
+
output << loc.line
|
269
|
+
output << "\n"
|
270
|
+
end
|
271
|
+
output
|
316
272
|
end
|
317
273
|
|
318
274
|
# Get the comment that describes the expression on the given line number.
|
@@ -344,7 +300,7 @@ class Pry
|
|
344
300
|
#
|
345
301
|
# @return [String]
|
346
302
|
def raw
|
347
|
-
@lines.map(&:line).join("\n")
|
303
|
+
@lines.map(&:line).join("\n") << "\n"
|
348
304
|
end
|
349
305
|
|
350
306
|
# Return the number of lines stored.
|
@@ -0,0 +1,103 @@
|
|
1
|
+
class Pry
|
2
|
+
class CodeFile
|
3
|
+
DEFAULT_EXT = '.rb'
|
4
|
+
|
5
|
+
# List of all supported languages.
|
6
|
+
# @return [Hash]
|
7
|
+
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
|
+
}
|
23
|
+
|
24
|
+
# @return [Symbol] The type of code stored in this wrapper.
|
25
|
+
attr_reader :code_type
|
26
|
+
|
27
|
+
# @param [String] filename The name of a file with code to be detected
|
28
|
+
# @param [Symbol] code_type The type of code the `filename` contains
|
29
|
+
def initialize(filename, code_type = type_from_filename(filename))
|
30
|
+
@filename = filename
|
31
|
+
@code_type = code_type
|
32
|
+
end
|
33
|
+
|
34
|
+
# @return [String] The code contained in the current `@filename`.
|
35
|
+
def code
|
36
|
+
if @filename == Pry.eval_path
|
37
|
+
Pry.line_buffer.drop(1)
|
38
|
+
elsif Pry::Method::Patcher.code_for(@filename)
|
39
|
+
Pry::Method::Patcher.code_for(@filename)
|
40
|
+
elsif RbxPath.is_core_path?(@filename)
|
41
|
+
File.read(RbxPath.convert_path_to_full(@filename))
|
42
|
+
else
|
43
|
+
path = abs_path
|
44
|
+
@code_type = type_from_filename(path)
|
45
|
+
File.read(path)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
# @raise [MethodSource::SourceNotFoundError] if the `filename` is not
|
52
|
+
# readable for some reason.
|
53
|
+
# @return [String] absolute path for the given `filename`.
|
54
|
+
def abs_path
|
55
|
+
code_path.detect { |path| readable?(path) } or
|
56
|
+
raise MethodSource::SourceNotFoundError,
|
57
|
+
"Cannot open #{ @filename.inspect } for reading."
|
58
|
+
end
|
59
|
+
|
60
|
+
# @param [String] path
|
61
|
+
# @return [Boolean] if the path, with or without the default ext,
|
62
|
+
# is a readable file then `true`, otherwise `false`.
|
63
|
+
def readable?(path)
|
64
|
+
File.readable?(path) && !File.directory?(path) or
|
65
|
+
File.readable?(path << DEFAULT_EXT)
|
66
|
+
end
|
67
|
+
|
68
|
+
# @return [Array] All the paths that contain code that Pry can use for its
|
69
|
+
# API's. Skips directories.
|
70
|
+
def code_path
|
71
|
+
[from_pwd, from_pry_init_pwd, *from_load_path]
|
72
|
+
end
|
73
|
+
|
74
|
+
# @param [String] filename
|
75
|
+
# @param [Symbol] default (:unknown) the file type to assume if none could be
|
76
|
+
# detected.
|
77
|
+
# @return [Symbol, nil] The CodeRay type of a file from its extension, or
|
78
|
+
# `nil` if `:unknown`.
|
79
|
+
def type_from_filename(filename, default = :unknown)
|
80
|
+
_, @code_type = EXTENSIONS.find do |k, _|
|
81
|
+
k.any? { |ext| ext == File.extname(filename) }
|
82
|
+
end
|
83
|
+
|
84
|
+
code_type || default
|
85
|
+
end
|
86
|
+
|
87
|
+
# @return [String]
|
88
|
+
def from_pwd
|
89
|
+
File.expand_path(@filename, Dir.pwd)
|
90
|
+
end
|
91
|
+
|
92
|
+
# @return [String]
|
93
|
+
def from_pry_init_pwd
|
94
|
+
File.expand_path(@filename, Pry::INITIAL_PWD)
|
95
|
+
end
|
96
|
+
|
97
|
+
# @return [String]
|
98
|
+
def from_load_path
|
99
|
+
$LOAD_PATH.map { |path| File.expand_path(@filename, path) }
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
end
|
data/lib/pry/code/code_range.rb
CHANGED
@@ -22,7 +22,8 @@ class Pry
|
|
22
22
|
|
23
23
|
private
|
24
24
|
|
25
|
-
|
25
|
+
def start_line; @start_line; end
|
26
|
+
def end_line; @end_line; end
|
26
27
|
|
27
28
|
# If `end_line` is equal to `nil`, then calculate it from the first
|
28
29
|
# parameter, `start_line`. Otherwise, leave it as it is.
|
data/lib/pry/code/loc.rb
CHANGED
@@ -59,9 +59,9 @@ class Pry
|
|
59
59
|
#
|
60
60
|
# @param [Integer] max_width
|
61
61
|
# @return [void]
|
62
|
-
def add_line_number(max_width = 0)
|
62
|
+
def add_line_number(max_width = 0, color = false)
|
63
63
|
padded = lineno.to_s.rjust(max_width)
|
64
|
-
colorized_lineno = Pry::Helpers::BaseHelpers.colorize_code(padded)
|
64
|
+
colorized_lineno = color ? Pry::Helpers::BaseHelpers.colorize_code(padded) : padded
|
65
65
|
tuple[0] = "#{ colorized_lineno }: #{ line }"
|
66
66
|
end
|
67
67
|
|
data/lib/pry/code_object.rb
CHANGED
@@ -1,4 +1,23 @@
|
|
1
1
|
class Pry
|
2
|
+
|
3
|
+
# This class is responsible for taking a string (identifying a
|
4
|
+
# command/class/method/etc) and returning the relevant type of object.
|
5
|
+
# For example, if the user looks up "show-source" then a
|
6
|
+
# `Pry::Command` will be returned. Alternatively, if the user passes in "Pry#repl" then
|
7
|
+
# a `Pry::Method` object will be returned.
|
8
|
+
#
|
9
|
+
# The `CodeObject.lookup` method is responsible for 1. figuring out what kind of
|
10
|
+
# object the user wants (applying precedence rules in doing so -- i.e methods
|
11
|
+
# get precedence over commands with the same name) and 2. Returning
|
12
|
+
# the appropriate object. If the user fails to provide a string
|
13
|
+
# identifer for the object (i.e they pass in `nil` or "") then the
|
14
|
+
# object looked up will be the 'current method' or 'current class'
|
15
|
+
# associated with the Binding.
|
16
|
+
#
|
17
|
+
# TODO: This class is a clusterfuck. We need a much more robust
|
18
|
+
# concept of what a "Code Object" really is. Currently
|
19
|
+
# commands/classes/candidates/methods and so on just share a very
|
20
|
+
# ill-defined interface.
|
2
21
|
class CodeObject
|
3
22
|
module Helpers
|
4
23
|
# we need this helper as some Pry::Method objects can wrap Procs
|
@@ -33,7 +52,7 @@ class Pry
|
|
33
52
|
|
34
53
|
attr_accessor :str
|
35
54
|
attr_accessor :target
|
36
|
-
attr_accessor :
|
55
|
+
attr_accessor :_pry_
|
37
56
|
attr_accessor :super_level
|
38
57
|
|
39
58
|
def initialize(str, _pry_, options={})
|
@@ -42,7 +61,7 @@ class Pry
|
|
42
61
|
}.merge!(options)
|
43
62
|
|
44
63
|
@str = str
|
45
|
-
@
|
64
|
+
@_pry_ = _pry_
|
46
65
|
@target = _pry_.current_context
|
47
66
|
@super_level = options[:super]
|
48
67
|
end
|
@@ -50,18 +69,24 @@ class Pry
|
|
50
69
|
def command_lookup
|
51
70
|
# TODO: just make it so find_command_by_match_or_listing doesn't
|
52
71
|
# raise?
|
53
|
-
|
72
|
+
_pry_.commands.find_command_by_match_or_listing(str) rescue nil
|
54
73
|
end
|
55
74
|
|
75
|
+
# when no paramter is given (i.e CodeObject.lookup(nil)), then we
|
76
|
+
# lookup the 'current object' from the binding.
|
56
77
|
def empty_lookup
|
57
78
|
return nil if str && !str.empty?
|
58
79
|
|
59
|
-
if internal_binding?(target)
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
80
|
+
obj = if internal_binding?(target)
|
81
|
+
mod = target_self.is_a?(Module) ? target_self : target_self.class
|
82
|
+
Pry::WrappedModule(mod)
|
83
|
+
else
|
84
|
+
Pry::Method.from_binding(target)
|
85
|
+
end
|
86
|
+
|
87
|
+
# respect the super level (i.e user might have specified a
|
88
|
+
# --super flag to show-source)
|
89
|
+
lookup_super(obj, super_level)
|
65
90
|
end
|
66
91
|
|
67
92
|
# lookup variables and constants and `self` that are not modules
|
@@ -87,17 +112,12 @@ class Pry
|
|
87
112
|
end
|
88
113
|
|
89
114
|
def method_or_class_lookup
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
obj = if str =~ /::(?:\S+)\Z/
|
97
|
-
Pry::WrappedModule.from_str(str,target) || Pry::Method.from_str(str, target)
|
98
|
-
else
|
99
|
-
Pry::Method.from_str(str,target) || Pry::WrappedModule.from_str(str, target)
|
100
|
-
end
|
115
|
+
obj = case str
|
116
|
+
when /\S+\(\)\z/
|
117
|
+
Pry::Method.from_str(str.sub(/\(\)\z/, ''),target) || Pry::WrappedModule.from_str(str, target)
|
118
|
+
else
|
119
|
+
Pry::WrappedModule.from_str(str,target) || Pry::Method.from_str(str, target)
|
120
|
+
end
|
101
121
|
|
102
122
|
lookup_super(obj, super_level)
|
103
123
|
end
|
@@ -108,7 +128,6 @@ class Pry
|
|
108
128
|
[::Proc, ::Method, ::UnboundMethod].any? { |o| obj.is_a?(o) }
|
109
129
|
end
|
110
130
|
|
111
|
-
|
112
131
|
# Returns true if `str` looks like a method, i.e Klass#method
|
113
132
|
# We need to consider this case because method lookups should fall
|
114
133
|
# through to the `method_or_class_lookup()` method but a
|