pry 0.10.2-i386-mingw32 → 1.0.0.pre1-i386-mingw32
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.
- data/.document +2 -0
- data/.gitignore +16 -0
- data/.travis.yml +21 -0
- data/.yardopts +3 -0
- data/CHANGELOG +503 -0
- data/CONTRIBUTORS +55 -0
- data/Gemfile +9 -0
- data/Guardfile +62 -0
- data/LICENSE +2 -2
- data/{README.md → README.markdown} +31 -37
- data/Rakefile +144 -0
- data/TODO +117 -0
- data/lib/pry.rb +146 -33
- data/lib/pry/cli.rb +13 -35
- data/lib/pry/code.rb +63 -24
- data/lib/pry/code/loc.rb +2 -2
- data/lib/pry/code_object.rb +21 -40
- data/lib/pry/command.rb +6 -9
- data/lib/pry/command_set.rb +37 -80
- data/lib/pry/commands.rb +1 -1
- data/lib/pry/commands/amend_line.rb +1 -1
- data/lib/pry/commands/bang.rb +1 -1
- data/lib/pry/commands/cat.rb +2 -11
- data/lib/pry/commands/cat/abstract_formatter.rb +1 -1
- data/lib/pry/commands/cat/exception_formatter.rb +7 -6
- data/lib/pry/commands/cat/file_formatter.rb +32 -15
- data/lib/pry/commands/cat/input_expression_formatter.rb +1 -1
- data/lib/pry/commands/cd.rb +3 -14
- data/lib/pry/commands/code_collector.rb +4 -4
- data/lib/pry/commands/easter_eggs.rb +3 -3
- data/lib/pry/commands/edit.rb +22 -10
- data/lib/pry/commands/edit/exception_patcher.rb +1 -1
- data/lib/pry/commands/edit/file_and_line_locator.rb +2 -0
- data/lib/pry/{method/patcher.rb → commands/edit/method_patcher.rb} +37 -40
- data/lib/pry/commands/find_method.rb +22 -16
- data/lib/pry/commands/gem_install.rb +2 -5
- data/lib/pry/commands/gem_open.rb +1 -1
- data/lib/pry/commands/gist.rb +11 -10
- data/lib/pry/commands/help.rb +14 -14
- data/lib/pry/commands/hist.rb +5 -24
- data/lib/pry/commands/ls.rb +287 -56
- data/lib/pry/commands/play.rb +10 -44
- data/lib/pry/commands/pry_backtrace.rb +2 -1
- data/lib/pry/commands/raise_up.rb +1 -1
- data/lib/pry/commands/reload_code.rb +15 -31
- data/lib/pry/commands/ri.rb +3 -7
- data/lib/pry/commands/shell_command.rb +12 -17
- data/lib/pry/commands/shell_mode.rb +2 -2
- data/lib/pry/commands/show_doc.rb +0 -5
- data/lib/pry/commands/show_info.rb +10 -11
- data/lib/pry/commands/show_source.rb +3 -15
- data/lib/pry/commands/simple_prompt.rb +1 -1
- data/lib/pry/commands/toggle_color.rb +4 -8
- data/lib/pry/commands/whereami.rb +10 -18
- data/lib/pry/completion.rb +293 -0
- data/lib/pry/config.rb +233 -20
- data/lib/pry/core_extensions.rb +19 -29
- data/lib/pry/custom_completions.rb +6 -0
- data/lib/pry/editor.rb +103 -109
- data/lib/pry/helpers/base_helpers.rb +109 -22
- data/lib/pry/helpers/command_helpers.rb +8 -10
- data/lib/pry/helpers/documentation_helpers.rb +2 -1
- data/lib/pry/helpers/text.rb +5 -4
- data/lib/pry/history.rb +10 -21
- data/lib/pry/history_array.rb +0 -5
- data/lib/pry/hooks.rb +29 -9
- data/lib/pry/indent.rb +10 -5
- data/lib/pry/method.rb +86 -81
- data/lib/pry/method/weird_method_locator.rb +2 -4
- data/lib/pry/module_candidate.rb +14 -5
- data/lib/pry/pager.rb +48 -193
- data/lib/pry/plugins.rb +2 -2
- data/lib/pry/pry_class.rb +193 -104
- data/lib/pry/pry_instance.rb +154 -152
- data/lib/pry/rbx_method.rb +13 -0
- data/lib/pry/rbx_path.rb +1 -1
- data/lib/pry/repl.rb +14 -17
- data/lib/pry/repl_file_loader.rb +3 -8
- data/lib/pry/rubygem.rb +3 -3
- data/lib/pry/terminal.rb +3 -4
- data/lib/pry/test/helper.rb +11 -6
- data/lib/pry/version.rb +1 -1
- data/lib/pry/wrapped_module.rb +56 -49
- data/man/pry.1 +195 -0
- data/man/pry.1.html +204 -0
- data/man/pry.1.ronn +141 -0
- data/pry.gemspec +31 -0
- data/spec/Procfile +3 -0
- data/spec/cli_spec.rb +78 -0
- data/spec/code_object_spec.rb +277 -0
- data/spec/code_spec.rb +219 -0
- data/spec/command_helpers_spec.rb +29 -0
- data/spec/command_integration_spec.rb +562 -0
- data/spec/command_set_spec.rb +627 -0
- data/spec/command_spec.rb +821 -0
- data/spec/commands/amend_line_spec.rb +247 -0
- data/spec/commands/bang_spec.rb +18 -0
- data/spec/commands/cat_spec.rb +164 -0
- data/spec/commands/cd_spec.rb +250 -0
- data/spec/commands/disable_pry_spec.rb +25 -0
- data/spec/commands/edit_spec.rb +725 -0
- data/spec/commands/exit_all_spec.rb +27 -0
- data/spec/commands/exit_program_spec.rb +19 -0
- data/spec/commands/exit_spec.rb +28 -0
- data/spec/commands/find_method_spec.rb +70 -0
- data/spec/commands/gem_list_spec.rb +26 -0
- data/spec/commands/gist_spec.rb +79 -0
- data/spec/commands/help_spec.rb +56 -0
- data/spec/commands/hist_spec.rb +172 -0
- data/spec/commands/jump_to_spec.rb +15 -0
- data/spec/commands/ls_spec.rb +189 -0
- data/spec/commands/play_spec.rb +136 -0
- data/spec/commands/raise_up_spec.rb +56 -0
- data/spec/commands/save_file_spec.rb +177 -0
- data/spec/commands/show_doc_spec.rb +488 -0
- data/spec/commands/show_input_spec.rb +17 -0
- data/spec/commands/show_source_spec.rb +760 -0
- data/spec/commands/whereami_spec.rb +203 -0
- data/spec/completion_spec.rb +221 -0
- data/spec/control_d_handler_spec.rb +62 -0
- data/spec/documentation_helper_spec.rb +73 -0
- data/spec/editor_spec.rb +79 -0
- data/spec/exception_whitelist_spec.rb +21 -0
- data/spec/fixtures/candidate_helper1.rb +11 -0
- data/spec/fixtures/candidate_helper2.rb +8 -0
- data/spec/fixtures/example.erb +5 -0
- data/spec/fixtures/example_nesting.rb +33 -0
- data/spec/fixtures/show_source_doc_examples.rb +15 -0
- data/spec/fixtures/testlinkrc +2 -0
- data/spec/fixtures/testrc +2 -0
- data/spec/fixtures/testrcbad +2 -0
- data/spec/fixtures/whereami_helper.rb +6 -0
- data/spec/helper.rb +35 -0
- data/spec/helpers/bacon.rb +86 -0
- data/spec/helpers/mock_pry.rb +44 -0
- data/spec/helpers/repl_tester.rb +112 -0
- data/spec/helpers/table_spec.rb +105 -0
- data/spec/history_array_spec.rb +67 -0
- data/spec/hooks_spec.rb +522 -0
- data/spec/indent_spec.rb +301 -0
- data/spec/method_spec.rb +482 -0
- data/spec/prompt_spec.rb +61 -0
- data/spec/pry_defaults_spec.rb +420 -0
- data/spec/pry_history_spec.rb +69 -0
- data/spec/pry_output_spec.rb +95 -0
- data/spec/pry_repl_spec.rb +86 -0
- data/spec/pry_spec.rb +394 -0
- data/spec/pryrc_spec.rb +97 -0
- data/spec/run_command_spec.rb +25 -0
- data/spec/sticky_locals_spec.rb +147 -0
- data/spec/syntax_checking_spec.rb +81 -0
- data/spec/wrapped_module_spec.rb +261 -0
- data/wiki/Customizing-pry.md +397 -0
- data/wiki/Home.md +4 -0
- metadata +272 -61
- checksums.yaml +0 -7
- data/CHANGELOG.md +0 -714
- data/lib/pry/code/code_file.rb +0 -103
- data/lib/pry/color_printer.rb +0 -55
- data/lib/pry/commands/change_inspector.rb +0 -27
- data/lib/pry/commands/change_prompt.rb +0 -26
- data/lib/pry/commands/list_inspectors.rb +0 -35
- data/lib/pry/commands/list_prompts.rb +0 -35
- data/lib/pry/commands/ls/constants.rb +0 -47
- data/lib/pry/commands/ls/formatter.rb +0 -49
- data/lib/pry/commands/ls/globals.rb +0 -48
- data/lib/pry/commands/ls/grep.rb +0 -21
- data/lib/pry/commands/ls/instance_vars.rb +0 -39
- data/lib/pry/commands/ls/interrogatable.rb +0 -18
- data/lib/pry/commands/ls/jruby_hacks.rb +0 -49
- data/lib/pry/commands/ls/local_names.rb +0 -35
- data/lib/pry/commands/ls/local_vars.rb +0 -39
- data/lib/pry/commands/ls/ls_entity.rb +0 -70
- data/lib/pry/commands/ls/methods.rb +0 -57
- data/lib/pry/commands/ls/methods_helper.rb +0 -46
- data/lib/pry/commands/ls/self_methods.rb +0 -32
- data/lib/pry/commands/watch_expression.rb +0 -105
- data/lib/pry/commands/watch_expression/expression.rb +0 -38
- 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/exceptions.rb +0 -78
- data/lib/pry/input_completer.rb +0 -242
- data/lib/pry/input_lock.rb +0 -132
- data/lib/pry/inspector.rb +0 -27
- data/lib/pry/last_exception.rb +0 -61
- data/lib/pry/object_path.rb +0 -82
- data/lib/pry/output.rb +0 -50
- data/lib/pry/prompt.rb +0 -26
data/lib/pry/code.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'pry/code/loc'
|
2
2
|
require 'pry/code/code_range'
|
3
|
-
require 'pry/code/code_file'
|
4
3
|
|
5
4
|
class Pry
|
6
5
|
class << self
|
@@ -30,6 +29,26 @@ class Pry
|
|
30
29
|
# arbitrary chaining of formatting methods without mutating the original
|
31
30
|
# object.
|
32
31
|
class Code
|
32
|
+
|
33
|
+
# List of all supported languages.
|
34
|
+
# @return [Hash]
|
35
|
+
EXTENSIONS = {
|
36
|
+
%w(.py) => :python,
|
37
|
+
%w(.js) => :javascript,
|
38
|
+
%w(.css) => :css,
|
39
|
+
%w(.xml) => :xml,
|
40
|
+
%w(.php) => :php,
|
41
|
+
%w(.html) => :html,
|
42
|
+
%w(.diff) => :diff,
|
43
|
+
%w(.java) => :java,
|
44
|
+
%w(.json) => :json,
|
45
|
+
%w(.c .h) => :c,
|
46
|
+
%w(.rhtml) => :rhtml,
|
47
|
+
%w(.yaml .yml) => :yaml,
|
48
|
+
%w(.cpp .hpp .cc .h cxx) => :cpp,
|
49
|
+
%w(.rb .ru .irbrc .gemspec .pryrc) => :ruby,
|
50
|
+
}
|
51
|
+
|
33
52
|
class << self
|
34
53
|
include MethodSource::CodeHelpers
|
35
54
|
|
@@ -39,9 +58,13 @@ class Pry
|
|
39
58
|
# @param [String] filename The name of a file, or "(pry)".
|
40
59
|
# @param [Symbol] code_type The type of code the file contains.
|
41
60
|
# @return [Code]
|
42
|
-
def from_file(filename, code_type =
|
43
|
-
|
44
|
-
|
61
|
+
def from_file(filename, code_type = type_from_filename(filename))
|
62
|
+
code = if filename == Pry.eval_path
|
63
|
+
Pry.line_buffer.drop(1)
|
64
|
+
else
|
65
|
+
File.read(abs_path(filename))
|
66
|
+
end
|
67
|
+
new(code, 1, code_type)
|
45
68
|
end
|
46
69
|
|
47
70
|
# Instantiate a `Code` object containing code extracted from a
|
@@ -71,6 +94,35 @@ class Pry
|
|
71
94
|
start_line ||= candidate.line
|
72
95
|
new(candidate.source, start_line, :ruby)
|
73
96
|
end
|
97
|
+
|
98
|
+
protected
|
99
|
+
|
100
|
+
# Guess the CodeRay type of a file from its extension, or nil if
|
101
|
+
# unknown.
|
102
|
+
#
|
103
|
+
# @param [String] filename
|
104
|
+
# @param [Symbol] default (:ruby) the file type to assume if none could be
|
105
|
+
# detected.
|
106
|
+
# @return [Symbol, nil]
|
107
|
+
def type_from_filename(filename, default = :ruby)
|
108
|
+
_, type = Pry::Code::EXTENSIONS.find do |k, _|
|
109
|
+
k.any? { |ext| ext == File.extname(filename) }
|
110
|
+
end
|
111
|
+
|
112
|
+
type || default
|
113
|
+
end
|
114
|
+
|
115
|
+
# @param [String] filename
|
116
|
+
# @raise [MethodSource::SourceNotFoundError] if the +filename+ is not
|
117
|
+
# readable for some reason.
|
118
|
+
# @return [String] absolute path for the given +filename+.
|
119
|
+
def abs_path(filename)
|
120
|
+
abs_path = [File.expand_path(filename, Dir.pwd),
|
121
|
+
File.expand_path(filename, Pry::INITIAL_PWD)
|
122
|
+
].detect { |path| File.readable?(path) }
|
123
|
+
abs_path or raise MethodSource::SourceNotFoundError,
|
124
|
+
"Cannot open #{filename.inspect} for reading."
|
125
|
+
end
|
74
126
|
end
|
75
127
|
|
76
128
|
# @return [Symbol] The type of code stored in this wrapper.
|
@@ -145,7 +197,7 @@ class Pry
|
|
145
197
|
if start_line >= 0
|
146
198
|
@lines.index { |loc| loc.lineno >= start_line } || @lines.length
|
147
199
|
else
|
148
|
-
|
200
|
+
@lines.length + start_line
|
149
201
|
end
|
150
202
|
|
151
203
|
alter do
|
@@ -253,27 +305,14 @@ class Pry
|
|
253
305
|
# @return [String] a formatted representation (based on the configuration of
|
254
306
|
# the object).
|
255
307
|
def to_s
|
256
|
-
|
257
|
-
end
|
258
|
-
|
259
|
-
# @return [String] a (possibly highlighted) copy of the source code.
|
260
|
-
def highlighted
|
261
|
-
print_to_output("", true)
|
262
|
-
end
|
263
|
-
|
264
|
-
# Writes a formatted representation (based on the configuration of the
|
265
|
-
# object) to the given output, which must respond to `#<<`.
|
266
|
-
def print_to_output(output, color=false)
|
267
|
-
@lines.each do |loc|
|
308
|
+
@lines.map { |loc|
|
268
309
|
loc = loc.dup
|
269
|
-
loc.colorize(@code_type) if color
|
270
|
-
loc.add_line_number(max_lineno_width
|
310
|
+
loc.colorize(@code_type) if Pry.color
|
311
|
+
loc.add_line_number(max_lineno_width) if @with_line_numbers
|
271
312
|
loc.add_marker(@marker_lineno) if @with_marker
|
272
313
|
loc.indent(@indentation_num) if @with_indentation
|
273
|
-
|
274
|
-
|
275
|
-
end
|
276
|
-
output
|
314
|
+
loc.line
|
315
|
+
}.join("\n") + "\n"
|
277
316
|
end
|
278
317
|
|
279
318
|
# Get the comment that describes the expression on the given line number.
|
@@ -305,7 +344,7 @@ class Pry
|
|
305
344
|
#
|
306
345
|
# @return [String]
|
307
346
|
def raw
|
308
|
-
@lines.map(&:line).join("\n")
|
347
|
+
@lines.map(&:line).join("\n") + "\n"
|
309
348
|
end
|
310
349
|
|
311
350
|
# Return the number of lines stored.
|
data/lib/pry/code/loc.rb
CHANGED
@@ -59,9 +59,9 @@ class Pry
|
|
59
59
|
#
|
60
60
|
# @param [Integer] max_width
|
61
61
|
# @return [void]
|
62
|
-
def add_line_number(max_width = 0
|
62
|
+
def add_line_number(max_width = 0)
|
63
63
|
padded = lineno.to_s.rjust(max_width)
|
64
|
-
colorized_lineno =
|
64
|
+
colorized_lineno = Pry::Helpers::BaseHelpers.colorize_code(padded)
|
65
65
|
tuple[0] = "#{ colorized_lineno }: #{ line }"
|
66
66
|
end
|
67
67
|
|
data/lib/pry/code_object.rb
CHANGED
@@ -1,23 +1,4 @@
|
|
1
1
|
class Pry
|
2
|
-
|
3
|
-
# This class is responsible for taking a string (identifying a
|
4
|
-
# command/class/method/etc) and returning the relevant type of object.
|
5
|
-
# For example, if the user looks up "show-source" then a
|
6
|
-
# `Pry::Command` will be returned. Alternatively, if the user passes in "Pry#repl" then
|
7
|
-
# a `Pry::Method` object will be returned.
|
8
|
-
#
|
9
|
-
# The `CodeObject.lookup` method is responsible for 1. figuring out what kind of
|
10
|
-
# object the user wants (applying precedence rules in doing so -- i.e methods
|
11
|
-
# get precedence over commands with the same name) and 2. Returning
|
12
|
-
# the appropriate object. If the user fails to provide a string
|
13
|
-
# identifer for the object (i.e they pass in `nil` or "") then the
|
14
|
-
# object looked up will be the 'current method' or 'current class'
|
15
|
-
# associated with the Binding.
|
16
|
-
#
|
17
|
-
# TODO: This class is a clusterfuck. We need a much more robust
|
18
|
-
# concept of what a "Code Object" really is. Currently
|
19
|
-
# commands/classes/candidates/methods and so on just share a very
|
20
|
-
# ill-defined interface.
|
21
2
|
class CodeObject
|
22
3
|
module Helpers
|
23
4
|
# we need this helper as some Pry::Method objects can wrap Procs
|
@@ -52,7 +33,7 @@ class Pry
|
|
52
33
|
|
53
34
|
attr_accessor :str
|
54
35
|
attr_accessor :target
|
55
|
-
attr_accessor :
|
36
|
+
attr_accessor :pry
|
56
37
|
attr_accessor :super_level
|
57
38
|
|
58
39
|
def initialize(str, _pry_, options={})
|
@@ -61,7 +42,7 @@ class Pry
|
|
61
42
|
}.merge!(options)
|
62
43
|
|
63
44
|
@str = str
|
64
|
-
@
|
45
|
+
@pry = _pry_
|
65
46
|
@target = _pry_.current_context
|
66
47
|
@super_level = options[:super]
|
67
48
|
end
|
@@ -69,24 +50,18 @@ class Pry
|
|
69
50
|
def command_lookup
|
70
51
|
# TODO: just make it so find_command_by_match_or_listing doesn't
|
71
52
|
# raise?
|
72
|
-
|
53
|
+
pry.commands.find_command_by_match_or_listing(str) rescue nil
|
73
54
|
end
|
74
55
|
|
75
|
-
# when no paramter is given (i.e CodeObject.lookup(nil)), then we
|
76
|
-
# lookup the 'current object' from the binding.
|
77
56
|
def empty_lookup
|
78
57
|
return nil if str && !str.empty?
|
79
58
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
# respect the super level (i.e user might have specified a
|
88
|
-
# --super flag to show-source)
|
89
|
-
lookup_super(obj, super_level)
|
59
|
+
if internal_binding?(target)
|
60
|
+
mod = target_self.is_a?(Module) ? target_self : target_self.class
|
61
|
+
Pry::WrappedModule(mod)
|
62
|
+
else
|
63
|
+
Pry::Method.from_binding(target)
|
64
|
+
end
|
90
65
|
end
|
91
66
|
|
92
67
|
# lookup variables and constants and `self` that are not modules
|
@@ -112,12 +87,17 @@ class Pry
|
|
112
87
|
end
|
113
88
|
|
114
89
|
def method_or_class_lookup
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
90
|
+
# we need this here because stupid Pry::Method.from_str() does a
|
91
|
+
# Pry::Method.from_binding when str is nil.
|
92
|
+
# Once we refactor Pry::Method.from_str() so it doesnt lookup
|
93
|
+
# from bindings, we can get rid of this check
|
94
|
+
return nil if str.to_s.empty?
|
95
|
+
|
96
|
+
obj = if str =~ /::(?:\S+)\Z/
|
97
|
+
Pry::WrappedModule.from_str(str,target) || Pry::Method.from_str(str, target)
|
98
|
+
else
|
99
|
+
Pry::Method.from_str(str,target) || Pry::WrappedModule.from_str(str, target)
|
100
|
+
end
|
121
101
|
|
122
102
|
lookup_super(obj, super_level)
|
123
103
|
end
|
@@ -128,6 +108,7 @@ class Pry
|
|
128
108
|
[::Proc, ::Method, ::UnboundMethod].any? { |o| obj.is_a?(o) }
|
129
109
|
end
|
130
110
|
|
111
|
+
|
131
112
|
# Returns true if `str` looks like a method, i.e Klass#method
|
132
113
|
# We need to consider this case because method lookups should fall
|
133
114
|
# through to the `method_or_class_lookup()` method but a
|
data/lib/pry/command.rb
CHANGED
@@ -175,7 +175,7 @@ class Pry
|
|
175
175
|
end
|
176
176
|
|
177
177
|
def command_regex
|
178
|
-
pr = Pry.
|
178
|
+
pr = defined?(Pry.config.command_prefix) ? Pry.config.command_prefix : ""
|
179
179
|
prefix = convert_to_regex(pr)
|
180
180
|
prefix = "(?:#{prefix})?" unless options[:use_prefix]
|
181
181
|
|
@@ -194,7 +194,6 @@ class Pry
|
|
194
194
|
# The group in which the command should be displayed in "help" output.
|
195
195
|
# This is usually auto-generated from directory naming, but it can be
|
196
196
|
# manually overridden if necessary.
|
197
|
-
# Group should not be changed once it is initialized.
|
198
197
|
def group(name=nil)
|
199
198
|
@group ||= if name
|
200
199
|
name
|
@@ -243,13 +242,12 @@ class Pry
|
|
243
242
|
# @example
|
244
243
|
# run "amend-line", "5", 'puts "hello world"'
|
245
244
|
def run(command_string, *args)
|
246
|
-
command_string = _pry_.config.command_prefix.to_s + command_string
|
247
245
|
complete_string = "#{command_string} #{args.join(" ")}".rstrip
|
248
246
|
command_set.process_line(complete_string, context)
|
249
247
|
end
|
250
248
|
|
251
249
|
def commands
|
252
|
-
command_set.
|
250
|
+
command_set.commands
|
253
251
|
end
|
254
252
|
|
255
253
|
def text
|
@@ -285,7 +283,7 @@ class Pry
|
|
285
283
|
# state.my_state = "my state" # this will not conflict with any
|
286
284
|
# # `state.my_state` used in another command.
|
287
285
|
def state
|
288
|
-
_pry_.command_state[match] ||=
|
286
|
+
_pry_.command_state[match] ||= OpenStruct.new
|
289
287
|
end
|
290
288
|
|
291
289
|
# Revaluate the string (str) and perform interpolation.
|
@@ -309,7 +307,8 @@ class Pry
|
|
309
307
|
collision_type ||= 'local-variable' if arg_string.match(%r{\A\s*[-+*/%&|^]*=})
|
310
308
|
|
311
309
|
if collision_type
|
312
|
-
output.puts "#{text.bold('WARNING:')} Calling Pry command '#{command_match}',
|
310
|
+
output.puts "#{text.bold('WARNING:')} Calling Pry command '#{command_match}'," +
|
311
|
+
"which conflicts with a #{collision_type}.\n\n"
|
313
312
|
end
|
314
313
|
rescue Pry::RescuableException
|
315
314
|
end
|
@@ -439,9 +438,7 @@ class Pry
|
|
439
438
|
#
|
440
439
|
# @param [String] search The line typed so far
|
441
440
|
# @return [Array<String>] Completion words
|
442
|
-
def complete(search)
|
443
|
-
[]
|
444
|
-
end
|
441
|
+
def complete(search); Bond::DefaultMission.completions; end
|
445
442
|
|
446
443
|
private
|
447
444
|
|
data/lib/pry/command_set.rb
CHANGED
@@ -10,15 +10,19 @@ class Pry
|
|
10
10
|
class CommandSet
|
11
11
|
include Enumerable
|
12
12
|
include Pry::Helpers::BaseHelpers
|
13
|
+
|
14
|
+
attr_reader :commands
|
13
15
|
attr_reader :helper_module
|
14
16
|
|
15
|
-
# @param [Array<
|
16
|
-
#
|
17
|
+
# @param [Array<CommandSet>] imported_sets Sets which will be imported
|
18
|
+
# automatically
|
17
19
|
# @yield Optional block run to define commands
|
18
20
|
def initialize(*imported_sets, &block)
|
19
21
|
@commands = {}
|
20
22
|
@helper_module = Module.new
|
23
|
+
|
21
24
|
import(*imported_sets)
|
25
|
+
|
22
26
|
instance_eval(&block) if block
|
23
27
|
end
|
24
28
|
|
@@ -79,7 +83,7 @@ class Pry
|
|
79
83
|
description, options = ["No description.", description] if description.is_a?(Hash)
|
80
84
|
options = Pry::Command.default_options(match).merge!(options)
|
81
85
|
|
82
|
-
|
86
|
+
commands[match] = Pry::BlockCommand.subclass(match, description, options, helper_module, &block)
|
83
87
|
end
|
84
88
|
alias_method :command, :block_command
|
85
89
|
|
@@ -111,9 +115,9 @@ class Pry
|
|
111
115
|
description, options = ["No description.", description] if description.is_a?(Hash)
|
112
116
|
options = Pry::Command.default_options(match).merge!(options)
|
113
117
|
|
114
|
-
|
115
|
-
|
116
|
-
|
118
|
+
commands[match] = Pry::ClassCommand.subclass(match, description, options, helper_module, &block)
|
119
|
+
commands[match].class_eval(&block)
|
120
|
+
commands[match]
|
117
121
|
end
|
118
122
|
|
119
123
|
# Execute a block of code before a command is invoked. The block also
|
@@ -122,7 +126,7 @@ class Pry
|
|
122
126
|
# @param [String, Regexp] search The match or listing of the command.
|
123
127
|
# @yield The block to be run before the command.
|
124
128
|
# @example Display parameter before invoking command
|
125
|
-
# Pry.
|
129
|
+
# Pry.commands.before_command("whereami") do |n|
|
126
130
|
# output.puts "parameter passed was #{n}"
|
127
131
|
# end
|
128
132
|
def before_command(search, &block)
|
@@ -136,7 +140,7 @@ class Pry
|
|
136
140
|
# @param [String, Regexp] search The match or listing of the command.
|
137
141
|
# @yield The block to be run after the command.
|
138
142
|
# @example Display text 'command complete' after invoking command
|
139
|
-
# Pry.
|
143
|
+
# Pry.commands.after_command("whereami") do |n|
|
140
144
|
# output.puts "command complete!"
|
141
145
|
# end
|
142
146
|
def after_command(search, &block)
|
@@ -148,12 +152,18 @@ class Pry
|
|
148
152
|
@commands.each(&block)
|
149
153
|
end
|
150
154
|
|
155
|
+
# Add a given command object to this set.
|
156
|
+
# @param [Command] command The subclass of Pry::Command you wish to add.
|
157
|
+
def add_command(command)
|
158
|
+
commands[command.match] = command
|
159
|
+
end
|
160
|
+
|
151
161
|
# Removes some commands from the set
|
152
162
|
# @param [Array<String>] searches the matches or listings of the commands to remove
|
153
163
|
def delete(*searches)
|
154
164
|
searches.each do |search|
|
155
165
|
cmd = find_command_by_match_or_listing(search)
|
156
|
-
|
166
|
+
commands.delete cmd.match
|
157
167
|
end
|
158
168
|
end
|
159
169
|
|
@@ -163,7 +173,7 @@ class Pry
|
|
163
173
|
# @return [Pry::CommandSet] Returns the reciever (a command set).
|
164
174
|
def import(*sets)
|
165
175
|
sets.each do |set|
|
166
|
-
|
176
|
+
commands.merge! set.commands
|
167
177
|
helper_module.send :include, set.helper_module
|
168
178
|
end
|
169
179
|
self
|
@@ -177,7 +187,7 @@ class Pry
|
|
177
187
|
helper_module.send :include, set.helper_module
|
178
188
|
matches.each do |match|
|
179
189
|
cmd = set.find_command_by_match_or_listing(match)
|
180
|
-
|
190
|
+
commands[cmd.match] = cmd
|
181
191
|
end
|
182
192
|
self
|
183
193
|
end
|
@@ -186,8 +196,8 @@ class Pry
|
|
186
196
|
# of the command to retrieve.
|
187
197
|
# @return [Command] The command object matched.
|
188
198
|
def find_command_by_match_or_listing(match_or_listing)
|
189
|
-
cmd = (
|
190
|
-
Pry::Helpers::BaseHelpers.find_command(match_or_listing,
|
199
|
+
cmd = (commands[match_or_listing] ||
|
200
|
+
Pry::Helpers::BaseHelpers.find_command(match_or_listing, commands))
|
191
201
|
cmd or raise ArgumentError, "Cannot find a command: '#{match_or_listing}'!"
|
192
202
|
end
|
193
203
|
|
@@ -246,11 +256,11 @@ class Pry
|
|
246
256
|
:description => cmd.description
|
247
257
|
}.merge!(options)
|
248
258
|
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
259
|
+
commands[new_match] = cmd.dup
|
260
|
+
commands[new_match].match = new_match
|
261
|
+
commands[new_match].description = options.delete(:description)
|
262
|
+
commands[new_match].options.merge!(options)
|
263
|
+
commands.delete(cmd.match)
|
254
264
|
end
|
255
265
|
|
256
266
|
def disabled_command(name_of_disabled_command, message, matcher=name_of_disabled_command)
|
@@ -299,71 +309,18 @@ class Pry
|
|
299
309
|
end
|
300
310
|
|
301
311
|
|
302
|
-
# @return [Array]
|
303
|
-
# The list of commands provided by the command set.
|
312
|
+
# @return [Array] The list of commands provided by the command set.
|
304
313
|
def list_commands
|
305
|
-
|
306
|
-
end
|
307
|
-
alias_method :keys, :list_commands
|
308
|
-
|
309
|
-
def to_hash
|
310
|
-
@commands.dup
|
314
|
+
commands.keys
|
311
315
|
end
|
312
|
-
alias_method :to_h, :to_hash
|
313
316
|
|
314
317
|
# Find a command that matches the given line
|
315
|
-
# @param [String]
|
318
|
+
# @param [String] val The line that might be a command invocation
|
316
319
|
# @return [Pry::Command, nil]
|
317
|
-
def
|
318
|
-
|
319
|
-
command.matches?(pattern)
|
320
|
-
end.sort_by do |command|
|
321
|
-
command.match_score(pattern)
|
322
|
-
end.last
|
323
|
-
end
|
324
|
-
alias_method :find_command, :[]
|
325
|
-
|
326
|
-
#
|
327
|
-
# Re-assign the command found at _pattern_ with _command_.
|
328
|
-
#
|
329
|
-
# @param [Regexp, String] pattern
|
330
|
-
# The command to add or replace(found at _pattern_).
|
331
|
-
#
|
332
|
-
# @param [Pry::Command] command
|
333
|
-
# The command to add.
|
334
|
-
#
|
335
|
-
# @return [Pry::Command]
|
336
|
-
# Returns the new command (matched with "pattern".)
|
337
|
-
#
|
338
|
-
# @example
|
339
|
-
# Pry.config.commands["help"] = MyHelpCommand
|
340
|
-
#
|
341
|
-
def []=(pattern, command)
|
342
|
-
if command.equal?(nil)
|
343
|
-
return @commands.delete(pattern)
|
344
|
-
end
|
345
|
-
unless Class === command && command < Pry::Command
|
346
|
-
raise TypeError, "command is not a subclass of Pry::Command"
|
347
|
-
end
|
348
|
-
bind_command_to_pattern = pattern != command.match
|
349
|
-
if bind_command_to_pattern
|
350
|
-
command_copy = command.dup
|
351
|
-
command_copy.match = pattern
|
352
|
-
@commands[pattern] = command_copy
|
353
|
-
else
|
354
|
-
@commands[pattern] = command
|
355
|
-
end
|
356
|
-
end
|
357
|
-
|
358
|
-
#
|
359
|
-
# Add a command to set.
|
360
|
-
#
|
361
|
-
# @param [Command] command
|
362
|
-
# a subclass of Pry::Command.
|
363
|
-
#
|
364
|
-
def add_command(command)
|
365
|
-
self[command.match] = command
|
320
|
+
def find_command(val)
|
321
|
+
commands.values.select{ |c| c.matches?(val) }.sort_by{ |c| c.match_score(val) }.last
|
366
322
|
end
|
323
|
+
alias_method :[], :find_command
|
367
324
|
|
368
325
|
# Find the command that the user might be trying to refer to.
|
369
326
|
# @param [String] search The user's search.
|
@@ -399,7 +356,7 @@ class Pry
|
|
399
356
|
|
400
357
|
# @private (used for testing)
|
401
358
|
def run_command(context, match, *args)
|
402
|
-
command =
|
359
|
+
command = commands[match] or raise NoCommandError.new(match, self)
|
403
360
|
command.new(context).call_safely(*args)
|
404
361
|
end
|
405
362
|
|
@@ -411,9 +368,9 @@ class Pry
|
|
411
368
|
if command = find_command(search)
|
412
369
|
command.new(context).complete(search)
|
413
370
|
else
|
414
|
-
|
371
|
+
commands.keys.select do |key|
|
415
372
|
String === key && key.start_with?(search)
|
416
|
-
end.map{ |key| key + " " }
|
373
|
+
end.map{ |key| key + " " } + Bond::DefaultMission.completions
|
417
374
|
end
|
418
375
|
end
|
419
376
|
end
|