steep 0.22.0 → 0.28.0

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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +46 -1
  3. data/bin/smoke_runner.rb +3 -4
  4. data/lib/steep.rb +1 -1
  5. data/lib/steep/ast/builtin.rb +2 -20
  6. data/lib/steep/ast/types.rb +5 -3
  7. data/lib/steep/ast/types/any.rb +1 -3
  8. data/lib/steep/ast/types/boolean.rb +1 -3
  9. data/lib/steep/ast/types/bot.rb +1 -3
  10. data/lib/steep/ast/types/class.rb +2 -2
  11. data/lib/steep/ast/types/factory.rb +106 -55
  12. data/lib/steep/ast/types/helper.rb +6 -0
  13. data/lib/steep/ast/types/instance.rb +2 -2
  14. data/lib/steep/ast/types/intersection.rb +20 -13
  15. data/lib/steep/ast/types/literal.rb +1 -3
  16. data/lib/steep/ast/types/name.rb +15 -67
  17. data/lib/steep/ast/types/nil.rb +1 -3
  18. data/lib/steep/ast/types/proc.rb +5 -2
  19. data/lib/steep/ast/types/record.rb +9 -4
  20. data/lib/steep/ast/types/self.rb +1 -1
  21. data/lib/steep/ast/types/top.rb +1 -3
  22. data/lib/steep/ast/types/tuple.rb +5 -3
  23. data/lib/steep/ast/types/union.rb +16 -9
  24. data/lib/steep/ast/types/var.rb +2 -2
  25. data/lib/steep/ast/types/void.rb +1 -3
  26. data/lib/steep/drivers/check.rb +4 -0
  27. data/lib/steep/errors.rb +14 -0
  28. data/lib/steep/interface/interface.rb +5 -62
  29. data/lib/steep/interface/method_type.rb +383 -92
  30. data/lib/steep/interface/substitution.rb +48 -6
  31. data/lib/steep/project/completion_provider.rb +1 -1
  32. data/lib/steep/project/hover_content.rb +1 -1
  33. data/lib/steep/project/target.rb +5 -2
  34. data/lib/steep/server/base_worker.rb +5 -3
  35. data/lib/steep/server/code_worker.rb +2 -0
  36. data/lib/steep/server/master.rb +10 -1
  37. data/lib/steep/source.rb +4 -3
  38. data/lib/steep/subtyping/check.rb +49 -60
  39. data/lib/steep/type_construction.rb +629 -366
  40. data/lib/steep/type_inference/block_params.rb +5 -0
  41. data/lib/steep/type_inference/constant_env.rb +1 -1
  42. data/lib/steep/type_inference/context.rb +8 -0
  43. data/lib/steep/type_inference/context_array.rb +4 -3
  44. data/lib/steep/type_inference/logic.rb +31 -0
  45. data/lib/steep/typing.rb +7 -0
  46. data/lib/steep/version.rb +1 -1
  47. data/smoke/alias/a.rb +1 -1
  48. data/smoke/case/a.rb +1 -1
  49. data/smoke/hash/d.rb +1 -1
  50. data/smoke/if/a.rb +1 -1
  51. data/smoke/module/a.rb +1 -1
  52. data/smoke/rescue/a.rb +4 -13
  53. data/steep.gemspec +1 -1
  54. metadata +5 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1008a3723d59bab0d00afb4b385ee2752d8679461416eba84e48cc9ae479b0a4
4
- data.tar.gz: 58c470fe9d8c619d9d0767a392ab6557b6dc50b007c6c99ff6ad27a79a88ecd4
3
+ metadata.gz: 8e15a2388cd89e6b169243007211840853be8c126e035f7aa6434b00258e1087
4
+ data.tar.gz: e3bb8c7a1d816cb2667e7dc977f5e3155bcb9444e995a210bd58dc716a6a71b7
5
5
  SHA512:
6
- metadata.gz: 6f1074ca3634f9df53f361f78a4838912cb7420918f72afdb08e49ab9d64bbe97177780a54648526ff3947b36ab2f0fb2fec3fce73ed97ce0b835359c81ff52d
7
- data.tar.gz: b1c5b3fb447832fb648a56b4d827592ba0ddd719e384795786e27201a32305ce36a0d93edde61c94a311708599dd7090359bc1f15ae04ef0fa3717bd897cb580
6
+ metadata.gz: fb77f06dcef27e222984269a637966fa581cd78b3157c31a71793e8447f7059467140b7bb3f8f3e7f059a37492c9988f428234011ff7b3f7133a627f60a63cf4
7
+ data.tar.gz: 9319aebc6f74f89d055098312f460b2ed86ae9cfcd5c17bd21425c69e3ebe8838dffa3f4db9c99bc23bbc4657e4ee9f453bf1a2b3b7e4afe1531c0ba0ccb386c
@@ -2,6 +2,51 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 0.28.0 (2020-09-17)
6
+
7
+ * Fix typing case-when with empty body ([#200](https://github.com/soutaro/steep/pull/200))
8
+ * Fix lvasgn typing with `void` type hint ([#200](https://github.com/soutaro/steep/pull/200))
9
+ * Fix subtype checking between type variables and union types ([#200](https://github.com/soutaro/steep/pull/200))
10
+ * Support endless range ([#200](https://github.com/soutaro/steep/pull/200))
11
+ * Fix optarg, kwoptarg typing ([#202](https://github.com/soutaro/steep/pull/202))
12
+ * Better union/intersection types ([#204](https://github.com/soutaro/steep/pull/204))
13
+ * Fix generic method instantiation ([#205](https://github.com/soutaro/steep/pull/205))
14
+ * Fix module typing ([#206](https://github.com/soutaro/steep/pull/206))
15
+ * Fix shutdown problem ([#209](https://github.com/soutaro/steep/pull/209))
16
+ * Update RBS to 0.12.0 ([#210](https://github.com/soutaro/steep/pull/210))
17
+ * Improve processing singleton class decls without RBS ([#211](https://github.com/soutaro/steep/pull/211))
18
+ * Improve processing block parameter with masgn ([#212](https://github.com/soutaro/steep/pull/212))
19
+
20
+ ## 0.27.0 (2020-08-31)
21
+
22
+ * Make tuple types _covariant_ ([#195](https://github.com/soutaro/steep/pull/195))
23
+ * Support `or_asgn`/`and_asgn` with `send` node lhs ([#194](https://github.com/soutaro/steep/pull/194))
24
+ * Performance improvement ([#193](https://github.com/soutaro/steep/pull/193))
25
+ * Add specialized versions of `#first` and `#last` on tuples ([#191](https://github.com/soutaro/steep/pull/191))
26
+ * Typing bug fix on `[]` (empty array) ([#190](https://github.com/soutaro/steep/pull/190))
27
+ * Earlier shutdown with interruption while `steep watch` ([#173](https://github.com/soutaro/steep/pull/173))
28
+
29
+ ## 0.26.0
30
+
31
+ * Skipped
32
+
33
+ ## 0.25.0 (2020-08-18)
34
+
35
+ * Improve `op_send` typing ([#186](https://github.com/soutaro/steep/pull/186))
36
+ * Improve `op_asgn` typing ([#189](https://github.com/soutaro/steep/pull/189))
37
+ * Better multi-assignment support ([#183](https://github.com/soutaro/steep/pull/183), [#184](https://github.com/soutaro/steep/pull/184))
38
+ * Support for loop and class variables ([#182](https://github.com/soutaro/steep/pull/182))
39
+ * Fix tuple typing ([#181](https://github.com/soutaro/steep/pull/181))
40
+
41
+ ## 0.24.0 (2020-08-11)
42
+
43
+ * Update RBS to 0.10 ([#180](https://github.com/soutaro/steep/pull/180))
44
+
45
+ ## 0.23.0 (2020-08-06)
46
+
47
+ * Fix literal typing with hint ([#179](https://github.com/soutaro/steep/pull/179))
48
+ * Fix literal type subtyping ([#178](https://github.com/soutaro/steep/pull/178))
49
+
5
50
  ## 0.22.0 (2020-08-03)
6
51
 
7
52
  * Improve signature validation ([#175](https://github.com/soutaro/steep/pull/175), [#177](https://github.com/soutaro/steep/pull/177))
@@ -51,7 +96,7 @@
51
96
 
52
97
  * Fix constant resolution ([#143](https://github.com/soutaro/steep/pull/143))
53
98
  * Fix RBS diagnostics line number in LSP ([#142](https://github.com/soutaro/steep/pull/142))
54
- * Fix crash caused by hover on `def` in LSP ([#140](https://github.com/soutaro/steep/pull/140))
99
+ * Fix crash caused by hover on `def` in LSP ([#140](https://github.com/soutaro/steep/pull/140))
55
100
 
56
101
  ## 0.16.0 (2020-05-19)
57
102
 
@@ -19,8 +19,6 @@ Expectation = Struct.new(:line, :message, :path, :starts) do
19
19
  attr_accessor :prefix_test
20
20
  end
21
21
 
22
- allowed_paths = []
23
-
24
22
  failed = false
25
23
 
26
24
  ARGV.each do |arg|
@@ -29,12 +27,13 @@ ARGV.each do |arg|
29
27
 
30
28
  rb_files = []
31
29
  expectations = []
32
-
30
+ allowed_paths = []
31
+
33
32
  dir.children.each do |file|
34
33
  if file.extname == ".rb"
35
34
  buffer = ::Parser::Source::Buffer.new(file.to_s)
36
35
  buffer.source = file.read
37
- parser = ::Parser::Ruby25.new
36
+ parser = ::Parser::Ruby27.new
38
37
 
39
38
  _, comments, _ = parser.tokenize(buffer)
40
39
  comments.each do |comment|
@@ -1,7 +1,7 @@
1
1
  require "steep/version"
2
2
 
3
3
  require "pathname"
4
- require "parser/ruby25"
4
+ require "parser/ruby27"
5
5
  require "ast_utils"
6
6
  require "active_support/core_ext/object/try"
7
7
  require "logger"
@@ -15,12 +15,8 @@ module Steep
15
15
  Types::Name::Instance.new(name: module_name, args: args)
16
16
  end
17
17
 
18
- def class_type(constructor: nil)
19
- Types::Name::Class.new(name: module_name, constructor: constructor)
20
- end
21
-
22
18
  def module_type
23
- Types::Name::Module.new(name: module_name)
19
+ Types::Name::Singleton.new(name: module_name)
24
20
  end
25
21
 
26
22
  def instance_type?(type, args: nil)
@@ -36,22 +32,8 @@ module Steep
36
32
  end
37
33
  end
38
34
 
39
- NONE = ::Object.new
40
-
41
- def class_type?(type, constructor: NONE)
42
- if type.is_a?(Types::Name::Class)
43
- unless constructor.equal?(NONE)
44
- type.name == module_name && type.name.constructor == constructor
45
- else
46
- type.name == module_name
47
- end
48
- else
49
- false
50
- end
51
- end
52
-
53
35
  def module_type?(type)
54
- if type.is_a?(Types::Name::Module)
36
+ if type.is_a?(Types::Name::Singleton)
55
37
  type.name == module_name
56
38
  else
57
39
  false
@@ -35,9 +35,11 @@ module Steep
35
35
  "masked(#{type}|#{mask})"
36
36
  end
37
37
 
38
- def free_variables(set = Set.new)
39
- type.free_variables(set)
40
- mask.free_variables(set)
38
+ def free_variables
39
+ @fvs ||= Set.new.tap do |set|
40
+ set.merge(type.free_variables)
41
+ set.merge(mask.free_variables)
42
+ end
41
43
  end
42
44
 
43
45
  def each_type(&block)
@@ -26,9 +26,7 @@ module Steep
26
26
  "untyped"
27
27
  end
28
28
 
29
- def free_variables
30
- Set.new
31
- end
29
+ include Helper::NoFreeVariables
32
30
 
33
31
  def level
34
32
  [1]
@@ -26,9 +26,7 @@ module Steep
26
26
  "bool"
27
27
  end
28
28
 
29
- def free_variables
30
- Set.new
31
- end
29
+ include Helper::NoFreeVariables
32
30
 
33
31
  def level
34
32
  [0]
@@ -26,9 +26,7 @@ module Steep
26
26
  "⟘"
27
27
  end
28
28
 
29
- def free_variables
30
- Set.new
31
- end
29
+ include Helper::NoFreeVariables
32
30
 
33
31
  def level
34
32
  [2]
@@ -22,8 +22,8 @@ module Steep
22
22
  s.module_type or raise "Unexpected substitution: #{inspect}"
23
23
  end
24
24
 
25
- def free_variables
26
- Set.new
25
+ def free_variables()
26
+ @fvs = Set.new([self])
27
27
  end
28
28
 
29
29
  def level
@@ -4,8 +4,14 @@ module Steep
4
4
  class Factory
5
5
  attr_reader :definition_builder
6
6
 
7
+ attr_reader :type_name_cache
8
+ attr_reader :type_cache
9
+
7
10
  def initialize(builder:)
8
11
  @definition_builder = builder
12
+
13
+ @type_name_cache = {}
14
+ @type_cache = {}
9
15
  end
10
16
 
11
17
  def type_name_resolver
@@ -13,7 +19,9 @@ module Steep
13
19
  end
14
20
 
15
21
  def type(type)
16
- case type
22
+ ty = type_cache[type] and return ty
23
+
24
+ type_cache[type] = case type
17
25
  when RBS::Types::Bases::Any
18
26
  Any.new(location: nil)
19
27
  when RBS::Types::Bases::Class
@@ -36,7 +44,7 @@ module Steep
36
44
  Var.new(name: type.name, location: nil)
37
45
  when RBS::Types::ClassSingleton
38
46
  type_name = type_name(type.name)
39
- Name::Class.new(name: type_name, location: nil, constructor: nil)
47
+ Name::Singleton.new(name: type_name, location: nil)
40
48
  when RBS::Types::ClassInstance
41
49
  type_name = type_name(type.name)
42
50
  args = type.args.map {|arg| type(arg) }
@@ -94,7 +102,7 @@ module Steep
94
102
  RBS::Types::Bases::Nil.new(location: nil)
95
103
  when Var
96
104
  RBS::Types::Variable.new(name: type.name, location: nil)
97
- when Name::Class, Name::Module
105
+ when Name::Singleton
98
106
  RBS::Types::ClassSingleton.new(name: type_name_1(type.name), location: nil)
99
107
  when Name::Instance
100
108
  RBS::Types::ClassInstance.new(
@@ -144,14 +152,17 @@ module Steep
144
152
  end
145
153
 
146
154
  def type_name(name)
147
- case
148
- when name.class?
149
- Names::Module.new(name: name.name, namespace: namespace(name.namespace), location: nil)
150
- when name.interface?
151
- Names::Interface.new(name: name.name, namespace: namespace(name.namespace), location: nil)
152
- when name.alias?
153
- Names::Alias.new(name: name.name, namespace: namespace(name.namespace), location: nil)
154
- end
155
+ n = type_name_cache[name] and return n
156
+
157
+ type_name_cache[name] =
158
+ (case
159
+ when name.class?
160
+ Names::Module.new(name: name.name, namespace: namespace(name.namespace), location: nil)
161
+ when name.interface?
162
+ Names::Interface.new(name: name.name, namespace: namespace(name.namespace), location: nil)
163
+ when name.alias?
164
+ Names::Alias.new(name: name.name, namespace: namespace(name.namespace), location: nil)
165
+ end)
155
166
  end
156
167
 
157
168
  def type_name_1(name)
@@ -190,7 +201,7 @@ module Steep
190
201
  )
191
202
  end
192
203
 
193
- def method_type(method_type, self_type:)
204
+ def method_type(method_type, self_type:, subst2: nil)
194
205
  fvs = self_type.free_variables()
195
206
 
196
207
  type_params = []
@@ -208,6 +219,7 @@ module Steep
208
219
  end
209
220
  end
210
221
  subst = Interface::Substitution.build(alpha_vars, alpha_types)
222
+ subst.merge!(subst2, overwrite: true) if subst2
211
223
 
212
224
  type = Interface::MethodType.new(
213
225
  type_params: type_params,
@@ -288,7 +300,7 @@ module Steep
288
300
  def expand_alias(type)
289
301
  unfolded = case type
290
302
  when AST::Types::Name::Alias
291
- unfolded = unfold(type.name)
303
+ unfold(type.name)
292
304
  else
293
305
  type
294
306
  end
@@ -301,6 +313,7 @@ module Steep
301
313
  end
302
314
 
303
315
  def interface(type, private:, self_type: type)
316
+ Steep.logger.debug { "Factory#interface: #{type}, private=#{private}, self_type=#{self_type}" }
304
317
  type = expand_alias(type)
305
318
 
306
319
  case type
@@ -328,14 +341,15 @@ module Steep
328
341
  )
329
342
 
330
343
  definition.methods.each do |name, method|
331
- next if method.private? && !private
344
+ Steep.logger.tagged "method = #{name}" do
345
+ next if method.private? && !private
332
346
 
333
- interface.methods[name] = Interface::Interface::Combination.overload(
334
- method.method_types.map do |type|
335
- method_type(type, self_type: self_type) {|ty| ty.subst(subst) }
336
- end,
337
- incompatible: name == :initialize || name == :new
338
- )
347
+ interface.methods[name] = Interface::Interface::Entry.new(
348
+ method_types: method.method_types.map do |type|
349
+ method_type(type, self_type: self_type, subst2: subst)
350
+ end
351
+ )
352
+ end
339
353
  end
340
354
  end
341
355
 
@@ -351,16 +365,15 @@ module Steep
351
365
  )
352
366
 
353
367
  definition.methods.each do |name, method|
354
- interface.methods[name] = Interface::Interface::Combination.overload(
355
- method.method_types.map do |type|
356
- method_type(type, self_type: self_type) {|type| type.subst(subst) }
357
- end,
358
- incompatible: method.attributes.include?(:incompatible)
368
+ interface.methods[name] = Interface::Interface::Entry.new(
369
+ method_types: method.method_types.map do |type|
370
+ method_type(type, self_type: self_type, subst2: subst)
371
+ end
359
372
  )
360
373
  end
361
374
  end
362
375
 
363
- when Name::Class, Name::Module
376
+ when Name::Singleton
364
377
  Interface::Interface.new(type: self_type, private: private).tap do |interface|
365
378
  definition = definition_builder.build_singleton(type_name_1(type.name))
366
379
 
@@ -377,11 +390,10 @@ module Steep
377
390
  definition.methods.each do |name, method|
378
391
  next if !private && method.private?
379
392
 
380
- interface.methods[name] = Interface::Interface::Combination.overload(
381
- method.method_types.map do |type|
382
- method_type(type, self_type: self_type) {|type| type.subst(subst) }
383
- end,
384
- incompatible: method.attributes.include?(:incompatible)
393
+ interface.methods[name] = Interface::Interface::Entry.new(
394
+ method_types: method.method_types.map do |type|
395
+ method_type(type, self_type: self_type, subst2: subst)
396
+ end
385
397
  )
386
398
  end
387
399
  end
@@ -404,7 +416,25 @@ module Steep
404
416
  Interface::Interface.new(type: self_type, private: private).tap do |interface|
405
417
  common_methods = Set.new(interface1.methods.keys) & Set.new(interface2.methods.keys)
406
418
  common_methods.each do |name|
407
- interface.methods[name] = Interface::Interface::Combination.union([interface1.methods[name], interface2.methods[name]])
419
+ types1 = interface1.methods[name].method_types
420
+ types2 = interface2.methods[name].method_types
421
+
422
+ if types1 == types2
423
+ interface.methods[name] = interface1.methods[name]
424
+ else
425
+ method_types = {}
426
+
427
+ types1.each do |type1|
428
+ types2.each do |type2|
429
+ type = type1 | type2 or next
430
+ method_types[type] = true
431
+ end
432
+ end
433
+
434
+ unless method_types.empty?
435
+ interface.methods[name] = Interface::Interface::Entry.new(method_types: method_types.keys)
436
+ end
437
+ end
408
438
  end
409
439
  end
410
440
  end
@@ -415,11 +445,8 @@ module Steep
415
445
  interfaces = type.types.map {|ty| interface(ty, private: private, self_type: self_type) }
416
446
  interfaces.inject do |interface1, interface2|
417
447
  Interface::Interface.new(type: self_type, private: private).tap do |interface|
418
- all_methods = Set.new(interface1.methods.keys) + Set.new(interface2.methods.keys)
419
- all_methods.each do |name|
420
- methods = [interface1.methods[name], interface2.methods[name]].compact
421
- interface.methods[name] = Interface::Interface::Combination.intersection(methods)
422
- end
448
+ interface.methods.merge!(interface1.methods)
449
+ interface.methods.merge!(interface2.methods)
423
450
  end
424
451
  end
425
452
  end
@@ -430,8 +457,8 @@ module Steep
430
457
  array_type = Builtin::Array.instance_type(element_type)
431
458
  interface(array_type, private: private, self_type: self_type).tap do |array_interface|
432
459
  array_interface.methods[:[]] = array_interface.methods[:[]].yield_self do |aref|
433
- Interface::Interface::Combination.overload(
434
- type.types.map.with_index {|elem_type, index|
460
+ Interface::Interface::Entry.new(
461
+ method_types: type.types.map.with_index {|elem_type, index|
435
462
  Interface::MethodType.new(
436
463
  type_params: [],
437
464
  params: Interface::Params.new(required: [AST::Types::Literal.new(value: index)],
@@ -444,14 +471,13 @@ module Steep
444
471
  return_type: elem_type,
445
472
  location: nil
446
473
  )
447
- } + aref.types,
448
- incompatible: false
474
+ } + aref.method_types
449
475
  )
450
476
  end
451
477
 
452
478
  array_interface.methods[:[]=] = array_interface.methods[:[]=].yield_self do |update|
453
- Interface::Interface::Combination.overload(
454
- type.types.map.with_index {|elem_type, index|
479
+ Interface::Interface::Entry.new(
480
+ method_types: type.types.map.with_index {|elem_type, index|
455
481
  Interface::MethodType.new(
456
482
  type_params: [],
457
483
  params: Interface::Params.new(required: [AST::Types::Literal.new(value: index), elem_type],
@@ -464,8 +490,35 @@ module Steep
464
490
  return_type: elem_type,
465
491
  location: nil
466
492
  )
467
- } + update.types,
468
- incompatible: false
493
+ } + update.method_types
494
+ )
495
+ end
496
+
497
+ array_interface.methods[:first] = array_interface.methods[:first].yield_self do |first|
498
+ Interface::Interface::Entry.new(
499
+ method_types: [
500
+ Interface::MethodType.new(
501
+ type_params: [],
502
+ params: Interface::Params.empty,
503
+ block: nil,
504
+ return_type: type.types[0] || AST::Builtin.nil_type,
505
+ location: nil
506
+ )
507
+ ]
508
+ )
509
+ end
510
+
511
+ array_interface.methods[:last] = array_interface.methods[:last].yield_self do |last|
512
+ Interface::Interface::Entry.new(
513
+ method_types: [
514
+ Interface::MethodType.new(
515
+ type_params: [],
516
+ params: Interface::Params.empty,
517
+ block: nil,
518
+ return_type: type.types.last || AST::Builtin.nil_type,
519
+ location: nil
520
+ )
521
+ ]
469
522
  )
470
523
  end
471
524
  end
@@ -481,8 +534,8 @@ module Steep
481
534
 
482
535
  interface(hash_type, private: private, self_type: self_type).tap do |hash_interface|
483
536
  hash_interface.methods[:[]] = hash_interface.methods[:[]].yield_self do |ref|
484
- Interface::Interface::Combination.overload(
485
- type.elements.map {|key_value, value_type|
537
+ Interface::Interface::Entry.new(
538
+ method_types: type.elements.map {|key_value, value_type|
486
539
  key_type = Literal.new(value: key_value, location: nil)
487
540
  Interface::MethodType.new(
488
541
  type_params: [],
@@ -496,14 +549,13 @@ module Steep
496
549
  return_type: value_type,
497
550
  location: nil
498
551
  )
499
- } + ref.types,
500
- incompatible: false
552
+ } + ref.method_types
501
553
  )
502
554
  end
503
555
 
504
556
  hash_interface.methods[:[]=] = hash_interface.methods[:[]=].yield_self do |update|
505
- Interface::Interface::Combination.overload(
506
- type.elements.map {|key_value, value_type|
557
+ Interface::Interface::Entry.new(
558
+ method_types: type.elements.map {|key_value, value_type|
507
559
  key_type = Literal.new(value: key_value, location: nil)
508
560
  Interface::MethodType.new(
509
561
  type_params: [],
@@ -517,8 +569,7 @@ module Steep
517
569
  return_type: value_type,
518
570
  location: nil
519
571
  )
520
- } + update.types,
521
- incompatible: false
572
+ } + update.method_types
522
573
  )
523
574
  end
524
575
  end
@@ -534,8 +585,8 @@ module Steep
534
585
  location: nil
535
586
  )
536
587
 
537
- interface.methods[:[]] = Interface::Interface::Combination.overload([method_type], incompatible: false)
538
- interface.methods[:call] = Interface::Interface::Combination.overload([method_type], incompatible: false)
588
+ interface.methods[:[]] = Interface::Interface::Entry.new(method_types: [method_type])
589
+ interface.methods[:call] = Interface::Interface::Entry.new(method_types: [method_type])
539
590
  end
540
591
 
541
592
  else