katakata_irb 0.2.0 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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