tapioca 0.11.12 → 0.11.13

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: c9bce9a6dcef31e80f1933bbc3528bf2d8c1328ec4c129b3d9609c8c053e095f
4
- data.tar.gz: af1d5587e075471824d7c29fc5f90cae50ed1e401a21549fa8a2a2c6e390c158
3
+ metadata.gz: 071fd87cab365673ec36e85a0cf657865d2c71d1650d02ae7c17ac3133f124f3
4
+ data.tar.gz: 34a3b5e83928cb38eefbf57568ca8dc5d16c20ee6653da2ee591d6e3265d8d2a
5
5
  SHA512:
6
- metadata.gz: e25d29263e331bc34f67f46a9dd09629ab9cba280db30fe9c8e15679325162583908760b5e163dae09c269edad870c76916dd3195dbc066186c1952cf346acc2
7
- data.tar.gz: 5add77a326f6a60a3f4b8c435b9b0d38e90d117e888aedcc1d48a15bded3c0d7c556a7d6c187020ac35e44709580e7bd9b53813e86cc78259ac9ca5c666561bc
6
+ metadata.gz: d97568a53647ceb3fe4e7bfd33dc3503cb95d8c95791dc0c0bf8429f9974c4a39d5d5e5aca16251ae866a07761f00ddbd5a224925b11c4a8378f682fd4deef1c
7
+ data.tar.gz: f44cccf226efaa3b0ccda730daf3419acb3cdcaeec7c699c91ba9e2f8b4fe59a7e157331afff1723f69f09ff2fc3ff5a208222b2eb86c1738806170578a3ec2b
data/README.md CHANGED
@@ -86,6 +86,7 @@ Options:
86
86
  -c, [--config=<config file path>] # Path to the Tapioca configuration file
87
87
  # Default: sorbet/tapioca/config.yml
88
88
  -V, [--verbose], [--no-verbose] # Verbose output for debugging purposes
89
+ # Default: false
89
90
 
90
91
  ```
91
92
  <!-- END_HELP -->
@@ -119,6 +120,7 @@ Options:
119
120
  -c, [--config=<config file path>] # Path to the Tapioca configuration file
120
121
  # Default: sorbet/tapioca/config.yml
121
122
  -V, [--verbose], [--no-verbose] # Verbose output for debugging purposes
123
+ # Default: false
122
124
 
123
125
  Get project ready for type checking
124
126
  ```
@@ -167,14 +169,17 @@ Options:
167
169
  [--file-header], [--no-file-header] # Add a "This file is generated" header on top of each generated RBI file
168
170
  # Default: true
169
171
  [--all], [--no-all] # Regenerate RBI files for all gems
172
+ # Default: false
170
173
  --pre, -b, [--prerequire=file] # A file to be required before Bundler.require is called
171
174
  --post, -a, [--postrequire=file] # A file to be required after Bundler.require is called
172
175
  # Default: sorbet/tapioca/require.rb
173
176
  -x, [--exclude=gem [gem ...]] # Exclude the given gem(s) from RBI generation
174
177
  [--include-dependencies], [--no-include-dependencies] # Generate RBI files for dependencies of the given gem(s)
178
+ # Default: false
175
179
  --typed, -t, [--typed-overrides=gem:level [gem:level ...]] # Override for typed sigils for generated gem RBIs
176
180
  # Default: {"activesupport"=>"false"}
177
181
  [--verify], [--no-verify] # Verify RBIs are up-to-date
182
+ # Default: false
178
183
  [--doc], [--no-doc] # Include YARD documentation from sources when generating RBIs. Warning: this might be slow
179
184
  # Default: true
180
185
  [--loc], [--no-loc] # Include comments with source location when generating RBIs
@@ -195,6 +200,7 @@ Options:
195
200
  -c, [--config=<config file path>] # Path to the Tapioca configuration file
196
201
  # Default: sorbet/tapioca/config.yml
197
202
  -V, [--verbose], [--no-verbose] # Verbose output for debugging purposes
203
+ # Default: false
198
204
 
199
205
  Generate RBIs from gems
200
206
  ```
@@ -350,7 +356,7 @@ Usage:
350
356
 
351
357
  Options:
352
358
  [--sources=one two three] # URIs of the sources to pull gem RBI annotations from
353
- # Default: ["https://raw.githubusercontent.com/Shopify/rbi-central/main"]
359
+ # Default: "https://raw.githubusercontent.com/Shopify/rbi-central/main"
354
360
  [--netrc], [--no-netrc] # Use .netrc to authenticate to private sources
355
361
  # Default: true
356
362
  [--netrc-file=NETRC_FILE] # Path to .netrc file
@@ -359,6 +365,7 @@ Options:
359
365
  -c, [--config=<config file path>] # Path to the Tapioca configuration file
360
366
  # Default: sorbet/tapioca/config.yml
361
367
  -V, [--verbose], [--no-verbose] # Verbose output for debugging purposes
368
+ # Default: false
362
369
 
363
370
  Pull gem RBI annotations from remote sources
364
371
  ```
@@ -467,7 +474,9 @@ Options:
467
474
  [--only=compiler [compiler ...]] # Only run supplied DSL compiler(s)
468
475
  [--exclude=compiler [compiler ...]] # Exclude supplied DSL compiler(s)
469
476
  [--verify], [--no-verify] # Verifies RBIs are up-to-date
477
+ # Default: false
470
478
  -q, [--quiet], [--no-quiet] # Suppresses file creation output
479
+ # Default: false
471
480
  -w, [--workers=N] # Number of parallel workers to use when generating RBIs (default: 2)
472
481
  # Default: 2
473
482
  [--rbi-max-line-length=N] # Set the max line length of generated RBIs. Signatures longer than the max line length will be wrapped
@@ -475,6 +484,7 @@ Options:
475
484
  -e, [--environment=ENVIRONMENT] # The Rack/Rails environment to use when generating RBIs
476
485
  # Default: development
477
486
  -l, [--list-compilers], [--no-list-compilers] # List all loaded compilers
487
+ # Default: false
478
488
  [--app-root=APP_ROOT] # The path to the Rails application
479
489
  # Default: .
480
490
  [--halt-upon-load-error], [--no-halt-upon-load-error] # Halt upon a load error while loading the Rails application
@@ -482,6 +492,7 @@ Options:
482
492
  -c, [--config=<config file path>] # Path to the Tapioca configuration file
483
493
  # Default: sorbet/tapioca/config.yml
484
494
  -V, [--verbose], [--no-verbose] # Verbose output for debugging purposes
495
+ # Default: false
485
496
 
486
497
  Generate RBIs for dynamic methods
487
498
  ```
@@ -845,6 +856,7 @@ Options:
845
856
  -c, [--config=<config file path>] # Path to the Tapioca configuration file
846
857
  # Default: sorbet/tapioca/config.yml
847
858
  -V, [--verbose], [--no-verbose] # Verbose output for debugging purposes
859
+ # Default: false
848
860
 
849
861
  Check duplicated definitions in shim RBIs
850
862
  ```
@@ -126,6 +126,9 @@ module Tapioca
126
126
  # include GeneratedAssociationRelationMethods
127
127
  #
128
128
  # sig { returns(T::Array[::Post]) }
129
+ # def to_a; end
130
+ #
131
+ # sig { returns(T::Array[::Post]) }
129
132
  # def to_ary; end
130
133
  #
131
134
  # Elem = type_member { { fixed: ::Post } }
@@ -149,6 +152,9 @@ module Tapioca
149
152
  # include GeneratedRelationMethods
150
153
  #
151
154
  # sig { returns(T::Array[::Post]) }
155
+ # def to_a; end
156
+ #
157
+ # sig { returns(T::Array[::Post]) }
152
158
  # def to_ary; end
153
159
  #
154
160
  # Elem = type_member { { fixed: ::Post } }
@@ -226,6 +232,7 @@ module Tapioca
226
232
  T::Array[Symbol],
227
233
  )
228
234
  BUILDER_METHODS = T.let([:new, :build, :create, :create!], T::Array[Symbol])
235
+ TO_ARRAY_METHODS = T.let([:to_ary, :to_a], T::Array[Symbol])
229
236
 
230
237
  private
231
238
 
@@ -296,7 +303,9 @@ module Tapioca
296
303
  klass.create_include(RelationMethodsModuleName)
297
304
  klass.create_type_variable("Elem", type: "type_member", fixed: constant_name)
298
305
 
299
- klass.create_method("to_ary", return_type: "T::Array[#{constant_name}]")
306
+ TO_ARRAY_METHODS.each do |method_name|
307
+ klass.create_method(method_name.to_s, return_type: "T::Array[#{constant_name}]")
308
+ end
300
309
  end
301
310
 
302
311
  create_relation_where_chain_class
@@ -312,7 +321,9 @@ module Tapioca
312
321
  klass.create_include(AssociationRelationMethodsModuleName)
313
322
  klass.create_type_variable("Elem", type: "type_member", fixed: constant_name)
314
323
 
315
- klass.create_method("to_ary", return_type: "T::Array[#{constant_name}]")
324
+ TO_ARRAY_METHODS.each do |method_name|
325
+ klass.create_method(method_name.to_s, return_type: "T::Array[#{constant_name}]")
326
+ end
316
327
  end
317
328
 
318
329
  create_association_relation_where_chain_class
@@ -372,7 +383,9 @@ module Tapioca
372
383
  klass.create_include(AssociationRelationMethodsModuleName)
373
384
  klass.create_type_variable("Elem", type: "type_member", fixed: constant_name)
374
385
 
375
- klass.create_method("to_ary", return_type: "T::Array[#{constant_name}]")
386
+ TO_ARRAY_METHODS.each do |method_name|
387
+ klass.create_method(method_name.to_s, return_type: "T::Array[#{constant_name}]")
388
+ end
376
389
  create_collection_proxy_methods(klass)
377
390
  end
378
391
  end
@@ -40,23 +40,29 @@ module Tapioca
40
40
  # # typed: true
41
41
  #
42
42
  # class Current
43
- # sig { returns(T.untyped) }
44
- # def self.account; end
43
+ # include GeneratedAttributeMethods
45
44
  #
46
- # sig { returns(T.untyped) }
47
- # def account; end
45
+ # class << self
46
+ # sig { returns(T.untyped) }
47
+ # def account; end
48
48
  #
49
- # sig { params(account: T.untyped).returns(T.untyped) }
50
- # def self.account=(account); end
49
+ # sig { params(account: T.untyped).returns(T.untyped) }
50
+ # def account=(account); end
51
51
  #
52
- # sig { params(account: T.untyped).returns(T.untyped) }
53
- # def account=(account); end
52
+ # sig { params(user_id: Integer).void }
53
+ # def authenticate(user_id); end
54
54
  #
55
- # sig { params(user_id: Integer).void }
56
- # def self.authenticate(user_id); end
55
+ # sig { returns(T.untyped) }
56
+ # def helper; end
57
+ # end
58
+ #
59
+ # module GeneratedAttributeMethods
60
+ # sig { returns(T.untyped) }
61
+ # def account; end
57
62
  #
58
- # sig { returns(T.untyped) }
59
- # def self.helper; end
63
+ # sig { params(account: T.untyped).returns(T.untyped) }
64
+ # def account=(account); end
65
+ # end
60
66
  # end
61
67
  # ~~~
62
68
  class ActiveSupportCurrentAttributes < Compiler
@@ -71,20 +77,25 @@ module Tapioca
71
77
  return if dynamic_methods.empty? && instance_methods.empty?
72
78
 
73
79
  root.create_path(constant) do |current_attributes|
74
- dynamic_methods.each do |method|
75
- method = method.to_s
76
- # We want to generate each method both on the class
77
- generate_method(current_attributes, method, class_method: true)
78
- # and on the instance
79
- generate_method(current_attributes, method, class_method: false)
80
- end
80
+ current_attributes_methods_name = "GeneratedAttributeMethods"
81
+ current_attributes.create_module(current_attributes_methods_name) do |generated_attribute_methods|
82
+ dynamic_methods.each do |method|
83
+ method = method.to_s
84
+ # We want to generate each method both on the class
85
+ generate_method(current_attributes, method, class_method: true)
86
+ # and on the instance
87
+ generate_method(generated_attribute_methods, method, class_method: false)
88
+ end
81
89
 
82
- instance_methods.each do |method|
83
- # instance methods are only elevated to class methods
84
- # no need to add separate instance methods for them
85
- method = constant.instance_method(method)
86
- create_method_from_def(current_attributes, method, class_method: true)
90
+ instance_methods.each do |method|
91
+ # instance methods are only elevated to class methods
92
+ # no need to add separate instance methods for them
93
+ method = constant.instance_method(method)
94
+ create_method_from_def(current_attributes, method, class_method: true)
95
+ end
87
96
  end
97
+
98
+ current_attributes.create_include(current_attributes_methods_name)
88
99
  end
89
100
  end
90
101
 
@@ -19,6 +19,7 @@ module Tapioca
19
19
  else
20
20
  argument.type
21
21
  end
22
+
22
23
  unwrapped_type = type.unwrap
23
24
 
24
25
  parsed_type = case unwrapped_type
@@ -50,11 +51,7 @@ module Tapioca
50
51
  signature = Runtime::Reflection.signature_of(method)
51
52
  return_type = signature&.return_type
52
53
 
53
- if return_type && !(T::Private::Types::Void === return_type || T::Private::Types::NotTyped === return_type)
54
- return_type.to_s
55
- else
56
- "T.untyped"
57
- end
54
+ valid_return_type?(return_type) ? return_type.to_s : "T.untyped"
58
55
  when GraphQL::Schema::InputObject.singleton_class
59
56
  type_for_constant(unwrapped_type)
60
57
  when Module
@@ -78,6 +75,13 @@ module Tapioca
78
75
 
79
76
  sig { params(constant: Module).returns(String) }
80
77
  def type_for_constant(constant)
78
+ if constant.instance_methods.include?(:prepare)
79
+ prepare_method = constant.instance_method(:prepare)
80
+ prepare_signature = Runtime::Reflection.signature_of(prepare_method)
81
+
82
+ return prepare_signature.return_type&.to_s if valid_return_type?(prepare_signature&.return_type)
83
+ end
84
+
81
85
  Runtime::Reflection.qualified_name_of(constant) || "T.untyped"
82
86
  end
83
87
 
@@ -85,6 +89,11 @@ module Tapioca
85
89
  def has_replaceable_default?(argument)
86
90
  !!argument.replace_null_with_default? && !argument.default_value.nil?
87
91
  end
92
+
93
+ sig { params(return_type: T.nilable(T::Types::Base)).returns(T::Boolean) }
94
+ def valid_return_type?(return_type)
95
+ !!return_type && !(T::Private::Types::Void === return_type || T::Private::Types::NotTyped === return_type)
96
+ end
88
97
  end
89
98
  end
90
99
  end
@@ -11,7 +11,7 @@ module Tapioca
11
11
  sig { params(options: T::Hash[Symbol, T.untyped]).void }
12
12
  def set_environment(options) # rubocop:disable Naming/AccessorMethodName
13
13
  ENV["RAILS_ENV"] = ENV["RACK_ENV"] = options[:environment]
14
- ENV["RUBY_DEBUG_ENABLE"] = "0"
14
+ ENV["RUBY_DEBUG_LAZY"] = "1"
15
15
  end
16
16
  end
17
17
  end
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Tapioca
5
- VERSION = "0.11.12"
5
+ VERSION = "0.11.13"
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tapioca
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.12
4
+ version: 0.11.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ufuk Kayserilioglu
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: exe
13
13
  cert_chain: []
14
- date: 2023-11-08 00:00:00.000000000 Z
14
+ date: 2023-12-06 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler
@@ -293,7 +293,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
293
293
  - !ruby/object:Gem::Version
294
294
  version: '0'
295
295
  requirements: []
296
- rubygems_version: 3.4.21
296
+ rubygems_version: 3.4.22
297
297
  signing_key:
298
298
  specification_version: 4
299
299
  summary: A Ruby Interface file generator for gems, core types and the Ruby standard