super-smart-mod 0.0.1

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.
Files changed (143) hide show
  1. checksums.yaml +7 -0
  2. data/pry-0.16.0/CHANGELOG.md +1211 -0
  3. data/pry-0.16.0/LICENSE +25 -0
  4. data/pry-0.16.0/README.md +469 -0
  5. data/pry-0.16.0/bin/pry +13 -0
  6. data/pry-0.16.0/lib/pry/basic_object.rb +10 -0
  7. data/pry-0.16.0/lib/pry/block_command.rb +22 -0
  8. data/pry-0.16.0/lib/pry/class_command.rb +194 -0
  9. data/pry-0.16.0/lib/pry/cli.rb +211 -0
  10. data/pry-0.16.0/lib/pry/code/code_file.rb +114 -0
  11. data/pry-0.16.0/lib/pry/code/code_range.rb +73 -0
  12. data/pry-0.16.0/lib/pry/code/loc.rb +105 -0
  13. data/pry-0.16.0/lib/pry/code.rb +357 -0
  14. data/pry-0.16.0/lib/pry/code_object.rb +197 -0
  15. data/pry-0.16.0/lib/pry/color_printer.rb +66 -0
  16. data/pry-0.16.0/lib/pry/command.rb +520 -0
  17. data/pry-0.16.0/lib/pry/command_set.rb +418 -0
  18. data/pry-0.16.0/lib/pry/command_state.rb +36 -0
  19. data/pry-0.16.0/lib/pry/commands/amend_line.rb +103 -0
  20. data/pry-0.16.0/lib/pry/commands/bang.rb +24 -0
  21. data/pry-0.16.0/lib/pry/commands/bang_pry.rb +21 -0
  22. data/pry-0.16.0/lib/pry/commands/cat/abstract_formatter.rb +32 -0
  23. data/pry-0.16.0/lib/pry/commands/cat/exception_formatter.rb +90 -0
  24. data/pry-0.16.0/lib/pry/commands/cat/file_formatter.rb +77 -0
  25. data/pry-0.16.0/lib/pry/commands/cat/input_expression_formatter.rb +48 -0
  26. data/pry-0.16.0/lib/pry/commands/cat.rb +70 -0
  27. data/pry-0.16.0/lib/pry/commands/cd.rb +48 -0
  28. data/pry-0.16.0/lib/pry/commands/change_inspector.rb +34 -0
  29. data/pry-0.16.0/lib/pry/commands/change_prompt.rb +51 -0
  30. data/pry-0.16.0/lib/pry/commands/clear_screen.rb +20 -0
  31. data/pry-0.16.0/lib/pry/commands/code_collector.rb +182 -0
  32. data/pry-0.16.0/lib/pry/commands/disable_pry.rb +31 -0
  33. data/pry-0.16.0/lib/pry/commands/easter_eggs.rb +101 -0
  34. data/pry-0.16.0/lib/pry/commands/edit/exception_patcher.rb +29 -0
  35. data/pry-0.16.0/lib/pry/commands/edit/file_and_line_locator.rb +47 -0
  36. data/pry-0.16.0/lib/pry/commands/edit.rb +225 -0
  37. data/pry-0.16.0/lib/pry/commands/exit.rb +47 -0
  38. data/pry-0.16.0/lib/pry/commands/exit_all.rb +33 -0
  39. data/pry-0.16.0/lib/pry/commands/exit_program.rb +27 -0
  40. data/pry-0.16.0/lib/pry/commands/find_method.rb +199 -0
  41. data/pry-0.16.0/lib/pry/commands/fix_indent.rb +23 -0
  42. data/pry-0.16.0/lib/pry/commands/help.rb +171 -0
  43. data/pry-0.16.0/lib/pry/commands/hist.rb +182 -0
  44. data/pry-0.16.0/lib/pry/commands/import_set.rb +27 -0
  45. data/pry-0.16.0/lib/pry/commands/jump_to.rb +33 -0
  46. data/pry-0.16.0/lib/pry/commands/list_inspectors.rb +42 -0
  47. data/pry-0.16.0/lib/pry/commands/ls/config.rb +54 -0
  48. data/pry-0.16.0/lib/pry/commands/ls/constants.rb +75 -0
  49. data/pry-0.16.0/lib/pry/commands/ls/formatter.rb +55 -0
  50. data/pry-0.16.0/lib/pry/commands/ls/globals.rb +50 -0
  51. data/pry-0.16.0/lib/pry/commands/ls/grep.rb +23 -0
  52. data/pry-0.16.0/lib/pry/commands/ls/instance_vars.rb +40 -0
  53. data/pry-0.16.0/lib/pry/commands/ls/interrogatable.rb +24 -0
  54. data/pry-0.16.0/lib/pry/commands/ls/jruby_hacks.rb +55 -0
  55. data/pry-0.16.0/lib/pry/commands/ls/local_names.rb +37 -0
  56. data/pry-0.16.0/lib/pry/commands/ls/local_vars.rb +47 -0
  57. data/pry-0.16.0/lib/pry/commands/ls/ls_entity.rb +65 -0
  58. data/pry-0.16.0/lib/pry/commands/ls/methods.rb +55 -0
  59. data/pry-0.16.0/lib/pry/commands/ls/methods_helper.rb +50 -0
  60. data/pry-0.16.0/lib/pry/commands/ls/self_methods.rb +34 -0
  61. data/pry-0.16.0/lib/pry/commands/ls.rb +114 -0
  62. data/pry-0.16.0/lib/pry/commands/nesting.rb +29 -0
  63. data/pry-0.16.0/lib/pry/commands/play.rb +113 -0
  64. data/pry-0.16.0/lib/pry/commands/pry_backtrace.rb +30 -0
  65. data/pry-0.16.0/lib/pry/commands/pry_version.rb +21 -0
  66. data/pry-0.16.0/lib/pry/commands/raise_up.rb +38 -0
  67. data/pry-0.16.0/lib/pry/commands/reload_code.rb +74 -0
  68. data/pry-0.16.0/lib/pry/commands/reset.rb +22 -0
  69. data/pry-0.16.0/lib/pry/commands/ri.rb +75 -0
  70. data/pry-0.16.0/lib/pry/commands/save_file.rb +63 -0
  71. data/pry-0.16.0/lib/pry/commands/shell_command.rb +75 -0
  72. data/pry-0.16.0/lib/pry/commands/shell_mode.rb +30 -0
  73. data/pry-0.16.0/lib/pry/commands/show_doc.rb +84 -0
  74. data/pry-0.16.0/lib/pry/commands/show_info.rb +234 -0
  75. data/pry-0.16.0/lib/pry/commands/show_input.rb +22 -0
  76. data/pry-0.16.0/lib/pry/commands/show_source.rb +57 -0
  77. data/pry-0.16.0/lib/pry/commands/stat.rb +44 -0
  78. data/pry-0.16.0/lib/pry/commands/switch_to.rb +29 -0
  79. data/pry-0.16.0/lib/pry/commands/toggle_color.rb +28 -0
  80. data/pry-0.16.0/lib/pry/commands/watch_expression/expression.rb +43 -0
  81. data/pry-0.16.0/lib/pry/commands/watch_expression.rb +108 -0
  82. data/pry-0.16.0/lib/pry/commands/whereami.rb +205 -0
  83. data/pry-0.16.0/lib/pry/commands/wtf.rb +95 -0
  84. data/pry-0.16.0/lib/pry/config/attributable.rb +22 -0
  85. data/pry-0.16.0/lib/pry/config/lazy_value.rb +29 -0
  86. data/pry-0.16.0/lib/pry/config/memoized_value.rb +34 -0
  87. data/pry-0.16.0/lib/pry/config/value.rb +24 -0
  88. data/pry-0.16.0/lib/pry/config.rb +321 -0
  89. data/pry-0.16.0/lib/pry/control_d_handler.rb +28 -0
  90. data/pry-0.16.0/lib/pry/core_extensions.rb +144 -0
  91. data/pry-0.16.0/lib/pry/editor.rb +157 -0
  92. data/pry-0.16.0/lib/pry/env.rb +18 -0
  93. data/pry-0.16.0/lib/pry/exception_handler.rb +48 -0
  94. data/pry-0.16.0/lib/pry/exceptions.rb +73 -0
  95. data/pry-0.16.0/lib/pry/forwardable.rb +27 -0
  96. data/pry-0.16.0/lib/pry/helpers/base_helpers.rb +71 -0
  97. data/pry-0.16.0/lib/pry/helpers/command_helpers.rb +146 -0
  98. data/pry-0.16.0/lib/pry/helpers/documentation_helpers.rb +84 -0
  99. data/pry-0.16.0/lib/pry/helpers/options_helpers.rb +34 -0
  100. data/pry-0.16.0/lib/pry/helpers/platform.rb +55 -0
  101. data/pry-0.16.0/lib/pry/helpers/table.rb +121 -0
  102. data/pry-0.16.0/lib/pry/helpers/text.rb +118 -0
  103. data/pry-0.16.0/lib/pry/helpers.rb +8 -0
  104. data/pry-0.16.0/lib/pry/history.rb +153 -0
  105. data/pry-0.16.0/lib/pry/hooks.rb +180 -0
  106. data/pry-0.16.0/lib/pry/indent.rb +414 -0
  107. data/pry-0.16.0/lib/pry/input/simple_stdio.rb +13 -0
  108. data/pry-0.16.0/lib/pry/input_completer.rb +283 -0
  109. data/pry-0.16.0/lib/pry/input_lock.rb +129 -0
  110. data/pry-0.16.0/lib/pry/inspector.rb +39 -0
  111. data/pry-0.16.0/lib/pry/last_exception.rb +61 -0
  112. data/pry-0.16.0/lib/pry/method/disowned.rb +67 -0
  113. data/pry-0.16.0/lib/pry/method/patcher.rb +131 -0
  114. data/pry-0.16.0/lib/pry/method/weird_method_locator.rb +222 -0
  115. data/pry-0.16.0/lib/pry/method.rb +599 -0
  116. data/pry-0.16.0/lib/pry/object_path.rb +91 -0
  117. data/pry-0.16.0/lib/pry/output.rb +136 -0
  118. data/pry-0.16.0/lib/pry/pager.rb +249 -0
  119. data/pry-0.16.0/lib/pry/prompt.rb +214 -0
  120. data/pry-0.16.0/lib/pry/pry_class.rb +371 -0
  121. data/pry-0.16.0/lib/pry/pry_instance.rb +663 -0
  122. data/pry-0.16.0/lib/pry/repl.rb +326 -0
  123. data/pry-0.16.0/lib/pry/repl_file_loader.rb +79 -0
  124. data/pry-0.16.0/lib/pry/ring.rb +89 -0
  125. data/pry-0.16.0/lib/pry/slop/LICENSE +20 -0
  126. data/pry-0.16.0/lib/pry/slop/commands.rb +190 -0
  127. data/pry-0.16.0/lib/pry/slop/option.rb +210 -0
  128. data/pry-0.16.0/lib/pry/slop.rb +672 -0
  129. data/pry-0.16.0/lib/pry/syntax_highlighter.rb +26 -0
  130. data/pry-0.16.0/lib/pry/system_command_handler.rb +17 -0
  131. data/pry-0.16.0/lib/pry/testable/evalable.rb +24 -0
  132. data/pry-0.16.0/lib/pry/testable/mockable.rb +22 -0
  133. data/pry-0.16.0/lib/pry/testable/pry_tester.rb +88 -0
  134. data/pry-0.16.0/lib/pry/testable/utility.rb +34 -0
  135. data/pry-0.16.0/lib/pry/testable/variables.rb +52 -0
  136. data/pry-0.16.0/lib/pry/testable.rb +68 -0
  137. data/pry-0.16.0/lib/pry/version.rb +5 -0
  138. data/pry-0.16.0/lib/pry/warning.rb +20 -0
  139. data/pry-0.16.0/lib/pry/wrapped_module/candidate.rb +145 -0
  140. data/pry-0.16.0/lib/pry/wrapped_module.rb +382 -0
  141. data/pry-0.16.0/lib/pry.rb +148 -0
  142. data/super-smart-mod.gemspec +12 -0
  143. metadata +182 -0
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'forwardable'
4
+
5
+ class Pry
6
+ class Command
7
+ class Ls < Pry::ClassCommand
8
+ class Config
9
+ extend Forwardable
10
+
11
+ DEFAULT_OPTIONS = {
12
+ heading_color: :bright_blue,
13
+ public_method_color: :default,
14
+ private_method_color: :blue,
15
+ protected_method_color: :blue,
16
+ method_missing_color: :bright_red,
17
+ local_var_color: :yellow,
18
+ pry_var_color: :default, # e.g. _, pry_instance, _file_
19
+ instance_var_color: :blue, # e.g. @foo
20
+ class_var_color: :bright_blue, # e.g. @@foo
21
+ global_var_color: :default, # e.g. $CODERAY_DEBUG, $eventmachine_library
22
+ builtin_global_color: :cyan, # e.g. $stdin, $-w, $PID
23
+ pseudo_global_color: :cyan, # e.g. $~, $1..$9, $LAST_MATCH_INFO
24
+ constant_color: :default, # e.g. VERSION, ARGF
25
+ class_constant_color: :blue, # e.g. Object, Kernel
26
+ exception_constant_color: :magenta, # e.g. Exception, RuntimeError
27
+ unloaded_constant_color: :yellow, # Constant still in .autoload? state
28
+ separator: " ",
29
+ ceiling: [Object, Module, Class]
30
+ }.freeze
31
+
32
+ DEFAULT_OPTIONS.each_key do |key|
33
+ define_method key do
34
+ @config[key]
35
+ end
36
+
37
+ define_method "#{key}=" do |value|
38
+ @config[key] = value
39
+ end
40
+ end
41
+
42
+ def_delegators :@config, :[], :[]=, :each, :each_pair, :values, :keys, :to_a
43
+
44
+ def initialize(config)
45
+ @config = config
46
+ end
47
+
48
+ def self.default
49
+ new(DEFAULT_OPTIONS.dup)
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Pry
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
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
22
+
23
+ def correct_opts?
24
+ super || (@no_user_opts && interrogating_a_module?)
25
+ end
26
+
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
32
+
33
+ private
34
+
35
+ def show_deprecated_constants?
36
+ @dconstants == true
37
+ end
38
+
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
67
+ else
68
+ color(:unloaded_constant, name)
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Pry
4
+ class Command
5
+ class Ls < Pry::ClassCommand
6
+ class Formatter
7
+ attr_writer :grep
8
+ attr_reader :pry_instance
9
+
10
+ def initialize(pry_instance)
11
+ @pry_instance = pry_instance
12
+ @target = pry_instance.current_context
13
+ @default_switch = nil
14
+ end
15
+
16
+ def write_out
17
+ return false unless correct_opts?
18
+
19
+ output_self
20
+ end
21
+
22
+ private
23
+
24
+ def color(type, str)
25
+ Pry::Helpers::Text.send pry_instance.config.ls.send("#{type}_color"), str
26
+ end
27
+
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?
32
+
33
+ fancy_heading = Pry::Helpers::Text.bold(color(:heading, heading))
34
+ Pry::Helpers.tablify_or_one_line(fancy_heading, body, @pry_instance)
35
+ end
36
+
37
+ def format_value(value)
38
+ Pry::ColorPrinter.pp(value, ''.dup)
39
+ end
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
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
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
15
+
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
23
+
24
+ def initialize(opts, pry_instance)
25
+ super(pry_instance)
26
+ @default_switch = opts[:globals]
27
+ end
28
+
29
+ def output_self
30
+ variables = format(@target.eval('global_variables'))
31
+ output_section('global variables', grep.regexp[variables])
32
+ end
33
+
34
+ private
35
+
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
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
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
10
+
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
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Pry
4
+ class Command
5
+ class Ls < Pry::ClassCommand
6
+ class InstanceVars < Pry::Command::Ls::Formatter
7
+ include Pry::Command::Ls::Interrogatable
8
+
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
15
+
16
+ def correct_opts?
17
+ super || @no_user_opts
18
+ end
19
+
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
31
+
32
+ private
33
+
34
+ def format(type, vars)
35
+ vars.sort_by { |var| var.to_s.downcase }.map { |var| color(type, var) }
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Pry
4
+ class Command
5
+ class Ls < Pry::ClassCommand
6
+ module Interrogatable
7
+ private
8
+
9
+ def interrogating_a_module?
10
+ Module === @interrogatee # rubocop:disable Style/CaseEquality
11
+ end
12
+
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
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Pry
4
+ class Command
5
+ class Ls < Pry::ClassCommand
6
+ module JRubyHacks
7
+ private
8
+
9
+ # JRuby creates lots of aliases for methods imported from java in an attempt
10
+ # to make life easier for ruby programmers. (e.g. getFooBar becomes
11
+ # get_foo_bar and foo_bar, and maybe foo_bar? if it returns a Boolean). The
12
+ # full transformations are in the assignAliases method of:
13
+ # https://github.com/jruby/jruby/blob/master/src/org/jruby/javasupport/JavaClass.java
14
+ #
15
+ # This has the unfortunate side-effect of making the output of ls even more
16
+ # incredibly verbose than it normally would be for these objects; and so we
17
+ # filter out all but the nicest of these aliases here.
18
+ #
19
+ # TODO: This is a little bit vague, better heuristics could be used.
20
+ # JRuby also has a lot of scala-specific logic, which we don't copy.
21
+ def trim_jruby_aliases(methods)
22
+ grouped = methods.group_by do |m|
23
+ m.name.sub(/\A(is|get|set)(?=[A-Z_])/, '').gsub(/[_?=]/, '').downcase
24
+ end
25
+
26
+ grouped.flat_map do |_key, values|
27
+ values = values.sort_by do |m|
28
+ rubbishness(m.name)
29
+ end
30
+
31
+ found = []
32
+ values.select do |x|
33
+ (found.none? { |y| x == y }) && found << x
34
+ end
35
+ end
36
+ end
37
+
38
+ # When removing jruby aliases, we want to keep the alias that is
39
+ # "least rubbish" according to this metric.
40
+ def rubbishness(name)
41
+ name.each_char.map do |x|
42
+ case x
43
+ when /[A-Z]/
44
+ 1
45
+ when '?', '=', '!'
46
+ -2
47
+ else
48
+ 0
49
+ end
50
+ end.inject(&:+) + (name.size / 100.0)
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Pry
4
+ class Command
5
+ class Ls < Pry::ClassCommand
6
+ class LocalNames < Pry::Command::Ls::Formatter
7
+ def initialize(no_user_opts, args, pry_instance)
8
+ super(pry_instance)
9
+ @no_user_opts = no_user_opts
10
+ @args = args
11
+ @sticky_locals = pry_instance.sticky_locals
12
+ end
13
+
14
+ def correct_opts?
15
+ super || (@no_user_opts && @args.empty?)
16
+ end
17
+
18
+ def output_self
19
+ local_vars = grep.regexp[@target.eval('local_variables')]
20
+ output_section('locals', format(local_vars))
21
+ end
22
+
23
+ private
24
+
25
+ def format(locals)
26
+ locals.sort_by(&:downcase).map do |name|
27
+ if @sticky_locals.include?(name.to_sym)
28
+ color(:pry_var, name)
29
+ else
30
+ color(:local_var, name)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Pry
4
+ class Command
5
+ class Ls < Pry::ClassCommand
6
+ class LocalVars < Pry::Command::Ls::Formatter
7
+ def initialize(opts, pry_instance)
8
+ super(pry_instance)
9
+ @default_switch = opts[:locals]
10
+ @sticky_locals = pry_instance.sticky_locals
11
+ end
12
+
13
+ def output_self
14
+ locals = @target.eval('local_variables').reject do |e|
15
+ @sticky_locals.key?(e.to_sym)
16
+ end
17
+ name_value_pairs = locals.map do |name|
18
+ [name, @target.eval(name.to_s)]
19
+ end
20
+ format(name_value_pairs).join('')
21
+ end
22
+
23
+ private
24
+
25
+ def format(name_value_pairs)
26
+ sorted = name_value_pairs.sort_by do |_name, value|
27
+ value.to_s.size
28
+ end
29
+ sorted.reverse.map do |name, value|
30
+ colorized_assignment_style(name, format_value(value))
31
+ end
32
+ end
33
+
34
+ def colorized_assignment_style(lhs, rhs, desired_width = 7)
35
+ colorized_lhs = color(:local_var, lhs)
36
+ color_escape_padding = colorized_lhs.size - lhs.size
37
+ pad = desired_width + color_escape_padding
38
+ Kernel.format(
39
+ "%-#{pad}<name>s = %<value>s",
40
+ name: color(:local_var, colorized_lhs),
41
+ value: rhs
42
+ )
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Pry
4
+ class Command
5
+ class Ls < Pry::ClassCommand
6
+ class LsEntity
7
+ attr_reader :pry_instance
8
+
9
+ def initialize(opts)
10
+ @interrogatee = opts[:interrogatee]
11
+ @no_user_opts = opts[:no_user_opts]
12
+ @opts = opts[:opts]
13
+ @args = opts[:args]
14
+ @grep = Grep.new(Regexp.new(opts[:opts][:G] || '.'))
15
+ @pry_instance = opts.delete(:pry_instance)
16
+ end
17
+
18
+ def entities_table
19
+ entities.map(&:write_out).select { |o| o }.join('')
20
+ end
21
+
22
+ private
23
+
24
+ def grep(entity)
25
+ entity.tap { |o| o.grep = @grep }
26
+ end
27
+
28
+ def globals
29
+ grep Globals.new(@opts, pry_instance)
30
+ end
31
+
32
+ def constants
33
+ grep Constants.new(@interrogatee, @no_user_opts, @opts, pry_instance)
34
+ end
35
+
36
+ def methods
37
+ grep(Methods.new(@interrogatee, @no_user_opts, @opts, pry_instance))
38
+ end
39
+
40
+ def self_methods
41
+ grep SelfMethods.new(@interrogatee, @no_user_opts, @opts, pry_instance)
42
+ end
43
+
44
+ def instance_vars
45
+ grep InstanceVars.new(@interrogatee, @no_user_opts, @opts, pry_instance)
46
+ end
47
+
48
+ def local_names
49
+ grep LocalNames.new(@no_user_opts, @args, pry_instance)
50
+ end
51
+
52
+ def local_vars
53
+ LocalVars.new(@opts, pry_instance)
54
+ end
55
+
56
+ def entities
57
+ [
58
+ globals, constants, methods, self_methods, instance_vars, local_names,
59
+ local_vars
60
+ ]
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Pry
4
+ class Command
5
+ class Ls < Pry::ClassCommand
6
+ class Methods < 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
+ @default_switch = opts[:methods]
15
+ @instance_methods_switch = opts['instance-methods']
16
+ @ppp_switch = opts[:ppp]
17
+ @jruby_switch = opts['all-java']
18
+ @quiet_switch = opts[:quiet]
19
+ @verbose_switch = opts[:verbose]
20
+ end
21
+
22
+ def output_self
23
+ methods = all_methods.group_by(&:owner)
24
+ # Reverse the resolution order so that the most useful information
25
+ # appears right by the prompt.
26
+ resolution_order.take_while(&below_ceiling).reverse.map do |klass|
27
+ methods_here = (methods[klass] || []).select { |m| grep.regexp[m.name] }
28
+ heading = "#{Pry::WrappedModule.new(klass).method_prefix}methods"
29
+ output_section(heading, format(methods_here))
30
+ end.join('')
31
+ end
32
+
33
+ private
34
+
35
+ def correct_opts?
36
+ super || @instance_methods_switch || @ppp_switch || @no_user_opts
37
+ end
38
+
39
+ # Get a lambda that can be used with `take_while` to prevent over-eager
40
+ # traversal of the Object's ancestry graph.
41
+ def below_ceiling
42
+ ceiling = if @quiet_switch
43
+ [Pry::Method.safe_send(interrogatee_mod, :ancestors)[1]] +
44
+ pry_instance.config.ls.ceiling
45
+ elsif @verbose_switch
46
+ []
47
+ else
48
+ pry_instance.config.ls.ceiling.dup
49
+ end
50
+ ->(klass) { !ceiling.include?(klass) }
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -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