pry 0.9.10pre1-i386-mswin32 → 0.9.11-i386-mswin32
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +3 -1
- data/CHANGELOG +63 -2
- data/CONTRIBUTORS +43 -25
- data/Gemfile +7 -0
- data/Guardfile +62 -0
- data/README.markdown +4 -4
- data/Rakefile +34 -35
- data/lib/pry.rb +107 -54
- data/lib/pry/cli.rb +34 -11
- data/lib/pry/code.rb +165 -182
- data/lib/pry/code/code_range.rb +70 -0
- data/lib/pry/code/loc.rb +92 -0
- data/lib/pry/code_object.rb +153 -0
- data/lib/pry/command.rb +160 -22
- data/lib/pry/command_set.rb +37 -26
- data/lib/pry/commands.rb +4 -27
- data/lib/pry/commands/amend_line.rb +99 -0
- data/lib/pry/commands/bang.rb +20 -0
- data/lib/pry/commands/bang_pry.rb +17 -0
- data/lib/pry/commands/cat.rb +53 -0
- data/lib/pry/commands/cat/abstract_formatter.rb +27 -0
- data/lib/pry/commands/cat/exception_formatter.rb +78 -0
- data/lib/pry/commands/cat/file_formatter.rb +84 -0
- data/lib/pry/commands/cat/input_expression_formatter.rb +43 -0
- data/lib/pry/commands/cd.rb +30 -0
- data/lib/pry/commands/code_collector.rb +165 -0
- data/lib/pry/commands/deprecated_commands.rb +2 -0
- data/lib/pry/commands/disable_pry.rb +27 -0
- data/lib/pry/commands/easter_eggs.rb +112 -0
- data/lib/pry/commands/edit.rb +206 -0
- data/lib/pry/commands/edit/exception_patcher.rb +25 -0
- data/lib/pry/commands/edit/file_and_line_locator.rb +38 -0
- data/lib/pry/commands/edit/method_patcher.rb +122 -0
- data/lib/pry/commands/exit.rb +42 -0
- data/lib/pry/commands/exit_all.rb +29 -0
- data/lib/pry/commands/exit_program.rb +24 -0
- data/lib/pry/commands/find_method.rb +199 -0
- data/lib/pry/commands/fix_indent.rb +19 -0
- data/lib/pry/commands/gem_cd.rb +26 -0
- data/lib/pry/commands/gem_install.rb +29 -0
- data/lib/pry/commands/gem_list.rb +33 -0
- data/lib/pry/commands/gem_open.rb +29 -0
- data/lib/pry/commands/gist.rb +95 -0
- data/lib/pry/commands/help.rb +164 -0
- data/lib/pry/commands/hist.rb +161 -0
- data/lib/pry/commands/import_set.rb +22 -0
- data/lib/pry/commands/install_command.rb +51 -0
- data/lib/pry/commands/jump_to.rb +29 -0
- data/lib/pry/commands/ls.rb +339 -0
- data/lib/pry/commands/nesting.rb +25 -0
- data/lib/pry/commands/play.rb +69 -0
- data/lib/pry/commands/pry_backtrace.rb +26 -0
- data/lib/pry/commands/pry_version.rb +17 -0
- data/lib/pry/commands/raise_up.rb +32 -0
- data/lib/pry/commands/reload_code.rb +39 -0
- data/lib/pry/commands/reset.rb +18 -0
- data/lib/pry/commands/ri.rb +56 -0
- data/lib/pry/commands/save_file.rb +61 -0
- data/lib/pry/commands/shell_command.rb +43 -0
- data/lib/pry/commands/shell_mode.rb +27 -0
- data/lib/pry/commands/show_doc.rb +78 -0
- data/lib/pry/commands/show_info.rb +139 -0
- data/lib/pry/commands/show_input.rb +17 -0
- data/lib/pry/commands/show_source.rb +37 -0
- data/lib/pry/commands/simple_prompt.rb +22 -0
- data/lib/pry/commands/stat.rb +40 -0
- data/lib/pry/commands/switch_to.rb +23 -0
- data/lib/pry/commands/toggle_color.rb +20 -0
- data/lib/pry/commands/whereami.rb +114 -0
- data/lib/pry/commands/wtf.rb +57 -0
- data/lib/pry/completion.rb +120 -46
- data/lib/pry/config.rb +11 -0
- data/lib/pry/core_extensions.rb +30 -19
- data/lib/pry/editor.rb +129 -0
- data/lib/pry/helpers.rb +1 -0
- data/lib/pry/helpers/base_helpers.rb +89 -119
- data/lib/pry/helpers/command_helpers.rb +7 -122
- data/lib/pry/helpers/table.rb +100 -0
- data/lib/pry/helpers/text.rb +4 -4
- data/lib/pry/history_array.rb +5 -0
- data/lib/pry/hooks.rb +1 -3
- data/lib/pry/indent.rb +104 -30
- data/lib/pry/method.rb +66 -22
- data/lib/pry/module_candidate.rb +26 -15
- data/lib/pry/pager.rb +70 -0
- data/lib/pry/plugins.rb +1 -2
- data/lib/pry/pry_class.rb +63 -22
- data/lib/pry/pry_instance.rb +58 -37
- data/lib/pry/rubygem.rb +74 -0
- data/lib/pry/terminal_info.rb +43 -0
- data/lib/pry/test/helper.rb +185 -0
- data/lib/pry/version.rb +1 -1
- data/lib/pry/wrapped_module.rb +58 -24
- data/pry.gemspec +21 -37
- data/{test/test_cli.rb → spec/cli_spec.rb} +0 -0
- data/spec/code_object_spec.rb +277 -0
- data/{test/test_code.rb → spec/code_spec.rb} +19 -1
- data/{test/test_command_helpers.rb → spec/command_helpers_spec.rb} +0 -0
- data/{test/test_command_integration.rb → spec/command_integration_spec.rb} +38 -46
- data/{test/test_command_set.rb → spec/command_set_spec.rb} +18 -1
- data/{test/test_command.rb → spec/command_spec.rb} +250 -149
- data/spec/commands/amend_line_spec.rb +247 -0
- data/spec/commands/bang_spec.rb +19 -0
- data/spec/commands/cat_spec.rb +164 -0
- data/spec/commands/cd_spec.rb +250 -0
- data/spec/commands/disable_pry_spec.rb +25 -0
- data/spec/commands/edit_spec.rb +727 -0
- data/spec/commands/exit_all_spec.rb +34 -0
- data/spec/commands/exit_program_spec.rb +19 -0
- data/spec/commands/exit_spec.rb +34 -0
- data/{test/test_default_commands/test_find_method.rb → spec/commands/find_method_spec.rb} +27 -7
- data/spec/commands/gem_list_spec.rb +26 -0
- data/spec/commands/gist_spec.rb +75 -0
- data/{test/test_default_commands/test_help.rb → spec/commands/help_spec.rb} +8 -9
- data/spec/commands/hist_spec.rb +181 -0
- data/spec/commands/jump_to_spec.rb +15 -0
- data/spec/commands/ls_spec.rb +177 -0
- data/spec/commands/play_spec.rb +140 -0
- data/spec/commands/raise_up_spec.rb +56 -0
- data/spec/commands/save_file_spec.rb +177 -0
- data/spec/commands/show_doc_spec.rb +378 -0
- data/spec/commands/show_input_spec.rb +17 -0
- data/spec/commands/show_source_spec.rb +597 -0
- data/spec/commands/whereami_spec.rb +154 -0
- data/spec/completion_spec.rb +233 -0
- data/spec/control_d_handler_spec.rb +58 -0
- data/spec/editor_spec.rb +79 -0
- data/{test/test_exception_whitelist.rb → spec/exception_whitelist_spec.rb} +0 -0
- data/{test → spec/fixtures}/candidate_helper1.rb +0 -0
- data/{test → spec/fixtures}/candidate_helper2.rb +0 -0
- data/{test/test_default_commands → spec/fixtures}/example.erb +0 -0
- data/spec/fixtures/example_nesting.rb +33 -0
- data/spec/fixtures/show_source_doc_examples.rb +15 -0
- data/{test → spec/fixtures}/testrc +0 -0
- data/{test → spec/fixtures}/testrcbad +0 -0
- data/spec/helper.rb +34 -0
- data/spec/helpers/bacon.rb +86 -0
- data/spec/helpers/mock_pry.rb +43 -0
- data/spec/helpers/table_spec.rb +83 -0
- data/{test/test_history_array.rb → spec/history_array_spec.rb} +21 -19
- data/{test/test_hooks.rb → spec/hooks_spec.rb} +0 -0
- data/{test/test_indent.rb → spec/indent_spec.rb} +24 -0
- data/{test/test_input_stack.rb → spec/input_stack_spec.rb} +4 -0
- data/{test/test_method.rb → spec/method_spec.rb} +65 -1
- data/{test/test_prompt.rb → spec/prompt_spec.rb} +0 -0
- data/{test/test_pry_defaults.rb → spec/pry_defaults_spec.rb} +14 -14
- data/{test/test_pry_history.rb → spec/pry_history_spec.rb} +15 -0
- data/spec/pry_output_spec.rb +95 -0
- data/{test/test_pry.rb → spec/pry_spec.rb} +74 -32
- data/{test/test_sticky_locals.rb → spec/sticky_locals_spec.rb} +27 -25
- data/{test/test_syntax_checking.rb → spec/syntax_checking_spec.rb} +17 -1
- data/{test/test_wrapped_module.rb → spec/wrapped_module_spec.rb} +92 -5
- metadata +239 -115
- data/examples/example_basic.rb +0 -15
- data/examples/example_command_override.rb +0 -32
- data/examples/example_commands.rb +0 -36
- data/examples/example_hooks.rb +0 -9
- data/examples/example_image_edit.rb +0 -67
- data/examples/example_input.rb +0 -7
- data/examples/example_input2.rb +0 -29
- data/examples/example_output.rb +0 -11
- data/examples/example_print.rb +0 -6
- data/examples/example_prompt.rb +0 -9
- data/examples/helper.rb +0 -6
- data/lib/pry/default_commands/cd.rb +0 -81
- data/lib/pry/default_commands/commands.rb +0 -62
- data/lib/pry/default_commands/context.rb +0 -98
- data/lib/pry/default_commands/easter_eggs.rb +0 -95
- data/lib/pry/default_commands/editing.rb +0 -420
- data/lib/pry/default_commands/find_method.rb +0 -169
- data/lib/pry/default_commands/gems.rb +0 -84
- data/lib/pry/default_commands/gist.rb +0 -187
- data/lib/pry/default_commands/help.rb +0 -127
- data/lib/pry/default_commands/hist.rb +0 -120
- data/lib/pry/default_commands/input_and_output.rb +0 -306
- data/lib/pry/default_commands/introspection.rb +0 -410
- data/lib/pry/default_commands/ls.rb +0 -272
- data/lib/pry/default_commands/misc.rb +0 -38
- data/lib/pry/default_commands/navigating_pry.rb +0 -110
- data/lib/pry/default_commands/whereami.rb +0 -92
- data/lib/pry/extended_commands/experimental.rb +0 -7
- data/test/helper.rb +0 -223
- data/test/test_completion.rb +0 -62
- data/test/test_control_d_handler.rb +0 -45
- data/test/test_default_commands/test_cd.rb +0 -321
- data/test/test_default_commands/test_context.rb +0 -288
- data/test/test_default_commands/test_documentation.rb +0 -315
- data/test/test_default_commands/test_gems.rb +0 -18
- data/test/test_default_commands/test_input.rb +0 -428
- data/test/test_default_commands/test_introspection.rb +0 -511
- data/test/test_default_commands/test_ls.rb +0 -151
- data/test/test_default_commands/test_shell.rb +0 -343
- data/test/test_default_commands/test_show_source.rb +0 -432
- data/test/test_pry_output.rb +0 -41
@@ -1,272 +0,0 @@
|
|
1
|
-
class Pry
|
2
|
-
module DefaultCommands
|
3
|
-
|
4
|
-
Ls = Pry::CommandSet.new do
|
5
|
-
|
6
|
-
create_command "ls","Show the list of vars and methods in the current scope.",
|
7
|
-
:shellwords => false, :interpolate => false do
|
8
|
-
|
9
|
-
group "Context"
|
10
|
-
|
11
|
-
def options(opt)
|
12
|
-
opt.banner unindent <<-USAGE
|
13
|
-
Usage: ls [-m|-M|-p|-pM] [-q|-v] [-c|-i] [Object]
|
14
|
-
ls [-g] [-l]
|
15
|
-
|
16
|
-
ls shows you which methods, constants and variables are accessible to Pry. By default it shows you the local variables defined in the current shell, and any public methods or instance variables defined on the current object.
|
17
|
-
|
18
|
-
The colours used are configurable using Pry.config.ls.*_color, and the separator is Pry.config.ls.separator.
|
19
|
-
|
20
|
-
Pry.config.ls.ceiling is used to hide methods defined higher up in the inheritance chain, this is by default set to [Object, Module, Class] so that methods defined on all Objects are omitted. The -v flag can be used to ignore this setting and show all methods, while the -q can be used to set the ceiling much lower and show only methods defined on the object or its direct class.
|
21
|
-
USAGE
|
22
|
-
|
23
|
-
opt.on :m, "methods", "Show public methods defined on the Object (default)"
|
24
|
-
opt.on :M, "instance-methods", "Show methods defined in a Module or Class"
|
25
|
-
|
26
|
-
opt.on :p, "ppp", "Show public, protected (in yellow) and private (in green) methods"
|
27
|
-
opt.on :q, "quiet", "Show only methods defined on object.singleton_class and object.class"
|
28
|
-
opt.on :v, "verbose", "Show methods and constants on all super-classes (ignores Pry.config.ls.ceiling)"
|
29
|
-
|
30
|
-
opt.on :g, "globals", "Show global variables, including those builtin to Ruby (in cyan)"
|
31
|
-
opt.on :l, "locals", "Show locals, including those provided by Pry (in red)"
|
32
|
-
|
33
|
-
opt.on :c, "constants", "Show constants, highlighting classes (in blue), and exceptions (in purple).\n" +
|
34
|
-
" " * 32 + "Constants that are pending autoload? are also shown (in yellow)."
|
35
|
-
|
36
|
-
opt.on :i, "ivars", "Show instance variables (in blue) and class variables (in bright blue)"
|
37
|
-
|
38
|
-
opt.on :G, "grep", "Filter output by regular expression", :argument => true
|
39
|
-
if jruby?
|
40
|
-
opt.on :J, "all-java", "Show all the aliases for methods from java (default is to show only prettiest)"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def process
|
45
|
-
obj = args.empty? ? target_self : target.eval(args.join(" "))
|
46
|
-
|
47
|
-
# exclude -q, -v and --grep because they don't specify what the user wants to see.
|
48
|
-
has_opts = (opts.present?(:methods) || opts.present?(:'instance-methods') || opts.present?(:ppp) ||
|
49
|
-
opts.present?(:globals) || opts.present?(:locals) || opts.present?(:constants) ||
|
50
|
-
opts.present?(:ivars))
|
51
|
-
|
52
|
-
show_methods = opts.present?(:methods) || opts.present?(:'instance-methods') || opts.present?(:ppp) || !has_opts
|
53
|
-
show_self_methods = (!has_opts && Module === obj)
|
54
|
-
show_constants = opts.present?(:constants) || (!has_opts && Module === obj)
|
55
|
-
show_ivars = opts.present?(:ivars) || !has_opts
|
56
|
-
show_locals = opts.present?(:locals) || (!has_opts && args.empty?)
|
57
|
-
|
58
|
-
grep_regex, grep = [Regexp.new(opts[:G] || "."), lambda{ |x| x.grep(grep_regex) }]
|
59
|
-
|
60
|
-
raise Pry::CommandError, "-l does not make sense with a specified Object" if opts.present?(:locals) && !args.empty?
|
61
|
-
raise Pry::CommandError, "-g does not make sense with a specified Object" if opts.present?(:globals) && !args.empty?
|
62
|
-
raise Pry::CommandError, "-q does not make sense with -v" if opts.present?(:quiet) && opts.present?(:verbose)
|
63
|
-
raise Pry::CommandError, "-M only makes sense with a Module or a Class" if opts.present?(:'instance-methods') && !(Module === obj)
|
64
|
-
raise Pry::CommandError, "-c only makes sense with a Module or a Class" if opts.present?(:constants) && !args.empty? && !(Module === obj)
|
65
|
-
|
66
|
-
|
67
|
-
if opts.present?(:globals)
|
68
|
-
output_section("global variables", grep[format_globals(target.eval("global_variables"))])
|
69
|
-
end
|
70
|
-
|
71
|
-
if show_constants
|
72
|
-
mod = Module === obj ? obj : Object
|
73
|
-
constants = mod.constants
|
74
|
-
constants -= (mod.ancestors - [mod]).map(&:constants).flatten unless opts.present?(:verbose)
|
75
|
-
output_section("constants", grep[format_constants(mod, constants)])
|
76
|
-
end
|
77
|
-
|
78
|
-
if show_methods
|
79
|
-
# methods is a hash {Module/Class => [Pry::Methods]}
|
80
|
-
methods = all_methods(obj).group_by(&:owner)
|
81
|
-
|
82
|
-
# reverse the resolution order so that the most useful information appears right by the prompt
|
83
|
-
resolution_order(obj).take_while(&below_ceiling(obj)).reverse.each do |klass|
|
84
|
-
methods_here = format_methods((methods[klass] || []).select{ |m| m.name =~ grep_regex })
|
85
|
-
output_section "#{Pry::WrappedModule.new(klass).method_prefix}methods", methods_here
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
if show_self_methods
|
90
|
-
methods = all_methods(obj, true).select{ |m| m.owner == obj && m.name =~ grep_regex }
|
91
|
-
output_section "#{Pry::WrappedModule.new(obj).method_prefix}methods", format_methods(methods)
|
92
|
-
end
|
93
|
-
|
94
|
-
if show_ivars
|
95
|
-
klass = (Module === obj ? obj : obj.class)
|
96
|
-
ivars = Pry::Method.safe_send(obj, :instance_variables)
|
97
|
-
kvars = Pry::Method.safe_send(klass, :class_variables)
|
98
|
-
output_section("instance variables", format_variables(:instance_var, ivars))
|
99
|
-
output_section("class variables", format_variables(:class_var, kvars))
|
100
|
-
end
|
101
|
-
|
102
|
-
if show_locals
|
103
|
-
output_section("locals", format_locals(grep[target.eval("local_variables")]))
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
private
|
108
|
-
|
109
|
-
# http://ruby.runpaint.org/globals, and running "puts global_variables.inspect".
|
110
|
-
BUILTIN_GLOBALS = %w($" $$ $* $, $-0 $-F $-I $-K $-W $-a $-d $-i $-l $-p $-v $-w $. $/ $\\
|
111
|
-
$: $; $< $= $> $0 $ARGV $CONSOLE $DEBUG $DEFAULT_INPUT $DEFAULT_OUTPUT
|
112
|
-
$FIELD_SEPARATOR $FILENAME $FS $IGNORECASE $INPUT_LINE_NUMBER
|
113
|
-
$INPUT_RECORD_SEPARATOR $KCODE $LOADED_FEATURES $LOAD_PATH $NR $OFS
|
114
|
-
$ORS $OUTPUT_FIELD_SEPARATOR $OUTPUT_RECORD_SEPARATOR $PID $PROCESS_ID
|
115
|
-
$PROGRAM_NAME $RS $VERBOSE $deferr $defout $stderr $stdin $stdout)
|
116
|
-
|
117
|
-
# $SAFE and $? are thread-local, the exception stuff only works in a rescue clause,
|
118
|
-
# everything else is basically a local variable with a $ in its name.
|
119
|
-
PSEUDO_GLOBALS = %w($! $' $& $` $@ $? $+ $_ $~ $1 $2 $3 $4 $5 $6 $7 $8 $9
|
120
|
-
$CHILD_STATUS $SAFE $ERROR_INFO $ERROR_POSITION $LAST_MATCH_INFO
|
121
|
-
$LAST_PAREN_MATCH $LAST_READ_LINE $MATCH $POSTMATCH $PREMATCH)
|
122
|
-
|
123
|
-
# Get all the methods that we'll want to output
|
124
|
-
def all_methods(obj, instance_methods=false)
|
125
|
-
methods = if instance_methods || opts.present?(:'instance-methods')
|
126
|
-
Pry::Method.all_from_class(obj)
|
127
|
-
else
|
128
|
-
Pry::Method.all_from_obj(obj)
|
129
|
-
end
|
130
|
-
|
131
|
-
if jruby? && !opts.present?(:J)
|
132
|
-
methods = trim_jruby_aliases(methods)
|
133
|
-
end
|
134
|
-
|
135
|
-
methods.select{ |method| opts.present?(:ppp) || method.visibility == :public }
|
136
|
-
end
|
137
|
-
|
138
|
-
# JRuby creates lots of aliases for methods imported from java in an attempt to
|
139
|
-
# make life easier for ruby programmers.
|
140
|
-
# (e.g. getFooBar becomes get_foo_bar and foo_bar, and maybe foo_bar? if it
|
141
|
-
# returns a Boolean).
|
142
|
-
# The full transformations are in the assignAliases method of:
|
143
|
-
# https://github.com/jruby/jruby/blob/master/src/org/jruby/javasupport/JavaClass.java
|
144
|
-
#
|
145
|
-
# This has the unfortunate side-effect of making the output of ls even more
|
146
|
-
# incredibly verbose than it normally would be for these objects; and so we filter
|
147
|
-
# out all but the nicest of these aliases here.
|
148
|
-
#
|
149
|
-
# TODO: This is a little bit vague, better heuristics could be used.
|
150
|
-
# JRuby also has a lot of scala-specific logic, which we don't copy.
|
151
|
-
#
|
152
|
-
def trim_jruby_aliases(methods)
|
153
|
-
grouped = methods.group_by do |m|
|
154
|
-
m.name.sub(/\A(is|get|set)(?=[A-Z_])/, '').gsub(/[_?=]/, '').downcase
|
155
|
-
end
|
156
|
-
|
157
|
-
grouped.map do |key, values|
|
158
|
-
values = values.sort_by do |m|
|
159
|
-
rubbishness(m.name)
|
160
|
-
end
|
161
|
-
|
162
|
-
found = []
|
163
|
-
values.select do |x|
|
164
|
-
(!found.any?{ |y| x == y }) && found << x
|
165
|
-
end
|
166
|
-
end.flatten(1)
|
167
|
-
end
|
168
|
-
|
169
|
-
# When removing jruby aliases, we want to keep the alias that is "least rubbish"
|
170
|
-
# according to this metric.
|
171
|
-
def rubbishness(name)
|
172
|
-
name.each_char.map{ |x|
|
173
|
-
case x
|
174
|
-
when /[A-Z]/
|
175
|
-
1
|
176
|
-
when '?', '=', '!'
|
177
|
-
-2
|
178
|
-
else
|
179
|
-
0
|
180
|
-
end
|
181
|
-
}.inject(&:+) + (name.size / 100.0)
|
182
|
-
end
|
183
|
-
|
184
|
-
def resolution_order(obj)
|
185
|
-
opts.present?(:'instance-methods') ? Pry::Method.instance_resolution_order(obj) : Pry::Method.resolution_order(obj)
|
186
|
-
end
|
187
|
-
|
188
|
-
# Get a lambda that can be used with .take_while to prevent over-eager
|
189
|
-
# traversal of the Object's ancestry graph.
|
190
|
-
def below_ceiling(obj)
|
191
|
-
ceiling = if opts.present?(:quiet)
|
192
|
-
[opts.present?(:'instance-methods') ? obj.ancestors[1] : obj.class.ancestors[1]] + Pry.config.ls.ceiling
|
193
|
-
elsif opts.present?(:verbose)
|
194
|
-
[]
|
195
|
-
else
|
196
|
-
Pry.config.ls.ceiling.dup
|
197
|
-
end
|
198
|
-
|
199
|
-
lambda { |klass| !ceiling.include?(klass) }
|
200
|
-
end
|
201
|
-
|
202
|
-
# Format and colourise a list of methods.
|
203
|
-
def format_methods(methods)
|
204
|
-
methods.sort_by(&:name).map do |method|
|
205
|
-
if method.name == 'method_missing'
|
206
|
-
color(:method_missing, 'method_missing')
|
207
|
-
elsif method.visibility == :private
|
208
|
-
color(:private_method, method.name)
|
209
|
-
elsif method.visibility == :protected
|
210
|
-
color(:protected_method, method.name)
|
211
|
-
else
|
212
|
-
color(:public_method, method.name)
|
213
|
-
end
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
|
-
def format_variables(type, vars)
|
218
|
-
vars.sort_by(&:downcase).map{ |var| color(type, var) }
|
219
|
-
end
|
220
|
-
|
221
|
-
def format_constants(mod, constants)
|
222
|
-
constants.sort_by(&:downcase).map do |name|
|
223
|
-
if const = (!mod.autoload?(name) && (mod.const_get(name) || true) rescue nil)
|
224
|
-
if (const < Exception rescue false)
|
225
|
-
color(:exception_constant, name)
|
226
|
-
elsif (Module === mod.const_get(name) rescue false)
|
227
|
-
color(:class_constant, name)
|
228
|
-
else
|
229
|
-
color(:constant, name)
|
230
|
-
end
|
231
|
-
else
|
232
|
-
color(:unloaded_constant, name)
|
233
|
-
end
|
234
|
-
end
|
235
|
-
end
|
236
|
-
|
237
|
-
def format_globals(globals)
|
238
|
-
globals.sort_by(&:downcase).map do |name|
|
239
|
-
if PSEUDO_GLOBALS.include?(name)
|
240
|
-
color(:pseudo_global, name)
|
241
|
-
elsif BUILTIN_GLOBALS.include?(name)
|
242
|
-
color(:builtin_global, name)
|
243
|
-
else
|
244
|
-
color(:global_var, name)
|
245
|
-
end
|
246
|
-
end
|
247
|
-
end
|
248
|
-
|
249
|
-
def format_locals(locals)
|
250
|
-
locals.sort_by(&:downcase).map do |name|
|
251
|
-
if _pry_.sticky_locals.include?(name.to_sym)
|
252
|
-
color(:pry_var, name)
|
253
|
-
else
|
254
|
-
color(:local_var, name)
|
255
|
-
end
|
256
|
-
end
|
257
|
-
end
|
258
|
-
|
259
|
-
# Add a new section to the output. Outputs nothing if the section would be empty.
|
260
|
-
def output_section(heading, body)
|
261
|
-
return if body.compact.empty?
|
262
|
-
output.puts "#{text.bold(color(:heading, heading))}: #{body.compact.join(Pry.config.ls.separator)}"
|
263
|
-
end
|
264
|
-
|
265
|
-
# Color output based on config.ls.*_color
|
266
|
-
def color(type, str)
|
267
|
-
text.send(Pry.config.ls.send(:"#{type}_color"), str)
|
268
|
-
end
|
269
|
-
end
|
270
|
-
end
|
271
|
-
end
|
272
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
class Pry
|
2
|
-
module DefaultCommands
|
3
|
-
Misc = Pry::CommandSet.new do
|
4
|
-
|
5
|
-
command "toggle-color", "Toggle syntax highlighting." do
|
6
|
-
Pry.color = !Pry.color
|
7
|
-
output.puts "Syntax highlighting #{Pry.color ? "on" : "off"}"
|
8
|
-
end
|
9
|
-
|
10
|
-
command "simple-prompt", "Toggle the simple prompt." do
|
11
|
-
case _pry_.prompt
|
12
|
-
when Pry::SIMPLE_PROMPT
|
13
|
-
_pry_.pop_prompt
|
14
|
-
else
|
15
|
-
_pry_.push_prompt Pry::SIMPLE_PROMPT
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
command "pry-version", "Show Pry version." do
|
20
|
-
output.puts "Pry version: #{Pry::VERSION} on Ruby #{RUBY_VERSION}."
|
21
|
-
end
|
22
|
-
|
23
|
-
command "reload-method", "Reload the source file that contains the specified method" do |meth_name|
|
24
|
-
meth = get_method_or_raise(meth_name, target, {}, :omit_help)
|
25
|
-
|
26
|
-
if meth.source_type == :c
|
27
|
-
raise CommandError, "Can't reload a C method."
|
28
|
-
elsif meth.dynamically_defined?
|
29
|
-
raise CommandError, "Can't reload an eval method."
|
30
|
-
else
|
31
|
-
file_name = meth.source_file
|
32
|
-
load file_name
|
33
|
-
output.puts "Reloaded #{file_name}."
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,110 +0,0 @@
|
|
1
|
-
class Pry
|
2
|
-
module DefaultCommands
|
3
|
-
|
4
|
-
NavigatingPry = Pry::CommandSet.new do
|
5
|
-
command "switch-to", "Start a new sub-session on a binding in the current stack (numbered by nesting)." do |selection|
|
6
|
-
selection = selection.to_i
|
7
|
-
|
8
|
-
if selection < 0 || selection > _pry_.binding_stack.size - 1
|
9
|
-
raise CommandError, "Invalid binding index #{selection} - use `nesting` command to view valid indices."
|
10
|
-
else
|
11
|
-
Pry.start(_pry_.binding_stack[selection])
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
command "nesting", "Show nesting information." do
|
16
|
-
output.puts "Nesting status:"
|
17
|
-
output.puts "--"
|
18
|
-
_pry_.binding_stack.each_with_index do |obj, level|
|
19
|
-
if level == 0
|
20
|
-
output.puts "#{level}. #{Pry.view_clip(obj.eval('self'))} (Pry top level)"
|
21
|
-
else
|
22
|
-
output.puts "#{level}. #{Pry.view_clip(obj.eval('self'))}"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
command "jump-to", "Jump to a binding further up the stack, popping all bindings below." do |break_level|
|
28
|
-
break_level = break_level.to_i
|
29
|
-
nesting_level = _pry_.binding_stack.size - 1
|
30
|
-
|
31
|
-
case break_level
|
32
|
-
when nesting_level
|
33
|
-
output.puts "Already at nesting level #{nesting_level}"
|
34
|
-
when (0...nesting_level)
|
35
|
-
_pry_.binding_stack.slice!(break_level + 1, _pry_.binding_stack.size)
|
36
|
-
|
37
|
-
else
|
38
|
-
max_nest_level = nesting_level - 1
|
39
|
-
output.puts "Invalid nest level. Must be between 0 and #{max_nest_level}. Got #{break_level}."
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
command "exit-all", "End the current Pry session (popping all bindings) and returning to caller. Accepts optional return value. Aliases: !!@" do
|
44
|
-
# calculate user-given value
|
45
|
-
exit_value = target.eval(arg_string)
|
46
|
-
|
47
|
-
# clear the binding stack
|
48
|
-
_pry_.binding_stack.clear
|
49
|
-
|
50
|
-
# break out of the repl loop
|
51
|
-
throw(:breakout, exit_value)
|
52
|
-
end
|
53
|
-
|
54
|
-
alias_command "!!@", "exit-all"
|
55
|
-
|
56
|
-
create_command "exit" do
|
57
|
-
description "Pop the previous binding (does NOT exit program). Aliases: quit"
|
58
|
-
|
59
|
-
banner <<-BANNER
|
60
|
-
Usage: exit [OPTIONS] [--help]
|
61
|
-
Aliases: quit
|
62
|
-
|
63
|
-
It can be useful to exit a context with a user-provided value. For
|
64
|
-
instance an exit value can be used to determine program flow.
|
65
|
-
|
66
|
-
e.g: `exit "pry this"`
|
67
|
-
e.g: `exit`
|
68
|
-
|
69
|
-
https://github.com/pry/pry/wiki/State-navigation#wiki-Exit_with_value
|
70
|
-
BANNER
|
71
|
-
|
72
|
-
command_options(
|
73
|
-
:keep_retval => true
|
74
|
-
)
|
75
|
-
|
76
|
-
def process
|
77
|
-
if _pry_.binding_stack.one?
|
78
|
-
_pry_.run_command "exit-all #{arg_string}"
|
79
|
-
else
|
80
|
-
# otherwise just pop a binding and return user supplied value
|
81
|
-
process_pop_and_return
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def process_pop_and_return
|
86
|
-
popped_object = _pry_.binding_stack.pop.eval('self')
|
87
|
-
|
88
|
-
# return a user-specified value if given otherwise return the object
|
89
|
-
return target.eval(arg_string) unless arg_string.empty?
|
90
|
-
popped_object
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
alias_command "quit", "exit"
|
95
|
-
|
96
|
-
command "exit-program", "End the current program. Aliases: quit-program, !!!" do
|
97
|
-
Pry.save_history if Pry.config.history.should_save
|
98
|
-
Kernel.exit target.eval(arg_string).to_i
|
99
|
-
end
|
100
|
-
|
101
|
-
alias_command "quit-program", "exit-program"
|
102
|
-
alias_command "!!!", "exit-program"
|
103
|
-
|
104
|
-
command "!pry", "Start a Pry session on current self; this even works mid multi-line expression." do
|
105
|
-
target.pry
|
106
|
-
end
|
107
|
-
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
@@ -1,92 +0,0 @@
|
|
1
|
-
|
2
|
-
class Pry
|
3
|
-
module DefaultCommands
|
4
|
-
Whereami = Pry::CommandSet.new do
|
5
|
-
create_command "whereami" do
|
6
|
-
description "Show code surrounding the current context."
|
7
|
-
group 'Context'
|
8
|
-
banner <<-BANNER
|
9
|
-
Usage: whereami [-q] [N]
|
10
|
-
|
11
|
-
Describe the current location. If you use `binding.pry` inside a
|
12
|
-
method then whereami will print out the source for that method.
|
13
|
-
|
14
|
-
If a number is passed, then N lines before and after the current line
|
15
|
-
will be shown instead of the method itself.
|
16
|
-
|
17
|
-
The `-q` flag can be used to suppress error messages in the case that
|
18
|
-
there's no code to show. This is used by pry in the default
|
19
|
-
before_session hook to show you when you arrive at a `binding.pry`.
|
20
|
-
|
21
|
-
When pry was started on an Object and there is no associated method,
|
22
|
-
whereami will instead output a brief description of the current
|
23
|
-
object.
|
24
|
-
BANNER
|
25
|
-
|
26
|
-
def setup
|
27
|
-
@method = Pry::Method.from_binding(target)
|
28
|
-
@file = target.eval('__FILE__')
|
29
|
-
@line = target.eval('__LINE__')
|
30
|
-
end
|
31
|
-
|
32
|
-
def options(opt)
|
33
|
-
opt.on :q, :quiet, "Don't display anything in case of an error"
|
34
|
-
end
|
35
|
-
|
36
|
-
def code
|
37
|
-
@code ||= if show_method?
|
38
|
-
Pry::Code.from_method(@method)
|
39
|
-
else
|
40
|
-
Pry::Code.from_file(@file).around(@line, window_size)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def location
|
45
|
-
"#{@file} @ line #{show_method? ? @method.source_line : @line} #{@method && @method.name_with_owner}"
|
46
|
-
end
|
47
|
-
|
48
|
-
def process
|
49
|
-
if opts.quiet? && (internal_binding?(target) || !code?)
|
50
|
-
return
|
51
|
-
elsif internal_binding?(target)
|
52
|
-
if target_self == TOPLEVEL_BINDING.eval("self")
|
53
|
-
output.puts "At the top level."
|
54
|
-
else
|
55
|
-
output.puts "Inside #{Pry.view_clip(target_self)}."
|
56
|
-
end
|
57
|
-
return
|
58
|
-
end
|
59
|
-
|
60
|
-
set_file_and_dir_locals(@file)
|
61
|
-
|
62
|
-
output.puts "\n#{text.bold('From:')} #{location}:\n\n"
|
63
|
-
output.puts code.with_line_numbers.with_marker(@line)
|
64
|
-
output.puts
|
65
|
-
end
|
66
|
-
|
67
|
-
private
|
68
|
-
|
69
|
-
def show_method?
|
70
|
-
args.empty? && @method && @method.source? && @method.source_range.count < 20 &&
|
71
|
-
# These checks are needed in case of an eval with a binding and file/line
|
72
|
-
# numbers set to outside the function. As in rails' use of ERB.
|
73
|
-
@method.source_file == @file && @method.source_range.include?(@line)
|
74
|
-
end
|
75
|
-
|
76
|
-
def code?
|
77
|
-
!!code
|
78
|
-
rescue MethodSource::SourceNotFoundError
|
79
|
-
false
|
80
|
-
end
|
81
|
-
|
82
|
-
def window_size
|
83
|
-
if args.empty?
|
84
|
-
Pry.config.default_window_size
|
85
|
-
else
|
86
|
-
args.first.to_i
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|