katakata_irb 0.2.0 → 0.2.2
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 +4 -4
- data/katakata_irb.gemspec +1 -1
- data/lib/katakata_irb/completor.rb +46 -22
- data/lib/katakata_irb/scope.rb +53 -15
- data/lib/katakata_irb/type_analyzer.rb +1172 -0
- data/lib/katakata_irb/types.rb +11 -36
- data/lib/katakata_irb/version.rb +1 -1
- metadata +5 -5
- data/lib/katakata_irb/type_simulator.rb +0 -990
data/lib/katakata_irb/types.rb
CHANGED
@@ -16,7 +16,7 @@ module KatakataIrb::Types
|
|
16
16
|
loader = RBS::CLI::LibraryOptions.new.loader
|
17
17
|
loader.add path: Pathname('sig')
|
18
18
|
RBS::DefinitionBuilder.new env: RBS::Environment.from_loader(loader).resolve_type_names
|
19
|
-
rescue => e
|
19
|
+
rescue LoadError, StandardError => e
|
20
20
|
@rbs_load_error = e
|
21
21
|
puts "\r\nKatakataIRB failed to initialize RBS::DefinitionBuilder: #{e.class}\r\n"
|
22
22
|
puts "See `KatakataIrb::Types.rbs_load_error` for more details.\r\n"
|
@@ -35,7 +35,7 @@ module KatakataIrb::Types
|
|
35
35
|
def self.rbs_search_method(klass, method_name, singleton)
|
36
36
|
klass.ancestors.each do |ancestor|
|
37
37
|
name = class_name_of ancestor
|
38
|
-
next unless name
|
38
|
+
next unless name && rbs_builder
|
39
39
|
type_name = RBS::TypeName(name).absolute!
|
40
40
|
definition = (singleton ? rbs_builder.build_singleton(type_name) : rbs_builder.build_instance(type_name)) rescue nil
|
41
41
|
method = definition.methods[method_name] if definition
|
@@ -47,8 +47,6 @@ module KatakataIrb::Types
|
|
47
47
|
def self.method_return_type(type, method_name)
|
48
48
|
receivers = type.types.map do |t|
|
49
49
|
case t
|
50
|
-
in ProcType
|
51
|
-
[t, Proc, false]
|
52
50
|
in SingletonType
|
53
51
|
[t, t.module_or_class, true]
|
54
52
|
in InstanceType
|
@@ -70,15 +68,13 @@ module KatakataIrb::Types
|
|
70
68
|
|
71
69
|
receivers = type.types.map do |t|
|
72
70
|
case t
|
73
|
-
in ProcType
|
74
|
-
[t, Proc, false]
|
75
71
|
in SingletonType
|
76
72
|
[t, t.module_or_class, true]
|
77
73
|
in InstanceType
|
78
74
|
[t, t.klass, false]
|
79
75
|
end
|
80
76
|
end
|
81
|
-
has_splat = args_types.any? { _1
|
77
|
+
has_splat = args_types.any? { _1.is_a? Splat }
|
82
78
|
methods_with_score = receivers.flat_map do |receiver_type, klass, singleton|
|
83
79
|
method = rbs_search_method klass, method_name, singleton
|
84
80
|
next [] unless method
|
@@ -98,7 +94,7 @@ module KatakataIrb::Types
|
|
98
94
|
args += [InstanceType.new(Hash, K: SYMBOL, V: kw_value_type)]
|
99
95
|
end
|
100
96
|
if has_splat
|
101
|
-
score += 1 if args.count { !(_1
|
97
|
+
score += 1 if args.count { !(_1.is_a? Splat) } <= reqs.size + opts.size + trailings.size
|
102
98
|
elsif reqs.size + trailings.size <= args.size && (rest || args.size <= reqs.size + opts.size + trailings.size)
|
103
99
|
score += 2
|
104
100
|
centers = args[reqs.size...-trailings.size]
|
@@ -125,7 +121,6 @@ module KatakataIrb::Types
|
|
125
121
|
def self.intersect?(a, b)
|
126
122
|
atypes = a.types.group_by(&:class)
|
127
123
|
btypes = b.types.group_by(&:class)
|
128
|
-
return true if atypes[ProcType] && btypes[ProcType]
|
129
124
|
if atypes[SingletonType] && btypes[SingletonType]
|
130
125
|
aa, bb = [atypes, btypes].map {|types| types[SingletonType].map(&:module_or_class) }
|
131
126
|
return true if (aa & bb).any?
|
@@ -207,7 +202,7 @@ module KatakataIrb::Types
|
|
207
202
|
def nonnillable() = self
|
208
203
|
def rbs_methods
|
209
204
|
name = KatakataIrb::Types.class_name_of(@klass)
|
210
|
-
return {} unless name
|
205
|
+
return {} unless name && KatakataIrb::Types.rbs_builder
|
211
206
|
|
212
207
|
type_name = RBS::TypeName(name).absolute!
|
213
208
|
KatakataIrb::Types.rbs_builder.build_instance(type_name).methods rescue {}
|
@@ -233,23 +228,6 @@ module KatakataIrb::Types
|
|
233
228
|
end
|
234
229
|
end
|
235
230
|
|
236
|
-
class ProcType
|
237
|
-
attr_reader :params, :kwparams, :return_type
|
238
|
-
def initialize(params = [], kwparams = {}, return_type = NIL)
|
239
|
-
@params = params
|
240
|
-
@kwparams = kwparams
|
241
|
-
@return_type = return_type
|
242
|
-
end
|
243
|
-
def transform() = yield(self)
|
244
|
-
def methods() = Proc.instance_methods
|
245
|
-
def all_methods() = Proc.instance_methods | Proc.private_instance_methods
|
246
|
-
def constants() = []
|
247
|
-
def types() = [self]
|
248
|
-
def nillable?() = (@klass == NilClass)
|
249
|
-
def nonnillable() = self
|
250
|
-
def inspect() = 'Proc'
|
251
|
-
end
|
252
|
-
|
253
231
|
NIL = InstanceType.new NilClass
|
254
232
|
OBJECT = InstanceType.new Object
|
255
233
|
TRUE = InstanceType.new TrueClass
|
@@ -266,7 +244,7 @@ module KatakataIrb::Types
|
|
266
244
|
HASH = InstanceType.new Hash
|
267
245
|
CLASS = InstanceType.new Class
|
268
246
|
MODULE = InstanceType.new Module
|
269
|
-
PROC =
|
247
|
+
PROC = InstanceType.new Proc
|
270
248
|
|
271
249
|
class UnionType
|
272
250
|
attr_reader :types
|
@@ -275,7 +253,6 @@ module KatakataIrb::Types
|
|
275
253
|
@types = []
|
276
254
|
singletons = []
|
277
255
|
instances = {}
|
278
|
-
procs = []
|
279
256
|
collect = -> type do
|
280
257
|
case type
|
281
258
|
in UnionType
|
@@ -287,12 +264,10 @@ module KatakataIrb::Types
|
|
287
264
|
end
|
288
265
|
in SingletonType
|
289
266
|
singletons << type
|
290
|
-
in ProcType
|
291
|
-
procs << type
|
292
267
|
end
|
293
268
|
end
|
294
269
|
types.each(&collect)
|
295
|
-
@types =
|
270
|
+
@types = singletons.uniq + instances.map do |klass, params|
|
296
271
|
InstanceType.new(klass, params.transform_values { |v| UnionType[*v] })
|
297
272
|
end
|
298
273
|
end
|
@@ -364,7 +339,7 @@ module KatakataIrb::Types
|
|
364
339
|
when RBS::Types::Union
|
365
340
|
UnionType[*return_type.types.map { from_rbs_type _1, self_type, extra_vars }]
|
366
341
|
when RBS::Types::Proc
|
367
|
-
|
342
|
+
PROC
|
368
343
|
when RBS::Types::Tuple
|
369
344
|
elem = UnionType[*return_type.types.map { from_rbs_type _1, self_type, extra_vars }]
|
370
345
|
InstanceType.new Array, Elem: elem
|
@@ -375,11 +350,11 @@ module KatakataIrb::Types
|
|
375
350
|
when RBS::Types::Variable
|
376
351
|
if extra_vars.key? return_type.name
|
377
352
|
extra_vars[return_type.name]
|
378
|
-
elsif self_type
|
353
|
+
elsif self_type.is_a? InstanceType
|
379
354
|
self_type.params[return_type.name] || OBJECT
|
380
|
-
elsif self_type
|
355
|
+
elsif self_type.is_a? UnionType
|
381
356
|
types = self_type.types.filter_map do |t|
|
382
|
-
t.params[return_type.name] if t
|
357
|
+
t.params[return_type.name] if t.is_a? InstanceType
|
383
358
|
end
|
384
359
|
UnionType[*types]
|
385
360
|
else
|
data/lib/katakata_irb/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: katakata_irb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tompng
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-10-
|
11
|
+
date: 2023-10-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: irb
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
47
|
+
version: 0.16.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
54
|
+
version: 0.16.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rbs
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,7 +83,7 @@ files:
|
|
83
83
|
- lib/katakata_irb.rb
|
84
84
|
- lib/katakata_irb/completor.rb
|
85
85
|
- lib/katakata_irb/scope.rb
|
86
|
-
- lib/katakata_irb/
|
86
|
+
- lib/katakata_irb/type_analyzer.rb
|
87
87
|
- lib/katakata_irb/types.rb
|
88
88
|
- lib/katakata_irb/version.rb
|
89
89
|
- sig/katakata_irb.rbs
|