steep 1.8.0.dev.1 → 1.8.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +33 -0
  3. data/README.md +3 -2
  4. data/bin/mem_graph.rb +67 -0
  5. data/bin/mem_prof.rb +102 -0
  6. data/bin/stackprof_test.rb +19 -0
  7. data/bin/steep-check.rb +251 -0
  8. data/guides/src/gem-rbs-collection/gem-rbs-collection.md +1 -1
  9. data/lib/steep/annotation_parser.rb +1 -1
  10. data/lib/steep/ast/builtin.rb +5 -5
  11. data/lib/steep/ast/node/type_application.rb +7 -6
  12. data/lib/steep/ast/types/any.rb +1 -9
  13. data/lib/steep/ast/types/boolean.rb +8 -16
  14. data/lib/steep/ast/types/bot.rb +2 -10
  15. data/lib/steep/ast/types/class.rb +1 -13
  16. data/lib/steep/ast/types/factory.rb +101 -85
  17. data/lib/steep/ast/types/instance.rb +1 -13
  18. data/lib/steep/ast/types/intersection.rb +8 -15
  19. data/lib/steep/ast/types/literal.rb +2 -8
  20. data/lib/steep/ast/types/logic.rb +3 -24
  21. data/lib/steep/ast/types/name.rb +5 -16
  22. data/lib/steep/ast/types/nil.rb +3 -12
  23. data/lib/steep/ast/types/proc.rb +4 -13
  24. data/lib/steep/ast/types/record.rb +21 -12
  25. data/lib/steep/ast/types/self.rb +1 -13
  26. data/lib/steep/ast/types/shared_instance.rb +11 -0
  27. data/lib/steep/ast/types/top.rb +1 -9
  28. data/lib/steep/ast/types/tuple.rb +4 -10
  29. data/lib/steep/ast/types/union.rb +10 -15
  30. data/lib/steep/ast/types/var.rb +4 -13
  31. data/lib/steep/ast/types/void.rb +2 -10
  32. data/lib/steep/diagnostic/ruby.rb +10 -10
  33. data/lib/steep/drivers/check.rb +11 -14
  34. data/lib/steep/drivers/checkfile.rb +8 -10
  35. data/lib/steep/drivers/stats.rb +17 -13
  36. data/lib/steep/drivers/utils/driver_helper.rb +24 -3
  37. data/lib/steep/drivers/watch.rb +3 -3
  38. data/lib/steep/interface/builder.rb +162 -138
  39. data/lib/steep/interface/method_type.rb +12 -20
  40. data/lib/steep/interface/shape.rb +66 -10
  41. data/lib/steep/interface/substitution.rb +2 -0
  42. data/lib/steep/interface/type_param.rb +20 -7
  43. data/lib/steep/located_value.rb +20 -0
  44. data/lib/steep/server/change_buffer.rb +5 -7
  45. data/lib/steep/server/custom_methods.rb +61 -0
  46. data/lib/steep/server/delay_queue.rb +8 -1
  47. data/lib/steep/server/interaction_worker.rb +13 -6
  48. data/lib/steep/server/lsp_formatter.rb +8 -6
  49. data/lib/steep/server/master.rb +195 -142
  50. data/lib/steep/server/type_check_worker.rb +25 -22
  51. data/lib/steep/server/work_done_progress.rb +64 -0
  52. data/lib/steep/server/worker_process.rb +1 -1
  53. data/lib/steep/services/completion_provider.rb +32 -24
  54. data/lib/steep/services/goto_service.rb +3 -2
  55. data/lib/steep/services/hover_provider/ruby.rb +30 -17
  56. data/lib/steep/services/signature_help_provider.rb +9 -7
  57. data/lib/steep/services/signature_service.rb +1 -1
  58. data/lib/steep/services/type_check_service.rb +19 -9
  59. data/lib/steep/signature/validator.rb +17 -20
  60. data/lib/steep/source.rb +47 -1
  61. data/lib/steep/subtyping/check.rb +105 -55
  62. data/lib/steep/subtyping/constraints.rb +13 -17
  63. data/lib/steep/type_construction.rb +106 -100
  64. data/lib/steep/type_inference/block_params.rb +8 -5
  65. data/lib/steep/type_inference/logic_type_interpreter.rb +11 -7
  66. data/lib/steep/type_inference/method_call.rb +3 -3
  67. data/lib/steep/type_inference/method_params.rb +1 -1
  68. data/lib/steep/type_inference/send_args.rb +1 -1
  69. data/lib/steep/typing.rb +164 -106
  70. data/lib/steep/version.rb +1 -1
  71. data/lib/steep.rb +29 -4
  72. data/steep.gemspec +2 -2
  73. metadata +16 -9
  74. data/lib/steep/type_inference/context_array.rb +0 -112
@@ -59,7 +59,7 @@ module Steep
59
59
  end
60
60
 
61
61
  initialize_id = request_id()
62
- client_writer.write(method: "initialize", id: initialize_id)
62
+ client_writer.write(method: "initialize", id: initialize_id, params: DEFAULT_CLI_LSP_INITIALIZE_PARAMS)
63
63
  wait_for_response_id(reader: client_reader, id: initialize_id)
64
64
 
65
65
  Steep.logger.info "Watching #{dirs.join(", ")}..."
@@ -112,7 +112,7 @@ module Steep
112
112
  end
113
113
  end
114
114
 
115
- client_writer.write(method: "$/typecheck", params: { guid: nil })
115
+ client_writer.write(Server::CustomMethods::TypeCheck.request(SecureRandom.uuid, { guid: nil }))
116
116
 
117
117
  stdout.puts Rainbow("done!").bold
118
118
  end.tap(&:start)
@@ -120,7 +120,7 @@ module Steep
120
120
  begin
121
121
  stdout.puts Rainbow("👀 Watching directories, Ctrl-C to stop.").bold
122
122
 
123
- client_writer.write(method: "$/typecheck", params: { guid: nil })
123
+ client_writer.write(Server::CustomMethods::TypeCheck.request(SecureRandom.uuid, { guid: nil }))
124
124
 
125
125
  client_reader.read do |response|
126
126
  case response[:method]
@@ -277,15 +277,14 @@ module Steep
277
277
 
278
278
  definition.methods.each do |name, method|
279
279
  Steep.logger.tagged "method = #{type_name}.#{name}" do
280
- shape.methods[name] = Interface::Shape::Entry.new(
281
- private_method: method.private?,
282
- method_types: method.defs.map do |type_def|
283
- method_name = method_name_for(type_def, name)
284
- decl = TypeInference::MethodCall::MethodDecl.new(method_name: method_name, method_def: type_def)
285
- method_type = factory.method_type(type_def.type, method_decls: Set[decl])
286
- replace_primitive_method(method_name, type_def, method_type)
287
- end
288
- )
280
+ overloads = method.defs.map do |type_def|
281
+ method_name = method_name_for(type_def, name)
282
+ method_type = factory.method_type(type_def.type)
283
+ method_type = replace_primitive_method(method_name, type_def, method_type)
284
+ Shape::MethodOverload.new(method_type, [type_def])
285
+ end
286
+
287
+ shape.methods[name] = Interface::Shape::Entry.new(method_name: name, private_method: method.private?, overloads: overloads)
289
288
  end
290
289
  end
291
290
 
@@ -308,15 +307,14 @@ module Steep
308
307
 
309
308
  definition.methods.each do |name, method|
310
309
  Steep.logger.tagged "method = #{type_name}##{name}" do
311
- shape.methods[name] = Interface::Shape::Entry.new(
312
- private_method: method.private?,
313
- method_types: method.defs.map do |type_def|
314
- method_name = method_name_for(type_def, name)
315
- decl = TypeInference::MethodCall::MethodDecl.new(method_name: method_name, method_def: type_def)
316
- method_type = factory.method_type(type_def.type, method_decls: Set[decl])
317
- replace_primitive_method(method_name, type_def, method_type)
318
- end
319
- )
310
+ overloads = method.defs.map do |type_def|
311
+ method_name = method_name_for(type_def, name)
312
+ method_type = factory.method_type(type_def.type)
313
+ method_type = replace_primitive_method(method_name, type_def, method_type)
314
+ Shape::MethodOverload.new(method_type, [type_def])
315
+ end
316
+
317
+ shape.methods[name] = Interface::Shape::Entry.new(method_name: name, private_method: method.private?, overloads: overloads)
320
318
  end
321
319
  end
322
320
 
@@ -334,51 +332,49 @@ module Steep
334
332
 
335
333
  shape = Interface::Shape.new(type: shape_type, private: true)
336
334
  all_common_methods.each do |method_name|
337
- method_typess = [] #: Array[Array[MethodType]]
335
+ overloadss = [] #: Array[Array[Shape::MethodOverload]]
338
336
  private_method = false
339
337
  shapes.each do |shape|
340
338
  entry = shape.methods[method_name] || raise
341
- method_typess << entry.method_types
339
+ overloadss << entry.overloads
342
340
  private_method ||= entry.private_method?
343
341
  end
344
342
 
345
- shape.methods[method_name] = Interface::Shape::Entry.new(private_method: private_method) do
346
- method_typess.inject do |types1, types2|
343
+ shape.methods[method_name] = Interface::Shape::Entry.new(method_name: method_name, private_method: private_method) do
344
+ overloadss.inject do |overloads1, overloads2|
347
345
  # @type break: nil
348
346
 
349
- if types1 == types2
350
- decl_array1 = types1.map(&:method_decls)
351
- decl_array2 = types2.map(&:method_decls)
352
-
353
- if decl_array1 == decl_array2
354
- next types1
355
- end
347
+ types1 = overloads1.map(&:method_type)
348
+ types2 = overloads2.map(&:method_type)
356
349
 
357
- decls1 = decl_array1.each.with_object(Set[]) {|array, decls| decls.merge(array) } #$ Set[TypeInference::MethodCall::MethodDecl]
358
- decls2 = decl_array2.each.with_object(Set[]) {|array, decls| decls.merge(array) } #$ Set[TypeInference::MethodCall::MethodDecl]
350
+ if types1 == types2
351
+ defs1 = overloads1.flat_map(&:method_defs)
352
+ defs2 = overloads2.flat_map(&:method_defs)
359
353
 
360
- if decls1 == decls2
361
- next types1
354
+ if defs1 == defs2
355
+ next overloads1
362
356
  end
363
357
  end
364
358
 
365
- method_types = {} #: Hash[MethodType, bool]
359
+ method_overloads = {} #: Hash[Shape::MethodOverload, bool]
366
360
 
367
- types1.each do |type1|
368
- types2.each do |type2|
369
- if type1 == type2
370
- method_types[type1.with(method_decls: type1.method_decls + type2.method_decls)] = true
361
+ overloads1.each do |overload1|
362
+ overloads2.each do |overload2|
363
+ if overload1.method_type == overload2.method_type
364
+ overload = Shape::MethodOverload.new(overload1.method_type, overload1.method_defs + overload2.method_defs)
365
+ method_overloads[overload] = true
371
366
  else
372
- if type = MethodType.union(type1, type2, subtyping)
373
- method_types[type] = true
367
+ if type = MethodType.union(overload1.method_type, overload2.method_type, subtyping)
368
+ overload = Shape::MethodOverload.new(type, overload1.method_defs + overload2.method_defs)
369
+ method_overloads[overload] = true
374
370
  end
375
371
  end
376
372
  end
377
373
  end
378
374
 
379
- break nil if method_types.empty?
375
+ break nil if method_overloads.empty?
380
376
 
381
- method_types.keys
377
+ method_overloads.keys
382
378
  end
383
379
  end
384
380
  end
@@ -427,7 +423,7 @@ module Steep
427
423
  end
428
424
 
429
425
  def tuple_shape(tuple)
430
- element_type = AST::Types::Union.build(types: tuple.types, location: nil)
426
+ element_type = AST::Types::Union.build(types: tuple.types)
431
427
  array_type = AST::Builtin::Array.instance_type(element_type)
432
428
 
433
429
  array_shape = yield(array_type) or raise
@@ -438,19 +434,22 @@ module Steep
438
434
  raise unless aref
439
435
 
440
436
  Shape::Entry.new(
437
+ method_name: :[],
441
438
  private_method: false,
442
- method_types: tuple.types.map.with_index {|elem_type, index|
443
- MethodType.new(
444
- type_params: [],
445
- type: Function.new(
446
- params: Function::Params.build(required: [AST::Types::Literal.new(value: index)]),
447
- return_type: elem_type,
448
- location: nil
439
+ overloads: tuple.types.map.with_index {|elem_type, index|
440
+ Shape::MethodOverload.new(
441
+ MethodType.new(
442
+ type_params: [],
443
+ type: Function.new(
444
+ params: Function::Params.build(required: [AST::Types::Literal.new(value: index)]),
445
+ return_type: elem_type,
446
+ location: nil
447
+ ),
448
+ block: nil
449
449
  ),
450
- block: nil,
451
- method_decls: Set[]
450
+ []
452
451
  )
453
- } + aref.method_types
452
+ } + aref.overloads
454
453
  )
455
454
  end
456
455
 
@@ -458,19 +457,22 @@ module Steep
458
457
  raise unless update
459
458
 
460
459
  Shape::Entry.new(
460
+ method_name: :[]=,
461
461
  private_method: false,
462
- method_types: tuple.types.map.with_index {|elem_type, index|
463
- MethodType.new(
464
- type_params: [],
465
- type: Function.new(
466
- params: Function::Params.build(required: [AST::Types::Literal.new(value: index), elem_type]),
467
- return_type: elem_type,
468
- location: nil
462
+ overloads: tuple.types.map.with_index {|elem_type, index|
463
+ Shape::MethodOverload.new(
464
+ MethodType.new(
465
+ type_params: [],
466
+ type: Function.new(
467
+ params: Function::Params.build(required: [AST::Types::Literal.new(value: index), elem_type]),
468
+ return_type: elem_type,
469
+ location: nil
470
+ ),
471
+ block: nil
469
472
  ),
470
- block: nil,
471
- method_decls: Set[]
473
+ []
472
474
  )
473
- } + update.method_types
475
+ } + update.overloads
474
476
  )
475
477
  end
476
478
 
@@ -478,8 +480,9 @@ module Steep
478
480
  raise unless fetch
479
481
 
480
482
  Shape::Entry.new(
483
+ method_name: :fetch,
481
484
  private_method: false,
482
- method_types: tuple.types.flat_map.with_index {|elem_type, index|
485
+ overloads: tuple.types.flat_map.with_index {|elem_type, index|
483
486
  [
484
487
  MethodType.new(
485
488
  type_params: [],
@@ -488,11 +491,10 @@ module Steep
488
491
  return_type: elem_type,
489
492
  location: nil
490
493
  ),
491
- block: nil,
492
- method_decls: Set[]
494
+ block: nil
493
495
  ),
494
496
  MethodType.new(
495
- type_params: [TypeParam.new(name: :T, upper_bound: nil, variance: :invariant, unchecked: false)],
497
+ type_params: [TypeParam.new(name: :T, upper_bound: nil, variance: :invariant, unchecked: false, default_type: nil)],
496
498
  type: Function.new(
497
499
  params: Function::Params.build(
498
500
  required: [
@@ -503,11 +505,10 @@ module Steep
503
505
  return_type: AST::Types::Union.build(types: [elem_type, AST::Types::Var.new(name: :T)]),
504
506
  location: nil
505
507
  ),
506
- block: nil,
507
- method_decls: Set[]
508
+ block: nil
508
509
  ),
509
510
  MethodType.new(
510
- type_params: [TypeParam.new(name: :T, upper_bound: nil, variance: :invariant, unchecked: false)],
511
+ type_params: [TypeParam.new(name: :T, upper_bound: nil, variance: :invariant, unchecked: false, default_type: nil)],
511
512
  type: Function.new(
512
513
  params: Function::Params.build(required: [AST::Types::Literal.new(value: index)]),
513
514
  return_type: AST::Types::Union.build(types: [elem_type, AST::Types::Var.new(name: :T)]),
@@ -521,27 +522,29 @@ module Steep
521
522
  ),
522
523
  optional: false,
523
524
  self_type: nil
524
- ),
525
- method_decls: Set[]
525
+ )
526
526
  )
527
- ]
528
- } + fetch.method_types
527
+ ].map { Shape::MethodOverload.new(_1, []) }
528
+ } + fetch.overloads
529
529
  )
530
530
  end
531
531
 
532
532
  first_entry = array_shape.methods[:first].yield_self do |first|
533
533
  Shape::Entry.new(
534
+ method_name: :first,
534
535
  private_method: false,
535
- method_types: [
536
- MethodType.new(
537
- type_params: [],
538
- type: Function.new(
539
- params: Function::Params.empty,
540
- return_type: tuple.types[0] || AST::Builtin.nil_type,
541
- location: nil
536
+ overloads: [
537
+ Shape::MethodOverload.new(
538
+ MethodType.new(
539
+ type_params: [],
540
+ type: Function.new(
541
+ params: Function::Params.empty,
542
+ return_type: tuple.types[0] || AST::Builtin.nil_type,
543
+ location: nil
544
+ ),
545
+ block: nil
542
546
  ),
543
- block: nil,
544
- method_decls: Set[]
547
+ []
545
548
  )
546
549
  ]
547
550
  )
@@ -549,17 +552,20 @@ module Steep
549
552
 
550
553
  last_entry = array_shape.methods[:last].yield_self do |last|
551
554
  Shape::Entry.new(
555
+ method_name: :last,
552
556
  private_method: false,
553
- method_types: [
554
- MethodType.new(
555
- type_params: [],
556
- type: Function.new(
557
- params: Function::Params.empty,
558
- return_type: tuple.types.last || AST::Builtin.nil_type,
559
- location: nil
557
+ overloads: [
558
+ Shape::MethodOverload.new(
559
+ MethodType.new(
560
+ type_params: [],
561
+ type: Function.new(
562
+ params: Function::Params.empty,
563
+ return_type: tuple.types.last || AST::Builtin.nil_type,
564
+ location: nil
565
+ ),
566
+ block: nil
560
567
  ),
561
- block: nil,
562
- method_decls: Set[]
568
+ []
563
569
  )
564
570
  ]
565
571
  )
@@ -576,10 +582,9 @@ module Steep
576
582
 
577
583
  def record_shape(record)
578
584
  all_key_type = AST::Types::Union.build(
579
- types: record.elements.each_key.map {|value| AST::Types::Literal.new(value: value, location: nil) },
580
- location: nil
585
+ types: record.elements.each_key.map {|value| AST::Types::Literal.new(value: value) }
581
586
  )
582
- all_value_type = AST::Types::Union.build(types: record.elements.values, location: nil)
587
+ all_value_type = AST::Types::Union.build(types: record.elements.values)
583
588
  hash_type = AST::Builtin::Hash.instance_type(all_key_type, all_value_type)
584
589
 
585
590
  hash_shape = yield(hash_type) or raise
@@ -589,21 +594,28 @@ module Steep
589
594
  shape.methods[:[]] = hash_shape.methods[:[]].yield_self do |aref|
590
595
  aref or raise
591
596
  Shape::Entry.new(
597
+ method_name: :[],
592
598
  private_method: false,
593
- method_types: record.elements.map do |key_value, value_type|
594
- key_type = AST::Types::Literal.new(value: key_value, location: nil)
595
-
596
- MethodType.new(
597
- type_params: [],
598
- type: Function.new(
599
- params: Function::Params.build(required: [key_type]),
600
- return_type: value_type,
601
- location: nil
599
+ overloads: record.elements.map do |key_value, value_type|
600
+ key_type = AST::Types::Literal.new(value: key_value)
601
+
602
+ if record.optional?(key_value)
603
+ value_type = AST::Builtin.optional(value_type)
604
+ end
605
+
606
+ Shape::MethodOverload.new(
607
+ MethodType.new(
608
+ type_params: [],
609
+ type: Function.new(
610
+ params: Function::Params.build(required: [key_type]),
611
+ return_type: value_type,
612
+ location: nil
613
+ ),
614
+ block: nil
602
615
  ),
603
- block: nil,
604
- method_decls: Set[]
616
+ []
605
617
  )
606
- end + aref.method_types
618
+ end + aref.overloads
607
619
  )
608
620
  end
609
621
 
@@ -611,19 +623,22 @@ module Steep
611
623
  update or raise
612
624
 
613
625
  Shape::Entry.new(
626
+ method_name: :[]=,
614
627
  private_method: false,
615
- method_types: record.elements.map do |key_value, value_type|
616
- key_type = AST::Types::Literal.new(value: key_value, location: nil)
617
- MethodType.new(
618
- type_params: [],
619
- type: Function.new(
620
- params: Function::Params.build(required: [key_type, value_type]),
621
- return_type: value_type,
622
- location: nil),
623
- block: nil,
624
- method_decls: Set[]
628
+ overloads: record.elements.map do |key_value, value_type|
629
+ key_type = AST::Types::Literal.new(value: key_value)
630
+ Shape::MethodOverload.new(
631
+ MethodType.new(
632
+ type_params: [],
633
+ type: Function.new(
634
+ params: Function::Params.build(required: [key_type, value_type]),
635
+ return_type: value_type,
636
+ location: nil),
637
+ block: nil
638
+ ),
639
+ []
625
640
  )
626
- end + update.method_types
641
+ end + update.overloads
627
642
  )
628
643
  end
629
644
 
@@ -631,9 +646,10 @@ module Steep
631
646
  update or raise
632
647
 
633
648
  Shape::Entry.new(
649
+ method_name: :fetch,
634
650
  private_method: false,
635
- method_types: record.elements.flat_map {|key_value, value_type|
636
- key_type = AST::Types::Literal.new(value: key_value, location: nil)
651
+ overloads: record.elements.flat_map {|key_value, value_type|
652
+ key_type = AST::Types::Literal.new(value: key_value)
637
653
 
638
654
  [
639
655
  MethodType.new(
@@ -643,21 +659,19 @@ module Steep
643
659
  return_type: value_type,
644
660
  location: nil
645
661
  ),
646
- block: nil,
647
- method_decls: Set[]
662
+ block: nil
648
663
  ),
649
664
  MethodType.new(
650
- type_params: [TypeParam.new(name: :T, upper_bound: nil, variance: :invariant, unchecked: false)],
665
+ type_params: [TypeParam.new(name: :T, upper_bound: nil, variance: :invariant, unchecked: false, default_type: nil)],
651
666
  type: Function.new(
652
667
  params: Function::Params.build(required: [key_type, AST::Types::Var.new(name: :T)]),
653
668
  return_type: AST::Types::Union.build(types: [value_type, AST::Types::Var.new(name: :T)]),
654
669
  location: nil
655
670
  ),
656
- block: nil,
657
- method_decls: Set[]
671
+ block: nil
658
672
  ),
659
673
  MethodType.new(
660
- type_params: [TypeParam.new(name: :T, upper_bound: nil, variance: :invariant, unchecked: false)],
674
+ type_params: [TypeParam.new(name: :T, upper_bound: nil, variance: :invariant, unchecked: false, default_type: nil)],
661
675
  type: Function.new(
662
676
  params: Function::Params.build(required: [key_type]),
663
677
  return_type: AST::Types::Union.build(types: [value_type, AST::Types::Var.new(name: :T)]),
@@ -671,11 +685,10 @@ module Steep
671
685
  ),
672
686
  optional: false,
673
687
  self_type: nil
674
- ),
675
- method_decls: Set[]
688
+ )
676
689
  )
677
- ]
678
- } + update.method_types
690
+ ].map { Shape::MethodOverload.new(_1, []) }
691
+ } + update.overloads
679
692
  )
680
693
  end
681
694
 
@@ -686,9 +699,20 @@ module Steep
686
699
  shape = Shape.new(type: proc, private: true)
687
700
  shape.methods.merge!(proc_shape.methods)
688
701
 
689
- shape.methods[:[]] = shape.methods[:call] = Shape::Entry.new(
702
+ overload = Shape::MethodOverload.new(
703
+ MethodType.new(type_params: [], type: proc.type, block: proc.block),
704
+ []
705
+ )
706
+
707
+ shape.methods[:[]] = Shape::Entry.new(
708
+ method_name: :[],
709
+ private_method: false,
710
+ overloads: [overload]
711
+ )
712
+ shape.methods[:call] = Shape::Entry.new(
713
+ method_name: :call,
690
714
  private_method: false,
691
- method_types: [MethodType.new(type_params: [], type: proc.type, block: proc.block, method_decls: Set[])]
715
+ overloads: [overload]
692
716
  )
693
717
 
694
718
  shape
@@ -707,7 +731,7 @@ module Steep
707
731
  if member.instance?
708
732
  return method_type.with(
709
733
  type: method_type.type.with(
710
- return_type: AST::Types::Logic::ReceiverIsArg.new(location: method_type.type.return_type.location)
734
+ return_type: AST::Types::Logic::ReceiverIsArg.instance()
711
735
  )
712
736
  )
713
737
  end
@@ -721,7 +745,7 @@ module Steep
721
745
  if member.instance?
722
746
  return method_type.with(
723
747
  type: method_type.type.with(
724
- return_type: AST::Types::Logic::ReceiverIsNil.new(location: method_type.type.return_type.location)
748
+ return_type: AST::Types::Logic::ReceiverIsNil.instance()
725
749
  )
726
750
  )
727
751
  end
@@ -735,7 +759,7 @@ module Steep
735
759
  AST::Builtin::NilClass.module_name
736
760
  return method_type.with(
737
761
  type: method_type.type.with(
738
- return_type: AST::Types::Logic::Not.new(location: method_type.type.return_type.location)
762
+ return_type: AST::Types::Logic::Not.instance()
739
763
  )
740
764
  )
741
765
  end
@@ -745,7 +769,7 @@ module Steep
745
769
  when RBS::BuiltinNames::Module.name
746
770
  return method_type.with(
747
771
  type: method_type.type.with(
748
- return_type: AST::Types::Logic::ArgIsReceiver.new(location: method_type.type.return_type.location)
772
+ return_type: AST::Types::Logic::ArgIsReceiver.instance()
749
773
  )
750
774
  )
751
775
  when RBS::BuiltinNames::Object.name,
@@ -759,7 +783,7 @@ module Steep
759
783
  # Value based type-case works on literal types which is available for String, Integer, Symbol, TrueClass, FalseClass, and NilClass
760
784
  return method_type.with(
761
785
  type: method_type.type.with(
762
- return_type: AST::Types::Logic::ArgEqualsReceiver.new(location: method_type.type.return_type.location)
786
+ return_type: AST::Types::Logic::ArgEqualsReceiver.instance()
763
787
  )
764
788
  )
765
789
  end
@@ -768,7 +792,7 @@ module Steep
768
792
  when RBS::BuiltinNames::Module.name
769
793
  return method_type.with(
770
794
  type: method_type.type.with(
771
- return_type: AST::Types::Logic::ArgIsAncestor.new(location: method_type.type.return_type.location)
795
+ return_type: AST::Types::Logic::ArgIsAncestor.instance()
772
796
  )
773
797
  )
774
798
  end
@@ -4,13 +4,11 @@ module Steep
4
4
  attr_reader :type_params
5
5
  attr_reader :type
6
6
  attr_reader :block
7
- attr_reader :method_decls
8
7
 
9
- def initialize(type_params:, type:, block:, method_decls:)
8
+ def initialize(type_params:, type:, block:)
10
9
  @type_params = type_params
11
10
  @type = type
12
11
  @block = block
13
- @method_decls = method_decls
14
12
  end
15
13
 
16
14
  def ==(other)
@@ -52,7 +50,7 @@ module Steep
52
50
  if ty == type && bl == block
53
51
  self
54
52
  else
55
- self.class.new(type_params: type_params, type: ty, block: bl, method_decls: method_decls)
53
+ self.class.new(type_params: type_params, type: ty, block: bl)
56
54
  end
57
55
  end
58
56
 
@@ -72,15 +70,13 @@ module Steep
72
70
  def instantiate(s)
73
71
  self.class.new(type_params: [],
74
72
  type: type.subst(s),
75
- block: block&.subst(s),
76
- method_decls: method_decls)
73
+ block: block&.subst(s))
77
74
  end
78
75
 
79
- def with(type_params: self.type_params, type: self.type, block: self.block, method_decls: self.method_decls)
76
+ def with(type_params: self.type_params, type: self.type, block: self.block)
80
77
  self.class.new(type_params: type_params,
81
78
  type: type,
82
- block: block,
83
- method_decls: method_decls)
79
+ block: block)
84
80
  end
85
81
 
86
82
  def to_s
@@ -95,8 +91,7 @@ module Steep
95
91
  def map_type(&block)
96
92
  self.class.new(type_params: type_params,
97
93
  type: type.map_type(&block),
98
- block: self.block&.yield_self {|blk| blk.map_type(&block) },
99
- method_decls: method_decls)
94
+ block: self.block&.yield_self {|blk| blk.map_type(&block) })
100
95
  end
101
96
 
102
97
  # Returns a new method type which can be used for the method implementation type of both `self` and `other`.
@@ -125,8 +120,7 @@ module Steep
125
120
  ),
126
121
  location: nil
127
122
  ),
128
- block: block,
129
- method_decls: method_decls + other.method_decls
123
+ block: block
130
124
  )
131
125
  end
132
126
 
@@ -245,7 +239,7 @@ module Steep
245
239
  when (self_self = b.self_type) && (other_self = ob.self_type)
246
240
  AST::Types::Union.build(types: [self_self, other_self])
247
241
  when b.self_type || ob.self_type
248
- AST::Types::Bot.new()
242
+ AST::Types::Bot.instance
249
243
  else
250
244
  nil
251
245
  end
@@ -280,8 +274,7 @@ module Steep
280
274
  MethodType.new(
281
275
  type_params: [],
282
276
  type: Function.new(params: params, return_type: return_type, location: nil),
283
- block: block,
284
- method_decls: method_decls + other.method_decls
277
+ block: block
285
278
  )
286
279
  end
287
280
 
@@ -293,7 +286,7 @@ module Steep
293
286
  else
294
287
  params = self.type.params || other.type.params
295
288
  end
296
-
289
+
297
290
  block =
298
291
  case
299
292
  when (b = self.block) && (ob = other.block)
@@ -302,7 +295,7 @@ module Steep
302
295
  when (self_self = b.self_type) && (other_self = ob.self_type)
303
296
  AST::Types::Intersection.build(types: [self_self, other_self])
304
297
  when b.self_type || ob.self_type
305
- AST::Types::Top.new()
298
+ AST::Types::Top.instance
306
299
  else
307
300
  nil
308
301
  end
@@ -324,8 +317,7 @@ module Steep
324
317
  MethodType.new(
325
318
  type_params: [],
326
319
  type: Function.new(params: params, return_type: return_type, location: nil),
327
- block: block,
328
- method_decls: method_decls + other.method_decls
320
+ block: block
329
321
  )
330
322
  end
331
323
  end