tapioca 0.11.12 → 0.11.13

Sign up to get free protection for your applications and to get access to all the features.
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