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.
@@ -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 in Splat }
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 in Splat) } <= reqs.size + opts.size + trailings.size
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 = ProcType.new
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 = procs.uniq + singletons.uniq + instances.map do |klass, params|
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
- InstanceType.new Proc
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 in InstanceType
353
+ elsif self_type.is_a? InstanceType
379
354
  self_type.params[return_type.name] || OBJECT
380
- elsif self_type in UnionType
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 in InstanceType
357
+ t.params[return_type.name] if t.is_a? InstanceType
383
358
  end
384
359
  UnionType[*types]
385
360
  else
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KatakataIrb
4
- VERSION = "0.2.0"
4
+ VERSION = "0.2.2"
5
5
  end
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.0
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-14 00:00:00.000000000 Z
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.13.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.13.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/type_simulator.rb
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