repl_type_completor 0.1.8 → 0.1.10
Sign up to get free protection for your applications and to get access to all the features.
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: []
|