rbi 0.3.7 → 0.3.8

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d0977bf3c0892a76c8d66ec2f295a62948530bcd2eee11911c50e36ac1bf5402
4
- data.tar.gz: ae51e44eb13fe8045f200a8a0353daa9969c4389f99c73758713fa0a9b2b9b0f
3
+ metadata.gz: e8a26f05eff609245be847ff291cfd456b86e0a11aa85c496bcdcbaf8c202b5b
4
+ data.tar.gz: f1eb34ff26a99f6b1b20edfaec281db99559cce730e3c0cdbf0d8c75a8e6ee91
5
5
  SHA512:
6
- metadata.gz: 32bafbbfffee840fe60a1633eb8b408aca4c8e39b5359ce3deca5185ab3003ac43b6c6cab4c4639d9e87e12afabcf1ee042bc9b5a56a231302354f884b2c27ea
7
- data.tar.gz: da025803fafaf40714356d02dfe77a705a0de38050bdce9616c6e35f68479b958aa0eb5b596ddf146ef1493932a70fead22f7cb745a28e7c15a40ee85a850c2e
6
+ metadata.gz: 9cbe3f72073f2813cef4744b57849d8725eab8ed19df9b14d7d7571f795dd90ca925645eed50f62ff86d8a387a5e845a516a7dfc097593788e9b27c6d6489edd
7
+ data.tar.gz: 72e11ed844915a8965f3a0db4f76b7cb3b6e22e6eb7848bcf2f5484a415bdf79fd7c552c811b279cb006121179c8ebc1cfa58bcbe3d95e2089fec02f1f8ab8a0
data/Gemfile CHANGED
@@ -14,6 +14,6 @@ group(:development, :test) do
14
14
  gem("rubocop-shopify", require: false)
15
15
  gem("rubocop-sorbet", require: false)
16
16
  gem("sorbet", ">= 0.5.9204", require: false)
17
- gem("spoom", ">= 1.6.0", require: false)
18
- gem("tapioca", require: false)
17
+ gem("spoom", ">= 1.7.10", require: false)
18
+ gem("tapioca", ">= 0.17.9", require: false)
19
19
  end
@@ -33,7 +33,6 @@ module RBI
33
33
  def translate(type)
34
34
  case type
35
35
  when ::RBS::Types::Alias
36
- # TODO: unsupported yet
37
36
  translate_type_alias(type)
38
37
  when ::RBS::Types::Bases::Any
39
38
  Type.untyped
@@ -162,23 +161,25 @@ module RBI
162
161
  def translate_t_generic_type(type_name)
163
162
  case type_name.delete_prefix("::")
164
163
  when "Array"
165
- "T::Array"
164
+ "::T::Array"
166
165
  when "Class"
167
- "T::Class"
166
+ "::T::Class"
168
167
  when "Enumerable"
169
- "T::Enumerable"
168
+ "::T::Enumerable"
170
169
  when "Enumerator"
171
- "T::Enumerator"
170
+ "::T::Enumerator"
172
171
  when "Enumerator::Chain"
173
- "T::Enumerator::Chain"
172
+ "::T::Enumerator::Chain"
174
173
  when "Enumerator::Lazy"
175
- "T::Enumerator::Lazy"
174
+ "::T::Enumerator::Lazy"
176
175
  when "Hash"
177
- "T::Hash"
176
+ "::T::Hash"
177
+ when "Module"
178
+ "::T::Module"
178
179
  when "Set"
179
- "T::Set"
180
+ "::T::Set"
180
181
  when "Range"
181
- "T::Range"
182
+ "::T::Range"
182
183
  else
183
184
  type_name
184
185
  end
@@ -1030,6 +1030,8 @@ module RBI
1030
1030
  visit_type_parameter(node)
1031
1031
  when Type::Class
1032
1032
  visit_class(node)
1033
+ when Type::Module
1034
+ visit_module(node)
1033
1035
  else
1034
1036
  raise Error, "Unhandled node: #{node.class}"
1035
1037
  end
@@ -1190,6 +1192,13 @@ module RBI
1190
1192
  @string << "]"
1191
1193
  end
1192
1194
 
1195
+ #: (Type::Module type) -> void
1196
+ def visit_module(type)
1197
+ @string << "Module["
1198
+ visit(type.type)
1199
+ @string << "]"
1200
+ end
1201
+
1193
1202
  private
1194
1203
 
1195
1204
  #: (String type_name) -> String
@@ -1197,10 +1206,20 @@ module RBI
1197
1206
  case type_name
1198
1207
  when "T::Array"
1199
1208
  "Array"
1209
+ when "T::Enumerable"
1210
+ "Enumerable"
1211
+ when "T::Enumerator"
1212
+ "Enumerator"
1213
+ when "T::Enumerator::Chain"
1214
+ "Enumerator::Chain"
1215
+ when "T::Enumerator::Lazy"
1216
+ "Enumerator::Lazy"
1200
1217
  when "T::Hash"
1201
1218
  "Hash"
1202
1219
  when "T::Set"
1203
1220
  "Set"
1221
+ when "T::Range"
1222
+ "Range"
1204
1223
  else
1205
1224
  type_name
1206
1225
  end
data/lib/rbi/type.rb CHANGED
@@ -58,7 +58,7 @@ module RBI
58
58
  # @override
59
59
  #: -> String
60
60
  def to_rbi
61
- "T.anything"
61
+ "::T.anything"
62
62
  end
63
63
 
64
64
  # @override
@@ -85,7 +85,7 @@ module RBI
85
85
  # @override
86
86
  #: -> String
87
87
  def to_rbi
88
- "T.attached_class"
88
+ "::T.attached_class"
89
89
  end
90
90
 
91
91
  # @override
@@ -139,7 +139,7 @@ module RBI
139
139
  # @override
140
140
  #: -> String
141
141
  def to_rbi
142
- "T.noreturn"
142
+ "::T.noreturn"
143
143
  end
144
144
 
145
145
  # @override
@@ -166,7 +166,7 @@ module RBI
166
166
  # @override
167
167
  #: -> String
168
168
  def to_rbi
169
- "T.self_type"
169
+ "::T.self_type"
170
170
  end
171
171
 
172
172
  # @override
@@ -193,7 +193,7 @@ module RBI
193
193
  # @override
194
194
  #: -> String
195
195
  def to_rbi
196
- "T.untyped"
196
+ "::T.untyped"
197
197
  end
198
198
 
199
199
  # @override
@@ -274,6 +274,42 @@ module RBI
274
274
  end
275
275
  end
276
276
 
277
+ # The module of another type like `T::Module[Foo]`.
278
+ class Module < Type
279
+ #: Type
280
+ attr_reader :type
281
+
282
+ #: (Type type) -> void
283
+ def initialize(type)
284
+ super()
285
+ @type = type
286
+ end
287
+
288
+ # @override
289
+ #: (BasicObject other) -> bool
290
+ def ==(other)
291
+ Module === other && @type == other.type
292
+ end
293
+
294
+ # @override
295
+ #: -> String
296
+ def to_rbi
297
+ "T::Module[#{@type}]"
298
+ end
299
+
300
+ # @override
301
+ #: -> Type
302
+ def normalize
303
+ self
304
+ end
305
+
306
+ # @override
307
+ #: -> Type
308
+ def simplify
309
+ self
310
+ end
311
+ end
312
+
277
313
  # The singleton class of another type like `T.class_of(Foo)`.
278
314
  class ClassOf < Type
279
315
  #: Simple
@@ -299,9 +335,9 @@ module RBI
299
335
  #: -> String
300
336
  def to_rbi
301
337
  if @type_parameter
302
- "T.class_of(#{@type.to_rbi})[#{@type_parameter.to_rbi}]"
338
+ "::T.class_of(#{@type.to_rbi})[#{@type_parameter.to_rbi}]"
303
339
  else
304
- "T.class_of(#{@type.to_rbi})"
340
+ "::T.class_of(#{@type.to_rbi})"
305
341
  end
306
342
  end
307
343
 
@@ -338,7 +374,7 @@ module RBI
338
374
  # @override
339
375
  #: -> String
340
376
  def to_rbi
341
- "T.nilable(#{@type.to_rbi})"
377
+ "::T.nilable(#{@type.to_rbi})"
342
378
  end
343
379
 
344
380
  # @override
@@ -385,7 +421,7 @@ module RBI
385
421
  # @override
386
422
  #: -> String
387
423
  def to_rbi
388
- "T.all(#{@types.map(&:to_rbi).join(", ")})"
424
+ "::T.all(#{@types.map(&:to_rbi).join(", ")})"
389
425
  end
390
426
 
391
427
  # @override
@@ -427,7 +463,7 @@ module RBI
427
463
  # @override
428
464
  #: -> String
429
465
  def to_rbi
430
- "T.any(#{@types.map(&:to_rbi).join(", ")})"
466
+ "::T.any(#{@types.map(&:to_rbi).join(", ")})"
431
467
  end
432
468
 
433
469
  #: -> bool
@@ -567,7 +603,7 @@ module RBI
567
603
  # @override
568
604
  #: -> String
569
605
  def to_rbi
570
- "T.type_parameter(#{@name.inspect})"
606
+ "::T.type_parameter(#{@name.inspect})"
571
607
  end
572
608
 
573
609
  # @override
@@ -607,7 +643,7 @@ module RBI
607
643
  # @override
608
644
  #: -> String
609
645
  def to_rbi
610
- "#{name} = T.type_alias { #{aliased_type.to_rbi} }"
646
+ "#{name} = ::T.type_alias { #{aliased_type.to_rbi} }"
611
647
  end
612
648
 
613
649
  # @override
@@ -760,7 +796,7 @@ module RBI
760
796
  # @override
761
797
  #: -> String
762
798
  def to_rbi
763
- rbi = +"T.proc"
799
+ rbi = +"::T.proc"
764
800
 
765
801
  if @proc_bind
766
802
  rbi << ".bind(#{@proc_bind})"
@@ -863,6 +899,12 @@ module RBI
863
899
  Class.new(type)
864
900
  end
865
901
 
902
+ # Builds a type that represents the module of another type like `T::Module[Foo]`.
903
+ #: (Type type) -> Module
904
+ def t_module(type)
905
+ Module.new(type)
906
+ end
907
+
866
908
  # Builds a type that represents the singleton class of another type like `T.class_of(Foo)`.
867
909
  #: (Simple type, ?Type? type_parameter) -> ClassOf
868
910
  def class_of(type, type_parameter = nil)
@@ -958,8 +1000,8 @@ module RBI
958
1000
  # ```ruby
959
1001
  # type = RBI::Type.simple("String")
960
1002
  # type.to_rbi # => "String"
961
- # type.nilable.to_rbi # => "T.nilable(String)"
962
- # type.nilable.nilable.to_rbi # => "T.nilable(String)"
1003
+ # type.nilable.to_rbi # => "::T.nilable(String)"
1004
+ # type.nilable.nilable.to_rbi # => "::T.nilable(String)"
963
1005
  # ```
964
1006
  #: -> Type
965
1007
  def nilable
@@ -972,7 +1014,7 @@ module RBI
972
1014
  #
973
1015
  # ```ruby
974
1016
  # type = RBI::Type.nilable(RBI::Type.simple("String"))
975
- # type.to_rbi # => "T.nilable(String)"
1017
+ # type.to_rbi # => "::T.nilable(String)"
976
1018
  # type.non_nilable.to_rbi # => "String"
977
1019
  # type.non_nilable.non_nilable.to_rbi # => "String"
978
1020
  # ```
@@ -116,6 +116,14 @@ module RBI
116
116
  args.first, #: as !nil
117
117
  ),
118
118
  )
119
+ elsif t_module?(recv)
120
+ # `T::Module[Foo]` or `::T::Module[Foo]`
121
+ args = check_arguments_exactly!(node, 1)
122
+ return Type::Module.new(
123
+ parse_node(
124
+ args.first, #: as !nil
125
+ ),
126
+ )
119
127
  else
120
128
  # `::Foo[Bar]` or `::Foo[Bar, Baz]`
121
129
  args = check_arguments_at_least!(node, 1)
@@ -354,6 +362,11 @@ module RBI
354
362
  t?(node.parent) && node.name == :Class
355
363
  end
356
364
 
365
+ #: (Prism::ConstantPathNode node) -> bool
366
+ def t_module?(node)
367
+ t?(node.parent) && node.name == :Module
368
+ end
369
+
357
370
  #: (Prism::Node? node) -> bool
358
371
  def t_class_of?(node)
359
372
  return false unless node.is_a?(Prism::CallNode)
data/lib/rbi/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module RBI
5
- VERSION = "0.3.7"
5
+ VERSION = "0.3.8"
6
6
  end
data/rbi/rbi.rbi CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # DO NOT EDIT MANUALLY
4
4
  # This is an autogenerated file for types exported from the `rbi` gem.
5
- # Please instead update this file by running `spoom srb sigs export`.
5
+ # Please instead update this file by running `bundle exec spoom srb sigs export`.
6
6
 
7
7
  module RBI; end
8
8
 
@@ -2432,58 +2432,6 @@ class RBI::Tree < ::RBI::NodeWithComments
2432
2432
  sig { params(annotation: ::String, annotate_scopes: T::Boolean, annotate_properties: T::Boolean).void }
2433
2433
  def annotate!(annotation, annotate_scopes: T.unsafe(nil), annotate_properties: T.unsafe(nil)); end
2434
2434
 
2435
- sig do
2436
- params(
2437
- name: ::String,
2438
- superclass_name: T.nilable(::String),
2439
- block: T.nilable(T.proc.params(scope: ::RBI::Scope).void)
2440
- ).returns(::RBI::Scope)
2441
- end
2442
- def create_class(name, superclass_name: T.unsafe(nil), &block); end
2443
-
2444
- sig { params(name: ::String, value: ::String).void }
2445
- def create_constant(name, value:); end
2446
-
2447
- sig { params(name: ::String).void }
2448
- def create_extend(name); end
2449
-
2450
- sig { params(name: ::String).void }
2451
- def create_include(name); end
2452
-
2453
- sig do
2454
- params(
2455
- name: ::String,
2456
- parameters: T::Array[::RBI::TypedParam],
2457
- return_type: T.nilable(::String),
2458
- class_method: T::Boolean,
2459
- visibility: ::RBI::Visibility,
2460
- comments: T::Array[::RBI::Comment],
2461
- block: T.nilable(T.proc.params(node: ::RBI::Method).void)
2462
- ).void
2463
- end
2464
- def create_method(name, parameters: T.unsafe(nil), return_type: T.unsafe(nil), class_method: T.unsafe(nil), visibility: T.unsafe(nil), comments: T.unsafe(nil), &block); end
2465
-
2466
- sig { params(name: ::String).void }
2467
- def create_mixes_in_class_methods(name); end
2468
-
2469
- sig { params(name: ::String, block: T.nilable(T.proc.params(scope: ::RBI::Scope).void)).returns(::RBI::Scope) }
2470
- def create_module(name, &block); end
2471
-
2472
- sig { params(constant: ::Module, block: T.nilable(T.proc.params(scope: ::RBI::Scope).void)).returns(::RBI::Scope) }
2473
- def create_path(constant, &block); end
2474
-
2475
- sig do
2476
- params(
2477
- name: ::String,
2478
- type: ::String,
2479
- variance: ::Symbol,
2480
- fixed: T.nilable(::String),
2481
- upper: T.nilable(::String),
2482
- lower: T.nilable(::String)
2483
- ).void
2484
- end
2485
- def create_type_variable(name, type:, variance: T.unsafe(nil), fixed: T.unsafe(nil), upper: T.unsafe(nil), lower: T.unsafe(nil)); end
2486
-
2487
2435
  sig { params(annotation: ::String).void }
2488
2436
  def deannotate!(annotation); end
2489
2437
 
@@ -2535,14 +2483,6 @@ class RBI::Tree < ::RBI::NodeWithComments
2535
2483
 
2536
2484
  sig { void }
2537
2485
  def translate_rbs_sigs!; end
2538
-
2539
- private
2540
-
2541
- sig { params(node: ::RBI::Node).returns(::RBI::Node) }
2542
- def create_node(node); end
2543
-
2544
- sig { returns(T::Hash[::String, ::RBI::Node]) }
2545
- def nodes_cache; end
2546
2486
  end
2547
2487
 
2548
2488
  class RBI::Type
@@ -2633,6 +2573,9 @@ class RBI::Type
2633
2573
  sig { params(type: ::RBI::Type).returns(::RBI::Type::Class) }
2634
2574
  def t_class(type); end
2635
2575
 
2576
+ sig { params(type: ::RBI::Type).returns(::RBI::Type::Module) }
2577
+ def t_module(type); end
2578
+
2636
2579
  sig { params(types: T.any(::RBI::Type, T::Array[::RBI::Type])).returns(::RBI::Type::Tuple) }
2637
2580
  def tuple(*types); end
2638
2581
 
@@ -2689,6 +2632,9 @@ class RBI::Type
2689
2632
  sig { params(node: T.nilable(::Prism::Node)).returns(T::Boolean) }
2690
2633
  def t_class_of?(node); end
2691
2634
 
2635
+ sig { params(node: ::Prism::ConstantPathNode).returns(T::Boolean) }
2636
+ def t_module?(node); end
2637
+
2692
2638
  sig { params(node: ::Prism::CallNode).returns(T::Boolean) }
2693
2639
  def t_proc?(node); end
2694
2640
 
@@ -2848,6 +2794,26 @@ class RBI::Type::Generic < ::RBI::Type
2848
2794
  def to_rbi; end
2849
2795
  end
2850
2796
 
2797
+ class RBI::Type::Module < ::RBI::Type
2798
+ sig { params(type: ::RBI::Type).void }
2799
+ def initialize(type); end
2800
+
2801
+ sig { override.params(other: ::BasicObject).returns(T::Boolean) }
2802
+ def ==(other); end
2803
+
2804
+ sig { override.returns(::RBI::Type) }
2805
+ def normalize; end
2806
+
2807
+ sig { override.returns(::RBI::Type) }
2808
+ def simplify; end
2809
+
2810
+ sig { override.returns(::String) }
2811
+ def to_rbi; end
2812
+
2813
+ sig { returns(::RBI::Type) }
2814
+ def type; end
2815
+ end
2816
+
2851
2817
  class RBI::Type::Nilable < ::RBI::Type
2852
2818
  sig { params(type: ::RBI::Type).void }
2853
2819
  def initialize(type); end
@@ -3194,6 +3160,9 @@ class RBI::TypePrinter
3194
3160
  sig { params(type: ::RBI::Type::Generic).void }
3195
3161
  def visit_generic(type); end
3196
3162
 
3163
+ sig { params(type: ::RBI::Type::Module).void }
3164
+ def visit_module(type); end
3165
+
3197
3166
  sig { params(type: ::RBI::Type::Nilable).void }
3198
3167
  def visit_nilable(type); end
3199
3168
 
metadata CHANGED
@@ -1,13 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.7
4
+ version: 0.3.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexandre Terrasa
8
+ autorequire:
8
9
  bindir: bin
9
10
  cert_chain: []
10
- date: 1980-01-02 00:00:00.000000000 Z
11
+ date: 2025-12-02 00:00:00.000000000 Z
11
12
  dependencies:
12
13
  - !ruby/object:Gem::Dependency
13
14
  name: prism
@@ -37,6 +38,7 @@ dependencies:
37
38
  - - ">="
38
39
  - !ruby/object:Gem::Version
39
40
  version: 3.4.4
41
+ description:
40
42
  email:
41
43
  - ruby@shopify.com
42
44
  executables: []
@@ -82,6 +84,7 @@ licenses:
82
84
  - MIT
83
85
  metadata:
84
86
  allowed_push_host: https://rubygems.org
87
+ post_install_message:
85
88
  rdoc_options: []
86
89
  require_paths:
87
90
  - lib
@@ -96,7 +99,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
99
  - !ruby/object:Gem::Version
97
100
  version: '0'
98
101
  requirements: []
99
- rubygems_version: 3.7.2
102
+ rubygems_version: 3.5.3
103
+ signing_key:
100
104
  specification_version: 4
101
105
  summary: RBI generation framework
102
106
  test_files: []