pry 0.9.9.6pre2-i386-mingw32 → 0.9.10-i386-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +41 -0
- data/CONTRIBUTORS +27 -26
- data/README.markdown +4 -4
- data/Rakefile +2 -2
- data/lib/pry.rb +25 -19
- data/lib/pry/cli.rb +31 -10
- data/lib/pry/code.rb +41 -83
- data/lib/pry/command.rb +87 -76
- data/lib/pry/command_set.rb +13 -20
- data/lib/pry/completion.rb +139 -121
- data/lib/pry/config.rb +4 -0
- data/lib/pry/core_extensions.rb +88 -31
- data/lib/pry/default_commands/cd.rb +31 -8
- data/lib/pry/default_commands/context.rb +4 -58
- data/lib/pry/default_commands/easter_eggs.rb +1 -1
- data/lib/pry/default_commands/editing.rb +21 -14
- data/lib/pry/default_commands/find_method.rb +5 -7
- data/lib/pry/default_commands/gist.rb +187 -0
- data/lib/pry/default_commands/hist.rb +6 -6
- data/lib/pry/default_commands/input_and_output.rb +73 -129
- data/lib/pry/default_commands/introspection.rb +107 -52
- data/lib/pry/default_commands/ls.rb +1 -1
- data/lib/pry/default_commands/misc.rb +0 -5
- data/lib/pry/default_commands/whereami.rb +92 -0
- data/lib/pry/helpers/base_helpers.rb +6 -1
- data/lib/pry/helpers/command_helpers.rb +30 -9
- data/lib/pry/helpers/documentation_helpers.rb +7 -7
- data/lib/pry/helpers/options_helpers.rb +1 -1
- data/lib/pry/helpers/text.rb +7 -9
- data/lib/pry/history.rb +15 -2
- data/lib/pry/hooks.rb +1 -1
- data/lib/pry/indent.rb +17 -10
- data/lib/pry/method.rb +35 -19
- data/lib/pry/module_candidate.rb +130 -0
- data/lib/pry/pry_class.rb +54 -22
- data/lib/pry/pry_instance.rb +71 -14
- data/lib/pry/repl_file_loader.rb +80 -0
- data/lib/pry/version.rb +1 -1
- data/lib/pry/wrapped_module.rb +121 -142
- data/pry.gemspec +13 -13
- data/test/candidate_helper1.rb +11 -0
- data/test/candidate_helper2.rb +8 -0
- data/test/helper.rb +16 -0
- data/test/test_code.rb +1 -1
- data/test/test_command.rb +364 -270
- data/test/test_command_integration.rb +235 -267
- data/test/test_completion.rb +36 -0
- data/test/test_control_d_handler.rb +45 -0
- data/test/test_default_commands/example.erb +5 -0
- data/test/test_default_commands/test_cd.rb +316 -11
- data/test/test_default_commands/test_context.rb +143 -192
- data/test/test_default_commands/test_documentation.rb +81 -14
- data/test/test_default_commands/test_find_method.rb +10 -2
- data/test/test_default_commands/test_input.rb +102 -111
- data/test/test_default_commands/test_introspection.rb +17 -12
- data/test/test_default_commands/test_ls.rb +8 -6
- data/test/test_default_commands/test_shell.rb +18 -15
- data/test/test_default_commands/test_show_source.rb +170 -44
- data/test/test_exception_whitelist.rb +6 -2
- data/test/test_hooks.rb +32 -0
- data/test/test_input_stack.rb +19 -16
- data/test/test_method.rb +0 -4
- data/test/test_prompt.rb +60 -0
- data/test/test_pry.rb +23 -31
- data/test/test_pry_defaults.rb +75 -57
- data/test/test_syntax_checking.rb +12 -11
- data/test/test_wrapped_module.rb +103 -0
- metadata +72 -26
@@ -0,0 +1,187 @@
|
|
1
|
+
class Pry
|
2
|
+
module DefaultCommands
|
3
|
+
Gist = Pry::CommandSet.new do
|
4
|
+
create_command "gist", "Gist a method or expression history to GitHub.", :requires_gem => "jist" do
|
5
|
+
include Pry::Helpers::DocumentationHelpers
|
6
|
+
|
7
|
+
banner <<-USAGE
|
8
|
+
Usage: gist [OPTIONS] [METH]
|
9
|
+
Gist method (doc or source) or input expression to GitHub.
|
10
|
+
|
11
|
+
If you'd like to permanently associate your gists with your GitHub account run `gist --login`.
|
12
|
+
|
13
|
+
e.g: gist -m my_method # gist the method my_method
|
14
|
+
e.g: gist -d my_method # gist the documentation for my_method
|
15
|
+
e.g: gist -i 1..10 # gist the input expressions from 1 to 10
|
16
|
+
e.g: gist -k show-method # gist the command show-method
|
17
|
+
e.g: gist -c Pry # gist the Pry class
|
18
|
+
e.g: gist -m hello_world --lines 2..-2 # gist from lines 2 to the second-last of the hello_world method
|
19
|
+
e.g: gist -m my_method --clip # Copy my_method source to clipboard, do not gist it.
|
20
|
+
USAGE
|
21
|
+
|
22
|
+
command_options :shellwords => false
|
23
|
+
|
24
|
+
attr_accessor :content
|
25
|
+
attr_accessor :filename
|
26
|
+
|
27
|
+
def setup
|
28
|
+
require 'jist'
|
29
|
+
self.content = ""
|
30
|
+
self.filename = "a.rb"
|
31
|
+
end
|
32
|
+
|
33
|
+
def options(opt)
|
34
|
+
opt.on :login, "Authenticate the jist gem with GitHub"
|
35
|
+
opt.on :m, :method, "Gist a method's source.", :argument => true do |meth_name|
|
36
|
+
meth = get_method_or_raise(meth_name, target, {})
|
37
|
+
self.content << meth.source << "\n"
|
38
|
+
self.filename = meth.source_file
|
39
|
+
end
|
40
|
+
opt.on :d, :doc, "Gist a method's documentation.", :argument => true do |meth_name|
|
41
|
+
meth = get_method_or_raise(meth_name, target, {})
|
42
|
+
text.no_color do
|
43
|
+
self.content << process_comment_markup(meth.doc) << "\n"
|
44
|
+
end
|
45
|
+
self.filename = meth.source_file + ".doc"
|
46
|
+
end
|
47
|
+
opt.on :k, :command, "Gist a command's source.", :argument => true do |command_name|
|
48
|
+
command = find_command(command_name)
|
49
|
+
block = Pry::Method.new(command.block)
|
50
|
+
self.content << block.source << "\n"
|
51
|
+
self.filename = block.source_file
|
52
|
+
end
|
53
|
+
opt.on :c, :class, "Gist a class or module's source.", :argument => true do |class_name|
|
54
|
+
mod = Pry::WrappedModule.from_str(class_name, target)
|
55
|
+
self.content << mod.source << "\n"
|
56
|
+
self.filename = mod.source_file
|
57
|
+
end
|
58
|
+
opt.on :var, "Gist a variable's content.", :argument => true do |variable_name|
|
59
|
+
begin
|
60
|
+
obj = target.eval(variable_name)
|
61
|
+
rescue Pry::RescuableException
|
62
|
+
raise CommandError, "Gist failed: Invalid variable name: #{variable_name}"
|
63
|
+
end
|
64
|
+
|
65
|
+
self.content << Pry.config.gist.inspecter.call(obj) << "\n"
|
66
|
+
end
|
67
|
+
opt.on :hist, "Gist a range of Readline history lines.", :optional_argument => true, :as => Range, :default => -20..-1 do |range|
|
68
|
+
h = Pry.history.to_a
|
69
|
+
self.content << h[one_index_range(convert_to_range(range))].join("\n") << "\n"
|
70
|
+
end
|
71
|
+
|
72
|
+
opt.on :f, :file, "Gist a file.", :argument => true do |file|
|
73
|
+
self.content << File.read(File.expand_path(file)) << "\n"
|
74
|
+
self.filename = file
|
75
|
+
end
|
76
|
+
opt.on :o, :out, "Gist entries from Pry's output result history. Takes an index or range.", :optional_argument => true,
|
77
|
+
:as => Range, :default => -1 do |range|
|
78
|
+
range = convert_to_range(range)
|
79
|
+
|
80
|
+
range.each do |v|
|
81
|
+
self.content << Pry.config.gist.inspecter.call(_pry_.output_array[v])
|
82
|
+
end
|
83
|
+
|
84
|
+
self.content << "\n"
|
85
|
+
end
|
86
|
+
opt.on :clip, "Copy the selected content to clipboard instead, do NOT gist it.", :default => false
|
87
|
+
opt.on :p, :public, "Create a public gist (default: false)", :default => false
|
88
|
+
opt.on :l, :lines, "Only gist a subset of lines from the gistable content.", :optional_argument => true, :as => Range, :default => 1..-1
|
89
|
+
opt.on :i, :in, "Gist entries from Pry's input expression history. Takes an index or range.", :optional_argument => true,
|
90
|
+
:as => Range, :default => -1 do |range|
|
91
|
+
range = convert_to_range(range)
|
92
|
+
input_expressions = _pry_.input_array[range] || []
|
93
|
+
Array(input_expressions).each_with_index do |code, index|
|
94
|
+
corrected_index = index + range.first
|
95
|
+
if code && code != ""
|
96
|
+
self.content << code
|
97
|
+
if code !~ /;\Z/
|
98
|
+
self.content << "#{comment_expression_result_for_gist(Pry.config.gist.inspecter.call(_pry_.output_array[corrected_index]))}"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def process
|
106
|
+
return Jist.login! if opts.present?(:login)
|
107
|
+
|
108
|
+
if self.content =~ /\A\s*\z/
|
109
|
+
raise CommandError, "Found no code to gist."
|
110
|
+
end
|
111
|
+
|
112
|
+
if opts.present?(:clip)
|
113
|
+
perform_clipboard
|
114
|
+
else
|
115
|
+
perform_gist
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
# copy content to clipboard instead (only used with --clip flag)
|
120
|
+
def perform_clipboard
|
121
|
+
copy(self.content)
|
122
|
+
output.puts "Copied content to clipboard!"
|
123
|
+
end
|
124
|
+
|
125
|
+
def perform_gist
|
126
|
+
if opts.present?(:lines)
|
127
|
+
self.content = restrict_to_lines(content, opts[:l])
|
128
|
+
end
|
129
|
+
|
130
|
+
response = Jist.gist(content, :filename => File.basename(filename),
|
131
|
+
:public => !!opts[:p])
|
132
|
+
|
133
|
+
if response
|
134
|
+
copy(response['html_url'])
|
135
|
+
output.puts "Gist created at #{response['html_url']} and added to clipboard."
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def convert_to_range(n)
|
140
|
+
if !n.is_a?(Range)
|
141
|
+
(n..n)
|
142
|
+
else
|
143
|
+
n
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
def comment_expression_result_for_gist(result)
|
148
|
+
content = ""
|
149
|
+
result.lines.each_with_index do |line, index|
|
150
|
+
if index == 0
|
151
|
+
content << "# => #{line}"
|
152
|
+
else
|
153
|
+
content << "# #{line}"
|
154
|
+
end
|
155
|
+
end
|
156
|
+
content
|
157
|
+
end
|
158
|
+
|
159
|
+
# Copy a string to the clipboard.
|
160
|
+
#
|
161
|
+
# @param [String] content
|
162
|
+
#
|
163
|
+
# @copyright Copyright (c) 2008 Chris Wanstrath (MIT)
|
164
|
+
# @see https://github.com/defunkt/gist/blob/master/lib/gist.rb#L178
|
165
|
+
def copy(content)
|
166
|
+
cmd = case true
|
167
|
+
when system("type pbcopy > /dev/null 2>&1")
|
168
|
+
:pbcopy
|
169
|
+
when system("type xclip > /dev/null 2>&1")
|
170
|
+
:xclip
|
171
|
+
when system("type putclip > /dev/null 2>&1")
|
172
|
+
:putclip
|
173
|
+
end
|
174
|
+
|
175
|
+
if cmd
|
176
|
+
IO.popen(cmd.to_s, 'r+') { |clip| clip.print content }
|
177
|
+
end
|
178
|
+
|
179
|
+
content
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
alias_command "clipit", "gist --clip"
|
184
|
+
alias_command "jist", "gist"
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
@@ -16,13 +16,13 @@ class Pry
|
|
16
16
|
USAGE
|
17
17
|
|
18
18
|
def options(opt)
|
19
|
-
opt.on :H, :head, "Display the first N items.", :
|
20
|
-
opt.on :T, :tail, "Display the last N items.", :
|
21
|
-
opt.on :s, :show, "Show the given range of lines.", :
|
22
|
-
opt.on :G, :grep, "Show lines matching the given pattern.", true, :as => String
|
19
|
+
opt.on :H, :head, "Display the first N items.", :optional_argument => true, :as => Integer
|
20
|
+
opt.on :T, :tail, "Display the last N items.", :optional_argument => true, :as => Integer
|
21
|
+
opt.on :s, :show, "Show the given range of lines.", :optional_argument => true, :as => Range
|
22
|
+
opt.on :G, :grep, "Show lines matching the given pattern.", :argument => true, :as => String
|
23
23
|
opt.on :c, :clear, "Clear the current session's history."
|
24
|
-
opt.on :r, :replay, "Replay a line or range of lines.", true, :as => Range
|
25
|
-
opt.on :save, "Save history to a file.", true, :as => Range
|
24
|
+
opt.on :r, :replay, "Replay a line or range of lines.", :argument => true, :as => Range
|
25
|
+
opt.on :save, "Save history to a file.", :argument => true, :as => Range
|
26
26
|
|
27
27
|
opt.on :e, :'exclude-pry', "Exclude Pry commands from the history."
|
28
28
|
opt.on :n, :'no-numbers', "Omit line numbers."
|
@@ -1,9 +1,11 @@
|
|
1
1
|
require 'tempfile'
|
2
|
+
require 'pry/default_commands/gist'
|
2
3
|
|
3
4
|
class Pry
|
4
5
|
module DefaultCommands
|
5
6
|
|
6
7
|
InputAndOutput = Pry::CommandSet.new do
|
8
|
+
import Gist
|
7
9
|
command(/\.(.*)/, "All text following a '.' is forwarded to the shell.", :listing => ".<shell command>", :use_prefix => false, :takes_block => true) do |cmd|
|
8
10
|
if cmd =~ /^cd\s+(.+)/i
|
9
11
|
dest = $1
|
@@ -37,129 +39,13 @@ class Pry
|
|
37
39
|
end
|
38
40
|
alias_command "file-mode", "shell-mode"
|
39
41
|
|
40
|
-
create_command "gist", "Gist a method or expression history to github.", :requires_gem => "gist", :shellwords => false do
|
41
|
-
banner <<-USAGE
|
42
|
-
Usage: gist [OPTIONS] [METH]
|
43
|
-
Gist method (doc or source) or input expression to github.
|
44
|
-
Ensure the `gist` gem is properly working before use. http://github.com/defunkt/gist for instructions.
|
45
|
-
e.g: gist -m my_method
|
46
|
-
e.g: gist -d my_method
|
47
|
-
e.g: gist -i 1..10
|
48
|
-
e.g: gist -c show-method
|
49
|
-
e.g: gist -m hello_world --lines 2..-2
|
50
|
-
USAGE
|
51
|
-
|
52
|
-
attr_accessor :content
|
53
|
-
attr_accessor :code_type
|
54
|
-
|
55
|
-
def setup
|
56
|
-
require 'gist'
|
57
|
-
self.content = ""
|
58
|
-
self.code_type = :ruby
|
59
|
-
end
|
60
|
-
|
61
|
-
def options(opt)
|
62
|
-
opt.on :m, :method, "Gist a method's source.", true do |meth_name|
|
63
|
-
meth = get_method_or_raise(meth_name, target, {})
|
64
|
-
self.content << meth.source
|
65
|
-
self.code_type = meth.source_type
|
66
|
-
end
|
67
|
-
opt.on :d, :doc, "Gist a method's documentation.", true do |meth_name|
|
68
|
-
meth = get_method_or_raise(meth_name, target, {})
|
69
|
-
text.no_color do
|
70
|
-
self.content << process_comment_markup(meth.doc, self.code_type)
|
71
|
-
end
|
72
|
-
self.code_type = :plain
|
73
|
-
end
|
74
|
-
opt.on :c, :command, "Gist a command's source.", true do |command_name|
|
75
|
-
command = find_command(command_name)
|
76
|
-
block = Pry::Method.new(find_command(command_name).block)
|
77
|
-
self.content << block.source
|
78
|
-
end
|
79
|
-
opt.on :f, :file, "Gist a file.", true do |file|
|
80
|
-
self.content << File.read(File.expand_path(file))
|
81
|
-
end
|
82
|
-
opt.on :p, :public, "Create a public gist (default: false)", :default => false
|
83
|
-
opt.on :l, :lines, "Only gist a subset of lines.", :optional => true, :as => Range, :default => 1..-1
|
84
|
-
opt.on :i, :in, "Gist entries from Pry's input expression history. Takes an index or range.", :optional => true,
|
85
|
-
:as => Range, :default => -5..-1 do |range|
|
86
|
-
range = convert_to_range(range)
|
87
|
-
input_expressions = _pry_.input_array[range] || []
|
88
|
-
Array(input_expressions).each_with_index do |code, index|
|
89
|
-
corrected_index = index + range.first
|
90
|
-
if code && code != ""
|
91
|
-
self.content << code
|
92
|
-
if code !~ /;\Z/
|
93
|
-
self.content << "#{comment_expression_result_for_gist(Pry.config.gist.inspecter.call(_pry_.output_array[corrected_index]))}"
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
def process
|
101
|
-
perform_gist
|
102
|
-
end
|
103
|
-
|
104
|
-
def perform_gist
|
105
|
-
type_map = { :ruby => "rb", :c => "c", :plain => "plain" }
|
106
|
-
|
107
|
-
if self.content =~ /\A\s*\z/
|
108
|
-
raise CommandError, "Found no code to gist."
|
109
|
-
end
|
110
|
-
|
111
|
-
# prevent Gist from exiting the session on error
|
112
|
-
begin
|
113
|
-
extname = opts.present?(:file) ? ".#{gist_file_extension(opts[:f])}" : ".#{type_map[self.code_type]}"
|
114
|
-
|
115
|
-
if opts.present?(:lines)
|
116
|
-
self.content = restrict_to_lines(content, opts[:l])
|
117
|
-
end
|
118
|
-
|
119
|
-
link = Gist.write([:extension => extname,
|
120
|
-
:input => self.content],
|
121
|
-
!opts[:p])
|
122
|
-
rescue SystemExit
|
123
|
-
end
|
124
|
-
|
125
|
-
if link
|
126
|
-
Gist.copy(link)
|
127
|
-
output.puts "Gist created at #{link} and added to clipboard."
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
def gist_file_extension(file_name)
|
132
|
-
file_name.split(".").last
|
133
|
-
end
|
134
|
-
|
135
|
-
def convert_to_range(n)
|
136
|
-
if !n.is_a?(Range)
|
137
|
-
(n..n)
|
138
|
-
else
|
139
|
-
n
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
def comment_expression_result_for_gist(result)
|
144
|
-
content = ""
|
145
|
-
result.lines.each_with_index do |line, index|
|
146
|
-
if index == 0
|
147
|
-
content << "# => #{line}"
|
148
|
-
else
|
149
|
-
content << "# #{line}"
|
150
|
-
end
|
151
|
-
end
|
152
|
-
content
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
42
|
create_command "save-file", "Export to a file using content from the REPL." do
|
157
43
|
banner <<-USAGE
|
158
44
|
Usage: save-file [OPTIONS] [FILE]
|
159
45
|
Save REPL content to a file.
|
160
46
|
e.g: save-file -m my_method -m my_method2 ./hello.rb
|
161
47
|
e.g: save-file -i 1..10 ./hello.rb --append
|
162
|
-
e.g: save-file -
|
48
|
+
e.g: save-file -k show-method ./my_command.rb
|
163
49
|
e.g: save-file -f sample_file --lines 2..10 ./output_file.rb
|
164
50
|
USAGE
|
165
51
|
|
@@ -170,21 +56,43 @@ class Pry
|
|
170
56
|
self.content = ""
|
171
57
|
end
|
172
58
|
|
59
|
+
def convert_to_range(n)
|
60
|
+
if !n.is_a?(Range)
|
61
|
+
(n..n)
|
62
|
+
else
|
63
|
+
n
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
173
67
|
def options(opt)
|
174
|
-
opt.on :m, :method, "Save a method's source.", true do |meth_name|
|
68
|
+
opt.on :m, :method, "Save a method's source.", :argument => true do |meth_name|
|
175
69
|
meth = get_method_or_raise(meth_name, target, {})
|
176
70
|
self.content << meth.source
|
177
71
|
end
|
178
|
-
opt.on :c, :
|
72
|
+
opt.on :c, :class, "Save a class's source.", :argument => true do |class_name|
|
73
|
+
mod = Pry::WrappedModule.from_str(class_name, target)
|
74
|
+
self.content << mod.source
|
75
|
+
end
|
76
|
+
opt.on :k, :command, "Save a command's source.", :argument => true do |command_name|
|
179
77
|
command = find_command(command_name)
|
180
|
-
block = Pry::Method.new(
|
78
|
+
block = Pry::Method.new(command.block)
|
181
79
|
self.content << block.source
|
182
80
|
end
|
183
|
-
opt.on :f, :file, "Save a file.", true do |file|
|
81
|
+
opt.on :f, :file, "Save a file.", :argument => true do |file|
|
184
82
|
self.content << File.read(File.expand_path(file))
|
185
83
|
end
|
186
|
-
opt.on :l, :lines, "Only save a subset of lines.", :
|
187
|
-
opt.on :
|
84
|
+
opt.on :l, :lines, "Only save a subset of lines.", :optional_argument => true, :as => Range, :default => 1..-1
|
85
|
+
opt.on :o, :out, "Save entries from Pry's output result history. Takes an index or range.", :optional_argument => true,
|
86
|
+
:as => Range, :default => -5..-1 do |range|
|
87
|
+
range = convert_to_range(range)
|
88
|
+
|
89
|
+
range.each do |v|
|
90
|
+
self.content << Pry.config.gist.inspecter.call(_pry_.output_array[v])
|
91
|
+
end
|
92
|
+
|
93
|
+
self.content << "\n"
|
94
|
+
end
|
95
|
+
opt.on :i, :in, "Save entries from Pry's input expression history. Takes an index or range.", :optional_argument => true,
|
188
96
|
:as => Range, :default => -5..-1 do |range|
|
189
97
|
input_expressions = _pry_.input_array[range] || []
|
190
98
|
Array(input_expressions).each { |v| self.content << v }
|
@@ -240,13 +148,13 @@ class Pry
|
|
240
148
|
USAGE
|
241
149
|
|
242
150
|
def options(opt)
|
243
|
-
opt.on :ex, "Show the context of the last exception.", :
|
244
|
-
opt.on :i, :in, "Show one or more entries from Pry's expression history.", :
|
151
|
+
opt.on :ex, "Show the context of the last exception.", :optional_argument => true, :as => Integer
|
152
|
+
opt.on :i, :in, "Show one or more entries from Pry's expression history.", :optional_argument => true, :as => Range, :default => -5..-1
|
245
153
|
|
246
|
-
opt.on :s, :start, "Starting line (defaults to the first line).", :
|
247
|
-
opt.on :e, :end, "Ending line (defaults to the last line).", :
|
154
|
+
opt.on :s, :start, "Starting line (defaults to the first line).", :optional_argument => true, :as => Integer
|
155
|
+
opt.on :e, :end, "Ending line (defaults to the last line).", :optional_argument => true, :as => Integer
|
248
156
|
opt.on :l, :'line-numbers', "Show line numbers."
|
249
|
-
opt.on :t, :type, "The file type for syntax highlighting (e.g., 'ruby' or 'python').", true, :as => Symbol
|
157
|
+
opt.on :t, :type, "The file type for syntax highlighting (e.g., 'ruby' or 'python').", :argument => true, :as => Symbol
|
250
158
|
|
251
159
|
opt.on :f, :flood, "Do not use a pager to view text longer than one screen."
|
252
160
|
end
|
@@ -282,6 +190,8 @@ class Pry
|
|
282
190
|
ex.inc_bt_index
|
283
191
|
else
|
284
192
|
bt_index = opts[:ex]
|
193
|
+
ex.bt_index = bt_index
|
194
|
+
ex.inc_bt_index
|
285
195
|
end
|
286
196
|
|
287
197
|
ex_file, ex_line = ex.bt_source_location_for(bt_index)
|
@@ -348,6 +258,7 @@ class Pry
|
|
348
258
|
|
349
259
|
code = yield(Pry::Code.from_file(file_name))
|
350
260
|
|
261
|
+
code.code_type = opts[:type] || detect_code_type_from_file(file_name)
|
351
262
|
if line_num
|
352
263
|
code = code.around(line_num.to_i,
|
353
264
|
Pry.config.default_window_size || 7)
|
@@ -355,8 +266,41 @@ class Pry
|
|
355
266
|
|
356
267
|
code
|
357
268
|
end
|
358
|
-
end
|
359
269
|
|
270
|
+
def detect_code_type_from_file(file_name)
|
271
|
+
name, ext = File.basename(file_name).split('.', 2)
|
272
|
+
|
273
|
+
if ext
|
274
|
+
case ext
|
275
|
+
when "py"
|
276
|
+
:python
|
277
|
+
when "rb", "gemspec", "rakefile", "ru"
|
278
|
+
:ruby
|
279
|
+
when "js"
|
280
|
+
return :javascript
|
281
|
+
when "yml", "prytheme"
|
282
|
+
:yaml
|
283
|
+
when "groovy"
|
284
|
+
:groovy
|
285
|
+
when "c"
|
286
|
+
:c
|
287
|
+
when "cpp"
|
288
|
+
:cpp
|
289
|
+
when "java"
|
290
|
+
:java
|
291
|
+
else
|
292
|
+
:text
|
293
|
+
end
|
294
|
+
else
|
295
|
+
case name
|
296
|
+
when "Rakefile", "Gemfile"
|
297
|
+
:ruby
|
298
|
+
else
|
299
|
+
:text
|
300
|
+
end
|
301
|
+
end
|
302
|
+
end
|
303
|
+
end
|
360
304
|
end
|
361
305
|
end
|
362
306
|
end
|