irb 1.13.2 → 1.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/irb/command/cd.rb +51 -0
- data/lib/irb/completion.rb +29 -9
- data/lib/irb/context.rb +0 -1
- data/lib/irb/default_commands.rb +3 -0
- data/lib/irb/statement.rb +1 -1
- data/lib/irb/version.rb +2 -2
- data/lib/irb.rb +8 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b96add3ef12d981b483ae225bfd8bca8a1a477f0b03c8040a0dfbf047bd0d1fb
|
4
|
+
data.tar.gz: efe91e97fab6b11a239c4774da9d5ecfe39bbc364d61a6b2c7fd6ec8b9c01a72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0eaa119e765d958cdab2ba80fa12e47a9727d389a37f255e174ec260279af8e2c2edb510689364541fe40f3c202a3b3d4f2d7dc7fbe30030b04e89bc2c851a3a
|
7
|
+
data.tar.gz: 71904280b978ac48763d7bc965f053fd5580ec7876c40cba76a1a9c26ac7aec2f4ad98deb1d9c8d3635f5222a0b757d458d7fded9264411b05f19bfe77ad2526
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module IRB
|
4
|
+
module Command
|
5
|
+
class CD < Base
|
6
|
+
category "Workspace"
|
7
|
+
description "Move into the given object or leave the current context."
|
8
|
+
|
9
|
+
help_message(<<~HELP)
|
10
|
+
Usage: cd ([target]|..)
|
11
|
+
|
12
|
+
IRB uses a stack of workspaces to keep track of context(s), with `pushws` and `popws` commands to manipulate the stack.
|
13
|
+
The `cd` command is an attempt to simplify the operation and will be subject to change.
|
14
|
+
|
15
|
+
When given:
|
16
|
+
- an object, cd will use that object as the new context by pushing it onto the workspace stack.
|
17
|
+
- "..", cd will leave the current context by popping the top workspace off the stack.
|
18
|
+
- no arguments, cd will move to the top workspace on the stack by popping off all workspaces.
|
19
|
+
|
20
|
+
Examples:
|
21
|
+
|
22
|
+
cd Foo
|
23
|
+
cd Foo.new
|
24
|
+
cd @ivar
|
25
|
+
cd ..
|
26
|
+
cd
|
27
|
+
HELP
|
28
|
+
|
29
|
+
def execute(arg)
|
30
|
+
case arg
|
31
|
+
when ".."
|
32
|
+
irb_context.pop_workspace
|
33
|
+
when ""
|
34
|
+
# TODO: decide what workspace commands should be kept, and underlying APIs should look like,
|
35
|
+
# and perhaps add a new API to clear the workspace stack.
|
36
|
+
prev_workspace = irb_context.pop_workspace
|
37
|
+
while prev_workspace
|
38
|
+
prev_workspace = irb_context.pop_workspace
|
39
|
+
end
|
40
|
+
else
|
41
|
+
begin
|
42
|
+
obj = eval(arg, irb_context.workspace.binding)
|
43
|
+
irb_context.push_workspace(obj)
|
44
|
+
rescue StandardError => e
|
45
|
+
warn "Error: #{e}"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/irb/completion.rb
CHANGED
@@ -33,6 +33,8 @@ module IRB
|
|
33
33
|
yield
|
34
34
|
]
|
35
35
|
|
36
|
+
HELP_COMMAND_PREPOSING = /\Ahelp\s+/
|
37
|
+
|
36
38
|
def completion_candidates(preposing, target, postposing, bind:)
|
37
39
|
raise NotImplementedError
|
38
40
|
end
|
@@ -86,8 +88,8 @@ module IRB
|
|
86
88
|
)
|
87
89
|
end
|
88
90
|
|
89
|
-
def
|
90
|
-
if
|
91
|
+
def command_candidates(target)
|
92
|
+
if !target.empty?
|
91
93
|
IRB::Command.command_names.select { _1.start_with?(target) }
|
92
94
|
else
|
93
95
|
[]
|
@@ -111,8 +113,18 @@ module IRB
|
|
111
113
|
end
|
112
114
|
|
113
115
|
def completion_candidates(preposing, target, _postposing, bind:)
|
114
|
-
|
116
|
+
# When completing the argument of `help` command, only commands should be candidates
|
117
|
+
return command_candidates(target) if preposing.match?(HELP_COMMAND_PREPOSING)
|
118
|
+
|
119
|
+
commands = if preposing.empty?
|
120
|
+
command_candidates(target)
|
121
|
+
# It doesn't make sense to propose commands with other preposing
|
122
|
+
else
|
123
|
+
[]
|
124
|
+
end
|
125
|
+
|
115
126
|
result = ReplTypeCompletor.analyze(preposing + target, binding: bind, filename: @context.irb_path)
|
127
|
+
|
116
128
|
return commands unless result
|
117
129
|
|
118
130
|
commands | result.completion_candidates.map { target + _1 }
|
@@ -187,12 +199,20 @@ module IRB
|
|
187
199
|
end
|
188
200
|
|
189
201
|
def completion_candidates(preposing, target, postposing, bind:)
|
190
|
-
if preposing
|
191
|
-
result
|
192
|
-
return result if result
|
202
|
+
if result = complete_require_path(target, preposing, postposing)
|
203
|
+
return result
|
193
204
|
end
|
194
|
-
|
195
|
-
commands
|
205
|
+
|
206
|
+
commands = command_candidates(target)
|
207
|
+
|
208
|
+
# When completing the argument of `help` command, only commands should be candidates
|
209
|
+
return commands if preposing.match?(HELP_COMMAND_PREPOSING)
|
210
|
+
|
211
|
+
# It doesn't make sense to propose commands with other preposing
|
212
|
+
commands = [] unless preposing.empty?
|
213
|
+
|
214
|
+
completion_data = retrieve_completion_data(target, bind: bind, doc_namespace: false).compact.map{ |i| i.encode(Encoding.default_external) }
|
215
|
+
commands | completion_data
|
196
216
|
end
|
197
217
|
|
198
218
|
def doc_namespace(_preposing, matched, _postposing, bind:)
|
@@ -470,7 +490,7 @@ module IRB
|
|
470
490
|
end
|
471
491
|
end
|
472
492
|
CompletionProc = ->(target, preposing = nil, postposing = nil) {
|
473
|
-
regexp_completor.completion_candidates(preposing, target, postposing, bind: IRB.conf[:MAIN_CONTEXT].workspace.binding)
|
493
|
+
regexp_completor.completion_candidates(preposing || '', target, postposing || '', bind: IRB.conf[:MAIN_CONTEXT].workspace.binding)
|
474
494
|
}
|
475
495
|
end
|
476
496
|
deprecate_constant :InputCompletor
|
data/lib/irb/context.rb
CHANGED
data/lib/irb/default_commands.rb
CHANGED
@@ -5,6 +5,7 @@ require_relative "command/internal_helpers"
|
|
5
5
|
require_relative "command/backtrace"
|
6
6
|
require_relative "command/break"
|
7
7
|
require_relative "command/catch"
|
8
|
+
require_relative "command/cd"
|
8
9
|
require_relative "command/chws"
|
9
10
|
require_relative "command/context"
|
10
11
|
require_relative "command/continue"
|
@@ -240,6 +241,8 @@ module IRB
|
|
240
241
|
_register_with_aliases(:irb_disable_irb, Command::DisableIrb,
|
241
242
|
[:disable_irb, NO_OVERRIDE]
|
242
243
|
)
|
244
|
+
|
245
|
+
register(:cd, Command::CD)
|
243
246
|
end
|
244
247
|
|
245
248
|
ExtendCommand = Command
|
data/lib/irb/statement.rb
CHANGED
data/lib/irb/version.rb
CHANGED
data/lib/irb.rb
CHANGED
@@ -1138,6 +1138,8 @@ module IRB
|
|
1138
1138
|
end
|
1139
1139
|
end
|
1140
1140
|
|
1141
|
+
ASSIGN_OPERATORS_REGEXP = Regexp.union(%w[= += -= *= /= %= **= &= |= &&= ||= ^= <<= >>=])
|
1142
|
+
|
1141
1143
|
def parse_command(code)
|
1142
1144
|
command_name, arg = code.strip.split(/\s+/, 2)
|
1143
1145
|
return unless code.lines.size == 1 && command_name
|
@@ -1149,6 +1151,12 @@ module IRB
|
|
1149
1151
|
return [alias_name, arg]
|
1150
1152
|
end
|
1151
1153
|
|
1154
|
+
# Assignment-like expression is not a command
|
1155
|
+
return if arg.start_with?(ASSIGN_OPERATORS_REGEXP) && !arg.start_with?(/==|=~/)
|
1156
|
+
|
1157
|
+
# Local variable have precedence over command
|
1158
|
+
return if @context.local_variables.include?(command)
|
1159
|
+
|
1152
1160
|
# Check visibility
|
1153
1161
|
public_method = !!Kernel.instance_method(:public_method).bind_call(@context.main, command) rescue false
|
1154
1162
|
private_method = !public_method && !!Kernel.instance_method(:method).bind_call(@context.main, command) rescue false
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: irb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- aycabta
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2024-06
|
12
|
+
date: 2024-07-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: reline
|
@@ -68,6 +68,7 @@ files:
|
|
68
68
|
- lib/irb/command/base.rb
|
69
69
|
- lib/irb/command/break.rb
|
70
70
|
- lib/irb/command/catch.rb
|
71
|
+
- lib/irb/command/cd.rb
|
71
72
|
- lib/irb/command/chws.rb
|
72
73
|
- lib/irb/command/context.rb
|
73
74
|
- lib/irb/command/continue.rb
|