repl_type_completor 0.1.8 → 0.1.10
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.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22c32aa7e27069f8002c1fe8080bb31c8470760c6c780ba8b566252389dc326d
|
4
|
+
data.tar.gz: 296c548b10082570baadd90d3c94323f91373a6f0edbde307d01228aac7d83e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3494ca3dfd41ac33f784e35384299a502703e503fc94732a7572cf2c4418d7754b53dfb2be49588aca33eab595dc3ed181686b4cfc32da0a36c6523aa82183c9
|
7
|
+
data.tar.gz: 4beada48ab3e6d67c7543cf9a3e7797792fef8548cf4a8637024d72b865dcbb50ace5fe460ff8e504dae73e308116aefa523fdcbf4f161ed534060fa9c700e59
|
@@ -139,29 +139,37 @@ module ReplTypeCompletor
|
|
139
139
|
type = type.types.find { _1.all_methods.include? name.to_sym }
|
140
140
|
case type
|
141
141
|
when Types::SingletonType
|
142
|
-
"#{
|
142
|
+
"#{doc_class_module_name(type.module_or_class)}.#{name}"
|
143
143
|
when Types::InstanceType
|
144
|
-
"#{
|
144
|
+
"#{doc_class_module_name(type.klass)}##{name}"
|
145
145
|
end
|
146
146
|
end
|
147
147
|
|
148
148
|
def call_or_const_doc(type, name)
|
149
149
|
if name =~ /\A[A-Z]/
|
150
150
|
type = type.types.grep(Types::SingletonType).find { _1.module_or_class.const_defined?(name) }
|
151
|
-
type.module_or_class == Object ? name : "#{
|
151
|
+
type.module_or_class == Object ? name : "#{doc_class_module_name(type.module_or_class)}::#{name}" if type
|
152
152
|
else
|
153
153
|
method_doc(type, name)
|
154
154
|
end
|
155
155
|
end
|
156
156
|
|
157
|
+
def doc_class_module_name(module_or_class)
|
158
|
+
if Class === module_or_class
|
159
|
+
Types.class_name_of(module_or_class)
|
160
|
+
else
|
161
|
+
Methods::MODULE_NAME_METHOD.bind_call(module_or_class) || 'Module'
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
157
165
|
def value_doc(type)
|
158
166
|
return unless type
|
159
167
|
type.types.each do |t|
|
160
168
|
case t
|
161
169
|
when Types::SingletonType
|
162
|
-
return
|
170
|
+
return doc_class_module_name(t.module_or_class)
|
163
171
|
when Types::InstanceType
|
164
|
-
return
|
172
|
+
return doc_class_module_name(t.klass)
|
165
173
|
end
|
166
174
|
end
|
167
175
|
nil
|
@@ -9,13 +9,13 @@ module ReplTypeCompletor
|
|
9
9
|
class TypeAnalyzer
|
10
10
|
class DigTarget
|
11
11
|
def initialize(parents, receiver, &block)
|
12
|
-
@
|
13
|
-
@
|
12
|
+
@dig_nodes = parents.to_h { [_1, true] }.compare_by_identity
|
13
|
+
@target = receiver
|
14
14
|
@block = block
|
15
15
|
end
|
16
16
|
|
17
|
-
def dig?(node) = @
|
18
|
-
def target?(node) = @
|
17
|
+
def dig?(node) = @dig_nodes[node]
|
18
|
+
def target?(node) = @target.equal?(node)
|
19
19
|
def resolve(type, scope)
|
20
20
|
@block.call type, scope
|
21
21
|
end
|
@@ -259,6 +259,9 @@ module ReplTypeCompletor
|
|
259
259
|
call_block_proc = ->(block_args, block_self_type) do
|
260
260
|
scope.conditional do |s|
|
261
261
|
params_table = node.block.locals.to_h { [_1.to_s, Types::NIL] }
|
262
|
+
if node.block.parameters.is_a?(Prism::ItParametersNode)
|
263
|
+
params_table['_1'] = block_args.first || Types::NIL
|
264
|
+
end
|
262
265
|
table = { **params_table, Scope::BREAK_RESULT => nil, Scope::NEXT_RESULT => nil }
|
263
266
|
block_scope = Scope.new s, table, self_type: block_self_type, trace_ivar: !block_self_type
|
264
267
|
# TODO kwargs
|
@@ -266,9 +269,9 @@ module ReplTypeCompletor
|
|
266
269
|
when Prism::NumberedParametersNode
|
267
270
|
assign_numbered_parameters node.block.parameters.maximum, block_scope, block_args, {}
|
268
271
|
when Prism::BlockParametersNode
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
+
if node.block.parameters.parameters
|
273
|
+
assign_parameters node.block.parameters.parameters, block_scope, block_args, {}
|
274
|
+
end
|
272
275
|
end
|
273
276
|
result = node.block.body ? evaluate(node.block.body, block_scope) : Types::NIL
|
274
277
|
block_scope.merge_jumps
|
@@ -447,6 +450,10 @@ module ReplTypeCompletor
|
|
447
450
|
Types::PROC
|
448
451
|
end
|
449
452
|
|
453
|
+
def evaluate_shareable_constant_node(node, scope)
|
454
|
+
evaluate(node.write, scope)
|
455
|
+
end
|
456
|
+
|
450
457
|
def evaluate_reference_write(node, scope)
|
451
458
|
scope[node.name.to_s] = evaluate node.value, scope
|
452
459
|
end
|
@@ -817,7 +824,7 @@ module ReplTypeCompletor
|
|
817
824
|
def evaluate_call_node_arguments(call_node, scope)
|
818
825
|
# call_node.arguments is Prism::ArgumentsNode
|
819
826
|
arguments = call_node.arguments&.arguments&.dup || []
|
820
|
-
block_arg = call_node.block.expression if call_node.block.is_a?(Prism::BlockArgumentNode)
|
827
|
+
block_arg = call_node.block.expression if call_node.respond_to?(:block) && call_node.block.is_a?(Prism::BlockArgumentNode)
|
821
828
|
kwargs = arguments.pop.elements if arguments.last.is_a?(Prism::KeywordHashNode)
|
822
829
|
args_types = arguments.map do |arg|
|
823
830
|
case arg
|
@@ -1093,7 +1100,6 @@ module ReplTypeCompletor
|
|
1093
1100
|
end
|
1094
1101
|
end
|
1095
1102
|
end
|
1096
|
-
evaluate node.block.expression, scope if node.block&.expression
|
1097
1103
|
receiver
|
1098
1104
|
when Prism::SplatNode
|
1099
1105
|
evaluate_multi_write_receiver node.expression, scope, evaluated_receivers if node.expression
|
@@ -53,15 +53,32 @@ module ReplTypeCompletor
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def self.class_name_of(klass)
|
56
|
-
|
57
|
-
|
56
|
+
while true
|
57
|
+
name = Methods::MODULE_NAME_METHOD.bind_call klass
|
58
|
+
return name if name
|
59
|
+
|
60
|
+
klass = klass.superclass
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
if RBS::TypeName.respond_to?(:parse) # RBS >= 3.8.0
|
65
|
+
def self.rbs_absolute_type_name(name)
|
66
|
+
RBS::TypeName.parse(name).absolute!
|
67
|
+
end
|
68
|
+
else
|
69
|
+
def self.rbs_absolute_type_name(name)
|
70
|
+
# Deprecated in RBS 3.8.0
|
71
|
+
RBS::TypeName(name).absolute!
|
72
|
+
end
|
58
73
|
end
|
59
74
|
|
60
75
|
def self.rbs_search_method(klass, method_name, singleton)
|
76
|
+
return unless rbs_builder
|
77
|
+
|
61
78
|
klass.ancestors.each do |ancestor|
|
62
|
-
name =
|
63
|
-
|
64
|
-
type_name =
|
79
|
+
next unless (name = Methods::MODULE_NAME_METHOD.bind_call(ancestor))
|
80
|
+
|
81
|
+
type_name = rbs_absolute_type_name(name)
|
65
82
|
definition = (singleton ? rbs_builder.build_singleton(type_name) : rbs_builder.build_instance(type_name)) rescue nil
|
66
83
|
method = definition.methods[method_name] if definition
|
67
84
|
return method if method
|
@@ -208,10 +225,10 @@ module ReplTypeCompletor
|
|
208
225
|
def nillable?() = (@klass == NilClass)
|
209
226
|
def nonnillable() = self
|
210
227
|
def rbs_methods
|
211
|
-
|
212
|
-
return {} unless name && Types.rbs_builder
|
228
|
+
return {} unless Types.rbs_builder
|
213
229
|
|
214
|
-
|
230
|
+
name = Types.class_name_of(@klass)
|
231
|
+
type_name = Types.rbs_absolute_type_name(name)
|
215
232
|
Types.rbs_builder.build_instance(type_name).methods rescue {}
|
216
233
|
end
|
217
234
|
def inspect
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: repl_type_completor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tompng
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-01-21 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: prism
|
@@ -71,7 +70,6 @@ metadata:
|
|
71
70
|
homepage_uri: https://github.com/ruby/repl_type_completor
|
72
71
|
source_code_uri: https://github.com/ruby/repl_type_completor
|
73
72
|
documentation_uri: https://github.com/ruby/repl_type_completor
|
74
|
-
post_install_message:
|
75
73
|
rdoc_options: []
|
76
74
|
require_paths:
|
77
75
|
- lib
|
@@ -86,8 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
86
84
|
- !ruby/object:Gem::Version
|
87
85
|
version: '0'
|
88
86
|
requirements: []
|
89
|
-
rubygems_version: 3.
|
90
|
-
signing_key:
|
87
|
+
rubygems_version: 3.6.2
|
91
88
|
specification_version: 4
|
92
89
|
summary: Type based completion for REPL.
|
93
90
|
test_files: []
|