pry 0.10.pre.1-i386-mingw32 → 0.10.0.pre3-i386-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +702 -0
- data/LICENSE +2 -2
- data/{README.markdown → README.md} +41 -35
- data/lib/pry.rb +82 -139
- data/lib/pry/cli.rb +77 -30
- data/lib/pry/code.rb +122 -183
- data/lib/pry/code/code_file.rb +103 -0
- data/lib/pry/code/code_range.rb +71 -0
- data/lib/pry/code/loc.rb +92 -0
- data/lib/pry/code_object.rb +172 -0
- data/lib/pry/color_printer.rb +55 -0
- data/lib/pry/command.rb +184 -28
- data/lib/pry/command_set.rb +113 -59
- data/lib/pry/commands.rb +4 -27
- data/lib/pry/commands/amend_line.rb +99 -0
- data/lib/pry/commands/bang.rb +20 -0
- data/lib/pry/commands/bang_pry.rb +17 -0
- data/lib/pry/commands/cat.rb +62 -0
- data/lib/pry/commands/cat/abstract_formatter.rb +27 -0
- data/lib/pry/commands/cat/exception_formatter.rb +77 -0
- data/lib/pry/commands/cat/file_formatter.rb +67 -0
- data/lib/pry/commands/cat/input_expression_formatter.rb +43 -0
- data/lib/pry/commands/cd.rb +41 -0
- data/lib/pry/commands/change_inspector.rb +27 -0
- data/lib/pry/commands/change_prompt.rb +26 -0
- data/lib/pry/commands/code_collector.rb +165 -0
- data/lib/pry/commands/disable_pry.rb +27 -0
- data/lib/pry/commands/disabled_commands.rb +2 -0
- data/lib/pry/commands/easter_eggs.rb +112 -0
- data/lib/pry/commands/edit.rb +195 -0
- data/lib/pry/commands/edit/exception_patcher.rb +25 -0
- data/lib/pry/commands/edit/file_and_line_locator.rb +36 -0
- data/lib/pry/commands/exit.rb +42 -0
- data/lib/pry/commands/exit_all.rb +29 -0
- data/lib/pry/commands/exit_program.rb +23 -0
- data/lib/pry/commands/find_method.rb +193 -0
- data/lib/pry/commands/fix_indent.rb +19 -0
- data/lib/pry/commands/gem_cd.rb +26 -0
- data/lib/pry/commands/gem_install.rb +32 -0
- data/lib/pry/commands/gem_list.rb +33 -0
- data/lib/pry/commands/gem_open.rb +29 -0
- data/lib/pry/commands/gist.rb +101 -0
- data/lib/pry/commands/help.rb +164 -0
- data/lib/pry/commands/hist.rb +180 -0
- data/lib/pry/commands/import_set.rb +22 -0
- data/lib/pry/commands/install_command.rb +53 -0
- data/lib/pry/commands/jump_to.rb +29 -0
- data/lib/pry/commands/list_inspectors.rb +35 -0
- data/lib/pry/commands/list_prompts.rb +35 -0
- data/lib/pry/commands/ls.rb +114 -0
- data/lib/pry/commands/ls/constants.rb +47 -0
- data/lib/pry/commands/ls/formatter.rb +49 -0
- data/lib/pry/commands/ls/globals.rb +48 -0
- data/lib/pry/commands/ls/grep.rb +21 -0
- data/lib/pry/commands/ls/instance_vars.rb +39 -0
- data/lib/pry/commands/ls/interrogatable.rb +18 -0
- data/lib/pry/commands/ls/jruby_hacks.rb +49 -0
- data/lib/pry/commands/ls/local_names.rb +35 -0
- data/lib/pry/commands/ls/local_vars.rb +39 -0
- data/lib/pry/commands/ls/ls_entity.rb +70 -0
- data/lib/pry/commands/ls/methods.rb +57 -0
- data/lib/pry/commands/ls/methods_helper.rb +46 -0
- data/lib/pry/commands/ls/self_methods.rb +32 -0
- data/lib/pry/commands/nesting.rb +25 -0
- data/lib/pry/commands/play.rb +103 -0
- data/lib/pry/commands/pry_backtrace.rb +25 -0
- data/lib/pry/commands/pry_version.rb +17 -0
- data/lib/pry/commands/raise_up.rb +32 -0
- data/lib/pry/commands/reload_code.rb +62 -0
- data/lib/pry/commands/reset.rb +18 -0
- data/lib/pry/commands/ri.rb +60 -0
- data/lib/pry/commands/save_file.rb +61 -0
- data/lib/pry/commands/shell_command.rb +48 -0
- data/lib/pry/commands/shell_mode.rb +25 -0
- data/lib/pry/commands/show_doc.rb +83 -0
- data/lib/pry/commands/show_info.rb +195 -0
- data/lib/pry/commands/show_input.rb +17 -0
- data/lib/pry/commands/show_source.rb +50 -0
- data/lib/pry/commands/simple_prompt.rb +22 -0
- data/lib/pry/commands/stat.rb +40 -0
- data/lib/pry/commands/switch_to.rb +23 -0
- data/lib/pry/commands/toggle_color.rb +24 -0
- data/lib/pry/commands/watch_expression.rb +105 -0
- data/lib/pry/commands/watch_expression/expression.rb +38 -0
- data/lib/pry/commands/whereami.rb +190 -0
- data/lib/pry/commands/wtf.rb +57 -0
- data/lib/pry/config.rb +20 -229
- data/lib/pry/config/behavior.rb +139 -0
- data/lib/pry/config/convenience.rb +26 -0
- data/lib/pry/config/default.rb +165 -0
- data/lib/pry/core_extensions.rb +59 -38
- data/lib/pry/editor.rb +133 -0
- data/lib/pry/exceptions.rb +77 -0
- data/lib/pry/helpers.rb +1 -0
- data/lib/pry/helpers/base_helpers.rb +40 -154
- data/lib/pry/helpers/command_helpers.rb +19 -130
- data/lib/pry/helpers/documentation_helpers.rb +21 -11
- data/lib/pry/helpers/table.rb +109 -0
- data/lib/pry/helpers/text.rb +8 -9
- data/lib/pry/history.rb +61 -45
- data/lib/pry/history_array.rb +11 -1
- data/lib/pry/hooks.rb +10 -32
- data/lib/pry/indent.rb +110 -38
- data/lib/pry/input_completer.rb +242 -0
- data/lib/pry/input_lock.rb +132 -0
- data/lib/pry/inspector.rb +27 -0
- data/lib/pry/last_exception.rb +61 -0
- data/lib/pry/method.rb +199 -200
- data/lib/pry/method/disowned.rb +53 -0
- data/lib/pry/method/patcher.rb +125 -0
- data/lib/pry/method/weird_method_locator.rb +186 -0
- data/lib/pry/module_candidate.rb +39 -33
- data/lib/pry/object_path.rb +82 -0
- data/lib/pry/output.rb +50 -0
- data/lib/pry/pager.rb +234 -0
- data/lib/pry/plugins.rb +4 -3
- data/lib/pry/prompt.rb +26 -0
- data/lib/pry/pry_class.rb +199 -227
- data/lib/pry/pry_instance.rb +344 -403
- data/lib/pry/rbx_path.rb +1 -1
- data/lib/pry/repl.rb +202 -0
- data/lib/pry/repl_file_loader.rb +20 -26
- data/lib/pry/rubygem.rb +82 -0
- data/lib/pry/terminal.rb +79 -0
- data/lib/pry/test/helper.rb +170 -0
- data/lib/pry/version.rb +1 -1
- data/lib/pry/wrapped_module.rb +133 -48
- metadata +132 -197
- data/.document +0 -2
- data/.gemtest +0 -0
- data/.gitignore +0 -16
- data/.travis.yml +0 -17
- data/.yardopts +0 -1
- data/CHANGELOG +0 -387
- data/CONTRIBUTORS +0 -36
- data/Gemfile +0 -2
- data/Rakefile +0 -137
- data/TODO +0 -117
- data/examples/example_basic.rb +0 -15
- data/examples/example_command_override.rb +0 -32
- data/examples/example_commands.rb +0 -36
- data/examples/example_hooks.rb +0 -9
- data/examples/example_image_edit.rb +0 -67
- data/examples/example_input.rb +0 -7
- data/examples/example_input2.rb +0 -29
- data/examples/example_output.rb +0 -11
- data/examples/example_print.rb +0 -6
- data/examples/example_prompt.rb +0 -9
- data/examples/helper.rb +0 -6
- data/lib/pry/completion.rb +0 -221
- data/lib/pry/custom_completions.rb +0 -6
- data/lib/pry/default_commands/cd.rb +0 -81
- data/lib/pry/default_commands/commands.rb +0 -62
- data/lib/pry/default_commands/context.rb +0 -98
- data/lib/pry/default_commands/easter_eggs.rb +0 -95
- data/lib/pry/default_commands/editing.rb +0 -420
- data/lib/pry/default_commands/find_method.rb +0 -169
- data/lib/pry/default_commands/gems.rb +0 -84
- data/lib/pry/default_commands/gist.rb +0 -187
- data/lib/pry/default_commands/help.rb +0 -127
- data/lib/pry/default_commands/hist.rb +0 -120
- data/lib/pry/default_commands/input_and_output.rb +0 -306
- data/lib/pry/default_commands/introspection.rb +0 -410
- data/lib/pry/default_commands/ls.rb +0 -272
- data/lib/pry/default_commands/misc.rb +0 -38
- data/lib/pry/default_commands/navigating_pry.rb +0 -110
- data/lib/pry/default_commands/whereami.rb +0 -92
- data/lib/pry/extended_commands/experimental.rb +0 -7
- data/lib/pry/rbx_method.rb +0 -13
- data/man/pry.1 +0 -195
- data/man/pry.1.html +0 -204
- data/man/pry.1.ronn +0 -141
- data/pry.gemspec +0 -46
- data/test/candidate_helper1.rb +0 -11
- data/test/candidate_helper2.rb +0 -8
- data/test/helper.rb +0 -223
- data/test/test_cli.rb +0 -78
- data/test/test_code.rb +0 -201
- data/test/test_command.rb +0 -712
- data/test/test_command_helpers.rb +0 -9
- data/test/test_command_integration.rb +0 -668
- data/test/test_command_set.rb +0 -610
- data/test/test_completion.rb +0 -62
- data/test/test_control_d_handler.rb +0 -45
- data/test/test_default_commands/example.erb +0 -5
- data/test/test_default_commands/test_cd.rb +0 -318
- data/test/test_default_commands/test_context.rb +0 -280
- data/test/test_default_commands/test_documentation.rb +0 -314
- data/test/test_default_commands/test_find_method.rb +0 -50
- data/test/test_default_commands/test_gems.rb +0 -18
- data/test/test_default_commands/test_help.rb +0 -57
- data/test/test_default_commands/test_input.rb +0 -428
- data/test/test_default_commands/test_introspection.rb +0 -511
- data/test/test_default_commands/test_ls.rb +0 -151
- data/test/test_default_commands/test_shell.rb +0 -343
- data/test/test_default_commands/test_show_source.rb +0 -432
- data/test/test_exception_whitelist.rb +0 -21
- data/test/test_history_array.rb +0 -65
- data/test/test_hooks.rb +0 -521
- data/test/test_indent.rb +0 -277
- data/test/test_input_stack.rb +0 -86
- data/test/test_method.rb +0 -401
- data/test/test_pry.rb +0 -463
- data/test/test_pry_defaults.rb +0 -419
- data/test/test_pry_history.rb +0 -84
- data/test/test_pry_output.rb +0 -41
- data/test/test_sticky_locals.rb +0 -155
- data/test/test_syntax_checking.rb +0 -65
- data/test/test_wrapped_module.rb +0 -174
- data/test/testrc +0 -2
- data/test/testrcbad +0 -2
- data/wiki/Customizing-pry.md +0 -397
- data/wiki/Home.md +0 -4
data/lib/pry/commands.rb
CHANGED
@@ -1,29 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require "pry/default_commands/gems"
|
4
|
-
require "pry/default_commands/context"
|
5
|
-
require "pry/default_commands/commands"
|
6
|
-
require "pry/default_commands/input_and_output"
|
7
|
-
require "pry/default_commands/introspection"
|
8
|
-
require "pry/default_commands/editing"
|
9
|
-
require "pry/default_commands/navigating_pry"
|
10
|
-
require "pry/default_commands/easter_eggs"
|
1
|
+
# Default commands used by Pry.
|
2
|
+
Pry::Commands = Pry::CommandSet.new
|
11
3
|
|
12
|
-
|
13
|
-
|
14
|
-
class Pry
|
15
|
-
|
16
|
-
# Default commands used by Pry.
|
17
|
-
Commands = Pry::CommandSet.new do
|
18
|
-
import DefaultCommands::Misc
|
19
|
-
import DefaultCommands::Help
|
20
|
-
import DefaultCommands::Gems
|
21
|
-
import DefaultCommands::Context
|
22
|
-
import DefaultCommands::NavigatingPry
|
23
|
-
import DefaultCommands::Editing
|
24
|
-
import DefaultCommands::InputAndOutput
|
25
|
-
import DefaultCommands::Introspection
|
26
|
-
import DefaultCommands::EasterEggs
|
27
|
-
import DefaultCommands::Commands
|
28
|
-
end
|
4
|
+
Dir[File.expand_path('../commands', __FILE__) << '/*.rb'].each do |file|
|
5
|
+
require file
|
29
6
|
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
class Pry
|
2
|
+
class Command::AmendLine < Pry::ClassCommand
|
3
|
+
match(/amend-line(?: (-?\d+)(?:\.\.(-?\d+))?)?/)
|
4
|
+
group 'Editing'
|
5
|
+
description 'Amend a line of input in multi-line mode.'
|
6
|
+
command_options :interpolate => false, :listing => 'amend-line'
|
7
|
+
|
8
|
+
banner <<-'BANNER'
|
9
|
+
Amend a line of input in multi-line mode. `amend-line N`, where the N represents
|
10
|
+
line to replace. Can also specify a range of lines using `amend-line N..M`
|
11
|
+
syntax. Passing "!" as replacement content deletes the line(s) instead.
|
12
|
+
|
13
|
+
amend-line 1 puts 'new' # replace line 1
|
14
|
+
amend-line 1..4 ! # delete lines 1..4
|
15
|
+
amend-line 3 >puts 'bye' # insert before line 3
|
16
|
+
amend-line puts 'appended' # no line number modifies immediately preceding line
|
17
|
+
BANNER
|
18
|
+
|
19
|
+
def process
|
20
|
+
raise CommandError, "No input to amend." if eval_string.empty?
|
21
|
+
|
22
|
+
eval_string.replace amended_input(eval_string)
|
23
|
+
run "fix-indent"
|
24
|
+
run "show-input"
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
# @param [String] string The string to amend.
|
30
|
+
# @return [String] A new string with the amendments applied to it.
|
31
|
+
def amended_input(string)
|
32
|
+
input_array = eval_string.each_line.to_a
|
33
|
+
|
34
|
+
if arg_string == "!"
|
35
|
+
delete_from_array(input_array, line_range)
|
36
|
+
elsif arg_string.start_with?(">")
|
37
|
+
insert_into_array(input_array, line_range)
|
38
|
+
else
|
39
|
+
replace_in_array(input_array, line_range)
|
40
|
+
end
|
41
|
+
|
42
|
+
input_array.join
|
43
|
+
end
|
44
|
+
|
45
|
+
def delete_from_array(array, range)
|
46
|
+
array.slice!(range)
|
47
|
+
end
|
48
|
+
|
49
|
+
def insert_into_array(array, range)
|
50
|
+
insert_slot = Array(range).first
|
51
|
+
array.insert(insert_slot, arg_string[1..-1] << "\n")
|
52
|
+
end
|
53
|
+
|
54
|
+
def replace_in_array(array, range)
|
55
|
+
array[range] = arg_string + "\n"
|
56
|
+
end
|
57
|
+
|
58
|
+
# @return [Fixnum] The number of lines currently in `eval_string` (the input buffer).
|
59
|
+
def line_count
|
60
|
+
eval_string.lines.count
|
61
|
+
end
|
62
|
+
|
63
|
+
# Returns the (one-indexed) start and end lines given by the user.
|
64
|
+
# The lines in this range will be affected by the `amend-line`.
|
65
|
+
# Returns `nil` if no lines were specified by the user.
|
66
|
+
# @return [Array<Fixnum>, nil]
|
67
|
+
def start_and_end_line_number
|
68
|
+
start_line_number, end_line_number = args
|
69
|
+
end_line_number ||= start_line_number.to_i
|
70
|
+
|
71
|
+
[start_line_number.to_i, end_line_number.to_i] if start_line_number
|
72
|
+
end
|
73
|
+
|
74
|
+
# Takes two numbers that are 1-indexed, and returns a range (or
|
75
|
+
# number) that is 0-indexed. 1-indexed means the first element is
|
76
|
+
# indentified by 1 rather than by 0 (as is the case for Ruby arrays).
|
77
|
+
# @param [Fixnum] start_line_number One-indexed number.
|
78
|
+
# @param [Fixnum] end_line_number One-indexed number.
|
79
|
+
# @return [Range] The zero-indexed range.
|
80
|
+
def zero_indexed_range_from_one_indexed_numbers(start_line_number, end_line_number)
|
81
|
+
# FIXME: one_index_number is a horrible name for this method
|
82
|
+
one_index_number(start_line_number)..one_index_number(end_line_number)
|
83
|
+
end
|
84
|
+
|
85
|
+
# The lines (or line) that will be modified by the `amend-line`.
|
86
|
+
# @return [Range, Fixnum] The lines or line.
|
87
|
+
def line_range
|
88
|
+
start_line_number, end_line_number = start_and_end_line_number
|
89
|
+
if start_line_number
|
90
|
+
zero_indexed_range_from_one_indexed_numbers(start_line_number,
|
91
|
+
end_line_number)
|
92
|
+
else
|
93
|
+
line_count - 1
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
Pry::Commands.add_command(Pry::Command::AmendLine)
|
99
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Pry
|
2
|
+
class Command::Bang < Pry::ClassCommand
|
3
|
+
match /^\s*!\s*$/
|
4
|
+
group 'Editing'
|
5
|
+
description 'Clear the input buffer.'
|
6
|
+
command_options :use_prefix => false
|
7
|
+
|
8
|
+
banner <<-'BANNER'
|
9
|
+
Clear the input buffer. Useful if the parsing process goes wrong and you get
|
10
|
+
stuck in the read loop.
|
11
|
+
BANNER
|
12
|
+
|
13
|
+
def process
|
14
|
+
output.puts 'Input buffer cleared!'
|
15
|
+
eval_string.replace('')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
Pry::Commands.add_command(Pry::Command::Bang)
|
20
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class Pry
|
2
|
+
class Command::BangPry < Pry::ClassCommand
|
3
|
+
match '!pry'
|
4
|
+
group 'Navigating Pry'
|
5
|
+
description 'Start a Pry session on current self.'
|
6
|
+
|
7
|
+
banner <<-'BANNER'
|
8
|
+
Start a Pry session on current self. Also works mid multi-line expression.
|
9
|
+
BANNER
|
10
|
+
|
11
|
+
def process
|
12
|
+
target.pry
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
Pry::Commands.add_command(Pry::Command::BangPry)
|
17
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
class Pry
|
2
|
+
class Command::Cat < Pry::ClassCommand
|
3
|
+
require 'pry/commands/cat/abstract_formatter.rb'
|
4
|
+
require 'pry/commands/cat/input_expression_formatter.rb'
|
5
|
+
require 'pry/commands/cat/exception_formatter.rb'
|
6
|
+
require 'pry/commands/cat/file_formatter.rb'
|
7
|
+
|
8
|
+
match 'cat'
|
9
|
+
group 'Input and Output'
|
10
|
+
description "Show code from a file, Pry's input buffer, or the last exception."
|
11
|
+
|
12
|
+
banner <<-'BANNER'
|
13
|
+
Usage: cat FILE
|
14
|
+
cat --ex [STACK_INDEX]
|
15
|
+
cat --in [INPUT_INDEX_OR_RANGE]
|
16
|
+
|
17
|
+
`cat` is capable of showing part or all of a source file, the context of the
|
18
|
+
last exception, or an expression from Pry's input history.
|
19
|
+
|
20
|
+
`cat --ex` defaults to showing the lines surrounding the location of the last
|
21
|
+
exception. Invoking it more than once travels up the exception's backtrace, and
|
22
|
+
providing a number shows the context of the given index of the backtrace.
|
23
|
+
BANNER
|
24
|
+
|
25
|
+
def options(opt)
|
26
|
+
opt.on :ex, "Show the context of the last exception", :optional_argument => true, :as => Integer
|
27
|
+
opt.on :i, :in, "Show one or more entries from Pry's expression history", :optional_argument => true, :as => Range, :default => -5..-1
|
28
|
+
opt.on :s, :start, "Starting line (defaults to the first line)", :optional_argument => true, :as => Integer
|
29
|
+
opt.on :e, :end, "Ending line (defaults to the last line)", :optional_argument => true, :as => Integer
|
30
|
+
opt.on :l, :'line-numbers', "Show line numbers"
|
31
|
+
opt.on :t, :type, "The file type for syntax highlighting (e.g., 'ruby' or 'python')", :argument => true, :as => Symbol
|
32
|
+
end
|
33
|
+
|
34
|
+
def process
|
35
|
+
output = case
|
36
|
+
when opts.present?(:ex)
|
37
|
+
ExceptionFormatter.new(_pry_.last_exception, _pry_, opts).format
|
38
|
+
when opts.present?(:in)
|
39
|
+
InputExpressionFormatter.new(_pry_.input_array, opts).format
|
40
|
+
else
|
41
|
+
FileFormatter.new(args.first, _pry_, opts).format
|
42
|
+
end
|
43
|
+
|
44
|
+
_pry_.pager.page output
|
45
|
+
end
|
46
|
+
|
47
|
+
def complete(search)
|
48
|
+
super | load_path_completions
|
49
|
+
end
|
50
|
+
|
51
|
+
def load_path_completions
|
52
|
+
$LOAD_PATH.flat_map do |path|
|
53
|
+
Dir[path + '/**/*'].map { |f|
|
54
|
+
next if File.directory?(f)
|
55
|
+
f.sub!(path + '/', '')
|
56
|
+
}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
Pry::Commands.add_command(Pry::Command::Cat)
|
62
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class Pry
|
2
|
+
class Command::Cat
|
3
|
+
class AbstractFormatter
|
4
|
+
include Pry::Helpers::CommandHelpers
|
5
|
+
include Pry::Helpers::BaseHelpers
|
6
|
+
|
7
|
+
private
|
8
|
+
def decorate(content)
|
9
|
+
content.code_type = code_type
|
10
|
+
content.between(*between_lines).
|
11
|
+
with_line_numbers(use_line_numbers?)
|
12
|
+
end
|
13
|
+
|
14
|
+
def code_type
|
15
|
+
opts[:type] || :ruby
|
16
|
+
end
|
17
|
+
|
18
|
+
def use_line_numbers?
|
19
|
+
opts.present?(:'line-numbers') || opts.present?(:ex)
|
20
|
+
end
|
21
|
+
|
22
|
+
def between_lines
|
23
|
+
[opts[:start] || 1, opts[:end] || -1]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
class Pry
|
2
|
+
class Command::Cat
|
3
|
+
class ExceptionFormatter < AbstractFormatter
|
4
|
+
attr_reader :ex
|
5
|
+
attr_reader :opts
|
6
|
+
attr_reader :_pry_
|
7
|
+
|
8
|
+
def initialize(exception, _pry_, opts)
|
9
|
+
@ex = exception
|
10
|
+
@opts = opts
|
11
|
+
@_pry_ = _pry_
|
12
|
+
end
|
13
|
+
|
14
|
+
def format
|
15
|
+
check_for_errors
|
16
|
+
set_file_and_dir_locals(backtrace_file, _pry_, _pry_.current_context)
|
17
|
+
code = decorate(Pry::Code.from_file(backtrace_file).
|
18
|
+
between(*start_and_end_line_for_code_window).
|
19
|
+
with_marker(backtrace_line))
|
20
|
+
"#{header}#{code}"
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def code_window_size
|
26
|
+
_pry_.config.default_window_size || 5
|
27
|
+
end
|
28
|
+
|
29
|
+
def backtrace_level
|
30
|
+
return @backtrace_level if @backtrace_level
|
31
|
+
|
32
|
+
bl = if opts[:ex].nil?
|
33
|
+
ex.bt_index
|
34
|
+
else
|
35
|
+
ex.bt_index = absolute_index_number(opts[:ex], ex.backtrace.size)
|
36
|
+
end
|
37
|
+
|
38
|
+
increment_backtrace_level
|
39
|
+
@backtrace_level = bl
|
40
|
+
end
|
41
|
+
|
42
|
+
def increment_backtrace_level
|
43
|
+
ex.inc_bt_index
|
44
|
+
end
|
45
|
+
|
46
|
+
def backtrace_file
|
47
|
+
Array(ex.bt_source_location_for(backtrace_level)).first
|
48
|
+
end
|
49
|
+
|
50
|
+
def backtrace_line
|
51
|
+
Array(ex.bt_source_location_for(backtrace_level)).last
|
52
|
+
end
|
53
|
+
|
54
|
+
def check_for_errors
|
55
|
+
raise CommandError, "No exception found." unless ex
|
56
|
+
raise CommandError, "The given backtrace level is out of bounds." unless backtrace_file
|
57
|
+
end
|
58
|
+
|
59
|
+
def start_and_end_line_for_code_window
|
60
|
+
start_line = backtrace_line - code_window_size
|
61
|
+
start_line = 1 if start_line < 1
|
62
|
+
|
63
|
+
[start_line, backtrace_line + code_window_size]
|
64
|
+
end
|
65
|
+
|
66
|
+
def header
|
67
|
+
unindent %{
|
68
|
+
#{Helpers::Text.bold 'Exception:'} #{ex.class}: #{ex.message}
|
69
|
+
--
|
70
|
+
#{Helpers::Text.bold('From:')} #{backtrace_file} @ line #{backtrace_line} @ #{Helpers::Text.bold("level: #{backtrace_level}")} of backtrace (of #{ex.backtrace.size - 1}).
|
71
|
+
|
72
|
+
}
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
class Pry
|
2
|
+
class Command::Cat
|
3
|
+
class FileFormatter < AbstractFormatter
|
4
|
+
attr_reader :file_with_embedded_line
|
5
|
+
attr_reader :opts
|
6
|
+
attr_reader :_pry_
|
7
|
+
|
8
|
+
def initialize(file_with_embedded_line, _pry_, opts)
|
9
|
+
@file_with_embedded_line = file_with_embedded_line
|
10
|
+
@opts = opts
|
11
|
+
@_pry_ = _pry_
|
12
|
+
@code_from_file = Pry::Code.from_file(file_name)
|
13
|
+
end
|
14
|
+
|
15
|
+
def format
|
16
|
+
raise CommandError, "Must provide a filename, --in, or --ex." if !file_with_embedded_line
|
17
|
+
|
18
|
+
set_file_and_dir_locals(file_name, _pry_, _pry_.current_context)
|
19
|
+
decorate(@code_from_file)
|
20
|
+
end
|
21
|
+
|
22
|
+
def file_and_line
|
23
|
+
file_name, line_num = file_with_embedded_line.split(/:(?!\/|\\)/)
|
24
|
+
|
25
|
+
[file_name, line_num ? line_num.to_i : nil]
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def file_name
|
31
|
+
file_and_line.first
|
32
|
+
end
|
33
|
+
|
34
|
+
def line_number
|
35
|
+
file_and_line.last
|
36
|
+
end
|
37
|
+
|
38
|
+
def code_window_size
|
39
|
+
_pry_.config.default_window_size || 7
|
40
|
+
end
|
41
|
+
|
42
|
+
def decorate(content)
|
43
|
+
line_number ? super.around(line_number, code_window_size) : super
|
44
|
+
end
|
45
|
+
|
46
|
+
def code_type
|
47
|
+
opts[:type] || detect_code_type_from_file(file_name)
|
48
|
+
end
|
49
|
+
|
50
|
+
def detect_code_type_from_file(file_name)
|
51
|
+
code_type = @code_from_file.code_type
|
52
|
+
|
53
|
+
if code_type == :unknown
|
54
|
+
name, ext = File.basename(file_name).split('.', 2)
|
55
|
+
case name
|
56
|
+
when "Rakefile", "Gemfile"
|
57
|
+
:ruby
|
58
|
+
else
|
59
|
+
:text
|
60
|
+
end
|
61
|
+
else
|
62
|
+
code_type
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class Pry
|
2
|
+
class Command::Cat
|
3
|
+
class InputExpressionFormatter < AbstractFormatter
|
4
|
+
attr_accessor :input_expressions
|
5
|
+
attr_accessor :opts
|
6
|
+
|
7
|
+
def initialize(input_expressions, opts)
|
8
|
+
@input_expressions = input_expressions
|
9
|
+
@opts = opts
|
10
|
+
end
|
11
|
+
|
12
|
+
def format
|
13
|
+
raise CommandError, "No input expressions!" if numbered_input_items.length < 1
|
14
|
+
|
15
|
+
if numbered_input_items.length > 1
|
16
|
+
content = ""
|
17
|
+
numbered_input_items.each do |i, s|
|
18
|
+
content << "#{Helpers::Text.bold(i.to_s)}:\n" << decorate(Pry::Code(s).with_indentation(2)).to_s
|
19
|
+
end
|
20
|
+
|
21
|
+
content
|
22
|
+
else
|
23
|
+
decorate(Pry::Code(selected_input_items.first))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def selected_input_items
|
30
|
+
input_expressions[normalized_expression_range] || []
|
31
|
+
end
|
32
|
+
|
33
|
+
def numbered_input_items
|
34
|
+
@numbered_input_items ||= normalized_expression_range.zip(selected_input_items).
|
35
|
+
reject { |_, s| s.nil? || s == "" }
|
36
|
+
end
|
37
|
+
|
38
|
+
def normalized_expression_range
|
39
|
+
absolute_index_range(opts[:i], input_expressions.length)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|