pry 0.9.12.2 → 0.14.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +1141 -0
- data/LICENSE +2 -2
- data/README.md +466 -0
- data/bin/pry +4 -7
- data/lib/pry/basic_object.rb +10 -0
- data/lib/pry/block_command.rb +22 -0
- data/lib/pry/class_command.rb +194 -0
- data/lib/pry/cli.rb +97 -92
- data/lib/pry/code/code_file.rb +114 -0
- data/lib/pry/code/code_range.rb +7 -4
- data/lib/pry/code/loc.rb +27 -14
- data/lib/pry/code.rb +62 -90
- data/lib/pry/code_object.rb +83 -39
- data/lib/pry/color_printer.rb +66 -0
- data/lib/pry/command.rb +202 -371
- data/lib/pry/command_set.rb +151 -133
- data/lib/pry/command_state.rb +31 -0
- data/lib/pry/commands/amend_line.rb +86 -82
- data/lib/pry/commands/bang.rb +18 -14
- data/lib/pry/commands/bang_pry.rb +15 -11
- data/lib/pry/commands/cat/abstract_formatter.rb +23 -18
- data/lib/pry/commands/cat/exception_formatter.rb +85 -73
- data/lib/pry/commands/cat/file_formatter.rb +56 -63
- data/lib/pry/commands/cat/input_expression_formatter.rb +35 -30
- data/lib/pry/commands/cat.rb +64 -47
- data/lib/pry/commands/cd.rb +42 -26
- data/lib/pry/commands/change_inspector.rb +34 -0
- data/lib/pry/commands/change_prompt.rb +51 -0
- data/lib/pry/commands/clear_screen.rb +20 -0
- data/lib/pry/commands/code_collector.rb +148 -131
- data/lib/pry/commands/disable_pry.rb +23 -19
- data/lib/pry/commands/easter_eggs.rb +23 -34
- data/lib/pry/commands/edit/exception_patcher.rb +21 -17
- data/lib/pry/commands/edit/file_and_line_locator.rb +33 -24
- data/lib/pry/commands/edit.rb +183 -167
- data/lib/pry/commands/exit.rb +40 -35
- data/lib/pry/commands/exit_all.rb +24 -20
- data/lib/pry/commands/exit_program.rb +20 -17
- data/lib/pry/commands/find_method.rb +167 -167
- data/lib/pry/commands/fix_indent.rb +16 -12
- data/lib/pry/commands/help.rb +140 -133
- data/lib/pry/commands/hist.rb +153 -132
- data/lib/pry/commands/import_set.rb +20 -15
- data/lib/pry/commands/jump_to.rb +25 -21
- data/lib/pry/commands/list_inspectors.rb +42 -0
- data/lib/pry/commands/ls/constants.rb +75 -0
- data/lib/pry/commands/ls/formatter.rb +55 -0
- data/lib/pry/commands/ls/globals.rb +50 -0
- data/lib/pry/commands/ls/grep.rb +23 -0
- data/lib/pry/commands/ls/instance_vars.rb +40 -0
- data/lib/pry/commands/ls/interrogatable.rb +24 -0
- data/lib/pry/commands/ls/jruby_hacks.rb +55 -0
- data/lib/pry/commands/ls/local_names.rb +37 -0
- data/lib/pry/commands/ls/local_vars.rb +47 -0
- data/lib/pry/commands/ls/ls_entity.rb +65 -0
- data/lib/pry/commands/ls/methods.rb +55 -0
- data/lib/pry/commands/ls/methods_helper.rb +50 -0
- data/lib/pry/commands/ls/self_methods.rb +34 -0
- data/lib/pry/commands/ls.rb +100 -303
- data/lib/pry/commands/nesting.rb +21 -17
- data/lib/pry/commands/play.rb +93 -49
- data/lib/pry/commands/pry_backtrace.rb +22 -18
- data/lib/pry/commands/pry_version.rb +15 -11
- data/lib/pry/commands/raise_up.rb +33 -27
- data/lib/pry/commands/reload_code.rb +57 -48
- data/lib/pry/commands/reset.rb +16 -12
- data/lib/pry/commands/ri.rb +57 -38
- data/lib/pry/commands/save_file.rb +45 -43
- data/lib/pry/commands/shell_command.rb +66 -34
- data/lib/pry/commands/shell_mode.rb +22 -20
- data/lib/pry/commands/show_doc.rb +80 -65
- data/lib/pry/commands/show_info.rb +193 -159
- data/lib/pry/commands/show_input.rb +16 -11
- data/lib/pry/commands/show_source.rb +113 -33
- data/lib/pry/commands/stat.rb +35 -31
- data/lib/pry/commands/switch_to.rb +21 -15
- data/lib/pry/commands/toggle_color.rb +21 -13
- data/lib/pry/commands/watch_expression/expression.rb +43 -0
- data/lib/pry/commands/watch_expression.rb +110 -0
- data/lib/pry/commands/whereami.rb +157 -134
- data/lib/pry/commands/wtf.rb +78 -40
- data/lib/pry/config/attributable.rb +22 -0
- data/lib/pry/config/lazy_value.rb +29 -0
- data/lib/pry/config/memoized_value.rb +34 -0
- data/lib/pry/config/value.rb +24 -0
- data/lib/pry/config.rb +290 -220
- data/lib/pry/control_d_handler.rb +28 -0
- data/lib/pry/core_extensions.rb +50 -27
- data/lib/pry/editor.rb +130 -102
- data/lib/pry/env.rb +18 -0
- data/lib/pry/exception_handler.rb +43 -0
- data/lib/pry/exceptions.rb +73 -0
- data/lib/pry/forwardable.rb +27 -0
- data/lib/pry/helpers/base_helpers.rb +22 -151
- data/lib/pry/helpers/command_helpers.rb +55 -63
- data/lib/pry/helpers/documentation_helpers.rb +21 -13
- data/lib/pry/helpers/options_helpers.rb +15 -8
- data/lib/pry/helpers/platform.rb +55 -0
- data/lib/pry/helpers/table.rb +44 -32
- data/lib/pry/helpers/text.rb +96 -86
- data/lib/pry/helpers.rb +3 -0
- data/lib/pry/history.rb +101 -70
- data/lib/pry/hooks.rb +67 -137
- data/lib/pry/indent.rb +79 -73
- data/lib/pry/input_completer.rb +283 -0
- data/lib/pry/input_lock.rb +129 -0
- data/lib/pry/inspector.rb +39 -0
- data/lib/pry/last_exception.rb +61 -0
- data/lib/pry/method/disowned.rb +19 -5
- data/lib/pry/{commands/edit/method_patcher.rb → method/patcher.rb} +51 -42
- data/lib/pry/method/weird_method_locator.rb +80 -44
- data/lib/pry/method.rb +225 -176
- data/lib/pry/object_path.rb +91 -0
- data/lib/pry/output.rb +136 -0
- data/lib/pry/pager.rb +227 -68
- data/lib/pry/prompt.rb +214 -0
- data/lib/pry/pry_class.rb +216 -289
- data/lib/pry/pry_instance.rb +438 -500
- data/lib/pry/repl.rb +256 -0
- data/lib/pry/repl_file_loader.rb +34 -35
- data/lib/pry/ring.rb +89 -0
- data/lib/pry/slop/LICENSE +20 -0
- data/lib/pry/slop/commands.rb +190 -0
- data/lib/pry/slop/option.rb +210 -0
- data/lib/pry/slop.rb +672 -0
- data/lib/pry/syntax_highlighter.rb +26 -0
- data/lib/pry/system_command_handler.rb +17 -0
- data/lib/pry/testable/evalable.rb +24 -0
- data/lib/pry/testable/mockable.rb +22 -0
- data/lib/pry/testable/pry_tester.rb +88 -0
- data/lib/pry/testable/utility.rb +34 -0
- data/lib/pry/testable/variables.rb +52 -0
- data/lib/pry/testable.rb +68 -0
- data/lib/pry/version.rb +3 -1
- data/lib/pry/warning.rb +20 -0
- data/lib/pry/{module_candidate.rb → wrapped_module/candidate.rb} +36 -43
- data/lib/pry/wrapped_module.rb +102 -103
- data/lib/pry.rb +135 -261
- metadata +94 -283
- data/.document +0 -2
- data/.gitignore +0 -16
- data/.travis.yml +0 -21
- data/.yardopts +0 -1
- data/CHANGELOG +0 -534
- data/CONTRIBUTORS +0 -55
- data/Gemfile +0 -9
- data/Guardfile +0 -62
- data/README.markdown +0 -400
- data/Rakefile +0 -140
- data/TODO +0 -117
- data/lib/pry/commands/disabled_commands.rb +0 -2
- data/lib/pry/commands/gem_cd.rb +0 -26
- data/lib/pry/commands/gem_install.rb +0 -29
- data/lib/pry/commands/gem_list.rb +0 -33
- data/lib/pry/commands/gem_open.rb +0 -29
- data/lib/pry/commands/gist.rb +0 -102
- data/lib/pry/commands/install_command.rb +0 -51
- data/lib/pry/commands/simple_prompt.rb +0 -22
- data/lib/pry/commands.rb +0 -6
- data/lib/pry/completion.rb +0 -304
- data/lib/pry/custom_completions.rb +0 -6
- data/lib/pry/history_array.rb +0 -116
- data/lib/pry/plugins.rb +0 -103
- data/lib/pry/rbx_method.rb +0 -13
- data/lib/pry/rbx_path.rb +0 -22
- data/lib/pry/rubygem.rb +0 -74
- data/lib/pry/terminal.rb +0 -78
- data/lib/pry/test/helper.rb +0 -185
- data/man/pry.1 +0 -195
- data/man/pry.1.html +0 -204
- data/man/pry.1.ronn +0 -141
- data/pry.gemspec +0 -30
- 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 -239
- 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 -504
- 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
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Pry
|
4
|
+
class Command
|
5
|
+
class Ls < Pry::ClassCommand
|
6
|
+
module MethodsHelper
|
7
|
+
include Pry::Command::Ls::JRubyHacks
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
# Get all the methods that we'll want to output.
|
12
|
+
def all_methods(instance_methods = false)
|
13
|
+
methods = if instance_methods || @instance_methods_switch
|
14
|
+
Pry::Method.all_from_class(@interrogatee)
|
15
|
+
else
|
16
|
+
Pry::Method.all_from_obj(@interrogatee)
|
17
|
+
end
|
18
|
+
|
19
|
+
if Pry::Helpers::Platform.jruby? && !@jruby_switch
|
20
|
+
methods = trim_jruby_aliases(methods)
|
21
|
+
end
|
22
|
+
|
23
|
+
methods.select { |method| @ppp_switch || method.visibility == :public }
|
24
|
+
end
|
25
|
+
|
26
|
+
def resolution_order
|
27
|
+
if @instance_methods_switch
|
28
|
+
Pry::Method.instance_resolution_order(@interrogatee)
|
29
|
+
else
|
30
|
+
Pry::Method.resolution_order(@interrogatee)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def format(methods)
|
35
|
+
methods.sort_by(&:name).map do |method|
|
36
|
+
if method.name == 'method_missing'
|
37
|
+
color(:method_missing, 'method_missing')
|
38
|
+
elsif method.visibility == :private
|
39
|
+
color(:private_method, method.name)
|
40
|
+
elsif method.visibility == :protected
|
41
|
+
color(:protected_method, method.name)
|
42
|
+
else
|
43
|
+
color(:public_method, method.name)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Pry
|
4
|
+
class Command
|
5
|
+
class Ls < Pry::ClassCommand
|
6
|
+
class SelfMethods < Pry::Command::Ls::Formatter
|
7
|
+
include Pry::Command::Ls::Interrogatable
|
8
|
+
include Pry::Command::Ls::MethodsHelper
|
9
|
+
|
10
|
+
def initialize(interrogatee, no_user_opts, opts, pry_instance)
|
11
|
+
super(pry_instance)
|
12
|
+
@interrogatee = interrogatee
|
13
|
+
@no_user_opts = no_user_opts
|
14
|
+
@ppp_switch = opts[:ppp]
|
15
|
+
@jruby_switch = opts['all-java']
|
16
|
+
end
|
17
|
+
|
18
|
+
def output_self
|
19
|
+
methods = all_methods(true).select do |m|
|
20
|
+
m.owner == @interrogatee && grep.regexp[m.name]
|
21
|
+
end
|
22
|
+
heading = "#{Pry::WrappedModule.new(@interrogatee).method_prefix}methods"
|
23
|
+
output_section(heading, format(methods))
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def correct_opts?
|
29
|
+
@no_user_opts && interrogating_a_module?
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/pry/commands/ls.rb
CHANGED
@@ -1,12 +1,35 @@
|
|
1
|
-
|
2
|
-
class Command::Ls < Pry::ClassCommand
|
3
|
-
match 'ls'
|
4
|
-
group 'Context'
|
5
|
-
description 'Show the list of vars and methods in the current scope.'
|
6
|
-
command_options :shellwords => false, :interpolate => false
|
1
|
+
# frozen_string_literal: true
|
7
2
|
|
8
|
-
|
9
|
-
|
3
|
+
class Pry
|
4
|
+
class Command
|
5
|
+
class Ls < Pry::ClassCommand
|
6
|
+
DEFAULT_OPTIONS = {
|
7
|
+
heading_color: :bright_blue,
|
8
|
+
public_method_color: :default,
|
9
|
+
private_method_color: :blue,
|
10
|
+
protected_method_color: :blue,
|
11
|
+
method_missing_color: :bright_red,
|
12
|
+
local_var_color: :yellow,
|
13
|
+
pry_var_color: :default, # e.g. _, pry_instance, _file_
|
14
|
+
instance_var_color: :blue, # e.g. @foo
|
15
|
+
class_var_color: :bright_blue, # e.g. @@foo
|
16
|
+
global_var_color: :default, # e.g. $CODERAY_DEBUG, $eventmachine_library
|
17
|
+
builtin_global_color: :cyan, # e.g. $stdin, $-w, $PID
|
18
|
+
pseudo_global_color: :cyan, # e.g. $~, $1..$9, $LAST_MATCH_INFO
|
19
|
+
constant_color: :default, # e.g. VERSION, ARGF
|
20
|
+
class_constant_color: :blue, # e.g. Object, Kernel
|
21
|
+
exception_constant_color: :magenta, # e.g. Exception, RuntimeError
|
22
|
+
unloaded_constant_color: :yellow, # Any constant that is still in .autoload? state
|
23
|
+
separator: " ",
|
24
|
+
ceiling: [Object, Module, Class]
|
25
|
+
}.freeze
|
26
|
+
|
27
|
+
match 'ls'
|
28
|
+
group 'Context'
|
29
|
+
description 'Show the list of vars and methods in the current scope.'
|
30
|
+
command_options shellwords: false, interpolate: false
|
31
|
+
|
32
|
+
banner <<-'BANNER'
|
10
33
|
Usage: ls [-m|-M|-p|-pM] [-q|-v] [-c|-i] [Object]
|
11
34
|
ls [-g] [-l]
|
12
35
|
|
@@ -22,317 +45,91 @@ class Pry
|
|
22
45
|
methods defined on all Objects are omitted. The -v flag can be used to ignore
|
23
46
|
this setting and show all methods, while the -q can be used to set the ceiling
|
24
47
|
much lower and show only methods defined on the object or its direct class.
|
25
|
-
BANNER
|
26
|
-
|
27
|
-
opt.on :m, :methods, "Show public methods defined on the Object (default)"
|
28
|
-
opt.on :M, "instance-methods", "Show methods defined in a Module or Class"
|
29
|
-
opt.on :p, :ppp, "Show public, protected (in yellow) and private (in green) methods"
|
30
|
-
opt.on :q, :quiet, "Show only methods defined on object.singleton_class and object.class"
|
31
|
-
opt.on :v, :verbose, "Show methods and constants on all super-classes (ignores Pry.config.ls.ceiling)"
|
32
|
-
opt.on :g, :globals, "Show global variables, including those builtin to Ruby (in cyan)"
|
33
|
-
opt.on :l, :locals, "Show hash of local vars, sorted by descending size"
|
34
|
-
opt.on :c, :constants, "Show constants, highlighting classes (in blue), and exceptions (in purple).\n" +
|
35
|
-
" " * 32 + "Constants that are pending autoload? are also shown (in yellow)"
|
36
|
-
opt.on :i, :ivars, "Show instance variables (in blue) and class variables (in bright blue)"
|
37
|
-
opt.on :G, :grep, "Filter output by regular expression", :argument => true
|
38
|
-
|
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
|
-
attr_reader :object_to_interrogate, :has_user_specified_any_options, :grep, :grep_regex
|
45
|
-
|
46
|
-
def process
|
47
|
-
@object_to_interrogate = args.empty? ? target_self : target.eval(args.join(" "))
|
48
|
-
|
49
|
-
# exclude -q, -v and --grep because they don't specify what the user wants to see.
|
50
|
-
@has_user_specified_any_options = (opts.present?(:methods) || opts.present?(:'instance-methods') || opts.present?(:ppp) ||
|
51
|
-
opts.present?(:globals) || opts.present?(:locals) || opts.present?(:constants) ||
|
52
|
-
opts.present?(:ivars))
|
53
|
-
|
54
|
-
@grep_regex, @grep = [Regexp.new(opts[:G] || "."), lambda{ |x| x.grep(@grep_regex) }]
|
55
|
-
|
56
|
-
raise_errors_if_arguments_are_weird
|
57
|
-
|
58
|
-
all_output = [
|
59
|
-
write_out_globals,
|
60
|
-
write_out_constants,
|
61
|
-
write_out_methods,
|
62
|
-
write_out_self_methods,
|
63
|
-
write_out_ivars,
|
64
|
-
write_out_local_names,
|
65
|
-
write_out_locals,
|
66
|
-
].compact.join("")
|
67
|
-
|
68
|
-
stagger_output(all_output)
|
69
|
-
end
|
70
|
-
|
71
|
-
private
|
72
|
-
|
73
|
-
# http://ruby.runpaint.org/globals, and running "puts global_variables.inspect".
|
74
|
-
BUILTIN_GLOBALS = %w($" $$ $* $, $-0 $-F $-I $-K $-W $-a $-d $-i $-l $-p $-v $-w $. $/ $\\
|
75
|
-
$: $; $< $= $> $0 $ARGV $CONSOLE $DEBUG $DEFAULT_INPUT $DEFAULT_OUTPUT
|
76
|
-
$FIELD_SEPARATOR $FILENAME $FS $IGNORECASE $INPUT_LINE_NUMBER
|
77
|
-
$INPUT_RECORD_SEPARATOR $KCODE $LOADED_FEATURES $LOAD_PATH $NR $OFS
|
78
|
-
$ORS $OUTPUT_FIELD_SEPARATOR $OUTPUT_RECORD_SEPARATOR $PID $PROCESS_ID
|
79
|
-
$PROGRAM_NAME $RS $VERBOSE $deferr $defout $stderr $stdin $stdout)
|
80
|
-
|
81
|
-
# $SAFE and $? are thread-local, the exception stuff only works in a rescue clause,
|
82
|
-
# everything else is basically a local variable with a $ in its name.
|
83
|
-
PSEUDO_GLOBALS = %w($! $' $& $` $@ $? $+ $_ $~ $1 $2 $3 $4 $5 $6 $7 $8 $9
|
84
|
-
$CHILD_STATUS $SAFE $ERROR_INFO $ERROR_POSITION $LAST_MATCH_INFO
|
85
|
-
$LAST_PAREN_MATCH $LAST_READ_LINE $MATCH $POSTMATCH $PREMATCH)
|
86
|
-
|
87
|
-
# Get all the methods that we'll want to output
|
88
|
-
def all_methods(obj, instance_methods=false)
|
89
|
-
methods = if instance_methods || opts.present?(:'instance-methods')
|
90
|
-
Pry::Method.all_from_class(obj)
|
91
|
-
else
|
92
|
-
Pry::Method.all_from_obj(obj)
|
93
|
-
end
|
94
|
-
|
95
|
-
if jruby? && !opts.present?(:J)
|
96
|
-
methods = trim_jruby_aliases(methods)
|
97
|
-
end
|
98
48
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
# JRuby creates lots of aliases for methods imported from java in an attempt to
|
103
|
-
# make life easier for ruby programmers.
|
104
|
-
# (e.g. getFooBar becomes get_foo_bar and foo_bar, and maybe foo_bar? if it
|
105
|
-
# returns a Boolean).
|
106
|
-
# The full transformations are in the assignAliases method of:
|
107
|
-
# https://github.com/jruby/jruby/blob/master/src/org/jruby/javasupport/JavaClass.java
|
108
|
-
#
|
109
|
-
# This has the unfortunate side-effect of making the output of ls even more
|
110
|
-
# incredibly verbose than it normally would be for these objects; and so we filter
|
111
|
-
# out all but the nicest of these aliases here.
|
112
|
-
#
|
113
|
-
# TODO: This is a little bit vague, better heuristics could be used.
|
114
|
-
# JRuby also has a lot of scala-specific logic, which we don't copy.
|
115
|
-
#
|
116
|
-
def trim_jruby_aliases(methods)
|
117
|
-
grouped = methods.group_by do |m|
|
118
|
-
m.name.sub(/\A(is|get|set)(?=[A-Z_])/, '').gsub(/[_?=]/, '').downcase
|
119
|
-
end
|
120
|
-
|
121
|
-
grouped.map do |key, values|
|
122
|
-
values = values.sort_by do |m|
|
123
|
-
rubbishness(m.name)
|
124
|
-
end
|
125
|
-
|
126
|
-
found = []
|
127
|
-
values.select do |x|
|
128
|
-
(!found.any?{ |y| x == y }) && found << x
|
129
|
-
end
|
130
|
-
end.flatten(1)
|
131
|
-
end
|
49
|
+
Also check out `find-method` command (run `help find-method`).
|
50
|
+
BANNER
|
132
51
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
52
|
+
def options(opt)
|
53
|
+
opt.on :m, :methods, "Show public methods defined on the Object"
|
54
|
+
opt.on :M, "instance-methods", "Show public methods defined in a " \
|
55
|
+
"Module or Class"
|
56
|
+
opt.on :p, :ppp, "Show public, protected (in yellow) and private " \
|
57
|
+
"(in green) methods"
|
58
|
+
opt.on :q, :quiet, "Show only methods defined on object.singleton_class " \
|
59
|
+
"and object.class"
|
60
|
+
opt.on :v, :verbose, "Show methods and constants on all super-classes " \
|
61
|
+
"(ignores Pry.config.ls.ceiling)"
|
62
|
+
opt.on :g, :globals, "Show global variables, including those builtin to " \
|
63
|
+
"Ruby (in cyan)"
|
64
|
+
opt.on :l, :locals, "Show hash of local vars, sorted by descending size"
|
65
|
+
opt.on :c, :constants, "Show constants, highlighting classes (in blue), " \
|
66
|
+
"and exceptions (in purple).\n" \
|
67
|
+
"#{' ' * 32}Constants that are pending autoload? " \
|
68
|
+
"are also shown (in yellow)"
|
69
|
+
opt.on :i, :ivars, "Show instance variables (in blue) and class " \
|
70
|
+
"variables (in bright blue)"
|
71
|
+
opt.on :G, :grep, "Filter output by regular expression", argument: true
|
72
|
+
|
73
|
+
if Object.respond_to?(:deprecate_constant)
|
74
|
+
opt.on :d, :dconstants, "Show deprecated constants"
|
144
75
|
end
|
145
|
-
}.inject(&:+) + (name.size / 100.0)
|
146
|
-
end
|
147
|
-
|
148
|
-
def resolution_order(obj)
|
149
|
-
opts.present?(:'instance-methods') ? Pry::Method.instance_resolution_order(obj) : Pry::Method.resolution_order(obj)
|
150
|
-
end
|
151
|
-
|
152
|
-
# Get a lambda that can be used with .take_while to prevent over-eager
|
153
|
-
# traversal of the Object's ancestry graph.
|
154
|
-
def below_ceiling(obj)
|
155
|
-
ceiling = if opts.present?(:quiet)
|
156
|
-
[opts.present?(:'instance-methods') ? obj.ancestors[1] : obj.class.ancestors[1]] + Pry.config.ls.ceiling
|
157
|
-
elsif opts.present?(:verbose)
|
158
|
-
[]
|
159
|
-
else
|
160
|
-
Pry.config.ls.ceiling.dup
|
161
|
-
end
|
162
|
-
|
163
|
-
lambda { |klass| !ceiling.include?(klass) }
|
164
|
-
end
|
165
|
-
|
166
|
-
def raise_errors_if_arguments_are_weird
|
167
|
-
[
|
168
|
-
["-l does not make sense with a specified Object", :locals, !args.empty?],
|
169
|
-
["-g does not make sense with a specified Object", :globals, !args.empty?],
|
170
|
-
["-q does not make sense with -v", :quiet, opts.present?(:verbose)],
|
171
|
-
["-M only makes sense with a Module or a Class", :'instance-methods', !interrogating_a_module?],
|
172
|
-
["-c only makes sense with a Module or a Class", :constants, !args.empty? && !interrogating_a_module?],
|
173
|
-
].each do |message, option, expression|
|
174
|
-
raise Pry::CommandError, message if opts.present?(option) && expression
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
def interrogating_a_module?
|
179
|
-
(Module === object_to_interrogate)
|
180
|
-
end
|
181
76
|
|
182
|
-
|
183
|
-
return unless opts.present?(:globals)
|
77
|
+
return unless Helpers::Platform.jruby?
|
184
78
|
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
def write_out_constants
|
189
|
-
return unless opts.present?(:constants) || (!has_user_specified_any_options && interrogating_a_module?)
|
190
|
-
|
191
|
-
mod = interrogating_a_module? ? object_to_interrogate : Object
|
192
|
-
constants = WrappedModule.new(mod).constants(opts.present?(:verbose))
|
193
|
-
output_section("constants", grep[format_constants(mod, constants)])
|
194
|
-
end
|
195
|
-
|
196
|
-
def write_out_methods
|
197
|
-
return unless opts.present?(:methods) || opts.present?(:'instance-methods') || opts.present?(:ppp) || !has_user_specified_any_options
|
198
|
-
|
199
|
-
# methods is a hash {Module/Class => [Pry::Methods]}
|
200
|
-
methods = all_methods(object_to_interrogate).group_by(&:owner)
|
201
|
-
|
202
|
-
output = ""
|
203
|
-
# reverse the resolution order so that the most useful information appears right by the prompt
|
204
|
-
resolution_order(object_to_interrogate).take_while(&below_ceiling(object_to_interrogate)).reverse.each do |klass|
|
205
|
-
methods_here = format_methods((methods[klass] || []).select{ |m| m.name =~ grep_regex })
|
206
|
-
output << output_section("#{Pry::WrappedModule.new(klass).method_prefix}methods", methods_here)
|
79
|
+
opt.on :J, "all-java", "Show all the aliases for methods from java " \
|
80
|
+
"(default is to show only prettiest)"
|
207
81
|
end
|
208
|
-
output
|
209
|
-
end
|
210
|
-
|
211
|
-
def write_out_self_methods
|
212
|
-
return unless (!has_user_specified_any_options && interrogating_a_module?)
|
213
|
-
|
214
|
-
methods = all_methods(object_to_interrogate, true).select{ |m| m.owner == object_to_interrogate && m.name =~ grep_regex }
|
215
|
-
output_section("#{Pry::WrappedModule.new(object_to_interrogate).method_prefix}methods", format_methods(methods))
|
216
|
-
end
|
217
82
|
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
kvars = Pry::Method.safe_send(klass, :class_variables)
|
224
|
-
output_section("instance variables", format_variables(:instance_var, ivars)) +
|
225
|
-
output_section("class variables", format_variables(:class_var, kvars))
|
226
|
-
end
|
227
|
-
|
228
|
-
def write_out_local_names
|
229
|
-
return unless !has_user_specified_any_options && args.empty?
|
230
|
-
|
231
|
-
output_section("locals", format_local_names(grep[target.eval("local_variables")]))
|
232
|
-
end
|
233
|
-
|
234
|
-
def write_out_locals
|
235
|
-
return unless opts.present?(:locals)
|
236
|
-
|
237
|
-
loc_names = target.eval('local_variables').reject do |e|
|
238
|
-
_pry_.sticky_locals.keys.include? e.to_sym
|
239
|
-
end
|
240
|
-
name_value_pairs = loc_names.map do |name|
|
241
|
-
[name, (target.eval name.to_s)]
|
83
|
+
# Exclude -q, -v and --grep because they,
|
84
|
+
# don't specify what the user wants to see.
|
85
|
+
def no_user_opts?
|
86
|
+
!(opts[:methods] || opts['instance-methods'] || opts[:ppp] ||
|
87
|
+
opts[:globals] || opts[:locals] || opts[:constants] || opts[:ivars])
|
242
88
|
end
|
243
|
-
format_locals(name_value_pairs).join("")
|
244
|
-
end
|
245
89
|
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
90
|
+
def process
|
91
|
+
@interrogatee = args.empty? ? target_self : target.eval(args.join(' '))
|
92
|
+
raise_errors_if_arguments_are_weird
|
93
|
+
ls_entity = LsEntity.new(
|
94
|
+
interrogatee: @interrogatee,
|
95
|
+
no_user_opts: no_user_opts?,
|
96
|
+
opts: opts,
|
97
|
+
args: args,
|
98
|
+
pry_instance: pry_instance
|
99
|
+
)
|
100
|
+
|
101
|
+
pry_instance.pager.page ls_entity.entities_table
|
258
102
|
end
|
259
|
-
end
|
260
|
-
|
261
|
-
def format_variables(type, vars)
|
262
|
-
vars.sort_by(&:downcase).map{ |var| color(type, var) }
|
263
|
-
end
|
264
|
-
|
265
|
-
def format_constants(mod, constants)
|
266
|
-
constants.sort_by(&:downcase).map do |name|
|
267
|
-
if const = (!mod.autoload?(name) && (mod.const_get(name) || true) rescue nil)
|
268
|
-
if (const < Exception rescue false)
|
269
|
-
color(:exception_constant, name)
|
270
|
-
elsif (Module === mod.const_get(name) rescue false)
|
271
|
-
color(:class_constant, name)
|
272
|
-
else
|
273
|
-
color(:constant, name)
|
274
|
-
end
|
275
|
-
else
|
276
|
-
color(:unloaded_constant, name)
|
277
|
-
end
|
278
|
-
end
|
279
|
-
end
|
280
103
|
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
104
|
+
private
|
105
|
+
|
106
|
+
def error_list
|
107
|
+
any_args = args.any?
|
108
|
+
# rubocop:disable Style/CaseEquality
|
109
|
+
non_mod_interrogatee = !(Module === @interrogatee)
|
110
|
+
# rubocop:enable Style/CaseEquality
|
111
|
+
[
|
112
|
+
['-l does not make sense with a specified Object', :locals, any_args],
|
113
|
+
['-g does not make sense with a specified Object', :globals, any_args],
|
114
|
+
['-q does not make sense with -v', :quiet, opts.present?(:verbose)],
|
115
|
+
[
|
116
|
+
'-M only makes sense with a Module or a Class', 'instance-methods',
|
117
|
+
non_mod_interrogatee
|
118
|
+
],
|
119
|
+
[
|
120
|
+
'-c only makes sense with a Module or a Class', :constants,
|
121
|
+
any_args && non_mod_interrogatee
|
122
|
+
]
|
123
|
+
]
|
290
124
|
end
|
291
|
-
end
|
292
125
|
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
color(:pry_var, name)
|
297
|
-
else
|
298
|
-
color(:local_var, name)
|
126
|
+
def raise_errors_if_arguments_are_weird
|
127
|
+
error_list.each do |message, option, invalid_expr|
|
128
|
+
raise Pry::CommandError, message if opts.present?(option) && invalid_expr
|
299
129
|
end
|
300
130
|
end
|
301
131
|
end
|
302
132
|
|
303
|
-
|
304
|
-
name_value_pairs.sort_by do |name, value|
|
305
|
-
value.to_s.size
|
306
|
-
end.reverse.map do |name, value|
|
307
|
-
colorized_assignment_style(name, format_value(value))
|
308
|
-
end
|
309
|
-
end
|
310
|
-
|
311
|
-
def colorized_assignment_style(lhs, rhs, desired_width = 7)
|
312
|
-
colorized_lhs = color(:local_var, lhs)
|
313
|
-
color_escape_padding = colorized_lhs.size - lhs.size
|
314
|
-
pad = desired_width + color_escape_padding
|
315
|
-
"%-#{pad}s = %s" % [color(:local_var, colorized_lhs), rhs]
|
316
|
-
end
|
317
|
-
|
318
|
-
def format_value(value)
|
319
|
-
accumulator = StringIO.new
|
320
|
-
Pry.output_with_default_format(accumulator, value, :hashrocket => false)
|
321
|
-
accumulator.string
|
322
|
-
end
|
323
|
-
|
324
|
-
# Add a new section to the output. Outputs nothing if the section would be empty.
|
325
|
-
def output_section(heading, body)
|
326
|
-
return "" if body.compact.empty?
|
327
|
-
fancy_heading = text.bold(color(:heading, heading))
|
328
|
-
Pry::Helpers.tablify_or_one_line(fancy_heading, body)
|
329
|
-
end
|
330
|
-
|
331
|
-
# Color output based on config.ls.*_color
|
332
|
-
def color(type, str)
|
333
|
-
text.send(Pry.config.ls.send(:"#{type}_color"), str)
|
334
|
-
end
|
133
|
+
Pry::Commands.add_command(Pry::Command::Ls)
|
335
134
|
end
|
336
|
-
|
337
|
-
Pry::Commands.add_command(Pry::Command::Ls)
|
338
135
|
end
|
data/lib/pry/commands/nesting.rb
CHANGED
@@ -1,25 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Pry
|
2
|
-
class Command
|
3
|
-
|
4
|
-
|
5
|
-
|
4
|
+
class Command
|
5
|
+
class Nesting < Pry::ClassCommand
|
6
|
+
match 'nesting'
|
7
|
+
group 'Navigating Pry'
|
8
|
+
description 'Show nesting information.'
|
6
9
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
+
banner <<-'BANNER'
|
11
|
+
Show nesting information.
|
12
|
+
BANNER
|
10
13
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
def process
|
15
|
+
output.puts 'Nesting status:'
|
16
|
+
output.puts '--'
|
17
|
+
pry_instance.binding_stack.each_with_index do |obj, level|
|
18
|
+
if level == 0
|
19
|
+
output.puts "#{level}. #{Pry.view_clip(obj.eval('self'))} (Pry top level)"
|
20
|
+
else
|
21
|
+
output.puts "#{level}. #{Pry.view_clip(obj.eval('self'))}"
|
22
|
+
end
|
19
23
|
end
|
20
24
|
end
|
21
25
|
end
|
22
|
-
end
|
23
26
|
|
24
|
-
|
27
|
+
Pry::Commands.add_command(Pry::Command::Nesting)
|
28
|
+
end
|
25
29
|
end
|