pry 0.14.2 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +37 -2
- data/README.md +11 -8
- data/lib/pry/class_command.rb +2 -2
- data/lib/pry/cli.rb +4 -0
- data/lib/pry/code_object.rb +2 -2
- data/lib/pry/command.rb +1 -1
- data/lib/pry/command_set.rb +2 -2
- data/lib/pry/command_state.rb +11 -6
- data/lib/pry/commands/amend_line.rb +1 -1
- data/lib/pry/commands/cd.rb +2 -0
- data/lib/pry/commands/edit.rb +2 -0
- data/lib/pry/commands/find_method.rb +1 -1
- data/lib/pry/commands/ls/config.rb +51 -0
- data/lib/pry/commands/ls.rb +0 -21
- data/lib/pry/commands/raise_up.rb +1 -1
- data/lib/pry/commands/ri.rb +1 -1
- data/lib/pry/commands/shell_command.rb +1 -1
- data/lib/pry/commands/shell_mode.rb +1 -0
- data/lib/pry/commands/watch_expression/expression.rb +1 -1
- data/lib/pry/commands/watch_expression.rb +3 -5
- data/lib/pry/config.rb +18 -18
- data/lib/pry/control_d_handler.rb +1 -1
- data/lib/pry/exception_handler.rb +7 -2
- data/lib/pry/helpers/command_helpers.rb +1 -1
- data/lib/pry/indent.rb +6 -4
- data/lib/pry/input/simple_stdio.rb +13 -0
- data/lib/pry/input_completer.rb +1 -1
- data/lib/pry/method/patcher.rb +2 -2
- data/lib/pry/method/weird_method_locator.rb +1 -1
- data/lib/pry/method.rb +1 -2
- data/lib/pry/pry_class.rb +3 -1
- data/lib/pry/pry_instance.rb +6 -44
- data/lib/pry/repl.rb +65 -2
- data/lib/pry/ring.rb +1 -1
- data/lib/pry/slop.rb +1 -1
- data/lib/pry/syntax_highlighter.rb +1 -1
- data/lib/pry/version.rb +1 -1
- data/lib/pry/wrapped_module.rb +1 -1
- data/lib/pry.rb +3 -0
- metadata +5 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e614551c579377a965416df68c4e2a90f0e0e6731d78010f7a570d4b730cfb2a
|
4
|
+
data.tar.gz: 86ed82a2dc55f826d38ae2a20f22929dbbf11b7f5d79dcfc0740a20f6779ca01
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 902a35c83b2b00518504054939ab688f883ecf78f2358f90462a6b06290a80de7c52735d4d71e40e27e1d47914fd7bac6b537bdf916a322d7da35483b21afef9
|
7
|
+
data.tar.gz: b03f296f12ed93fb92e7b6f7243f250cc4ada6c08b70e52a5b8df81c6707aa9c3124d60b03e0e922b5626b543c59059c7300e626858b59706140df7cd19d9fb8
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,39 @@
|
|
1
|
-
###
|
1
|
+
### [v0.15.0][v0.15.0] (November 15, 2024)
|
2
|
+
|
3
|
+
#### Features
|
4
|
+
|
5
|
+
* Added support for Reline
|
6
|
+
([#2298](https://github.com/pry/pry/pull/2298))
|
7
|
+
* Added support for Ruby 3.3
|
8
|
+
([#2295](https://github.com/pry/pry/pull/2295))
|
9
|
+
* Added Pry::Input::SimpleStdio for dumb terminals when Reline is in use
|
10
|
+
([#2304](https://github.com/pry/pry/pull/2304))
|
11
|
+
* Remove OpenStruct usage
|
12
|
+
([#2307](https://github.com/pry/pry/pull/2307))
|
13
|
+
([#2309](https://github.com/pry/pry/pull/2309))
|
14
|
+
* Disable coloring of output when NO_COLOR is set.
|
15
|
+
([#2323])(https://github.com/pry/pry/pull/2323))
|
16
|
+
* Add `pry --no-multiline` flag to keep single line prompt.
|
17
|
+
([#2327](https://github.com/pry/pry/pull/2327))
|
18
|
+
|
19
|
+
#### Bug Fixes
|
20
|
+
|
21
|
+
* Fix typos on docs and and comments
|
22
|
+
([#2300](https://github.com/pry/pry/pull/2300))
|
23
|
+
([#2301](https://github.com/pry/pry/pull/2301))
|
24
|
+
* Fix 'calling clear method' on user code when defined in pry context.
|
25
|
+
([#2291](https://github.com/pry/pry/pull/2291))
|
26
|
+
* Fix arguments WatchExpression#add_expression
|
27
|
+
([#2278](https://github.com/pry/pry/pull/2278))
|
28
|
+
|
29
|
+
### Breaking changes
|
30
|
+
|
31
|
+
* Remove support for deprecated `Pry.config.prompt = [proc {}, proc {}]`
|
32
|
+
Use Pry::Prompt API instead
|
33
|
+
([#2308](https://github.com/pry/pry/pull/2308))
|
34
|
+
* Remove deprecated `Pry.config.exception_whitelist`.
|
35
|
+
Use `Pry.config.unrescued_exceptions` instead.
|
36
|
+
([#2326](https://github.com/pry/pry/pull/2326))
|
2
37
|
|
3
38
|
### [v0.14.2][v0.14.2] (January 9, 2023)
|
4
39
|
|
@@ -977,7 +1012,7 @@ complete CHANGELOG:
|
|
977
1012
|
* _pry_ now passed as 3rd parameter to :before_session hook
|
978
1013
|
* ls colors now configurable via Pry.config.ls.local_var_color = :bright_red etc
|
979
1014
|
* ls separator configurable via, e.g Pry.config.ls.separator = " "
|
980
|
-
* Pry.view_clip() now only calls inspect on a few immediates, otherwise uses the #<> syntax, which has been truncated further to exclude
|
1015
|
+
* Pry.view_clip() now only calls inspect on a few immediates, otherwise uses the #<> syntax, which has been truncated further to exclude the mem address, again related to #245
|
981
1016
|
|
982
1017
|
### 0.9.3 (2011/7/27)
|
983
1018
|
* cat --ex (cats 5 lines above and below line in file where exception was raised)
|
data/README.md
CHANGED
@@ -81,7 +81,7 @@ Installation
|
|
81
81
|
### Bundler
|
82
82
|
|
83
83
|
```ruby
|
84
|
-
gem 'pry', '~> 0.
|
84
|
+
gem 'pry', '~> 0.15.0'
|
85
85
|
```
|
86
86
|
|
87
87
|
### Manual
|
@@ -413,18 +413,21 @@ description if the `--help` option is available.
|
|
413
413
|
|
414
414
|
### Use Pry as your Rails Console
|
415
415
|
|
416
|
-
|
417
|
-
gem](https://github.com/rweng/pry-rails) to your Gemfile. This replaces the
|
418
|
-
default console with Pry, in addition to loading the Rails console helpers and
|
419
|
-
adding some useful Rails-specific commands.
|
420
|
-
|
421
|
-
If you don't want to change your Gemfile, you can still run a Pry console in
|
422
|
-
your app's environment using Pry's `-r` flag:
|
416
|
+
You can run a Pry console in your app's environment using Pry's `-r` flag:
|
423
417
|
|
424
418
|
```sh
|
425
419
|
pry -r ./config/environment
|
426
420
|
```
|
427
421
|
|
422
|
+
Or start the rails console (`bin/rails console`) and then type `pry`.
|
423
|
+
|
424
|
+
It's also possible to use Pry as your Rails console by adding [the pry-rails
|
425
|
+
gem](https://github.com/pry/pry-rails) to your Gemfile. This replaces the
|
426
|
+
default console with Pry, in addition to loading the Rails console helpers and
|
427
|
+
adding some useful Rails-specific commands.
|
428
|
+
|
429
|
+
**Note that `pry-rails` is not currently maintained.**
|
430
|
+
|
428
431
|
Also check out the
|
429
432
|
[wiki](https://github.com/pry/pry/wiki/Setting-up-Rails-or-Heroku-to-use-Pry)
|
430
433
|
for more information about integrating Pry with Rails.
|
data/lib/pry/class_command.rb
CHANGED
@@ -137,7 +137,7 @@ class Pry
|
|
137
137
|
# end
|
138
138
|
# end
|
139
139
|
#
|
140
|
-
# @example Define the
|
140
|
+
# @example Define the invocation block anywhere you want
|
141
141
|
# def subcommands(cmd)
|
142
142
|
# cmd.command :download do |opt|
|
143
143
|
# description 'Downloads a content from a server'
|
@@ -172,7 +172,7 @@ class Pry
|
|
172
172
|
|
173
173
|
# The actual body of your command should go here.
|
174
174
|
#
|
175
|
-
# The `opts`
|
175
|
+
# The `opts` method can be called to get the options that Pry::Slop has passed,
|
176
176
|
# and `args` gives the remaining, unparsed arguments.
|
177
177
|
#
|
178
178
|
# The return value of this method is discarded unless the command was
|
data/lib/pry/cli.rb
CHANGED
@@ -145,6 +145,10 @@ Pry::CLI.add_options do
|
|
145
145
|
Pry.config.color = false
|
146
146
|
end
|
147
147
|
|
148
|
+
on "no-multiline", "Disables multiline (defaults to true with Reline)" do
|
149
|
+
Pry.config.multiline = false
|
150
|
+
end
|
151
|
+
|
148
152
|
on :f, "Suppress loading of pryrc" do
|
149
153
|
Pry.config.should_load_rc = false
|
150
154
|
Pry.config.should_load_local_rc = false
|
data/lib/pry/code_object.rb
CHANGED
@@ -11,7 +11,7 @@ class Pry
|
|
11
11
|
# object the user wants (applying precedence rules in doing so -- i.e methods
|
12
12
|
# get precedence over commands with the same name) and 2. Returning
|
13
13
|
# the appropriate object. If the user fails to provide a string
|
14
|
-
#
|
14
|
+
# identifier for the object (i.e they pass in `nil` or "") then the
|
15
15
|
# object looked up will be the 'current method' or 'current class'
|
16
16
|
# associated with the Binding.
|
17
17
|
#
|
@@ -97,7 +97,7 @@ class Pry
|
|
97
97
|
nil
|
98
98
|
end
|
99
99
|
|
100
|
-
# when no
|
100
|
+
# when no parameter is given (i.e CodeObject.lookup(nil)), then we
|
101
101
|
# lookup the 'current object' from the binding.
|
102
102
|
def empty_lookup
|
103
103
|
return nil if str && !str.empty?
|
data/lib/pry/command.rb
CHANGED
data/lib/pry/command_set.rb
CHANGED
@@ -145,7 +145,7 @@ class Pry
|
|
145
145
|
# Imports all the commands from one or more sets.
|
146
146
|
# @param [Array<CommandSet>] sets Command sets, all of the commands of which
|
147
147
|
# will be imported.
|
148
|
-
# @return [Pry::CommandSet] Returns the
|
148
|
+
# @return [Pry::CommandSet] Returns the receiver (a command set).
|
149
149
|
def import(*sets)
|
150
150
|
sets.each do |set|
|
151
151
|
@commands.merge! set.to_hash
|
@@ -157,7 +157,7 @@ class Pry
|
|
157
157
|
# Imports some commands from a set
|
158
158
|
# @param [CommandSet] set Set to import commands from
|
159
159
|
# @param [Array<String>] matches Commands to import
|
160
|
-
# @return [Pry::CommandSet] Returns the
|
160
|
+
# @return [Pry::CommandSet] Returns the receiver (a command set).
|
161
161
|
def import_from(set, *matches)
|
162
162
|
helper_module.send :include, set.helper_module
|
163
163
|
matches.each do |match|
|
data/lib/pry/command_state.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'ostruct'
|
4
|
-
|
5
3
|
class Pry
|
6
4
|
# CommandState is a data structure to hold per-command state.
|
7
5
|
#
|
@@ -20,12 +18,19 @@ class Pry
|
|
20
18
|
@command_state = {}
|
21
19
|
end
|
22
20
|
|
23
|
-
def state_for(
|
24
|
-
@command_state[
|
21
|
+
def state_for(command_class)
|
22
|
+
@command_state[command_class] ||= command_struct(command_class)
|
23
|
+
end
|
24
|
+
|
25
|
+
def reset(command_class)
|
26
|
+
@command_state[command_class] = command_struct(command_class)
|
25
27
|
end
|
26
28
|
|
27
|
-
|
28
|
-
|
29
|
+
private
|
30
|
+
|
31
|
+
def command_struct(command_class)
|
32
|
+
Struct.new(:command, *command_class.command_options[:state])
|
33
|
+
.new(command: command_class)
|
29
34
|
end
|
30
35
|
end
|
31
36
|
end
|
@@ -76,7 +76,7 @@ class Pry
|
|
76
76
|
|
77
77
|
# Takes two numbers that are 1-indexed, and returns a range (or
|
78
78
|
# number) that is 0-indexed. 1-indexed means the first element is
|
79
|
-
#
|
79
|
+
# identified by 1 rather than by 0 (as is the case for Ruby arrays).
|
80
80
|
# @param [Fixnum] start_line_number One-indexed number.
|
81
81
|
# @param [Fixnum] end_line_number One-indexed number.
|
82
82
|
# @return [Range] The zero-indexed range.
|
data/lib/pry/commands/cd.rb
CHANGED
data/lib/pry/commands/edit.rb
CHANGED
@@ -128,7 +128,7 @@ class Pry
|
|
128
128
|
next if klass.autoload?(name)
|
129
129
|
|
130
130
|
begin
|
131
|
-
const = klass.const_get(name)
|
131
|
+
const = Pry::Method.singleton_class_of(klass.const_get(name))
|
132
132
|
rescue RescuableException # rubocop:disable Lint/HandleExceptions
|
133
133
|
# constant loading is an inexact science at the best of times,
|
134
134
|
# this often happens when a constant was .autoload? but someone
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Pry
|
4
|
+
class Command
|
5
|
+
class Ls < Pry::ClassCommand
|
6
|
+
class Config
|
7
|
+
attr_accessor :heading_color,
|
8
|
+
:public_method_color,
|
9
|
+
:private_method_color,
|
10
|
+
:protected_method_color,
|
11
|
+
:method_missing_color,
|
12
|
+
:local_var_color,
|
13
|
+
:pry_var_color, # e.g. _, pry_instance, _file_
|
14
|
+
:instance_var_color, # e.g. @foo
|
15
|
+
:class_var_color, # e.g. @@foo
|
16
|
+
:global_var_color, # e.g. $CODERAY_DEBUG, $foo
|
17
|
+
:builtin_global_color, # e.g. $stdin, $-w, $PID
|
18
|
+
:pseudo_global_color, # e.g. $~, $1..$9, $LAST_MATCH_INFO
|
19
|
+
:constant_color, # e.g. VERSION, ARGF
|
20
|
+
:class_constant_color, # e.g. Object, Kernel
|
21
|
+
:exception_constant_color, # e.g. Exception, RuntimeError
|
22
|
+
:unloaded_constant_color, # Constant that is still in .autoload?
|
23
|
+
:separator,
|
24
|
+
:ceiling
|
25
|
+
|
26
|
+
def self.default
|
27
|
+
config = new
|
28
|
+
config.heading_color = :bright_blue
|
29
|
+
config.public_method_color = :default
|
30
|
+
config.private_method_color = :blue
|
31
|
+
config.protected_method_color = :blue
|
32
|
+
config.method_missing_color = :bright_red
|
33
|
+
config.local_var_color = :yellow
|
34
|
+
config.pry_var_color = :default
|
35
|
+
config.instance_var_color = :blue
|
36
|
+
config.class_var_color = :bright_blue
|
37
|
+
config.global_var_color = :default
|
38
|
+
config.builtin_global_color = :cyan
|
39
|
+
config.pseudo_global_color = :cyan
|
40
|
+
config.constant_color = :default
|
41
|
+
config.class_constant_color = :blue
|
42
|
+
config.exception_constant_color = :magenta
|
43
|
+
config.unloaded_constant_color = :yellow
|
44
|
+
config.separator = " "
|
45
|
+
config.ceiling = [Object, Module, Class]
|
46
|
+
config
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/pry/commands/ls.rb
CHANGED
@@ -3,27 +3,6 @@
|
|
3
3
|
class Pry
|
4
4
|
class Command
|
5
5
|
class Ls < Pry::ClassCommand
|
6
|
-
DEFAULT_OPTIONS = {
|
7
|
-
heading_color: :bright_blue,
|
8
|
-
public_method_color: :default,
|
9
|
-
private_method_color: :blue,
|
10
|
-
protected_method_color: :blue,
|
11
|
-
method_missing_color: :bright_red,
|
12
|
-
local_var_color: :yellow,
|
13
|
-
pry_var_color: :default, # e.g. _, pry_instance, _file_
|
14
|
-
instance_var_color: :blue, # e.g. @foo
|
15
|
-
class_var_color: :bright_blue, # e.g. @@foo
|
16
|
-
global_var_color: :default, # e.g. $CODERAY_DEBUG, $eventmachine_library
|
17
|
-
builtin_global_color: :cyan, # e.g. $stdin, $-w, $PID
|
18
|
-
pseudo_global_color: :cyan, # e.g. $~, $1..$9, $LAST_MATCH_INFO
|
19
|
-
constant_color: :default, # e.g. VERSION, ARGF
|
20
|
-
class_constant_color: :blue, # e.g. Object, Kernel
|
21
|
-
exception_constant_color: :magenta, # e.g. Exception, RuntimeError
|
22
|
-
unloaded_constant_color: :yellow, # Any constant that is still in .autoload? state
|
23
|
-
separator: " ",
|
24
|
-
ceiling: [Object, Module, Class]
|
25
|
-
}.freeze
|
26
|
-
|
27
6
|
match 'ls'
|
28
7
|
group 'Context'
|
29
8
|
description 'Show the list of vars and methods in the current scope.'
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Pry
|
4
|
-
# N.B. using a regular
|
4
|
+
# N.B. using a regular expression here so that "raise-up 'foo'" does the right thing.
|
5
5
|
class Command
|
6
6
|
class RaiseUp < Pry::ClassCommand
|
7
7
|
match(/raise-up(!?\b.*)/)
|
data/lib/pry/commands/ri.rb
CHANGED
@@ -7,7 +7,7 @@ class Pry
|
|
7
7
|
group 'Input and Output'
|
8
8
|
description "All text following a '.' is forwarded to the shell."
|
9
9
|
command_options listing: '.<shell command>', use_prefix: false,
|
10
|
-
takes_block: true
|
10
|
+
takes_block: true, state: %i[old_pwd]
|
11
11
|
|
12
12
|
banner <<-'BANNER'
|
13
13
|
Usage: .COMMAND_NAME
|
@@ -6,6 +6,7 @@ class Pry
|
|
6
6
|
match 'shell-mode'
|
7
7
|
group 'Input and Output'
|
8
8
|
description 'Toggle shell mode. Bring in pwd prompt and file completion.'
|
9
|
+
command_options state: %i[disabled prev_prompt]
|
9
10
|
|
10
11
|
banner <<-'BANNER'
|
11
12
|
Toggle shell mode. Bring in pwd prompt and file completion.
|
@@ -23,7 +23,7 @@ class Pry
|
|
23
23
|
|
24
24
|
# Has the value of the expression changed?
|
25
25
|
#
|
26
|
-
# We use the pretty-printed string
|
26
|
+
# We use the pretty-printed string representation to detect differences
|
27
27
|
# as this avoids problems with dup (causes too many differences) and ==
|
28
28
|
# (causes too few)
|
29
29
|
def changed?
|
@@ -7,7 +7,7 @@ class Pry
|
|
7
7
|
group 'Context'
|
8
8
|
description 'Watch the value of an expression and print a notification ' \
|
9
9
|
'whenever it changes.'
|
10
|
-
command_options use_prefix: false
|
10
|
+
command_options use_prefix: false, state: %i[watch_expressions]
|
11
11
|
|
12
12
|
banner <<-'BANNER'
|
13
13
|
Usage: watch [EXPRESSION]
|
@@ -46,7 +46,7 @@ class Pry
|
|
46
46
|
list
|
47
47
|
else
|
48
48
|
add_hook
|
49
|
-
add_expression
|
49
|
+
add_expression
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -88,9 +88,7 @@ class Pry
|
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
91
|
-
|
92
|
-
# https://github.com/pry/pry/commit/b031df2f2f5850ee6e9018f33d35f3485a9b0423
|
93
|
-
def add_expression(_arguments)
|
91
|
+
def add_expression
|
94
92
|
expressions << Expression.new(pry_instance, target, arg_string)
|
95
93
|
output.puts "Watching #{Code.new(arg_string).highlighted}"
|
96
94
|
end
|
data/lib/pry/config.rb
CHANGED
@@ -1,13 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'ostruct'
|
4
|
-
|
5
3
|
class Pry
|
6
4
|
# @api private
|
7
5
|
class Config
|
8
6
|
extend Attributable
|
9
7
|
|
10
|
-
# @return [IO, #readline]
|
8
|
+
# @return [IO, #readline] the object from which Pry retrieves its lines of
|
11
9
|
# input
|
12
10
|
attribute :input
|
13
11
|
|
@@ -26,10 +24,6 @@ class Pry
|
|
26
24
|
# @return [Array] Exception that Pry shouldn't rescue
|
27
25
|
attribute :unrescued_exceptions
|
28
26
|
|
29
|
-
# @deprecated
|
30
|
-
# @return [Array] Exception that Pry shouldn't rescue
|
31
|
-
attribute :exception_whitelist
|
32
|
-
|
33
27
|
# @return [Integer] The number of lines of context to show before and after
|
34
28
|
# exceptions
|
35
29
|
attribute :default_window_size
|
@@ -67,6 +61,9 @@ class Pry
|
|
67
61
|
# @return [Boolean]
|
68
62
|
attribute :pager
|
69
63
|
|
64
|
+
# @return [Boolean]
|
65
|
+
attribute :multiline
|
66
|
+
|
70
67
|
# @return [Boolean] whether the global ~/.pryrc should be loaded
|
71
68
|
attribute :should_load_rc
|
72
69
|
|
@@ -153,7 +150,7 @@ class Pry
|
|
153
150
|
|
154
151
|
def initialize
|
155
152
|
merge!(
|
156
|
-
input: MemoizedValue.new {
|
153
|
+
input: MemoizedValue.new { choose_input },
|
157
154
|
output: $stdout.tap { |out| out.sync = true },
|
158
155
|
commands: Pry::Commands,
|
159
156
|
prompt_name: 'pry',
|
@@ -167,17 +164,10 @@ class Pry
|
|
167
164
|
::SystemExit, ::SignalException, Pry::TooSafeException
|
168
165
|
],
|
169
166
|
|
170
|
-
exception_whitelist: MemoizedValue.new do
|
171
|
-
output.puts(
|
172
|
-
'[warning] Pry.config.exception_whitelist is deprecated, ' \
|
173
|
-
'please use Pry.config.unrescued_exceptions instead.'
|
174
|
-
)
|
175
|
-
unrescued_exceptions
|
176
|
-
end,
|
177
|
-
|
178
167
|
hooks: Pry::Hooks.default,
|
179
168
|
pager: true,
|
180
169
|
system: Pry::SystemCommandHandler.method(:default),
|
170
|
+
multiline: true,
|
181
171
|
color: Pry::Helpers::BaseHelpers.use_ansi_codes?,
|
182
172
|
default_window_size: 5,
|
183
173
|
editor: Pry::Editor.default,
|
@@ -199,7 +189,7 @@ class Pry
|
|
199
189
|
extra_sticky_locals: {},
|
200
190
|
command_completions: proc { commands.keys },
|
201
191
|
file_completions: proc { Dir['.'] },
|
202
|
-
ls:
|
192
|
+
ls: Pry::Command::Ls::Config.default,
|
203
193
|
completer: Pry::InputCompleter,
|
204
194
|
history_save: true,
|
205
195
|
history_load: true,
|
@@ -286,7 +276,17 @@ class Pry
|
|
286
276
|
|
287
277
|
private
|
288
278
|
|
289
|
-
def
|
279
|
+
def choose_input
|
280
|
+
input = load_readline
|
281
|
+
|
282
|
+
if Pry::Env['TERM'] == 'dumb' && (defined?(Reline) && input == Reline)
|
283
|
+
input = Pry::Input::SimpleStdio
|
284
|
+
end
|
285
|
+
|
286
|
+
input
|
287
|
+
end
|
288
|
+
|
289
|
+
def load_readline
|
290
290
|
require 'readline'
|
291
291
|
::Readline
|
292
292
|
rescue LoadError
|
@@ -19,7 +19,7 @@ class Pry
|
|
19
19
|
else
|
20
20
|
# Otherwise, saves current binding stack as old stack and pops last
|
21
21
|
# binding out of binding stack (the old stack still has that binding).
|
22
|
-
cd_state = Pry::CommandState.default.state_for(
|
22
|
+
cd_state = Pry::CommandState.default.state_for(Pry::Command::Cd)
|
23
23
|
cd_state.old_stack = pry_instance.binding_stack.dup
|
24
24
|
pry_instance.binding_stack.pop
|
25
25
|
end
|
@@ -30,8 +30,13 @@ class Pry
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def exception_text(exception)
|
33
|
-
|
34
|
-
|
33
|
+
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('3.2')
|
34
|
+
"#{exception.class}: #{exception.message}\n" \
|
35
|
+
"from #{exception.backtrace.first}\n"
|
36
|
+
else
|
37
|
+
"#{exception.class}: #{exception.detailed_message}\n" \
|
38
|
+
"from #{exception.backtrace.first}\n"
|
39
|
+
end
|
35
40
|
end
|
36
41
|
|
37
42
|
def cause_text(cause)
|
@@ -70,7 +70,7 @@ class Pry
|
|
70
70
|
|
71
71
|
# Find the longest common whitespace to all indented lines. Ignore lines
|
72
72
|
# containing just -- or ++ as these seem to be used by comment authors
|
73
|
-
# as
|
73
|
+
# as delimiters.
|
74
74
|
scanned_text = text.scan(/^[ \t]*(?!--\n|\+\+\n)(?=[^ \t\n])/)
|
75
75
|
margin = scanned_text.inject do |current_margin, next_indent|
|
76
76
|
if next_indent.start_with?(current_margin)
|
data/lib/pry/indent.rb
CHANGED
@@ -17,6 +17,9 @@ class Pry
|
|
17
17
|
# @return [String] String containing the spaces to be inserted before the next line.
|
18
18
|
attr_reader :indent_level
|
19
19
|
|
20
|
+
# @return [String] String containing the spaces for the current line.
|
21
|
+
attr_reader :last_indent_level
|
22
|
+
|
20
23
|
# @return [Array<String>] The stack of open tokens.
|
21
24
|
attr_reader :stack
|
22
25
|
|
@@ -110,6 +113,7 @@ class Pry
|
|
110
113
|
def reset
|
111
114
|
@stack = []
|
112
115
|
@indent_level = String.new # rubocop:disable Style/EmptyLiteral
|
116
|
+
@last_indent_level = @indent_level
|
113
117
|
@heredoc_queue = []
|
114
118
|
@close_heredocs = {}
|
115
119
|
@string_start = nil
|
@@ -164,11 +168,11 @@ class Pry
|
|
164
168
|
|
165
169
|
output += line
|
166
170
|
|
171
|
+
@last_indent_level = prefix
|
167
172
|
prefix = new_prefix
|
168
173
|
end
|
169
174
|
|
170
175
|
@indent_level = prefix
|
171
|
-
|
172
176
|
output
|
173
177
|
end
|
174
178
|
|
@@ -281,9 +285,7 @@ class Pry
|
|
281
285
|
# @param [String] string The Ruby to lex
|
282
286
|
# @return [Array] An Array of pairs of [token_value, token_type]
|
283
287
|
def tokenize(string)
|
284
|
-
|
285
|
-
tokens = tokens.tokens.each_slice(2) if tokens.respond_to?(:tokens) # Coderay 1.0.0
|
286
|
-
tokens.to_a
|
288
|
+
SyntaxHighlighter.tokenize(string).each_slice(2).to_a
|
287
289
|
end
|
288
290
|
|
289
291
|
# Update the internal state about what kind of strings are open.
|
data/lib/pry/input_completer.rb
CHANGED
@@ -234,7 +234,7 @@ class Pry
|
|
234
234
|
end.compact
|
235
235
|
end
|
236
236
|
|
237
|
-
# build_path
|
237
|
+
# build_path separates the input into two parts: path and input.
|
238
238
|
# input is the partial string that should be completed
|
239
239
|
# path is a proc that takes an input and builds a full path.
|
240
240
|
def build_path(input)
|
data/lib/pry/method/patcher.rb
CHANGED
@@ -43,7 +43,7 @@ class Pry
|
|
43
43
|
#
|
44
44
|
# When we're redefining aliased methods we will overwrite the method at the
|
45
45
|
# unaliased name (so that super continues to work). By wrapping that code in a
|
46
|
-
#
|
46
|
+
# translation we make that not happen, which means that alias_method_chains, etc.
|
47
47
|
# continue to work.
|
48
48
|
#
|
49
49
|
def with_method_transaction
|
@@ -95,7 +95,7 @@ class Pry
|
|
95
95
|
# Update the source code so that when it has the right owner when eval'd.
|
96
96
|
#
|
97
97
|
# This (combined with definition_for_owner) is backup for the case that
|
98
|
-
# wrap_for_nesting fails, to ensure that the method will
|
98
|
+
# wrap_for_nesting fails, to ensure that the method will still be defined in
|
99
99
|
# the correct place.
|
100
100
|
#
|
101
101
|
# @param [String] source The source to wrap
|
@@ -123,7 +123,7 @@ class Pry
|
|
123
123
|
# know which __FILE__ and __LINE__ the binding is at, we can hope to
|
124
124
|
# disambiguate these cases.
|
125
125
|
#
|
126
|
-
# This obviously won't work if the source is
|
126
|
+
# This obviously won't work if the source is unavailable for some reason,
|
127
127
|
# or if both methods have the same __FILE__ and __LINE__.
|
128
128
|
#
|
129
129
|
# @return [Pry::Method, nil] The Pry::Method representing the
|
data/lib/pry/method.rb
CHANGED
@@ -564,8 +564,7 @@ class Pry
|
|
564
564
|
def method_name_from_first_line(first_ln)
|
565
565
|
return nil if first_ln.strip !~ /^def /
|
566
566
|
|
567
|
-
tokens = SyntaxHighlighter.tokenize(first_ln)
|
568
|
-
tokens = tokens.tokens.each_slice(2) if tokens.respond_to?(:tokens)
|
567
|
+
tokens = SyntaxHighlighter.tokenize(first_ln).each_slice(2)
|
569
568
|
tokens.each_cons(2) do |t1, t2|
|
570
569
|
if t2.last == :method || t2.last == :ident && t1 == [".", :operator]
|
571
570
|
return t2.first
|
data/lib/pry/pry_class.rb
CHANGED
@@ -161,6 +161,8 @@ you can add "Pry.config.windows_console_warning = false" to your pryrc.
|
|
161
161
|
|
162
162
|
options = options.to_hash
|
163
163
|
|
164
|
+
options[:color] = false if Pry::Env['NO_COLOR']
|
165
|
+
|
164
166
|
if in_critical_section?
|
165
167
|
output.puts "ERROR: Pry started inside Pry."
|
166
168
|
output.puts "This can happen if you have a binding.pry inside a #to_s " \
|
@@ -215,7 +217,7 @@ you can add "Pry.config.windows_console_warning = false" to your pryrc.
|
|
215
217
|
# The maximum number of chars before clipping occurs.
|
216
218
|
#
|
217
219
|
# @option options [Boolean] :id (false)
|
218
|
-
# Boolean to indicate whether or not a hex
|
220
|
+
# Boolean to indicate whether or not a hex representation of the object ID
|
219
221
|
# is attached to the return value when the length of inspect is greater than
|
220
222
|
# value of `:max_length`.
|
221
223
|
#
|
data/lib/pry/pry_instance.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'method_source'
|
4
|
-
require 'ostruct'
|
5
4
|
|
6
5
|
##
|
7
6
|
# Pry is a powerful alternative to the standard IRB shell for Ruby. It
|
@@ -93,7 +92,6 @@ class Pry
|
|
93
92
|
@input_ring << nil
|
94
93
|
push_initial_binding(target)
|
95
94
|
exec_hook(:when_started, target, options, self)
|
96
|
-
@prompt_warn = false
|
97
95
|
end
|
98
96
|
|
99
97
|
# This is the prompt at the top of the prompt stack.
|
@@ -388,7 +386,7 @@ class Pry
|
|
388
386
|
# @param [*Object] args The arguments to pass to the hook
|
389
387
|
# @return [Object, Exception] The return value of the hook or the exception raised
|
390
388
|
#
|
391
|
-
# If executing a hook raises an exception, we log that and then continue
|
389
|
+
# If executing a hook raises an exception, we log that and then continue successfully.
|
392
390
|
# To debug such errors, use the global variable $pry_hook_error, which is set as a
|
393
391
|
# result.
|
394
392
|
def exec_hook(name, *args, &block)
|
@@ -452,45 +450,17 @@ class Pry
|
|
452
450
|
# @return [String] The prompt.
|
453
451
|
def select_prompt
|
454
452
|
object = current_binding.eval('self')
|
455
|
-
|
456
|
-
|
457
|
-
c = OpenStruct.new(
|
458
|
-
object: object,
|
459
|
-
nesting_level: binding_stack.size - 1,
|
460
|
-
open_token: open_token,
|
461
|
-
session_line: Pry.history.session_line_count + 1,
|
462
|
-
history_line: Pry.history.history_line_count + 1,
|
463
|
-
expr_number: input_ring.count,
|
464
|
-
pry_instance: self,
|
465
|
-
binding_stack: binding_stack,
|
466
|
-
input_ring: input_ring,
|
467
|
-
eval_string: @eval_string,
|
468
|
-
cont: !@eval_string.empty?
|
469
|
-
)
|
453
|
+
nesting_level = binding_stack.size - 1
|
454
|
+
pry_instance = self
|
470
455
|
|
471
456
|
Pry.critical_section do
|
472
457
|
# If input buffer is empty, then use normal prompt. Otherwise use the wait
|
473
458
|
# prompt (indicating multi-line expression).
|
474
459
|
if prompt.is_a?(Pry::Prompt)
|
475
460
|
prompt_proc = eval_string.empty? ? prompt.wait_proc : prompt.incomplete_proc
|
476
|
-
return prompt_proc.call(
|
477
|
-
end
|
478
|
-
|
479
|
-
unless @prompt_warn
|
480
|
-
@prompt_warn = true
|
481
|
-
Kernel.warn(
|
482
|
-
"warning: setting prompt with help of " \
|
483
|
-
"`Pry.config.prompt = [proc {}, proc {}]` is deprecated. " \
|
484
|
-
"Use Pry::Prompt API instead"
|
485
|
-
)
|
486
|
-
end
|
487
|
-
|
488
|
-
# If input buffer is empty then use normal prompt
|
489
|
-
if eval_string.empty?
|
490
|
-
generate_prompt(Array(prompt).first, c)
|
491
|
-
# Otherwise use the wait prompt (indicating multi-line expression)
|
461
|
+
return prompt_proc.call(object, nesting_level, pry_instance)
|
492
462
|
else
|
493
|
-
|
463
|
+
output.puts "ERROR: Use Pry::Prompt API."
|
494
464
|
end
|
495
465
|
end
|
496
466
|
end
|
@@ -549,7 +519,7 @@ class Pry
|
|
549
519
|
# and a mistake in specifying that exception.
|
550
520
|
#
|
551
521
|
# (i.e. raise-up RunThymeError.new should not be the same as
|
552
|
-
# raise-up NameError, "
|
522
|
+
# raise-up NameError, "uninitialized constant RunThymeError")
|
553
523
|
#
|
554
524
|
def raise_up_common(force, *args)
|
555
525
|
exception = if args == []
|
@@ -685,14 +655,6 @@ class Pry
|
|
685
655
|
end
|
686
656
|
end
|
687
657
|
|
688
|
-
def generate_prompt(prompt_proc, conf)
|
689
|
-
if prompt_proc.arity == 1
|
690
|
-
prompt_proc.call(conf)
|
691
|
-
else
|
692
|
-
prompt_proc.call(conf.object, conf.nesting_level, conf.pry_instance)
|
693
|
-
end
|
694
|
-
end
|
695
|
-
|
696
658
|
# the array that the prompt stack is stored in
|
697
659
|
def prompt_stack
|
698
660
|
@prompt_stack ||= []
|
data/lib/pry/repl.rb
CHANGED
@@ -100,7 +100,7 @@ class Pry
|
|
100
100
|
# Return nil for EOF, :no_more_input for error, or :control_c for <Ctrl-C>
|
101
101
|
return val unless val.is_a?(String)
|
102
102
|
|
103
|
-
if pry.config.auto_indent
|
103
|
+
if pry.config.auto_indent && !input_multiline?
|
104
104
|
original_val = "#{indentation}#{val}"
|
105
105
|
indented_val = @indent.indent(val)
|
106
106
|
|
@@ -179,7 +179,31 @@ class Pry
|
|
179
179
|
end
|
180
180
|
end
|
181
181
|
|
182
|
-
if
|
182
|
+
if reline_available?
|
183
|
+
Reline.output_modifier_proc = lambda do |text, _|
|
184
|
+
if pry.color
|
185
|
+
SyntaxHighlighter.highlight(text)
|
186
|
+
else
|
187
|
+
text
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
if pry.config.auto_indent
|
192
|
+
Reline.auto_indent_proc = lambda do |lines, line_index, _byte_ptr, _newline|
|
193
|
+
if line_index == 0
|
194
|
+
0
|
195
|
+
else
|
196
|
+
pry_indentation = Pry::Indent.new
|
197
|
+
pry_indentation.indent(lines.join("\n"))
|
198
|
+
pry_indentation.last_indent_level.length
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
if input_multiline?
|
205
|
+
input_readmultiline(current_prompt, false)
|
206
|
+
elsif readline_available?
|
183
207
|
set_readline_output
|
184
208
|
input_readline(current_prompt, false) # false since we'll add it manually
|
185
209
|
elsif coolline_available?
|
@@ -192,12 +216,29 @@ class Pry
|
|
192
216
|
end
|
193
217
|
end
|
194
218
|
|
219
|
+
def input_readmultiline(*args)
|
220
|
+
Pry::InputLock.for(:all).interruptible_region do
|
221
|
+
input.readmultiline(*args) do |multiline_input|
|
222
|
+
Pry.commands.find_command(multiline_input) ||
|
223
|
+
(complete_expression?(multiline_input) && !Reline::IOGate.in_pasting?)
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
195
228
|
def input_readline(*args)
|
196
229
|
Pry::InputLock.for(:all).interruptible_region do
|
197
230
|
input.readline(*args)
|
198
231
|
end
|
199
232
|
end
|
200
233
|
|
234
|
+
def input_multiline?
|
235
|
+
!!pry.config.multiline && reline_available?
|
236
|
+
end
|
237
|
+
|
238
|
+
def reline_available?
|
239
|
+
defined?(Reline) && input == Reline
|
240
|
+
end
|
241
|
+
|
201
242
|
def readline_available?
|
202
243
|
defined?(Readline) && input == Readline
|
203
244
|
end
|
@@ -206,6 +247,13 @@ class Pry
|
|
206
247
|
defined?(Coolline) && input.is_a?(Coolline)
|
207
248
|
end
|
208
249
|
|
250
|
+
def prism_available?
|
251
|
+
require 'prism'
|
252
|
+
|
253
|
+
@prism_available ||= defined?(Prism) &&
|
254
|
+
Gem::Version.new(Prism::VERSION) >= Gem::Version.new('0.25.0')
|
255
|
+
end
|
256
|
+
|
209
257
|
# If `$stdout` is not a tty, it's probably a pipe.
|
210
258
|
# @example
|
211
259
|
# # `piping?` returns `false`
|
@@ -227,6 +275,21 @@ class Pry
|
|
227
275
|
@readline_output = (Readline.output = Pry.config.output) if piping?
|
228
276
|
end
|
229
277
|
|
278
|
+
UNEXPECTED_TOKENS = %i[unexpected_token_ignore lambda_open].freeze
|
279
|
+
|
280
|
+
def complete_expression?(multiline_input)
|
281
|
+
if prism_available?
|
282
|
+
lex = Prism.lex(multiline_input)
|
283
|
+
|
284
|
+
errors = lex.errors
|
285
|
+
return true if errors.empty?
|
286
|
+
|
287
|
+
errors.any? { |error| UNEXPECTED_TOKENS.include?(error.type) }
|
288
|
+
else
|
289
|
+
Pry::Code.complete_expression?(multiline_input)
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
230
293
|
# Calculates correct overhang for current line. Supports vi Readline
|
231
294
|
# mode and its indicators such as "(ins)" or "(cmd)".
|
232
295
|
#
|
data/lib/pry/ring.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
class Pry
|
4
4
|
# A ring is a thread-safe fixed-capacity array to which you can only add
|
5
5
|
# elements. Older entries are overwritten as you add new elements, so that the
|
6
|
-
# ring can never contain more than `max_size`
|
6
|
+
# ring can never contain more than `max_size` elements.
|
7
7
|
#
|
8
8
|
# @example
|
9
9
|
# ring = Pry::Ring.new(3)
|
data/lib/pry/slop.rb
CHANGED
@@ -73,7 +73,7 @@ class Pry
|
|
73
73
|
# Build a Slop object from a option specification.
|
74
74
|
#
|
75
75
|
# This allows you to design your options via a simple String rather
|
76
|
-
# than
|
76
|
+
# than programmatically. Do note though that with this method, you're
|
77
77
|
# unable to pass any advanced options to the on() method when creating
|
78
78
|
# options.
|
79
79
|
#
|
data/lib/pry/version.rb
CHANGED
data/lib/pry/wrapped_module.rb
CHANGED
@@ -286,7 +286,7 @@ class Pry
|
|
286
286
|
# highest rank, that is the 'monkey patch' of this module with the
|
287
287
|
# highest number of methods, which contains a source code line that
|
288
288
|
# defines the module. It is considered the 'canonical' definition
|
289
|
-
# for the module. In the
|
289
|
+
# for the module. In the absence of a suitable candidate, the
|
290
290
|
# candidate of rank 0 will be returned, or a CommandError raised if
|
291
291
|
# there are no candidates at all.
|
292
292
|
def primary_candidate
|
data/lib/pry.rb
CHANGED
@@ -34,6 +34,7 @@ require 'pry/env'
|
|
34
34
|
|
35
35
|
Pry::Commands = Pry::CommandSet.new unless defined?(Pry::Commands)
|
36
36
|
|
37
|
+
require 'pry/commands/ls/config'
|
37
38
|
require 'pry/commands/ls/jruby_hacks'
|
38
39
|
require 'pry/commands/ls/methods_helper'
|
39
40
|
require 'pry/commands/ls/interrogatable'
|
@@ -57,6 +58,8 @@ require 'pry/config/memoized_value'
|
|
57
58
|
require 'pry/config/lazy_value'
|
58
59
|
require 'pry/config'
|
59
60
|
|
61
|
+
require 'pry/input/simple_stdio'
|
62
|
+
|
60
63
|
require 'pry/pry_class'
|
61
64
|
require 'pry/pry_instance'
|
62
65
|
require 'pry/inspector'
|
metadata
CHANGED
@@ -1,17 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Mair (banisterfiend)
|
8
8
|
- Conrad Irwin
|
9
9
|
- Ryan Fitzgerald
|
10
10
|
- Kyrylo Silin
|
11
|
-
autorequire:
|
12
11
|
bindir: bin
|
13
12
|
cert_chain: []
|
14
|
-
date:
|
13
|
+
date: 2024-11-15 00:00:00.000000000 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
16
|
name: coderay
|
@@ -102,6 +101,7 @@ files:
|
|
102
101
|
- lib/pry/commands/jump_to.rb
|
103
102
|
- lib/pry/commands/list_inspectors.rb
|
104
103
|
- lib/pry/commands/ls.rb
|
104
|
+
- lib/pry/commands/ls/config.rb
|
105
105
|
- lib/pry/commands/ls/constants.rb
|
106
106
|
- lib/pry/commands/ls/formatter.rb
|
107
107
|
- lib/pry/commands/ls/globals.rb
|
@@ -160,6 +160,7 @@ files:
|
|
160
160
|
- lib/pry/history.rb
|
161
161
|
- lib/pry/hooks.rb
|
162
162
|
- lib/pry/indent.rb
|
163
|
+
- lib/pry/input/simple_stdio.rb
|
163
164
|
- lib/pry/input_completer.rb
|
164
165
|
- lib/pry/input_lock.rb
|
165
166
|
- lib/pry/inspector.rb
|
@@ -200,7 +201,6 @@ metadata:
|
|
200
201
|
changelog_uri: https://github.com/pry/pry/blob/master/CHANGELOG.md
|
201
202
|
source_code_uri: https://github.com/pry/pry
|
202
203
|
bug_tracker_uri: https://github.com/pry/pry/issues
|
203
|
-
post_install_message:
|
204
204
|
rdoc_options: []
|
205
205
|
require_paths:
|
206
206
|
- lib
|
@@ -215,8 +215,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
215
215
|
- !ruby/object:Gem::Version
|
216
216
|
version: '0'
|
217
217
|
requirements: []
|
218
|
-
rubygems_version: 3.
|
219
|
-
signing_key:
|
218
|
+
rubygems_version: 3.6.0.dev
|
220
219
|
specification_version: 4
|
221
220
|
summary: A runtime developer console and IRB alternative with powerful introspection
|
222
221
|
capabilities.
|