rbs 0.11.0 → 0.13.1

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 (74) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +9 -9
  3. data/CHANGELOG.md +24 -0
  4. data/Rakefile +16 -6
  5. data/Steepfile +28 -0
  6. data/bin/steep +4 -0
  7. data/bin/test_runner.rb +7 -5
  8. data/lib/rbs/ast/comment.rb +7 -1
  9. data/lib/rbs/ast/declarations.rb +15 -9
  10. data/lib/rbs/buffer.rb +1 -1
  11. data/lib/rbs/cli.rb +12 -4
  12. data/lib/rbs/constant.rb +1 -1
  13. data/lib/rbs/constant_table.rb +9 -8
  14. data/lib/rbs/definition.rb +22 -13
  15. data/lib/rbs/definition_builder.rb +79 -55
  16. data/lib/rbs/environment.rb +28 -10
  17. data/lib/rbs/environment_loader.rb +12 -12
  18. data/lib/rbs/location.rb +1 -5
  19. data/lib/rbs/method_type.rb +5 -5
  20. data/lib/rbs/namespace.rb +14 -3
  21. data/lib/rbs/parser.y +0 -8
  22. data/lib/rbs/prototype/rb.rb +3 -4
  23. data/lib/rbs/prototype/rbi.rb +1 -2
  24. data/lib/rbs/substitution.rb +4 -3
  25. data/lib/rbs/type_name.rb +18 -1
  26. data/lib/rbs/type_name_resolver.rb +10 -3
  27. data/lib/rbs/types.rb +27 -21
  28. data/lib/rbs/variance_calculator.rb +9 -6
  29. data/lib/rbs/version.rb +1 -1
  30. data/lib/rbs/writer.rb +25 -15
  31. data/sig/annotation.rbs +26 -0
  32. data/sig/buffer.rbs +28 -0
  33. data/sig/builtin_names.rbs +41 -0
  34. data/sig/comment.rbs +26 -0
  35. data/sig/constant.rbs +21 -0
  36. data/sig/constant_table.rbs +30 -0
  37. data/sig/declarations.rbs +202 -0
  38. data/sig/definition.rbs +129 -0
  39. data/sig/definition_builder.rbs +94 -0
  40. data/sig/environment.rbs +94 -0
  41. data/sig/environment_loader.rbs +58 -0
  42. data/sig/location.rbs +52 -0
  43. data/sig/members.rbs +160 -0
  44. data/sig/method_types.rbs +40 -0
  45. data/sig/namespace.rbs +124 -0
  46. data/sig/polyfill.rbs +3 -0
  47. data/sig/rbs.rbs +3 -0
  48. data/sig/substitution.rbs +39 -0
  49. data/sig/type_name_resolver.rbs +24 -0
  50. data/sig/typename.rbs +70 -0
  51. data/sig/types.rbs +361 -0
  52. data/sig/util.rbs +13 -0
  53. data/sig/variance_calculator.rbs +35 -0
  54. data/sig/version.rbs +3 -0
  55. data/sig/writer.rbs +40 -0
  56. data/stdlib/bigdecimal/big_decimal.rbs +887 -0
  57. data/stdlib/bigdecimal/math/big_math.rbs +142 -0
  58. data/stdlib/builtin/builtin.rbs +0 -3
  59. data/stdlib/builtin/kernel.rbs +2 -0
  60. data/stdlib/builtin/math.rbs +26 -26
  61. data/stdlib/builtin/struct.rbs +9 -10
  62. data/stdlib/forwardable/forwardable.rbs +204 -0
  63. data/stdlib/pathname/pathname.rbs +2 -0
  64. data/stdlib/pty/pty.rbs +5 -29
  65. data/stdlib/set/set.rbs +1 -1
  66. data/stdlib/uri/file.rbs +167 -0
  67. data/stdlib/uri/generic.rbs +875 -0
  68. data/stdlib/uri/http.rbs +158 -0
  69. data/stdlib/uri/https.rbs +108 -0
  70. data/stdlib/uri/ldap.rbs +224 -0
  71. data/stdlib/uri/ldaps.rbs +108 -0
  72. data/steep/Gemfile +3 -0
  73. data/steep/Gemfile.lock +51 -0
  74. metadata +43 -5
@@ -36,8 +36,11 @@ module RBS
36
36
  end
37
37
 
38
38
  def each_ancestor(&block)
39
- if block_given?
40
- yield super_class if super_class
39
+ if block
40
+ if s = super_class
41
+ yield s
42
+ end
43
+
41
44
  self_types&.each(&block)
42
45
  included_modules&.each(&block)
43
46
  prepended_modules&.each(&block)
@@ -108,7 +111,7 @@ module RBS
108
111
  return if with_super_classes.size <= 1
109
112
 
110
113
  super_types = with_super_classes.map do |d|
111
- super_class = d.decl.super_class
114
+ super_class = d.decl.super_class or raise
112
115
  Types::ClassInstance.new(name: super_class.name, args: super_class.args, location: nil)
113
116
  end
114
117
 
@@ -159,10 +162,10 @@ module RBS
159
162
 
160
163
  entry.self_types.each do |module_self|
161
164
  NoSelfTypeFoundError.check!(module_self, env: env)
162
- ancestors.self_types.push Definition::Ancestor::Instance.new(name: module_self.name, args: module_self.args)
165
+
166
+ self_types = ancestors.self_types or raise
167
+ self_types.push Definition::Ancestor::Instance.new(name: module_self.name, args: module_self.args)
163
168
  end
164
- else
165
- raise "Unexpected entry for: #{type_name}"
166
169
  end
167
170
 
168
171
  mixin_ancestors(entry,
@@ -208,9 +211,6 @@ module RBS
208
211
  type_name: type_name,
209
212
  super_class: Definition::Ancestor::Instance.new(name: BuiltinNames::Module.name, args: [])
210
213
  )
211
-
212
- else
213
- raise "Unexpected entry for: #{type_name}"
214
214
  end
215
215
 
216
216
  mixin_ancestors(entry,
@@ -285,33 +285,38 @@ module RBS
285
285
 
286
286
  case entry
287
287
  when Environment::ClassEntry
288
- if one_ancestors.super_class
289
- super_name = one_ancestors.super_class.name
290
- super_args = one_ancestors.super_class.args
288
+ if super_class = one_ancestors.super_class
289
+ # @type var super_class: Definition::Ancestor::Instance
290
+ super_name = super_class.name
291
+ super_args = super_class.args
291
292
 
292
293
  super_ancestors = instance_ancestors(super_name, building_ancestors: building_ancestors)
293
294
  ancestors.unshift(*super_ancestors.apply(super_args, location: entry.primary.decl.location))
294
295
  end
295
296
  end
296
297
 
297
- one_ancestors.included_modules.each do |mod|
298
- if mod.name.class?
299
- name = mod.name
300
- args = mod.args
301
- mod_ancestors = instance_ancestors(name, building_ancestors: building_ancestors)
302
- ancestors.unshift(*mod_ancestors.apply(args, location: entry.primary.decl.location))
303
- end
298
+ if included_modules = one_ancestors.included_modules
299
+ included_modules.each do |mod|
300
+ if mod.name.class?
301
+ name = mod.name
302
+ arg_types = mod.args
303
+ mod_ancestors = instance_ancestors(name, building_ancestors: building_ancestors)
304
+ ancestors.unshift(*mod_ancestors.apply(arg_types, location: entry.primary.decl.location))
305
+ end
306
+ end
304
307
  end
305
308
 
306
309
  ancestors.unshift(self_ancestor)
307
310
 
308
- one_ancestors.prepended_modules.each do |mod|
309
- if mod.name.class?
310
- name = mod.name
311
- args = mod.args
312
- mod_ancestors = instance_ancestors(name, building_ancestors: building_ancestors)
313
- ancestors.unshift(*mod_ancestors.apply(args, location: entry.primary.decl.location))
314
- end
311
+ if prepended_modules = one_ancestors.prepended_modules
312
+ prepended_modules.each do |mod|
313
+ if mod.name.class?
314
+ name = mod.name
315
+ arg_types = mod.args
316
+ mod_ancestors = instance_ancestors(name, building_ancestors: building_ancestors)
317
+ ancestors.unshift(*mod_ancestors.apply(arg_types, location: entry.primary.decl.location))
318
+ end
319
+ end
315
320
  end
316
321
 
317
322
  building_ancestors.pop
@@ -338,22 +343,23 @@ module RBS
338
343
 
339
344
  ancestors = []
340
345
 
341
- case one_ancestors.super_class
346
+ case super_class = one_ancestors.super_class
342
347
  when Definition::Ancestor::Instance
343
- super_name = one_ancestors.super_class.name
344
- super_args = one_ancestors.super_class.args
348
+ super_name = super_class.name
349
+ super_args = super_class.args
345
350
 
346
351
  super_ancestors = instance_ancestors(super_name, building_ancestors: building_ancestors)
347
352
  ancestors.unshift(*super_ancestors.apply(super_args, location: entry.primary.decl.location))
348
353
 
349
354
  when Definition::Ancestor::Singleton
350
- super_name = one_ancestors.super_class.name
355
+ super_name = super_class.name
351
356
 
352
357
  super_ancestors = singleton_ancestors(super_name, building_ancestors: [])
353
358
  ancestors.unshift(*super_ancestors.ancestors)
354
359
  end
355
360
 
356
- one_ancestors.extended_modules.each do |mod|
361
+ extended_modules = one_ancestors.extended_modules or raise
362
+ extended_modules.each do |mod|
357
363
  if mod.name.class?
358
364
  name = mod.name
359
365
  args = mod.args
@@ -406,17 +412,17 @@ module RBS
406
412
  location: nil)
407
413
 
408
414
  definition_pairs = ancestors.ancestors.map do |ancestor|
415
+ # @type block: [Definition::Ancestor::t, Definition]
409
416
  case ancestor
410
417
  when Definition::Ancestor::Instance
411
418
  [ancestor, build_one_instance(ancestor.name)]
412
419
  when Definition::Ancestor::Singleton
413
420
  [ancestor, build_one_singleton(ancestor.name)]
414
- else
415
- raise
416
421
  end
417
422
  end
418
423
 
419
- if entry.is_a?(Environment::ModuleEntry)
424
+ case entry
425
+ when Environment::ModuleEntry
420
426
  entry.self_types.each do |module_self|
421
427
  ancestor = Definition::Ancestor::Instance.new(name: module_self.name, args: module_self.args)
422
428
  definition_pairs.push(
@@ -433,9 +439,6 @@ module RBS
433
439
  end
434
440
 
435
441
  merge_definitions(type_name, definition_pairs, entry: entry, self_type: self_type, ancestors: ancestors)
436
-
437
- else
438
- raise
439
442
  end
440
443
  end
441
444
  end
@@ -456,6 +459,7 @@ module RBS
456
459
  )
457
460
 
458
461
  definition_pairs = ancestors.ancestors.map do |ancestor|
462
+ # @type block: [Definition::Ancestor::t, Definition]
459
463
  case ancestor
460
464
  when Definition::Ancestor::Instance
461
465
  [ancestor, build_one_instance(ancestor.name)]
@@ -474,20 +478,18 @@ module RBS
474
478
  ancestor,
475
479
  definition
476
480
  ]
477
- else
478
- raise
479
481
  end
480
482
  end
481
483
 
482
484
  merge_definitions(type_name, definition_pairs, entry: entry, self_type: self_type, ancestors: ancestors)
483
- else
484
- raise
485
485
  end
486
486
  end
487
487
  end
488
488
 
489
489
  def method_definition_members(type_name, entry, kind:)
490
+ # @type var interface_methods: Hash[Symbol, [Definition::Method, AST::Members::t]]
490
491
  interface_methods = {}
492
+ # @type var methods: Hash[Symbol, Array[[AST::Members::MethodDefinition, Definition::accessibility]]]
491
493
  methods = {}
492
494
 
493
495
  entry.decls.each do |d|
@@ -534,11 +536,14 @@ module RBS
534
536
  end
535
537
  end
536
538
 
539
+ # @type var result: Hash[Symbol, member_detail]
537
540
  result = {}
538
541
 
539
542
  interface_methods.each do |name, pair|
540
543
  method_definition, _ = pair
541
- result[name] = [:public, method_definition]
544
+ # @type var detail: member_detail
545
+ detail = [:public, method_definition, nil, []]
546
+ result[name] = detail
542
547
  end
543
548
 
544
549
  methods.each do |method_name, array|
@@ -562,12 +567,12 @@ module RBS
562
567
  )
563
568
  end
564
569
 
565
- result[method_name] += array.map(&:first)
570
+ result[method_name][3].push(*array.map(&:first))
566
571
  else
567
572
  case
568
573
  when array.size == 1 && !array[0][0].overload?
569
574
  member, visibility = array[0]
570
- result[method_name] = [visibility, nil, member]
575
+ result[method_name] = [visibility, nil, member, []]
571
576
 
572
577
  else
573
578
  visibilities = array.group_by {|pair| pair[1] }
@@ -582,7 +587,7 @@ module RBS
582
587
  end
583
588
 
584
589
  overloads, primary = array.map(&:first).partition(&:overload?)
585
- result[method_name] = [array[0][1], nil, *primary, *overloads]
590
+ result[method_name] = [array[0][1], nil, primary[0], overloads]
586
591
  end
587
592
  end
588
593
  end
@@ -601,7 +606,13 @@ module RBS
601
606
 
602
607
  Definition.new(type_name: type_name, entry: entry, self_type: self_type, ancestors: ancestors).tap do |definition|
603
608
  method_definition_members(type_name, entry, kind: :instance).each do |method_name, array|
604
- visibility, method_def, *members = array
609
+ visibility, method_def, primary_member, overload_members = array
610
+
611
+ members = if primary_member
612
+ [primary_member, *overload_members]
613
+ else
614
+ overload_members
615
+ end
605
616
 
606
617
  m = if method_def
607
618
  Definition::Method.new(
@@ -770,9 +781,9 @@ module RBS
770
781
 
771
782
  errors = []
772
783
 
773
- if decl.is_a?(AST::Declarations::Class)
774
- if decl.super_class
775
- super_class = decl.super_class
784
+ case decl
785
+ when AST::Declarations::Class
786
+ if super_class = decl.super_class
776
787
  result = calculator.in_inherit(name: super_class.name, args: super_class.args, variables: param_names)
777
788
 
778
789
  validate_params_with type_params, result: result do |param|
@@ -783,6 +794,8 @@ module RBS
783
794
  end
784
795
  end
785
796
 
797
+ # @type var result: VarianceCalculator::Result
798
+
786
799
  decl.members.each do |member|
787
800
  case member
788
801
  when AST::Members::Include
@@ -830,7 +843,13 @@ module RBS
830
843
 
831
844
  Definition.new(type_name: type_name, entry: entry, self_type: self_type, ancestors: ancestors).tap do |definition|
832
845
  method_definition_members(type_name, entry, kind: :singleton).each do |method_name, array|
833
- visibility, method_def, *members = array
846
+ visibility, method_def, primary_member, overload_members = array
847
+
848
+ members = if primary_member
849
+ [primary_member, *overload_members]
850
+ else
851
+ overload_members
852
+ end
834
853
 
835
854
  m = Definition::Method.new(
836
855
  super_method: nil,
@@ -882,7 +901,7 @@ module RBS
882
901
  end
883
902
 
884
903
  unless definition.methods.key?(:new)
885
- instance = build_one_instance(type_name)
904
+ instance = build_instance(type_name)
886
905
  initialize = instance.methods[:initialize]
887
906
 
888
907
  if initialize
@@ -957,7 +976,7 @@ module RBS
957
976
 
958
977
  def merge_definitions(type_name, pairs, entry:, self_type:, ancestors:)
959
978
  Definition.new(type_name: type_name, entry: entry, self_type: self_type, ancestors: ancestors).tap do |definition|
960
- pairs.reverse_each do |(ancestor, current_definition)|
979
+ pairs.reverse_each do |ancestor, current_definition|
961
980
  sub = case ancestor
962
981
  when Definition::Ancestor::Instance
963
982
  Substitution.build(current_definition.type_params, ancestor.args)
@@ -965,6 +984,7 @@ module RBS
965
984
  Substitution.build([], [])
966
985
  end
967
986
 
987
+ # @type var kind: method_kind
968
988
  kind = case ancestor
969
989
  when Definition::Ancestor::Instance
970
990
  :instance
@@ -1015,7 +1035,7 @@ module RBS
1015
1035
  end
1016
1036
 
1017
1037
  def try_cache(type_name, cache:)
1018
- cached = cache[type_name]
1038
+ cached = _ = cache[type_name]
1019
1039
 
1020
1040
  case cached
1021
1041
  when Definition
@@ -1027,9 +1047,11 @@ module RBS
1027
1047
  begin
1028
1048
  cache[type_name] = yield
1029
1049
  rescue => ex
1030
- cache[type_name] = nil
1050
+ cache.delete(type_name)
1031
1051
  raise ex
1032
1052
  end
1053
+ else
1054
+ raise
1033
1055
  end
1034
1056
  end
1035
1057
 
@@ -1067,7 +1089,9 @@ module RBS
1067
1089
  mixin = build_interface(member.name)
1068
1090
 
1069
1091
  args = member.args
1070
- type_params = mixin.entry.decl.type_params
1092
+ # @type var interface_entry: Environment::SingleEntry[TypeName, AST::Declarations::Interface]
1093
+ interface_entry = _ = mixin.entry
1094
+ type_params = interface_entry.decl.type_params
1071
1095
 
1072
1096
  InvalidTypeApplicationError.check!(
1073
1097
  type_name: type_name,
@@ -13,14 +13,15 @@ module RBS
13
13
  def context
14
14
  @context ||= begin
15
15
  (outer + [decl]).each.with_object([Namespace.root]) do |decl, array|
16
- array.unshift(array.first + decl.name.to_namespace)
16
+ first = array.first or raise
17
+ array.unshift(first + decl.name.to_namespace)
17
18
  end
18
19
  end
19
20
  end
20
21
  end
21
22
 
22
23
  class MultiEntry
23
- D = Struct.new(:decl, :outer, keyword_init: true) do
24
+ D = _ = Struct.new(:decl, :outer, keyword_init: true) do
24
25
  include ContextUtil
25
26
  end
26
27
 
@@ -40,6 +41,8 @@ module RBS
40
41
  def validate_type_params
41
42
  unless decls.empty?
42
43
  hd_decl, *tl_decls = decls
44
+ raise unless hd_decl
45
+
43
46
  hd_params = hd_decl.decl.type_params
44
47
  hd_names = hd_params.params.map(&:name)
45
48
 
@@ -56,6 +59,10 @@ module RBS
56
59
  def type_params
57
60
  primary.decl.type_params
58
61
  end
62
+
63
+ def primary
64
+ raise "Not implemented"
65
+ end
59
66
  end
60
67
 
61
68
  class ModuleEntry < MultiEntry
@@ -68,7 +75,7 @@ module RBS
68
75
  def primary
69
76
  @primary ||= begin
70
77
  validate_type_params
71
- decls.first
78
+ decls.first or raise("decls cannot be empty")
72
79
  end
73
80
  end
74
81
  end
@@ -77,7 +84,7 @@ module RBS
77
84
  def primary
78
85
  @primary ||= begin
79
86
  validate_type_params
80
- decls.find {|d| d.decl.super_class } || decls.first
87
+ decls.find {|d| d.decl.super_class } || decls.first or raise("decls cannot be empty")
81
88
  end
82
89
  end
83
90
  end
@@ -154,15 +161,17 @@ module RBS
154
161
 
155
162
  case
156
163
  when decl.is_a?(AST::Declarations::Module) && existing_entry.is_a?(ModuleEntry)
157
- # OK
164
+ # @type var existing_entry: ModuleEntry
165
+ # @type var decl: AST::Declarations::Module
166
+ existing_entry.insert(decl: decl, outer: outer)
158
167
  when decl.is_a?(AST::Declarations::Class) && existing_entry.is_a?(ClassEntry)
159
- # OK
168
+ # @type var existing_entry: ClassEntry
169
+ # @type var decl: AST::Declarations::Class
170
+ existing_entry.insert(decl: decl, outer: outer)
160
171
  else
161
172
  raise DuplicatedDeclarationError.new(name, decl, existing_entry.primary.decl)
162
173
  end
163
174
 
164
- existing_entry.insert(decl: decl, outer: outer)
165
-
166
175
  prefix = outer + [decl]
167
176
  ns = name.to_namespace
168
177
  decl.each_decl do |d|
@@ -211,6 +220,7 @@ module RBS
211
220
 
212
221
  def resolve_declaration(resolver, decl, outer:, prefix:)
213
222
  if decl.is_a?(AST::Declarations::Global)
223
+ # @type var decl: AST::Declarations::Global
214
224
  return AST::Declarations::Global.new(
215
225
  name: decl.name,
216
226
  type: absolute_type(resolver, decl.type, context: [Namespace.root]),
@@ -220,7 +230,8 @@ module RBS
220
230
  end
221
231
 
222
232
  context = (outer + [decl]).each.with_object([Namespace.root]) do |decl, array|
223
- array.unshift(array.first + decl.name.to_namespace)
233
+ head = array.first or raise
234
+ array.unshift(head + decl.name.to_namespace)
224
235
  end
225
236
 
226
237
  case decl
@@ -247,6 +258,8 @@ module RBS
247
258
  outer: outer_,
248
259
  prefix: prefix_
249
260
  )
261
+ else
262
+ raise
250
263
  end
251
264
  end,
252
265
  location: decl.location,
@@ -277,6 +290,8 @@ module RBS
277
290
  outer: outer_,
278
291
  prefix: prefix_
279
292
  )
293
+ else
294
+ raise
280
295
  end
281
296
  end,
282
297
  location: decl.location,
@@ -310,6 +325,9 @@ module RBS
310
325
  location: decl.location,
311
326
  comment: decl.comment
312
327
  )
328
+
329
+ else
330
+ raise
313
331
  end
314
332
  end
315
333
 
@@ -409,7 +427,7 @@ module RBS
409
427
  end
410
428
 
411
429
  def absolute_type(resolver, type, context:)
412
- type.map_type_name do |name|
430
+ type.map_type_name do |name, _, _|
413
431
  absolute_type_name(resolver, name, context: context)
414
432
  end
415
433
  end