tapioca 0.7.2 → 0.7.3

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: 8e91a1bbe5ebcaf20ba9eef68ab2771424d8c4918f6a4e142f35980ac347e151
4
- data.tar.gz: d65e59b181163aadce492d737c148486d847fcc799fd0206ca7dad865098cdb9
3
+ metadata.gz: 1b06e8ec67c72db19639c21a8a123ecbe7c3c58ad27eb8956d6e3772cb68dc1e
4
+ data.tar.gz: e8c0bb1073cc08c2fc9d7eea7b523ebe1bc87e7f162c0413e2f0f29be67481c4
5
5
  SHA512:
6
- metadata.gz: b9a1e46d7097ebc4cac468b8fa6e9296d9ba1567c37504f4084ed6cda3b070009839156615499860d86e7a2e4e04436f93e6baa5711ca1569f7104033ee9202d
7
- data.tar.gz: d1ebc6209ccf853eacd7f4e166e9ebc3a55e03a906febd9e3dfd6e10aac326c742bfad133b29b034ab73a7b8610be25b44a22b8939b9f54dba510226e9c7cad2
6
+ metadata.gz: fd44669e05b95b61ea62c3c5e7a640bc664a036418d66fad6734065caadaa52ec545408376d4e9ada732d2a976dc599b92fc374ec53ad2a1ffa247adee989acd
7
+ data.tar.gz: 8f6e3a4223c42f9271321b31c8f26199a9b371865041f3455b3e3350e356adaf0eca2c5d83bcec9e0247f76ed0434c1b93627e19f8c3d10893e084e5c88f7d3e
@@ -21,47 +21,33 @@ module T
21
21
  Tapioca::Runtime::GenericTypeRegistry.register_type(constant, types)
22
22
  end
23
23
 
24
- def type_member(variance = :invariant, fixed: nil, lower: nil, upper: nil, &blk)
24
+ def type_member(variance = :invariant, fixed: nil, lower: nil, upper: nil, &bounds_proc)
25
25
  # `T::Generic#type_member` just instantiates a `T::Type::TypeMember` instance and returns it.
26
26
  # We use that when registering the type member and then later return it from this method.
27
- hash = if blk
28
- blk.call
29
- else
30
- {
31
- fixed: fixed,
32
- lower: lower,
33
- upper: upper,
34
- }
35
- end
36
-
37
27
  Tapioca::TypeVariableModule.new(
38
28
  T.cast(self, Module),
39
29
  Tapioca::TypeVariableModule::Type::Member,
40
30
  variance,
41
- **hash,
31
+ fixed,
32
+ lower,
33
+ upper,
34
+ bounds_proc
42
35
  ).tap do |type_variable|
43
36
  Tapioca::Runtime::GenericTypeRegistry.register_type_variable(self, type_variable)
44
37
  end
45
38
  end
46
39
 
47
- def type_template(variance = :invariant, fixed: nil, lower: nil, upper: nil, &blk)
40
+ def type_template(variance = :invariant, fixed: nil, lower: nil, upper: nil, &bounds_proc)
48
41
  # `T::Generic#type_template` just instantiates a `T::Type::TypeTemplate` instance and returns it.
49
42
  # We use that when registering the type template and then later return it from this method.
50
- hash = if blk
51
- blk.call
52
- else
53
- {
54
- fixed: fixed,
55
- lower: lower,
56
- upper: upper,
57
- }
58
- end
59
-
60
43
  Tapioca::TypeVariableModule.new(
61
44
  T.cast(self, Module),
62
45
  Tapioca::TypeVariableModule::Type::Template,
63
46
  variance,
64
- **hash,
47
+ fixed,
48
+ lower,
49
+ upper,
50
+ bounds_proc
65
51
  ).tap do |type_variable|
66
52
  Tapioca::Runtime::GenericTypeRegistry.register_type_variable(self, type_variable)
67
53
  end
@@ -136,18 +122,31 @@ module Tapioca
136
122
  end
137
123
  end
138
124
 
125
+ # rubocop:disable Metrics/ParameterLists
139
126
  sig do
140
- params(context: Module, type: Type, variance: Symbol, fixed: T.untyped, lower: T.untyped, upper: T.untyped).void
127
+ params(
128
+ context: Module,
129
+ type: Type,
130
+ variance: Symbol,
131
+ fixed: T.untyped,
132
+ lower: T.untyped,
133
+ upper: T.untyped,
134
+ bounds_proc: T.nilable(T.proc.returns(T::Hash[Symbol, T.untyped]))
135
+ ).void
141
136
  end
142
- def initialize(context, type, variance, fixed: nil, lower: nil, upper: nil)
137
+ def initialize(context, type, variance, fixed, lower, upper, bounds_proc)
143
138
  @context = context
144
139
  @type = type
145
140
  @variance = variance
146
- @fixed = fixed
147
- @lower = lower
148
- @upper = upper
141
+ @bounds_proc = if bounds_proc
142
+ bounds_proc
143
+ else
144
+ build_bounds_proc(fixed, lower, upper)
145
+ end
146
+
149
147
  super()
150
148
  end
149
+ # rubocop:enable Metrics/ParameterLists
151
150
 
152
151
  sig { returns(T.nilable(String)) }
153
152
  def name
@@ -170,9 +169,10 @@ module Tapioca
170
169
 
171
170
  sig { returns(String) }
172
171
  def serialize
173
- fixed = @fixed.to_s if @fixed
174
- upper = @upper.to_s if @upper
175
- lower = @lower.to_s if @lower
172
+ bounds = @bounds_proc.call
173
+ fixed = bounds[:fixed].to_s if bounds.key?(:fixed)
174
+ lower = bounds[:lower].to_s if bounds.key?(:lower)
175
+ upper = bounds[:upper].to_s if bounds.key?(:upper)
176
176
 
177
177
  TypeVariableHelper.serialize_type_variable(
178
178
  @type.serialize,
@@ -190,6 +190,19 @@ module Tapioca
190
190
 
191
191
  private
192
192
 
193
+ sig do
194
+ params(fixed: T.untyped, lower: T.untyped, upper: T.untyped)
195
+ .returns(T.proc.returns(T::Hash[Symbol, T.untyped]))
196
+ end
197
+ def build_bounds_proc(fixed, lower, upper)
198
+ bounds = {}
199
+ bounds[:fixed] = fixed unless fixed.nil?
200
+ bounds[:lower] = lower unless lower.nil?
201
+ bounds[:upper] = upper unless upper.nil?
202
+
203
+ -> { bounds }
204
+ end
205
+
193
206
  sig do
194
207
  type_parameters(:Result)
195
208
  .params(block: T.proc.returns(T.type_parameter(:Result)))
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Tapioca
5
- VERSION = "0.7.2"
5
+ VERSION = "0.7.3"
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.7.2
4
+ version: 0.7.3
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: 2022-04-29 00:00:00.000000000 Z
14
+ date: 2022-05-30 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler