pry 0.10.3 → 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 +439 -16
- data/LICENSE +1 -1
- data/README.md +362 -302
- 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 +84 -97
- data/lib/pry/code/code_file.rb +37 -26
- data/lib/pry/code/code_range.rb +7 -5
- data/lib/pry/code/loc.rb +26 -13
- data/lib/pry/code.rb +42 -31
- data/lib/pry/code_object.rb +53 -28
- data/lib/pry/color_printer.rb +46 -35
- data/lib/pry/command.rb +197 -369
- data/lib/pry/command_set.rb +89 -114
- 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 -72
- data/lib/pry/commands/cat/file_formatter.rb +56 -46
- data/lib/pry/commands/cat/input_expression_formatter.rb +35 -30
- data/lib/pry/commands/cat.rb +62 -54
- data/lib/pry/commands/cd.rb +40 -35
- data/lib/pry/commands/change_inspector.rb +29 -22
- data/lib/pry/commands/change_prompt.rb +48 -23
- 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 +34 -23
- data/lib/pry/commands/edit.rb +185 -157
- 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 -16
- data/lib/pry/commands/find_method.rb +168 -162
- data/lib/pry/commands/fix_indent.rb +16 -12
- data/lib/pry/commands/help.rb +140 -133
- data/lib/pry/commands/hist.rb +151 -149
- 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 +35 -28
- data/lib/pry/commands/ls/constants.rb +59 -31
- data/lib/pry/commands/ls/formatter.rb +42 -36
- data/lib/pry/commands/ls/globals.rb +38 -36
- data/lib/pry/commands/ls/grep.rb +17 -15
- data/lib/pry/commands/ls/instance_vars.rb +29 -28
- data/lib/pry/commands/ls/interrogatable.rb +18 -12
- data/lib/pry/commands/ls/jruby_hacks.rb +47 -41
- data/lib/pry/commands/ls/local_names.rb +26 -24
- data/lib/pry/commands/ls/local_vars.rb +38 -30
- data/lib/pry/commands/ls/ls_entity.rb +47 -52
- data/lib/pry/commands/ls/methods.rb +49 -51
- data/lib/pry/commands/ls/methods_helper.rb +46 -42
- data/lib/pry/commands/ls/self_methods.rb +23 -21
- data/lib/pry/commands/ls.rb +124 -103
- data/lib/pry/commands/nesting.rb +21 -17
- data/lib/pry/commands/play.rb +92 -82
- data/lib/pry/commands/pry_backtrace.rb +22 -17
- 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 +60 -48
- data/lib/pry/commands/reset.rb +16 -12
- data/lib/pry/commands/ri.rb +57 -42
- data/lib/pry/commands/save_file.rb +45 -43
- data/lib/pry/commands/shell_command.rb +56 -29
- data/lib/pry/commands/shell_mode.rb +22 -18
- data/lib/pry/commands/show_doc.rb +80 -70
- data/lib/pry/commands/show_info.rb +194 -155
- data/lib/pry/commands/show_input.rb +16 -11
- data/lib/pry/commands/show_source.rb +110 -42
- data/lib/pry/commands/stat.rb +35 -31
- data/lib/pry/commands/switch_to.rb +21 -15
- data/lib/pry/commands/toggle_color.rb +20 -16
- data/lib/pry/commands/watch_expression/expression.rb +32 -27
- data/lib/pry/commands/watch_expression.rb +89 -84
- data/lib/pry/commands/whereami.rb +156 -141
- 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 +310 -20
- data/lib/pry/control_d_handler.rb +28 -0
- data/lib/pry/core_extensions.rb +22 -9
- data/lib/pry/editor.rb +56 -34
- data/lib/pry/env.rb +18 -0
- data/lib/pry/exception_handler.rb +43 -0
- data/lib/pry/exceptions.rb +13 -18
- data/lib/pry/forwardable.rb +27 -0
- data/lib/pry/helpers/base_helpers.rb +20 -62
- data/lib/pry/helpers/command_helpers.rb +52 -62
- data/lib/pry/helpers/documentation_helpers.rb +21 -12
- 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 -85
- data/lib/pry/helpers.rb +3 -0
- data/lib/pry/history.rb +81 -55
- data/lib/pry/hooks.rb +60 -110
- data/lib/pry/indent.rb +74 -68
- data/lib/pry/input_completer.rb +199 -158
- data/lib/pry/input_lock.rb +7 -10
- data/lib/pry/inspector.rb +36 -24
- data/lib/pry/last_exception.rb +45 -45
- data/lib/pry/method/disowned.rb +19 -5
- data/lib/pry/method/patcher.rb +14 -8
- data/lib/pry/method/weird_method_locator.rb +79 -45
- data/lib/pry/method.rb +178 -124
- data/lib/pry/object_path.rb +37 -28
- data/lib/pry/output.rb +102 -16
- data/lib/pry/pager.rb +187 -174
- data/lib/pry/prompt.rb +213 -25
- data/lib/pry/pry_class.rb +119 -98
- data/lib/pry/pry_instance.rb +261 -224
- data/lib/pry/repl.rb +83 -29
- data/lib/pry/repl_file_loader.rb +27 -22
- 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} +35 -32
- data/lib/pry/wrapped_module.rb +68 -63
- data/lib/pry.rb +133 -149
- metadata +58 -69
- 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 -32
- 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 -101
- data/lib/pry/commands/install_command.rb +0 -53
- data/lib/pry/commands/list_prompts.rb +0 -35
- data/lib/pry/commands/simple_prompt.rb +0 -22
- data/lib/pry/commands.rb +0 -6
- data/lib/pry/config/behavior.rb +0 -139
- data/lib/pry/config/convenience.rb +0 -25
- data/lib/pry/config/default.rb +0 -161
- data/lib/pry/history_array.rb +0 -121
- data/lib/pry/plugins.rb +0 -103
- data/lib/pry/rbx_path.rb +0 -22
- data/lib/pry/rubygem.rb +0 -82
- data/lib/pry/terminal.rb +0 -79
- data/lib/pry/test/helper.rb +0 -170
@@ -1,22 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Pry
|
2
|
-
class Command
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
class Command
|
5
|
+
class ImportSet < Pry::ClassCommand
|
6
|
+
match 'import-set'
|
7
|
+
group 'Commands'
|
8
|
+
# TODO: Provide a better description with examples and a general conception
|
9
|
+
# of this command.
|
10
|
+
description 'Import a Pry command set.'
|
8
11
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
+
banner <<-'BANNER'
|
13
|
+
Import a Pry command set.
|
14
|
+
BANNER
|
12
15
|
|
13
|
-
|
14
|
-
|
16
|
+
# TODO: resolve unused parameter.
|
17
|
+
def process(_command_set_name)
|
18
|
+
raise CommandError, "Provide a command set name" if command_set.nil?
|
15
19
|
|
16
|
-
|
17
|
-
|
20
|
+
set = target.eval(arg_string)
|
21
|
+
pry_instance.commands.import set
|
22
|
+
end
|
18
23
|
end
|
19
|
-
end
|
20
24
|
|
21
|
-
|
25
|
+
Pry::Commands.add_command(Pry::Command::ImportSet)
|
26
|
+
end
|
22
27
|
end
|
data/lib/pry/commands/jump_to.rb
CHANGED
@@ -1,29 +1,33 @@
|
|
1
|
-
|
2
|
-
class Command::JumpTo < Pry::ClassCommand
|
3
|
-
match 'jump-to'
|
4
|
-
group 'Navigating Pry'
|
5
|
-
description 'Jump to a binding further up the stack.'
|
6
|
-
|
7
|
-
banner <<-'BANNER'
|
8
|
-
Jump to a binding further up the stack, popping all bindings below.
|
9
|
-
BANNER
|
1
|
+
# frozen_string_literal: true
|
10
2
|
|
11
|
-
|
12
|
-
|
13
|
-
|
3
|
+
class Pry
|
4
|
+
class Command
|
5
|
+
class JumpTo < Pry::ClassCommand
|
6
|
+
match 'jump-to'
|
7
|
+
group 'Navigating Pry'
|
8
|
+
description 'Jump to a binding further up the stack.'
|
14
9
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
when (0...nesting_level)
|
19
|
-
_pry_.binding_stack.slice!(break_level + 1, _pry_.binding_stack.size)
|
10
|
+
banner <<-'BANNER'
|
11
|
+
Jump to a binding further up the stack, popping all bindings below.
|
12
|
+
BANNER
|
20
13
|
|
21
|
-
|
14
|
+
def process(break_level)
|
15
|
+
break_level = break_level.to_i
|
16
|
+
nesting_level = pry_instance.binding_stack.size - 1
|
22
17
|
max_nest_level = nesting_level - 1
|
23
|
-
|
18
|
+
|
19
|
+
case break_level
|
20
|
+
when nesting_level
|
21
|
+
output.puts "Already at nesting level #{nesting_level}"
|
22
|
+
when 0..max_nest_level
|
23
|
+
pry_instance.binding_stack = pry_instance.binding_stack[0..break_level]
|
24
|
+
else
|
25
|
+
output.puts "Invalid nest level. Must be between 0 and " \
|
26
|
+
"#{max_nest_level}. Got #{break_level}."
|
27
|
+
end
|
24
28
|
end
|
25
29
|
end
|
26
|
-
end
|
27
30
|
|
28
|
-
|
31
|
+
Pry::Commands.add_command(Pry::Command::JumpTo)
|
32
|
+
end
|
29
33
|
end
|
@@ -1,35 +1,42 @@
|
|
1
|
-
|
2
|
-
match 'list-inspectors'
|
3
|
-
group 'Input and Output'
|
4
|
-
description 'List the inspector procs available for use.'
|
5
|
-
banner <<-BANNER
|
6
|
-
Usage: list-inspectors
|
1
|
+
# frozen_string_literal: true
|
7
2
|
|
8
|
-
|
9
|
-
|
10
|
-
|
3
|
+
class Pry
|
4
|
+
class Command
|
5
|
+
class ListInspectors < Pry::ClassCommand
|
6
|
+
match 'list-inspectors'
|
7
|
+
group 'Input and Output'
|
8
|
+
description 'List the inspector procs available for use.'
|
9
|
+
banner <<-BANNER
|
10
|
+
Usage: list-inspectors
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
output.write "Name: #{text.bold(name)}"
|
16
|
-
output.puts selected_inspector?(inspector) ? selected_text : ""
|
17
|
-
output.puts inspector[:description]
|
18
|
-
output.puts
|
19
|
-
end
|
20
|
-
end
|
12
|
+
List the inspector procs available to print return values. You can use
|
13
|
+
change-inspector to switch between them.
|
14
|
+
BANNER
|
21
15
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
16
|
+
def process
|
17
|
+
output.puts heading("Available inspectors") + "\n"
|
18
|
+
inspector_map.each do |name, inspector|
|
19
|
+
output.write "Name: #{bold(name)}"
|
20
|
+
output.puts selected_inspector?(inspector) ? selected_text : ""
|
21
|
+
output.puts inspector[:description]
|
22
|
+
output.puts
|
23
|
+
end
|
24
|
+
end
|
26
25
|
|
27
|
-
|
28
|
-
text.red " (selected) "
|
29
|
-
end
|
26
|
+
private
|
30
27
|
|
31
|
-
|
32
|
-
|
28
|
+
def inspector_map
|
29
|
+
Pry::Inspector::MAP
|
30
|
+
end
|
31
|
+
|
32
|
+
def selected_text
|
33
|
+
red " (selected) "
|
34
|
+
end
|
35
|
+
|
36
|
+
def selected_inspector?(inspector)
|
37
|
+
pry_instance.print == inspector[:value]
|
38
|
+
end
|
39
|
+
Pry::Commands.add_command(self)
|
40
|
+
end
|
33
41
|
end
|
34
|
-
Pry::Commands.add_command(self)
|
35
42
|
end
|
@@ -1,47 +1,75 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Pry
|
4
|
-
class Command
|
5
|
-
class
|
6
|
-
|
4
|
+
class Command
|
5
|
+
class Ls < Pry::ClassCommand
|
6
|
+
class Constants < Pry::Command::Ls::Formatter
|
7
|
+
DEPRECATED_CONSTANTS = %i[
|
8
|
+
Data Fixnum Bignum TimeoutError NIL FALSE TRUE
|
9
|
+
].tap do |constants|
|
10
|
+
constants << :JavaPackageModuleTemplate if Helpers::Platform.jruby?
|
11
|
+
end
|
12
|
+
include Pry::Command::Ls::Interrogatable
|
7
13
|
|
14
|
+
def initialize(interrogatee, no_user_opts, opts, pry_instance)
|
15
|
+
super(pry_instance)
|
16
|
+
@interrogatee = interrogatee
|
17
|
+
@no_user_opts = no_user_opts
|
18
|
+
@default_switch = opts[:constants]
|
19
|
+
@verbose_switch = opts[:verbose]
|
20
|
+
@dconstants = opts.dconstants?
|
21
|
+
end
|
8
22
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
@no_user_opts = no_user_opts
|
13
|
-
@default_switch = opts[:constants]
|
14
|
-
@verbose_switch = opts[:verbose]
|
15
|
-
end
|
23
|
+
def correct_opts?
|
24
|
+
super || (@no_user_opts && interrogating_a_module?)
|
25
|
+
end
|
16
26
|
|
17
|
-
|
18
|
-
|
19
|
-
|
27
|
+
def output_self
|
28
|
+
mod = interrogatee_mod
|
29
|
+
constants = WrappedModule.new(mod).constants(@verbose_switch)
|
30
|
+
output_section('constants', grep.regexp[format(mod, constants)])
|
31
|
+
end
|
20
32
|
|
21
|
-
|
22
|
-
mod = interrogatee_mod
|
23
|
-
constants = WrappedModule.new(mod).constants(@verbose_switch)
|
24
|
-
output_section('constants', grep.regexp[format(mod, constants)])
|
25
|
-
end
|
33
|
+
private
|
26
34
|
|
27
|
-
|
35
|
+
def show_deprecated_constants?
|
36
|
+
@dconstants == true
|
37
|
+
end
|
28
38
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
39
|
+
def format(mod, constants)
|
40
|
+
constants.sort_by(&:downcase).map do |name|
|
41
|
+
if Object.respond_to?(:deprecate_constant) &&
|
42
|
+
DEPRECATED_CONSTANTS.include?(name) &&
|
43
|
+
!show_deprecated_constants?
|
44
|
+
next
|
45
|
+
end
|
46
|
+
|
47
|
+
if (const = (begin
|
48
|
+
!mod.autoload?(name) && (mod.const_get(name) || true)
|
49
|
+
rescue StandardError
|
50
|
+
nil
|
51
|
+
end))
|
52
|
+
if begin
|
53
|
+
const < Exception
|
54
|
+
rescue StandardError
|
55
|
+
false
|
56
|
+
end
|
57
|
+
color(:exception_constant, name)
|
58
|
+
elsif begin
|
59
|
+
mod.const_get(name).is_a?(Module)
|
60
|
+
rescue StandardError
|
61
|
+
false
|
62
|
+
end
|
63
|
+
color(:class_constant, name)
|
64
|
+
else
|
65
|
+
color(:constant, name)
|
66
|
+
end
|
36
67
|
else
|
37
|
-
color(:
|
68
|
+
color(:unloaded_constant, name)
|
38
69
|
end
|
39
|
-
else
|
40
|
-
color(:unloaded_constant, name)
|
41
70
|
end
|
42
71
|
end
|
43
72
|
end
|
44
|
-
|
45
73
|
end
|
46
74
|
end
|
47
75
|
end
|
@@ -1,49 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Pry
|
2
|
-
class Command
|
3
|
-
class
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
def initialize(_pry_)
|
8
|
-
@_pry_ = _pry_
|
9
|
-
@target = _pry_.current_context
|
10
|
-
end
|
4
|
+
class Command
|
5
|
+
class Ls < Pry::ClassCommand
|
6
|
+
class Formatter
|
7
|
+
attr_writer :grep
|
8
|
+
attr_reader :pry_instance
|
11
9
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
10
|
+
def initialize(pry_instance)
|
11
|
+
@pry_instance = pry_instance
|
12
|
+
@target = pry_instance.current_context
|
13
|
+
@default_switch = nil
|
14
|
+
end
|
16
15
|
|
17
|
-
|
16
|
+
def write_out
|
17
|
+
return false unless correct_opts?
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
end
|
19
|
+
output_self
|
20
|
+
end
|
22
21
|
|
23
|
-
|
24
|
-
# Outputs nothing if the section would be empty.
|
25
|
-
def output_section(heading, body)
|
26
|
-
return '' if body.compact.empty?
|
27
|
-
fancy_heading = Pry::Helpers::Text.bold(color(:heading, heading))
|
28
|
-
Pry::Helpers.tablify_or_one_line(fancy_heading, body)
|
29
|
-
end
|
22
|
+
private
|
30
23
|
|
31
|
-
|
32
|
-
|
33
|
-
|
24
|
+
def color(type, str)
|
25
|
+
Pry::Helpers::Text.send pry_instance.config.ls.send("#{type}_color"), str
|
26
|
+
end
|
34
27
|
|
35
|
-
|
36
|
-
|
37
|
-
|
28
|
+
# Add a new section to the output.
|
29
|
+
# Outputs nothing if the section would be empty.
|
30
|
+
def output_section(heading, body)
|
31
|
+
return '' if body.compact.empty?
|
38
32
|
|
39
|
-
|
40
|
-
|
41
|
-
|
33
|
+
fancy_heading = Pry::Helpers::Text.bold(color(:heading, heading))
|
34
|
+
Pry::Helpers.tablify_or_one_line(fancy_heading, body, @pry_instance)
|
35
|
+
end
|
42
36
|
|
43
|
-
|
44
|
-
|
45
|
-
|
37
|
+
def format_value(value)
|
38
|
+
Pry::ColorPrinter.pp(value, ''.dup)
|
39
|
+
end
|
46
40
|
|
41
|
+
def correct_opts?
|
42
|
+
@default_switch
|
43
|
+
end
|
44
|
+
|
45
|
+
def output_self
|
46
|
+
raise NotImplementedError
|
47
|
+
end
|
48
|
+
|
49
|
+
def grep
|
50
|
+
@grep || proc { |x| x }
|
51
|
+
end
|
52
|
+
end
|
47
53
|
end
|
48
54
|
end
|
49
55
|
end
|
@@ -1,48 +1,50 @@
|
|
1
|
-
|
2
|
-
class Command::Ls < Pry::ClassCommand
|
3
|
-
class Globals < Pry::Command::Ls::Formatter
|
1
|
+
# frozen_string_literal: true
|
4
2
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
3
|
+
class Pry
|
4
|
+
class Command
|
5
|
+
class Ls < Pry::ClassCommand
|
6
|
+
class Globals < Pry::Command::Ls::Formatter
|
7
|
+
# Taken from "puts global_variables.inspect".
|
8
|
+
BUILTIN_GLOBALS =
|
9
|
+
%w[$" $$ $* $, $-0 $-F $-I $-K $-W $-a $-d $-i $-l $-p $-v $-w $. $/ $\\
|
10
|
+
$: $; $< $= $> $0 $ARGV $CONSOLE $DEBUG $DEFAULT_INPUT $DEFAULT_OUTPUT
|
11
|
+
$FIELD_SEPARATOR $FILENAME $FS $IGNORECASE $INPUT_LINE_NUMBER
|
12
|
+
$INPUT_RECORD_SEPARATOR $KCODE $LOADED_FEATURES $LOAD_PATH $NR $OFS
|
13
|
+
$ORS $OUTPUT_FIELD_SEPARATOR $OUTPUT_RECORD_SEPARATOR $PID $PROCESS_ID
|
14
|
+
$PROGRAM_NAME $RS $VERBOSE $deferr $defout $stderr $stdin $stdout].freeze
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
# `$SAFE` and `$?` are thread-local, the exception stuff only works in a
|
17
|
+
# rescue clause, everything else is basically a local variable with a `$`
|
18
|
+
# in its name.
|
19
|
+
PSEUDO_GLOBALS =
|
20
|
+
%w[$! $' $& $` $@ $? $+ $_ $~ $1 $2 $3 $4 $5 $6 $7 $8 $9
|
21
|
+
$CHILD_STATUS $SAFE $ERROR_INFO $ERROR_POSITION $LAST_MATCH_INFO
|
22
|
+
$LAST_PAREN_MATCH $LAST_READ_LINE $MATCH $POSTMATCH $PREMATCH].freeze
|
21
23
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
24
|
+
def initialize(opts, pry_instance)
|
25
|
+
super(pry_instance)
|
26
|
+
@default_switch = opts[:globals]
|
27
|
+
end
|
26
28
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
29
|
+
def output_self
|
30
|
+
variables = format(@target.eval('global_variables'))
|
31
|
+
output_section('global variables', grep.regexp[variables])
|
32
|
+
end
|
31
33
|
|
32
|
-
|
34
|
+
private
|
33
35
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
36
|
+
def format(globals)
|
37
|
+
globals.map(&:to_s).sort_by(&:downcase).map do |name|
|
38
|
+
if PSEUDO_GLOBALS.include?(name)
|
39
|
+
color(:pseudo_global, name)
|
40
|
+
elsif BUILTIN_GLOBALS.include?(name)
|
41
|
+
color(:builtin_global, name)
|
42
|
+
else
|
43
|
+
color(:global_var, name)
|
44
|
+
end
|
42
45
|
end
|
43
46
|
end
|
44
47
|
end
|
45
|
-
|
46
48
|
end
|
47
49
|
end
|
48
50
|
end
|
data/lib/pry/commands/ls/grep.rb
CHANGED
@@ -1,21 +1,23 @@
|
|
1
|
-
|
2
|
-
class Command::Ls < Pry::ClassCommand
|
3
|
-
class Grep
|
1
|
+
# frozen_string_literal: true
|
4
2
|
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
class Pry
|
4
|
+
class Command
|
5
|
+
class Ls < Pry::ClassCommand
|
6
|
+
class Grep
|
7
|
+
def initialize(grep_regexp)
|
8
|
+
@grep_regexp = grep_regexp
|
9
|
+
end
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
def regexp
|
12
|
+
proc { |x|
|
13
|
+
if x.instance_of?(Array)
|
14
|
+
x.grep(@grep_regexp)
|
15
|
+
else
|
16
|
+
x =~ @grep_regexp
|
17
|
+
end
|
18
|
+
}
|
19
|
+
end
|
17
20
|
end
|
18
|
-
|
19
21
|
end
|
20
22
|
end
|
21
23
|
end
|
@@ -1,39 +1,40 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Pry
|
4
|
-
class Command
|
5
|
-
class
|
6
|
-
|
4
|
+
class Command
|
5
|
+
class Ls < Pry::ClassCommand
|
6
|
+
class InstanceVars < Pry::Command::Ls::Formatter
|
7
|
+
include Pry::Command::Ls::Interrogatable
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
def initialize(interrogatee, no_user_opts, opts, pry_instance)
|
10
|
+
super(pry_instance)
|
11
|
+
@interrogatee = interrogatee
|
12
|
+
@no_user_opts = no_user_opts
|
13
|
+
@default_switch = opts[:ivars]
|
14
|
+
end
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
16
|
+
def correct_opts?
|
17
|
+
super || @no_user_opts
|
18
|
+
end
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
20
|
+
def output_self
|
21
|
+
ivars = if Object === @interrogatee # rubocop:disable Style/CaseEquality
|
22
|
+
Pry::Method.safe_send(@interrogatee, :instance_variables)
|
23
|
+
else
|
24
|
+
[] # TODO: BasicObject support
|
25
|
+
end
|
26
|
+
kvars = Pry::Method.safe_send(interrogatee_mod, :class_variables)
|
27
|
+
ivars_out = output_section('instance variables', format(:instance_var, ivars))
|
28
|
+
kvars_out = output_section('class variables', format(:class_var, kvars))
|
29
|
+
ivars_out + kvars_out
|
30
|
+
end
|
30
31
|
|
31
|
-
|
32
|
+
private
|
32
33
|
|
33
|
-
|
34
|
-
|
34
|
+
def format(type, vars)
|
35
|
+
vars.sort_by { |var| var.to_s.downcase }.map { |var| color(type, var) }
|
36
|
+
end
|
35
37
|
end
|
36
|
-
|
37
38
|
end
|
38
39
|
end
|
39
40
|
end
|
@@ -1,18 +1,24 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
class Pry
|
4
|
+
class Command
|
5
|
+
class Ls < Pry::ClassCommand
|
6
|
+
module Interrogatable
|
7
|
+
private
|
4
8
|
|
5
|
-
|
6
|
-
|
7
|
-
|
9
|
+
def interrogating_a_module?
|
10
|
+
Module === @interrogatee # rubocop:disable Style/CaseEquality
|
11
|
+
end
|
8
12
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
13
|
+
def interrogatee_mod
|
14
|
+
if interrogating_a_module?
|
15
|
+
@interrogatee
|
16
|
+
else
|
17
|
+
singleton = Pry::Method.singleton_class_of(@interrogatee)
|
18
|
+
singleton.ancestors.grep(::Class).reject { |c| c == singleton }.first
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
15
22
|
end
|
16
23
|
end
|
17
|
-
|
18
24
|
end
|