tapioca 0.16.0 → 0.16.1

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: 3a448cd511151879e4eef761b28cc8f5b1904f0d57e560a38af09bdda9689f98
4
- data.tar.gz: 563c5e68f866444da629a4b206fed22b8a27531c36c0378d669886aa2a704eaf
3
+ metadata.gz: 02620ac27a54a716743952e003b0c4b3d8cfd8a1fe9ee580068007e570c0814a
4
+ data.tar.gz: 6901ae216ea51a7a92facf5c64e4de42262f7f86e79ebfa816c7a8b1ca9a5af1
5
5
  SHA512:
6
- metadata.gz: c847afeb5c173ad8b0c46a0f2fd214336150124fd96f0c729029ce492a5f4aea4bf5d26adfd64cf386486f22342b21f502cdbc52c68ca544a65c4bf6777dacee
7
- data.tar.gz: e25a62343cc4522d37e9508b4215f6efb9115b93e1e9ba38c71edf26da025126732b4762b834304d0e439c741d581f238e29e22dded9fcbf0415256041f8f849
6
+ metadata.gz: 443333835093464931be7bcbf54e9dfad0e2241f099cc06fbca54c54dca284ab84c246343110dca2e5a64eaeee5d0d006bf22b3d955be9f64160d63ae807aeeb
7
+ data.tar.gz: 375a7ee0697b44f807161819bbbe6907eb8ee6f5ae76e791c73da4f748bd26bf3a86bfa3b28a6589503020890621c73f27506928c26e6c2078981dfb556cc7a5
@@ -119,7 +119,14 @@ module Tapioca
119
119
  ) if @file_header
120
120
 
121
121
  rbi.root = Runtime::Trackers::Autoload.with_disabled_exits do
122
- Tapioca::Gem::Pipeline.new(gem, include_doc: @include_doc, include_loc: @include_loc).compile
122
+ Tapioca::Gem::Pipeline.new(
123
+ gem,
124
+ include_doc: @include_doc,
125
+ include_loc: @include_loc,
126
+ error_handler: ->(error) {
127
+ say_error(error, :bold, :red)
128
+ },
129
+ ).compile
123
130
  end
124
131
 
125
132
  merge_with_exported_rbi(gem, rbi) if @include_exported_rbis
@@ -1024,6 +1024,21 @@ module Tapioca
1024
1024
  end
1025
1025
  end
1026
1026
  end
1027
+
1028
+ # We are creating `#new` on the class itself since when called as `Model.new`
1029
+ # it doesn't allow for an array to be passed. If we kept it as a blanket it
1030
+ # would mean the passing any `T.untyped` value to the method would assume
1031
+ # the result is `T::Array` which is not the case majority of the time.
1032
+ model.create_method("new", class_method: true) do |method|
1033
+ method.add_opt_param("attributes", "nil")
1034
+ method.add_block_param("block")
1035
+
1036
+ method.add_sig do |sig|
1037
+ sig.add_param("attributes", "T.untyped")
1038
+ sig.add_param("block", "T.nilable(T.proc.params(object: #{constant_name}).void)")
1039
+ sig.return_type = constant_name
1040
+ end
1041
+ end
1027
1042
  end
1028
1043
 
1029
1044
  sig do
@@ -73,7 +73,7 @@ module Tapioca
73
73
  return unless method_owned_by_constant?(method, constant)
74
74
  return if @pipeline.symbol_in_payload?(symbol_name) && !@pipeline.method_in_gem?(method)
75
75
 
76
- signature = signature_of(method)
76
+ signature = lookup_signature_of(method)
77
77
  method = T.let(signature.method, UnboundMethod) if signature
78
78
 
79
79
  method_name = method.name.to_s
@@ -211,6 +211,18 @@ module Tapioca
211
211
  def ignore?(event)
212
212
  event.is_a?(Tapioca::Gem::ForeignScopeNodeAdded)
213
213
  end
214
+
215
+ sig { params(method: UnboundMethod).returns(T.untyped) }
216
+ def lookup_signature_of(method)
217
+ signature_of!(method)
218
+ rescue LoadError, StandardError => error
219
+ @pipeline.error_handler.call(<<~MSG)
220
+ Unable to compile signature for method: #{method.owner}##{method.name}
221
+ Exception raised when loading signature: #{error.inspect}
222
+ MSG
223
+
224
+ nil
225
+ end
214
226
  end
215
227
  end
216
228
  end
@@ -13,12 +13,28 @@ module Tapioca
13
13
  sig { returns(Gemfile::GemSpec) }
14
14
  attr_reader :gem
15
15
 
16
- sig { params(gem: Gemfile::GemSpec, include_doc: T::Boolean, include_loc: T::Boolean).void }
17
- def initialize(gem, include_doc: false, include_loc: false)
16
+ sig { returns(T.proc.params(error: String).void) }
17
+ attr_reader :error_handler
18
+
19
+ sig do
20
+ params(
21
+ gem: Gemfile::GemSpec,
22
+ error_handler: T.proc.params(error: String).void,
23
+ include_doc: T::Boolean,
24
+ include_loc: T::Boolean,
25
+ ).void
26
+ end
27
+ def initialize(
28
+ gem,
29
+ error_handler:,
30
+ include_doc: false,
31
+ include_loc: false
32
+ )
18
33
  @root = T.let(RBI::Tree.new, RBI::Tree)
19
34
  @gem = gem
20
35
  @seen = T.let(Set.new, T::Set[String])
21
36
  @alias_namespace = T.let(Set.new, T::Set[String])
37
+ @error_handler = error_handler
22
38
 
23
39
  @events = T.let([], T::Array[Gem::Event])
24
40
 
@@ -230,7 +230,7 @@ module Tapioca
230
230
  # The `eager_load_paths` method still exists, but doesn't return all paths anymore and causes Tapioca to miss some
231
231
  # engine paths. The following commit is the change:
232
232
  # https://github.com/rails/rails/commit/ebfca905db14020589c22e6937382e6f8f687664
233
- sig { params(engine: T.class_of(Rails::Engine)).returns(T::Array[String]) }
233
+ T::Sig::WithoutRuntime.sig { params(engine: T.class_of(Rails::Engine)).returns(T::Array[String]) }
234
234
  def eager_load_paths(engine)
235
235
  config = engine.config
236
236
 
@@ -41,7 +41,7 @@ module Tapioca
41
41
  @underlying_type = T.let(underlying_type, Module)
42
42
  end
43
43
 
44
- sig { params(obj: T.untyped).returns(T::Boolean) }
44
+ sig { override.params(obj: T.untyped).returns(T::Boolean) }
45
45
  def valid?(obj)
46
46
  obj.is_a?(@underlying_type)
47
47
  end
@@ -130,8 +130,13 @@ module Tapioca
130
130
  end
131
131
 
132
132
  sig { params(method: T.any(UnboundMethod, Method)).returns(T.untyped) }
133
- def signature_of(method)
133
+ def signature_of!(method)
134
134
  T::Utils.signature_for_method(method)
135
+ end
136
+
137
+ sig { params(method: T.any(UnboundMethod, Method)).returns(T.untyped) }
138
+ def signature_of(method)
139
+ signature_of!(method)
135
140
  rescue LoadError, StandardError
136
141
  nil
137
142
  end
@@ -65,7 +65,7 @@ module Tapioca
65
65
 
66
66
  private
67
67
 
68
- sig { returns(T::Array[T.class_of(Rails::Engine)]) }
68
+ T::Sig::WithoutRuntime.sig { returns(T::Array[T.class_of(Rails::Engine)]) }
69
69
  def engines
70
70
  @engines ||= T.let(
71
71
  if Object.const_defined?("Rails::Engine")
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Tapioca
5
- VERSION = "0.16.0"
5
+ VERSION = "0.16.1"
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.16.0
4
+ version: 0.16.1
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: 2024-08-06 00:00:00.000000000 Z
14
+ date: 2024-08-15 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler
@@ -290,7 +290,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
290
290
  - !ruby/object:Gem::Version
291
291
  version: '0'
292
292
  requirements: []
293
- rubygems_version: 3.5.16
293
+ rubygems_version: 3.5.17
294
294
  signing_key:
295
295
  specification_version: 4
296
296
  summary: A Ruby Interface file generator for gems, core types and the Ruby standard