pry 0.11.3 → 0.12.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 +4 -4
- data/CHANGELOG.md +157 -1
- data/LICENSE +1 -1
- data/README.md +13 -30
- data/bin/pry +0 -4
- data/lib/pry/cli.rb +17 -24
- data/lib/pry/code/code_file.rb +5 -4
- data/lib/pry/code/code_range.rb +3 -3
- data/lib/pry/code/loc.rb +14 -8
- data/lib/pry/code.rb +6 -6
- data/lib/pry/code_object.rb +4 -4
- data/lib/pry/color_printer.rb +1 -0
- data/lib/pry/command.rb +36 -29
- data/lib/pry/command_set.rb +17 -52
- data/lib/pry/commands/amend_line.rb +3 -4
- data/lib/pry/commands/bang.rb +1 -1
- data/lib/pry/commands/cat/exception_formatter.rb +9 -8
- data/lib/pry/commands/cat/input_expression_formatter.rb +1 -1
- data/lib/pry/commands/cat.rb +7 -6
- data/lib/pry/commands/change_prompt.rb +29 -9
- data/lib/pry/commands/clear_screen.rb +14 -0
- data/lib/pry/commands/code_collector.rb +9 -9
- data/lib/pry/commands/easter_eggs.rb +3 -3
- data/lib/pry/commands/edit.rb +8 -7
- data/lib/pry/commands/exit.rb +2 -1
- data/lib/pry/commands/find_method.rb +11 -13
- data/lib/pry/commands/gem_cd.rb +1 -1
- data/lib/pry/commands/gem_install.rb +2 -2
- data/lib/pry/commands/gem_list.rb +2 -2
- data/lib/pry/commands/gem_open.rb +1 -1
- data/lib/pry/commands/gem_search.rb +2 -2
- data/lib/pry/commands/gem_stats.rb +83 -0
- data/lib/pry/commands/gist.rb +7 -6
- data/lib/pry/commands/help.rb +3 -3
- data/lib/pry/commands/hist.rb +9 -8
- data/lib/pry/commands/import_set.rb +2 -1
- data/lib/pry/commands/install_command.rb +7 -6
- data/lib/pry/commands/list_inspectors.rb +2 -2
- data/lib/pry/commands/ls/constants.rb +4 -4
- data/lib/pry/commands/ls/formatter.rb +3 -2
- data/lib/pry/commands/ls/globals.rb +0 -2
- data/lib/pry/commands/ls/grep.rb +0 -2
- data/lib/pry/commands/ls/instance_vars.rb +0 -1
- data/lib/pry/commands/ls/local_names.rb +0 -2
- data/lib/pry/commands/ls/local_vars.rb +0 -2
- data/lib/pry/commands/ls/ls_entity.rb +0 -1
- data/lib/pry/commands/ls/methods.rb +0 -3
- data/lib/pry/commands/ls/methods_helper.rb +1 -1
- data/lib/pry/commands/ls/self_methods.rb +0 -1
- data/lib/pry/commands/ls.rb +27 -30
- data/lib/pry/commands/play.rb +1 -2
- data/lib/pry/commands/pry_backtrace.rb +1 -1
- data/lib/pry/commands/raise_up.rb +2 -1
- data/lib/pry/commands/ri.rb +5 -4
- data/lib/pry/commands/shell_command.rb +3 -2
- data/lib/pry/commands/shell_mode.rb +6 -6
- data/lib/pry/commands/show_doc.rb +5 -7
- data/lib/pry/commands/show_info.rb +25 -18
- data/lib/pry/commands/show_source.rb +5 -2
- data/lib/pry/commands/stat.rb +1 -1
- data/lib/pry/commands/watch_expression.rb +9 -7
- data/lib/pry/commands/whereami.rb +4 -4
- data/lib/pry/commands/wtf.rb +15 -2
- data/lib/pry/config/behavior.rb +229 -205
- data/lib/pry/config/convenience.rb +24 -21
- data/lib/pry/config/default.rb +153 -143
- data/lib/pry/config/memoization.rb +41 -37
- data/lib/pry/config.rb +33 -9
- data/lib/pry/core_extensions.rb +4 -3
- data/lib/pry/editor.rb +5 -12
- data/lib/pry/exceptions.rb +0 -2
- data/lib/pry/helpers/base_helpers.rb +133 -4
- data/lib/pry/helpers/command_helpers.rb +5 -4
- data/lib/pry/helpers/documentation_helpers.rb +2 -2
- data/lib/pry/helpers/options_helpers.rb +5 -5
- data/lib/pry/helpers/platform.rb +58 -0
- data/lib/pry/helpers/table.rb +20 -15
- data/lib/pry/helpers/text.rb +3 -4
- data/lib/pry/helpers.rb +1 -0
- data/lib/pry/history.rb +21 -8
- data/lib/pry/hooks.rb +3 -3
- data/lib/pry/indent.rb +15 -17
- data/lib/pry/input_completer.rb +12 -7
- data/lib/pry/input_lock.rb +0 -2
- data/lib/pry/last_exception.rb +1 -1
- data/lib/pry/method/disowned.rb +2 -1
- data/lib/pry/method/patcher.rb +2 -2
- data/lib/pry/method/weird_method_locator.rb +7 -8
- data/lib/pry/method.rb +37 -31
- data/lib/pry/object_path.rb +5 -4
- data/lib/pry/output.rb +3 -2
- data/lib/pry/pager.rb +194 -186
- data/lib/pry/platform.rb +79 -81
- data/lib/pry/plugins.rb +7 -3
- data/lib/pry/prompt.rb +144 -25
- data/lib/pry/pry_class.rb +53 -29
- data/lib/pry/pry_instance.rb +88 -55
- data/lib/pry/repl.rb +33 -4
- data/lib/pry/repl_file_loader.rb +1 -2
- data/lib/pry/ring.rb +84 -0
- data/lib/pry/rubygem.rb +6 -6
- data/lib/pry/slop/commands.rb +3 -4
- data/lib/pry/slop/option.rb +19 -21
- data/lib/pry/slop.rb +17 -17
- data/lib/pry/terminal.rb +2 -1
- data/lib/pry/testable/mockable.rb +2 -2
- data/lib/pry/testable/pry_tester.rb +1 -1
- data/lib/pry/testable/utility.rb +2 -2
- data/lib/pry/testable/variables.rb +1 -1
- data/lib/pry/version.rb +1 -1
- data/lib/pry/wrapped_module/candidate.rb +2 -2
- data/lib/pry/wrapped_module.rb +15 -15
- data/lib/pry.rb +17 -47
- metadata +8 -20
- data/lib/pry/commands/list_prompts.rb +0 -35
- data/lib/pry/commands/simple_prompt.rb +0 -22
- data/lib/pry/history_array.rb +0 -121
- data/lib/pry/rbx_path.rb +0 -22
@@ -1,8 +1,135 @@
|
|
1
1
|
module Pry::Helpers; end
|
2
|
+
|
3
|
+
# rubocop:disable Metrics/ModuleLength
|
2
4
|
module Pry::Helpers::BaseHelpers
|
3
|
-
include Pry::Platform
|
4
5
|
extend self
|
5
6
|
|
7
|
+
@mac_osx_warn = false
|
8
|
+
# @deprecated Use {Pry::Helpers::Platform.mac_osx?} instead.
|
9
|
+
def mac_osx?
|
10
|
+
unless @mac_osx_warn
|
11
|
+
loc = caller_locations(1..1).first
|
12
|
+
warn(
|
13
|
+
"#{loc.path}:#{loc.lineno}: warning: method BaseHelpers##{__method__} " \
|
14
|
+
"is deprecated. Use Pry:Helpers::Platform.#{__method__} instead"
|
15
|
+
)
|
16
|
+
@mac_osx_warn = true
|
17
|
+
end
|
18
|
+
Pry::Helpers::Platform.mac_osx?
|
19
|
+
end
|
20
|
+
|
21
|
+
@linux_warn = false
|
22
|
+
# @deprecated Use {Pry::Helpers::Platform.mac_osx?} instead.
|
23
|
+
def linux?
|
24
|
+
unless @linux_warn
|
25
|
+
loc = caller_locations(1..1).first
|
26
|
+
warn(
|
27
|
+
"#{loc.path}:#{loc.lineno}: warning: method BaseHelpers##{__method__} " \
|
28
|
+
"is deprecated. Use Pry:Helpers::Platform.#{__method__} instead"
|
29
|
+
)
|
30
|
+
@linux_warn = true
|
31
|
+
end
|
32
|
+
Pry::Helpers::Platform.linux?
|
33
|
+
end
|
34
|
+
|
35
|
+
@windows_warn = false
|
36
|
+
# @deprecated Use {Pry::Helpers::Platform.windows?} instead.
|
37
|
+
def windows?
|
38
|
+
unless @windows_warn
|
39
|
+
loc = caller_locations(1..1).first
|
40
|
+
warn(
|
41
|
+
"#{loc.path}:#{loc.lineno}: warning: method BaseHelpers##{__method__} " \
|
42
|
+
"is deprecated. Use Pry:Helpers::Platform.#{__method__} instead"
|
43
|
+
)
|
44
|
+
@windows_warn = true
|
45
|
+
end
|
46
|
+
Pry::Helpers::Platform.windows?
|
47
|
+
end
|
48
|
+
|
49
|
+
@windows_ansi_warn = false
|
50
|
+
# @deprecated Use {Pry::Helpers::Platform.windows_ansi?} instead.
|
51
|
+
def windows_ansi?
|
52
|
+
unless @windows_ansi_warn
|
53
|
+
loc = caller_locations(1..1).first
|
54
|
+
warn(
|
55
|
+
"#{loc.path}:#{loc.lineno}: warning: method BaseHelpers##{__method__} " \
|
56
|
+
"is deprecated. Use Pry:Helpers::Platform.#{__method__} instead"
|
57
|
+
)
|
58
|
+
@windows_ansi_warn = true
|
59
|
+
end
|
60
|
+
Pry::Helpers::Platform.windows_ansi?
|
61
|
+
end
|
62
|
+
|
63
|
+
@jruby_warn = false
|
64
|
+
# @deprecated Use {Pry::Helpers::Platform.jruby?} instead.
|
65
|
+
def jruby?
|
66
|
+
unless @jruby_warn
|
67
|
+
loc = caller_locations(1..1).first
|
68
|
+
warn(
|
69
|
+
"#{loc.path}:#{loc.lineno}: warning: method BaseHelpers##{__method__} " \
|
70
|
+
"is deprecated. Use Pry:Helpers::Platform.#{__method__} instead"
|
71
|
+
)
|
72
|
+
@jruby_warn = true
|
73
|
+
end
|
74
|
+
Pry::Helpers::Platform.jruby?
|
75
|
+
end
|
76
|
+
|
77
|
+
@jruby19_warn = false
|
78
|
+
# @deprecated Use {Pry::Helpers::Platform.jruby_19?} instead.
|
79
|
+
def jruby_19?
|
80
|
+
unless @jruby19_warn
|
81
|
+
loc = caller_locations(1..1).first
|
82
|
+
warn(
|
83
|
+
"#{loc.path}:#{loc.lineno}: warning: method BaseHelpers##{__method__} " \
|
84
|
+
"is deprecated. Use Pry:Helpers::Platform.#{__method__} instead"
|
85
|
+
)
|
86
|
+
@jruby19_warn = true
|
87
|
+
end
|
88
|
+
Pry::Helpers::Platform.jruby_19?
|
89
|
+
end
|
90
|
+
|
91
|
+
@mri_warn = false
|
92
|
+
# @deprecated Use {Pry::Helpers::Platform.mri?} instead.
|
93
|
+
def mri?
|
94
|
+
unless @mri_warn
|
95
|
+
loc = caller_locations(1..1).first
|
96
|
+
warn(
|
97
|
+
"#{loc.path}:#{loc.lineno}: warning: method BaseHelpers##{__method__} " \
|
98
|
+
"is deprecated. Use Pry:Helpers::Platform.#{__method__} instead"
|
99
|
+
)
|
100
|
+
@mri_warn = true
|
101
|
+
end
|
102
|
+
Pry::Helpers::Platform.mri?
|
103
|
+
end
|
104
|
+
|
105
|
+
@mri19_warn = false
|
106
|
+
# @deprecated Use {Pry::Helpers::Platform.mri_19?} instead.
|
107
|
+
def mri_19?
|
108
|
+
unless @mri19_warn
|
109
|
+
loc = caller_locations(1..1).first
|
110
|
+
warn(
|
111
|
+
"#{loc.path}:#{loc.lineno}: warning: method BaseHelpers##{__method__} " \
|
112
|
+
"is deprecated. Use Pry:Helpers::Platform.#{__method__} instead"
|
113
|
+
)
|
114
|
+
@mri19_warn = true
|
115
|
+
end
|
116
|
+
Pry::Helpers::Platform.mri_19?
|
117
|
+
end
|
118
|
+
|
119
|
+
@mri2_warn = false
|
120
|
+
# @deprecated Use {Pry::Helpers::Platform.mri_2?} instead.
|
121
|
+
def mri_2?
|
122
|
+
unless @mri2_warn
|
123
|
+
loc = caller_locations(1..1).first
|
124
|
+
warn(
|
125
|
+
"#{loc.path}:#{loc.lineno}: warning: method BaseHelpers##{__method__} " \
|
126
|
+
"is deprecated. Use Pry:Helpers::Platform.#{__method__} instead"
|
127
|
+
)
|
128
|
+
@mri2_warn = true
|
129
|
+
end
|
130
|
+
Pry::Helpers::Platform.mri_2?
|
131
|
+
end
|
132
|
+
|
6
133
|
def silence_warnings
|
7
134
|
old_verbose = $VERBOSE
|
8
135
|
$VERBOSE = nil
|
@@ -35,20 +162,21 @@ module Pry::Helpers::BaseHelpers
|
|
35
162
|
|
36
163
|
def command_dependencies_met?(options)
|
37
164
|
return true if !options[:requires_gem]
|
165
|
+
|
38
166
|
Array(options[:requires_gem]).all? do |g|
|
39
167
|
Pry::Rubygem.installed?(g)
|
40
168
|
end
|
41
169
|
end
|
42
170
|
|
43
171
|
def use_ansi_codes?
|
44
|
-
windows_ansi? || ENV['TERM'] && ENV['TERM'] != "dumb"
|
172
|
+
Pry::Helpers::Platform.windows_ansi? || ENV['TERM'] && ENV['TERM'] != "dumb"
|
45
173
|
end
|
46
174
|
|
47
175
|
def colorize_code(code)
|
48
176
|
CodeRay.scan(code, :ruby).term
|
49
177
|
end
|
50
178
|
|
51
|
-
def highlight(string, regexp, highlight_color
|
179
|
+
def highlight(string, regexp, highlight_color = :bright_yellow)
|
52
180
|
string.gsub(regexp) { |match| "<#{highlight_color}>#{match}</#{highlight_color}>" }
|
53
181
|
end
|
54
182
|
|
@@ -61,7 +189,7 @@ module Pry::Helpers::BaseHelpers
|
|
61
189
|
# Send the given text through the best available pager (if Pry.config.pager is
|
62
190
|
# enabled). Infers where to send the output if used as a mixin.
|
63
191
|
# DEPRECATED.
|
64
|
-
def stagger_output(text,
|
192
|
+
def stagger_output(text, _out = nil)
|
65
193
|
if defined?(_pry_) && _pry_
|
66
194
|
_pry_.pager.page text
|
67
195
|
else
|
@@ -69,3 +197,4 @@ module Pry::Helpers::BaseHelpers
|
|
69
197
|
end
|
70
198
|
end
|
71
199
|
end
|
200
|
+
# rubocop:enable Metrics/ModuleLength
|
@@ -8,7 +8,7 @@ class Pry
|
|
8
8
|
|
9
9
|
# Open a temp file and yield it to the block, closing it after
|
10
10
|
# @return [String] The path of the temp file
|
11
|
-
def temp_file(ext='.rb')
|
11
|
+
def temp_file(ext = '.rb')
|
12
12
|
file = Tempfile.new(['pry', ext])
|
13
13
|
yield file
|
14
14
|
ensure
|
@@ -21,7 +21,7 @@ class Pry
|
|
21
21
|
["__binding__", "__pry__", "class_eval"].include?(m)
|
22
22
|
end
|
23
23
|
|
24
|
-
def get_method_or_raise(name, target, opts={}, omit_help=false)
|
24
|
+
def get_method_or_raise(name, target, opts = {}, omit_help = false)
|
25
25
|
meth = Pry::Method.from_str(name, target, opts)
|
26
26
|
|
27
27
|
if name && !meth
|
@@ -44,7 +44,7 @@ class Pry
|
|
44
44
|
meth
|
45
45
|
end
|
46
46
|
|
47
|
-
def command_error(message, omit_help, klass=CommandError)
|
47
|
+
def command_error(message, omit_help, klass = CommandError)
|
48
48
|
message += " Type `#{command_name} --help` for help." unless omit_help
|
49
49
|
raise klass, message
|
50
50
|
end
|
@@ -142,8 +142,9 @@ class Pry
|
|
142
142
|
Range.new(a, b)
|
143
143
|
end
|
144
144
|
|
145
|
-
def set_file_and_dir_locals(file_name, _pry_=_pry_(), target=target())
|
145
|
+
def set_file_and_dir_locals(file_name, _pry_ = _pry_(), target = target())
|
146
146
|
return if !target or !file_name
|
147
|
+
|
147
148
|
_pry_.last_file = File.expand_path(file_name)
|
148
149
|
_pry_.inject_local("_file_", _pry_.last_file, target)
|
149
150
|
|
@@ -13,8 +13,8 @@ class Pry
|
|
13
13
|
gsub(/<em>(?:\s*\n)?(.*?)\s*<\/em>/m) { "\e[1m#{$1}\e[0m" }.
|
14
14
|
gsub(/<i>(?:\s*\n)?(.*?)\s*<\/i>/m) { "\e[1m#{$1}\e[0m" }.
|
15
15
|
gsub(/<tt>(?:\s*\n)?(.*?)\s*<\/tt>/m) { CodeRay.scan($1, :ruby).term }.
|
16
|
-
gsub(/\B\+(\w+?)\+\B/)
|
17
|
-
gsub(/((?:^[ \t]+.+(?:\n+|\Z))+)/)
|
16
|
+
gsub(/\B\+(\w+?)\+\B/) { "\e[32m#{$1}\e[0m" }.
|
17
|
+
gsub(/((?:^[ \t]+.+(?:\n+|\Z))+)/) { CodeRay.scan($1, :ruby).term }.
|
18
18
|
gsub(/`(?:\s*\n)?([^\e]*?)\s*`/) { "`#{CodeRay.scan($1, :ruby).term}`" }
|
19
19
|
end
|
20
20
|
|
@@ -8,8 +8,8 @@ class Pry
|
|
8
8
|
@method_target = target
|
9
9
|
opt.on :M, "instance-methods", "Operate on instance methods."
|
10
10
|
opt.on :m, :methods, "Operate on methods."
|
11
|
-
opt.on :s, :super, "Select the 'super' method. Can be repeated to traverse the ancestors.", :
|
12
|
-
opt.on :c, :context, "Select object context to run under.", :
|
11
|
+
opt.on :s, :super, "Select the 'super' method. Can be repeated to traverse the ancestors.", as: :count
|
12
|
+
opt.on :c, :context, "Select object context to run under.", argument: true do |context|
|
13
13
|
@method_target = Pry.binding_for(target.eval(context))
|
14
14
|
end
|
15
15
|
end
|
@@ -17,9 +17,9 @@ class Pry
|
|
17
17
|
# Get the method object parsed by the slop instance
|
18
18
|
def method_object
|
19
19
|
@method_object ||= get_method_or_raise(args.empty? ? nil : args.join(" "), @method_target,
|
20
|
-
:
|
21
|
-
:
|
22
|
-
:
|
20
|
+
super: opts[:super],
|
21
|
+
instance: opts.present?(:'instance-methods') && !opts.present?(:'methods'),
|
22
|
+
methods: opts.present?(:'methods') && !opts.present?(:'instance-methods')
|
23
23
|
)
|
24
24
|
end
|
25
25
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
class Pry
|
2
|
+
module Helpers
|
3
|
+
# Contains methods for querying the platform that Pry is running on
|
4
|
+
# @api public
|
5
|
+
# @since v0.12.0
|
6
|
+
# rubocop:disable Style/DoubleNegation
|
7
|
+
module Platform
|
8
|
+
# @return [Boolean]
|
9
|
+
def self.mac_osx?
|
10
|
+
!!(RbConfig::CONFIG['host_os'] =~ /\Adarwin/i)
|
11
|
+
end
|
12
|
+
|
13
|
+
# @return [Boolean]
|
14
|
+
def self.linux?
|
15
|
+
!!(RbConfig::CONFIG['host_os'] =~ /linux/i)
|
16
|
+
end
|
17
|
+
|
18
|
+
# @return [Boolean] true when Pry is running on Windows with ANSI support,
|
19
|
+
# false otherwise
|
20
|
+
def self.windows?
|
21
|
+
!!(RbConfig::CONFIG['host_os'] =~ /mswin|mingw/)
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [Boolean]
|
25
|
+
def self.windows_ansi?
|
26
|
+
return false unless windows?
|
27
|
+
|
28
|
+
!!(defined?(Win32::Console) || ENV['ANSICON'] || mri_2?)
|
29
|
+
end
|
30
|
+
|
31
|
+
# @return [Boolean]
|
32
|
+
def self.jruby?
|
33
|
+
RbConfig::CONFIG['ruby_install_name'] == 'jruby'
|
34
|
+
end
|
35
|
+
|
36
|
+
# @return [Boolean]
|
37
|
+
def self.jruby_19?
|
38
|
+
jruby? && RbConfig::CONFIG['ruby_version'] == '1.9'
|
39
|
+
end
|
40
|
+
|
41
|
+
# @return [Boolean]
|
42
|
+
def self.mri?
|
43
|
+
RbConfig::CONFIG['ruby_install_name'] == 'ruby'
|
44
|
+
end
|
45
|
+
|
46
|
+
# @return [Boolean]
|
47
|
+
def self.mri_19?
|
48
|
+
!!(mri? && RUBY_VERSION.start_with?('1.9'))
|
49
|
+
end
|
50
|
+
|
51
|
+
# @return [Boolean]
|
52
|
+
def self.mri_2?
|
53
|
+
!!(mri? && RUBY_VERSION.start_with?('2'))
|
54
|
+
end
|
55
|
+
end
|
56
|
+
# rubocop:enable Style/DoubleNegation
|
57
|
+
end
|
58
|
+
end
|
data/lib/pry/helpers/table.rb
CHANGED
@@ -1,27 +1,28 @@
|
|
1
1
|
class Pry
|
2
2
|
module Helpers
|
3
|
-
def self.tablify_or_one_line(heading, things)
|
3
|
+
def self.tablify_or_one_line(heading, things, config = Pry.config)
|
4
4
|
plain_heading = Pry::Helpers::Text.strip_color(heading)
|
5
|
-
attempt = Table.new(things, :
|
5
|
+
attempt = Table.new(things, column_count: things.size)
|
6
6
|
if attempt.fits_on_line?(Terminal.width! - plain_heading.size - 2)
|
7
7
|
"#{heading}: #{attempt}\n"
|
8
8
|
else
|
9
|
-
"#{heading}: \n#{tablify_to_screen_width(things, :
|
9
|
+
"#{heading}: \n#{tablify_to_screen_width(things, { indent: ' ' }, config)}\n"
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
def self.tablify_to_screen_width(things, options =
|
13
|
+
def self.tablify_to_screen_width(things, options, config = Pry.config)
|
14
|
+
options ||= {}
|
14
15
|
things = things.compact
|
15
|
-
if indent = options[:indent]
|
16
|
+
if (indent = options[:indent])
|
16
17
|
usable_width = Terminal.width! - indent.size
|
17
|
-
tablify(things, usable_width).to_s.gsub(/^/, indent)
|
18
|
+
tablify(things, usable_width, config).to_s.gsub(/^/, indent)
|
18
19
|
else
|
19
|
-
tablify(things, Terminal.width
|
20
|
+
tablify(things, Terminal.width!, config).to_s
|
20
21
|
end
|
21
22
|
end
|
22
23
|
|
23
|
-
def self.tablify(things, line_length)
|
24
|
-
table = Table.new(things, :
|
24
|
+
def self.tablify(things, line_length, config = Pry.config)
|
25
|
+
table = Table.new(things, { column_count: things.size }, config)
|
25
26
|
table.column_count -= 1 until 1 == table.column_count or
|
26
27
|
table.fits_on_line?(line_length)
|
27
28
|
table
|
@@ -29,8 +30,9 @@ class Pry
|
|
29
30
|
|
30
31
|
class Table
|
31
32
|
attr_reader :items, :column_count
|
32
|
-
def initialize
|
33
|
+
def initialize(items, args, config = Pry.config)
|
33
34
|
@column_count = args[:column_count]
|
35
|
+
@config = config
|
34
36
|
self.items = items
|
35
37
|
end
|
36
38
|
|
@@ -39,16 +41,17 @@ class Pry
|
|
39
41
|
end
|
40
42
|
|
41
43
|
def rows_to_s style = :color_on
|
42
|
-
widths = columns.map{|e| _max_width(e)}
|
44
|
+
widths = columns.map { |e| _max_width(e) }
|
43
45
|
@rows_without_colors.map do |r|
|
44
46
|
padded = []
|
45
47
|
r.each_with_index do |e,i|
|
46
48
|
next unless e
|
49
|
+
|
47
50
|
item = e.ljust(widths[i])
|
48
51
|
item.sub! e, _recall_color_for(e) if :color_on == style
|
49
52
|
padded << item
|
50
53
|
end
|
51
|
-
padded.join(
|
54
|
+
padded.join(@config.ls.separator)
|
52
55
|
end
|
53
56
|
end
|
54
57
|
|
@@ -73,6 +76,7 @@ class Pry
|
|
73
76
|
end
|
74
77
|
|
75
78
|
def ==(other); items == other.to_a end
|
79
|
+
|
76
80
|
def to_a; items.to_a end
|
77
81
|
|
78
82
|
private
|
@@ -93,10 +97,11 @@ class Pry
|
|
93
97
|
def _recolumn
|
94
98
|
@rows_without_colors = []
|
95
99
|
return if items.size.zero?
|
96
|
-
|
100
|
+
|
101
|
+
row_count = (items.size.to_f / column_count).ceil
|
97
102
|
row_count.times do |i|
|
98
|
-
row_indices = (0...column_count).map{|e| row_count*e+i}
|
99
|
-
@rows_without_colors << row_indices.map{|e| @plain_items[e]}
|
103
|
+
row_indices = (0...column_count).map { |e| row_count * e + i }
|
104
|
+
@rows_without_colors << row_indices.map { |e| @plain_items[e] }
|
100
105
|
end
|
101
106
|
end
|
102
107
|
|
data/lib/pry/helpers/text.rb
CHANGED
@@ -18,11 +18,11 @@ class Pry
|
|
18
18
|
|
19
19
|
COLORS.each_pair do |color, value|
|
20
20
|
define_method color do |text|
|
21
|
-
"\033[0;#{30+value}m#{text}\033[0m"
|
21
|
+
"\033[0;#{30 + value}m#{text}\033[0m"
|
22
22
|
end
|
23
23
|
|
24
24
|
define_method "bright_#{color}" do |text|
|
25
|
-
"\033[1;#{30+value}m#{text}\033[0m"
|
25
|
+
"\033[1;#{30 + value}m#{text}\033[0m"
|
26
26
|
end
|
27
27
|
|
28
28
|
COLORS.each_pair do |bg_color, bg_value|
|
@@ -60,7 +60,6 @@ class Pry
|
|
60
60
|
def default(text)
|
61
61
|
text.to_s
|
62
62
|
end
|
63
|
-
alias_method :bright_default, :bold
|
64
63
|
|
65
64
|
#
|
66
65
|
# @yield
|
@@ -95,7 +94,7 @@ class Pry
|
|
95
94
|
# @param [#each_line] text
|
96
95
|
# @param [Fixnum] offset
|
97
96
|
# @return [String]
|
98
|
-
def with_line_numbers(text, offset, color
|
97
|
+
def with_line_numbers(text, offset, color = :blue)
|
99
98
|
lines = text.each_line.to_a
|
100
99
|
max_width = (offset + lines.count).to_s.length
|
101
100
|
lines.each_with_index.map do |line, index|
|
data/lib/pry/helpers.rb
CHANGED
data/lib/pry/history.rb
CHANGED
@@ -7,7 +7,7 @@ class Pry
|
|
7
7
|
# @return [Fixnum] Number of lines in history when Pry first loaded.
|
8
8
|
attr_reader :original_lines
|
9
9
|
|
10
|
-
def initialize(options={})
|
10
|
+
def initialize(options = {})
|
11
11
|
@history = []
|
12
12
|
@original_lines = 0
|
13
13
|
@file_path = options[:file_path]
|
@@ -25,8 +25,8 @@ class Pry
|
|
25
25
|
@pusher = method(:push_to_readline)
|
26
26
|
@clearer = method(:clear_readline)
|
27
27
|
else
|
28
|
-
@pusher = proc {
|
29
|
-
@clearer = proc {
|
28
|
+
@pusher = proc {}
|
29
|
+
@clearer = proc {}
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -34,6 +34,8 @@ class Pry
|
|
34
34
|
# @return [Integer] The number of lines loaded
|
35
35
|
def load
|
36
36
|
@loader.call do |line|
|
37
|
+
next if invalid_readline_line?(line)
|
38
|
+
|
37
39
|
@pusher.call(line.chomp)
|
38
40
|
@history << line.chomp
|
39
41
|
@original_lines += 1
|
@@ -44,7 +46,9 @@ class Pry
|
|
44
46
|
# @param [String] line
|
45
47
|
# @return [String] The same line that was passed in
|
46
48
|
def push(line)
|
47
|
-
|
49
|
+
empty_or_invalid_line = line.empty? || invalid_readline_line?(line)
|
50
|
+
|
51
|
+
unless empty_or_invalid_line || (@history.last && line == @history.last)
|
48
52
|
@pusher.call(line)
|
49
53
|
@history << line
|
50
54
|
if !should_ignore?(line) && Pry.config.history.should_save
|
@@ -107,8 +111,8 @@ class Pry
|
|
107
111
|
if File.exist?(path)
|
108
112
|
File.foreach(path) { |line| yield(line) }
|
109
113
|
end
|
110
|
-
rescue => error
|
111
|
-
warn "
|
114
|
+
rescue SystemCallError => error
|
115
|
+
warn "Unable to read history file: #{error.message}"
|
112
116
|
end
|
113
117
|
|
114
118
|
# The default pusher. Appends the given line to Readline::HISTORY.
|
@@ -132,17 +136,26 @@ class Pry
|
|
132
136
|
if defined?(@history_file)
|
133
137
|
@history_file
|
134
138
|
else
|
139
|
+
unless File.exist?(history_file_path)
|
140
|
+
FileUtils.mkdir_p(File.dirname(history_file_path))
|
141
|
+
end
|
135
142
|
@history_file = File.open(history_file_path, 'a', 0600).tap do |file|
|
136
143
|
file.sync = true
|
137
144
|
end
|
138
145
|
end
|
139
|
-
rescue
|
140
|
-
warn
|
146
|
+
rescue SystemCallError => error
|
147
|
+
warn "Unable to write history file: #{error.message}"
|
141
148
|
@history_file = false
|
142
149
|
end
|
143
150
|
|
144
151
|
def history_file_path
|
145
152
|
File.expand_path(@file_path || Pry.config.history.file)
|
146
153
|
end
|
154
|
+
|
155
|
+
def invalid_readline_line?(line)
|
156
|
+
# `Readline::HISTORY << line` raises an `ArgumentError` if `line`
|
157
|
+
# includes a null byte
|
158
|
+
line.include?("\0")
|
159
|
+
end
|
147
160
|
end
|
148
161
|
end
|
data/lib/pry/hooks.rb
CHANGED
@@ -15,7 +15,7 @@ class Pry
|
|
15
15
|
end
|
16
16
|
|
17
17
|
# Ensure that duplicates have their @hooks object.
|
18
|
-
def initialize_copy(
|
18
|
+
def initialize_copy(_orig)
|
19
19
|
hooks_dup = @hooks.dup
|
20
20
|
@hooks.each do |k, v|
|
21
21
|
hooks_dup[k] = v.dup
|
@@ -32,7 +32,7 @@ class Pry
|
|
32
32
|
#
|
33
33
|
# @param [Pry::Hooks] other The `Pry::Hooks` instance to merge
|
34
34
|
# @return [Pry:Hooks] The receiver.
|
35
|
-
# @see
|
35
|
+
# @see #merge
|
36
36
|
def merge!(other)
|
37
37
|
@hooks.merge!(other.dup.hooks) do |key, array, other_array|
|
38
38
|
temp_hash, output = {}, []
|
@@ -65,7 +65,7 @@ class Pry
|
|
65
65
|
# @param [#call] callable The callable.
|
66
66
|
# @yield The block to use as the callable (if no `callable` provided).
|
67
67
|
# @return [Pry:Hooks] The receiver.
|
68
|
-
def add_hook(event_name, hook_name, callable=nil, &block)
|
68
|
+
def add_hook(event_name, hook_name, callable = nil, &block)
|
69
69
|
event_name = event_name.to_s
|
70
70
|
|
71
71
|
# do not allow duplicates, but allow multiple `nil` hooks
|
data/lib/pry/indent.rb
CHANGED
@@ -143,10 +143,9 @@ class Pry
|
|
143
143
|
prefix = indent_level
|
144
144
|
|
145
145
|
input.lines.each do |line|
|
146
|
-
|
147
146
|
if in_string?
|
148
147
|
tokens = tokenize("#{open_delimiters_line}\n#{line}")
|
149
|
-
tokens = tokens.drop_while{ |token, type| !(String === token && token.include?("\n")) }
|
148
|
+
tokens = tokens.drop_while { |token, type| !(String === token && token.include?("\n")) }
|
150
149
|
previously_in_string = true
|
151
150
|
else
|
152
151
|
tokens = tokenize(line)
|
@@ -155,7 +154,7 @@ class Pry
|
|
155
154
|
|
156
155
|
before, after = indentation_delta(tokens)
|
157
156
|
|
158
|
-
before.times{ prefix.sub! SPACES, '' }
|
157
|
+
before.times { prefix.sub! SPACES, '' }
|
159
158
|
new_prefix = prefix + SPACES * after
|
160
159
|
|
161
160
|
line = prefix + line.lstrip unless previously_in_string
|
@@ -215,7 +214,7 @@ class Pry
|
|
215
214
|
# If the list of tokens contains a matching closing token the line should
|
216
215
|
# not be indented (and thus we should return true).
|
217
216
|
tokens.each do |token, kind|
|
218
|
-
is_singleline_if
|
217
|
+
is_singleline_if = (SINGLELINE_TOKENS.include?(token)) && end_of_statement?(last_token, last_kind)
|
219
218
|
is_optional_do = (token == "do" && seen_for_at.include?(add_after - 1))
|
220
219
|
|
221
220
|
last_token, last_kind = token, kind unless kind == :space
|
@@ -358,7 +357,7 @@ class Pry
|
|
358
357
|
#
|
359
358
|
# @param [String] token a token from Coderay
|
360
359
|
# @param [Symbol] kind the kind of that token
|
361
|
-
def track_module_nesting_end(token, kind
|
360
|
+
def track_module_nesting_end(token, kind = :keyword)
|
362
361
|
if kind == :keyword && (token == "class" || token == "module")
|
363
362
|
@module_nesting.pop
|
364
363
|
end
|
@@ -382,25 +381,24 @@ class Pry
|
|
382
381
|
# the correct indentation. Mostly useful for fixing 'end'.
|
383
382
|
#
|
384
383
|
# @param [String] prompt The user's prompt
|
385
|
-
# @param [String] code
|
386
|
-
# @param [
|
387
|
-
# the difference in length between the old line and the new one)
|
388
|
-
#
|
389
|
-
|
384
|
+
# @param [String] code The code the user just typed in
|
385
|
+
# @param [Integer] overhang The number of characters to erase afterwards (the
|
386
|
+
# the difference in length between the old line and the new one)
|
387
|
+
#
|
388
|
+
# @return [String] correctly indented line
|
389
|
+
def correct_indentation(prompt, code, overhang = 0)
|
390
390
|
prompt = prompt.delete("\001\002")
|
391
391
|
line_to_measure = Pry::Helpers::Text.strip_color(prompt) << code
|
392
392
|
whitespace = ' ' * overhang
|
393
393
|
|
394
|
-
|
395
|
-
|
396
|
-
cols = cols.to_i
|
397
|
-
lines = (cols != 0 ? (line_to_measure.length / cols + 1) : 1).to_i
|
394
|
+
cols = Terminal.width!
|
395
|
+
lines = cols == 0 ? 1 : (line_to_measure.length / cols + 1).to_i
|
398
396
|
|
399
|
-
if
|
400
|
-
move_up
|
397
|
+
if Helpers::Platform.windows_ansi?
|
398
|
+
move_up = "\e[#{lines}F"
|
401
399
|
move_down = "\e[#{lines}E"
|
402
400
|
else
|
403
|
-
move_up
|
401
|
+
move_up = "\e[#{lines}A\e[0G"
|
404
402
|
move_down = "\e[#{lines}B\e[0G"
|
405
403
|
end
|
406
404
|
|