pry 0.9.12.2 → 0.14.2
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 +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
|