steep 1.7.0.dev.2 → 1.7.0.dev.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +10 -12
  3. data/gemfile_steep/Gemfile.lock +8 -10
  4. data/lib/steep/ast/types/helper.rb +4 -0
  5. data/lib/steep/ast/types/intersection.rb +7 -0
  6. data/lib/steep/ast/types/record.rb +7 -0
  7. data/lib/steep/ast/types/tuple.rb +7 -0
  8. data/lib/steep/ast/types/union.rb +7 -0
  9. data/lib/steep/drivers/stats.rb +2 -2
  10. data/lib/steep/drivers/validate.rb +4 -2
  11. data/lib/steep/expectations.rb +2 -2
  12. data/lib/steep/interface/builder.rb +336 -360
  13. data/lib/steep/interface/function.rb +69 -6
  14. data/lib/steep/interface/method_type.rb +3 -3
  15. data/lib/steep/interface/shape.rb +69 -18
  16. data/lib/steep/interface/substitution.rb +4 -0
  17. data/lib/steep/node_helper.rb +18 -1
  18. data/lib/steep/services/completion_provider.rb +19 -17
  19. data/lib/steep/services/signature_help_provider.rb +6 -9
  20. data/lib/steep/subtyping/check.rb +4 -16
  21. data/lib/steep/test.rb +9 -0
  22. data/lib/steep/type_construction.rb +13 -9
  23. data/lib/steep/type_inference/block_params.rb +11 -3
  24. data/lib/steep/type_inference/context.rb +1 -1
  25. data/lib/steep/type_inference/logic_type_interpreter.rb +1 -1
  26. data/lib/steep/version.rb +1 -1
  27. data/lib/steep.rb +11 -7
  28. data/sig/steep/ast/types/helper.rbs +2 -0
  29. data/sig/steep/ast/types/intersection.rbs +2 -0
  30. data/sig/steep/ast/types/name.rbs +4 -0
  31. data/sig/steep/ast/types/record.rbs +2 -0
  32. data/sig/steep/ast/types/tuple.rbs +2 -0
  33. data/sig/steep/ast/types/union.rbs +2 -0
  34. data/sig/steep/expectations.rbs +1 -1
  35. data/sig/steep/interface/block.rbs +2 -2
  36. data/sig/steep/interface/builder.rbs +94 -108
  37. data/sig/steep/interface/function.rbs +34 -29
  38. data/sig/steep/interface/shape.rbs +23 -4
  39. data/sig/steep/interface/substitution.rbs +2 -0
  40. data/sig/steep/node_helper.rbs +11 -0
  41. data/sig/steep/services/signature_help_provider.rbs +2 -0
  42. data/sig/steep/subtyping/constraints.rbs +2 -2
  43. data/sig/steep/type_construction.rbs +1 -1
  44. data/sig/steep/type_inference/block_params.rbs +2 -2
  45. data/sig/steep/type_inference/context.rbs +2 -0
  46. data/sig/steep.rbs +1 -1
  47. metadata +3 -2
@@ -163,71 +163,93 @@ module Steep
163
163
 
164
164
  case
165
165
  when x.is_a?(Required) && y.is_a?(Required)
166
+ xs or raise
167
+ ys or raise
166
168
  required(
167
169
  union(x.type, y.type),
168
170
  merge_for_overload(xs.tail, ys.tail)
169
171
  )
170
172
  when x.is_a?(Required) && y.is_a?(Optional)
173
+ xs or raise
174
+ ys or raise
171
175
  optional(
172
176
  union(x.type, y.type, null: true),
173
177
  merge_for_overload(xs.tail, ys.tail)
174
178
  )
175
179
  when x.is_a?(Required) && y.is_a?(Rest)
180
+ xs or raise
181
+ ys or raise
176
182
  optional(
177
183
  union(x.type, y.type, null: true),
178
184
  merge_for_overload(xs.tail, ys)
179
185
  )
180
186
  when x.is_a?(Required) && !y
187
+ xs or raise
181
188
  optional(
182
189
  union(x.type, null: true),
183
190
  merge_for_overload(xs.tail, nil)
184
191
  )
185
192
  when x.is_a?(Optional) && y.is_a?(Required)
193
+ xs or raise
194
+ ys or raise
186
195
  optional(
187
196
  union(x.type, y.type, null: true),
188
197
  merge_for_overload(xs.tail, ys.tail)
189
198
  )
190
199
  when x.is_a?(Optional) && y.is_a?(Optional)
200
+ xs or raise
201
+ ys or raise
191
202
  optional(
192
203
  union(x.type, y.type),
193
204
  merge_for_overload(xs.tail, ys.tail)
194
205
  )
195
206
  when x.is_a?(Optional) && y.is_a?(Rest)
207
+ xs or raise
208
+ ys or raise
196
209
  optional(
197
210
  union(x.type, y.type),
198
211
  merge_for_overload(xs.tail, ys)
199
212
  )
200
213
  when x.is_a?(Optional) && !y
214
+ xs or raise
201
215
  optional(
202
216
  x.type,
203
217
  merge_for_overload(xs.tail, nil)
204
218
  ) # == xs
205
219
  when x.is_a?(Rest) && y.is_a?(Required)
220
+ xs or raise
221
+ ys or raise
206
222
  optional(
207
223
  union(x.type, y.type, null: true),
208
224
  merge_for_overload(xs, ys.tail)
209
225
  )
210
226
  when x.is_a?(Rest) && y.is_a?(Optional)
227
+ xs or raise
228
+ ys or raise
211
229
  optional(
212
230
  union(x.type, y.type),
213
231
  merge_for_overload(xs, ys.tail)
214
232
  )
215
233
  when x.is_a?(Rest) && y.is_a?(Rest)
234
+ xs or raise
235
+ ys or raise
216
236
  rest(union(x.type, y.type))
217
237
  when x.is_a?(Rest) && !y
218
- xs
238
+ xs or raise
219
239
  when !x && y.is_a?(Required)
240
+ ys or raise
220
241
  optional(
221
242
  union(y.type, null: true),
222
243
  merge_for_overload(nil, ys.tail)
223
244
  )
224
245
  when !x && y.is_a?(Optional)
246
+ ys or raise
225
247
  optional(
226
248
  y.type,
227
249
  merge_for_overload(nil, ys.tail)
228
250
  ) # == ys
229
251
  when !x && y.is_a?(Rest)
230
- ys
252
+ ys or raise
231
253
  when !x && !y
232
254
  nil
233
255
  end
@@ -240,26 +262,34 @@ module Steep
240
262
 
241
263
  case
242
264
  when x.is_a?(Required) && y.is_a?(Required)
265
+ xs or raise
266
+ ys or raise
243
267
  required(
244
268
  union(x.type, y.type),
245
269
  merge_for_union(xs.tail, ys.tail)
246
270
  )
247
271
  when x.is_a?(Required) && !y
272
+ xs or raise
248
273
  optional(
249
274
  x.type,
250
275
  merge_for_union(xs.tail, nil)
251
276
  )
252
277
  when x.is_a?(Required) && y.is_a?(Optional)
278
+ xs or raise
279
+ ys or raise
253
280
  optional(
254
281
  union(x.type, y.type),
255
282
  merge_for_union(xs.tail, ys.tail)
256
283
  )
257
284
  when x.is_a?(Required) && y.is_a?(Rest)
285
+ xs or raise
286
+ ys or raise
258
287
  optional(
259
288
  union(x.type, y.type),
260
289
  merge_for_union(xs.tail, ys)
261
290
  )
262
291
  when !x && y.is_a?(Required)
292
+ ys or raise
263
293
  optional(
264
294
  y.type,
265
295
  merge_for_union(nil, ys.tail)
@@ -267,39 +297,53 @@ module Steep
267
297
  when !x && !y
268
298
  nil
269
299
  when !x && y.is_a?(Optional)
300
+ ys or raise
270
301
  PositionalParams.new(head: y, tail: merge_for_union(nil, ys.tail))
271
302
  when !x && y.is_a?(Rest)
272
- ys
303
+ ys or raise
273
304
  when x.is_a?(Optional) && y.is_a?(Required)
305
+ xs or raise
306
+ ys or raise
274
307
  optional(
275
308
  union(x.type, y.type),
276
309
  merge_for_union(xs.tail, ys.tail)
277
310
  )
278
311
  when x.is_a?(Optional) && !y
312
+ xs or raise
279
313
  PositionalParams.new(head: x, tail: merge_for_union(xs.tail, nil)) # == xs
280
314
  when x.is_a?(Optional) && y.is_a?(Optional)
315
+ xs or raise
316
+ ys or raise
281
317
  optional(
282
318
  union(x.type, y.type),
283
319
  merge_for_union(xs.tail, ys.tail)
284
320
  )
285
321
  when x.is_a?(Optional) && y.is_a?(Rest)
322
+ xs or raise
323
+ ys or raise
286
324
  optional(
287
325
  union(x.type, y.type),
288
326
  merge_for_union(xs.tail, ys.tail)
289
327
  )
290
328
  when x.is_a?(Rest) && y.is_a?(Required)
329
+ xs or raise
330
+ ys or raise
291
331
  optional(
292
332
  union(x.type, y.type),
293
333
  merge_for_union(xs, ys.tail)
294
334
  )
295
335
  when x.is_a?(Rest) && !y
296
- xs
336
+ xs or raise
297
337
  when x.is_a?(Rest) && y.is_a?(Optional)
338
+ xs or raise
339
+ ys or raise
298
340
  optional(
299
341
  union(x.type, y.type),
300
342
  merge_for_union(xs, ys.tail)
301
343
  )
302
344
  when x.is_a?(Rest) && y.is_a?(Rest)
345
+ xs or raise
346
+ ys or raise
303
347
  rest(
304
348
  union(x.type, y.type)
305
349
  )
@@ -315,6 +359,8 @@ module Steep
315
359
 
316
360
  case
317
361
  when x.is_a?(Required) && y.is_a?(Required)
362
+ xs or raise
363
+ ys or raise
318
364
  required(
319
365
  intersection(x.type, y.type),
320
366
  merge_for_intersection(xs.tail, ys.tail)
@@ -322,11 +368,15 @@ module Steep
322
368
  when x.is_a?(Required) && !y
323
369
  raise
324
370
  when x.is_a?(Required) && y.is_a?(Optional)
371
+ xs or raise
372
+ ys or raise
325
373
  required(
326
374
  intersection(x.type, y.type),
327
375
  merge_for_intersection(xs.tail, ys.tail)
328
376
  )
329
377
  when x.is_a?(Required) && y.is_a?(Rest)
378
+ xs or raise
379
+ ys or raise
330
380
  required(
331
381
  intersection(x.type, y.type),
332
382
  merge_for_intersection(xs.tail, ys)
@@ -340,6 +390,8 @@ module Steep
340
390
  when !x && y.is_a?(Rest)
341
391
  nil
342
392
  when x.is_a?(Optional) && y.is_a?(Required)
393
+ xs or raise
394
+ ys or raise
343
395
  required(
344
396
  intersection(x.type, y.type),
345
397
  merge_for_intersection(xs.tail, ys.tail)
@@ -347,16 +399,22 @@ module Steep
347
399
  when x.is_a?(Optional) && !y
348
400
  nil
349
401
  when x.is_a?(Optional) && y.is_a?(Optional)
402
+ xs or raise
403
+ ys or raise
350
404
  optional(
351
405
  intersection(x.type, y.type),
352
406
  merge_for_intersection(xs.tail, ys.tail)
353
407
  )
354
408
  when x.is_a?(Optional) && y.is_a?(Rest)
409
+ xs or raise
410
+ ys or raise
355
411
  optional(
356
412
  intersection(x.type, y.type),
357
413
  merge_for_intersection(xs.tail, ys)
358
414
  )
359
415
  when x.is_a?(Rest) && y.is_a?(Required)
416
+ xs or raise
417
+ ys or raise
360
418
  required(
361
419
  intersection(x.type, y.type),
362
420
  merge_for_intersection(xs, ys.tail)
@@ -364,6 +422,8 @@ module Steep
364
422
  when x.is_a?(Rest) && !y
365
423
  nil
366
424
  when x.is_a?(Rest) && y.is_a?(Optional)
425
+ xs or raise
426
+ ys or raise
367
427
  optional(
368
428
  intersection(x.type, y.type),
369
429
  merge_for_intersection(xs, ys.tail)
@@ -705,6 +765,8 @@ module Steep
705
765
  return param.type
706
766
  end
707
767
  end
768
+
769
+ nil
708
770
  end
709
771
 
710
772
  attr_reader :positional_params
@@ -836,7 +898,7 @@ module Steep
836
898
  end
837
899
 
838
900
  def closed?
839
- each_type.all?(&:closed?)
901
+ each_type.all? { _1.free_variables.empty? }
840
902
  end
841
903
 
842
904
  def subst(s)
@@ -945,6 +1007,7 @@ module Steep
945
1007
 
946
1008
  def free_variables
947
1009
  @fvs ||= Set[].tap do |fvs|
1010
+ # @type var fvs: Set[AST::Types::variable]
948
1011
  fvs.merge(params.free_variables)
949
1012
  fvs.merge(return_type.free_variables)
950
1013
  end
@@ -999,7 +1062,7 @@ module Steep
999
1062
  end
1000
1063
 
1001
1064
  def closed?
1002
- params.closed? && return_type.closed?
1065
+ params.closed? && return_type.free_variables.empty?
1003
1066
  end
1004
1067
  end
1005
1068
  end
@@ -192,10 +192,10 @@ module Steep
192
192
  type2_ = type2.instantiate(s2)
193
193
  if mt = generate[type1_, type2_]
194
194
  check.push_variable_bounds(params1 + params2) do
195
- variables = type1.type_params.map(&:name) + type2.type_params.map(&:name)
196
- constraints = Subtyping::Constraints.new(unknowns: variables)
195
+ variables = type1.type_params.map(&:name) + type2.type_params.map(&:name)
196
+ constraints = Subtyping::Constraints.new(unknowns: variables)
197
197
 
198
- check.with_context(self_type: AST::Builtin.any_type, instance_type: AST::Builtin.any_type, class_type: AST::Builtin.any_type, constraints: constraints) do
198
+ check.with_context(self_type: AST::Builtin.any_type, instance_type: AST::Builtin.any_type, class_type: AST::Builtin.any_type, constraints: constraints) do
199
199
  result1 = check.check_method_type(:__method_on_type1, relation[type1.with(type_params: []), mt])
200
200
  result2 = check.check_method_type(:__method_on_type2, relation[type2.with(type_params: []), mt])
201
201
 
@@ -2,14 +2,43 @@ module Steep
2
2
  module Interface
3
3
  class Shape
4
4
  class Entry
5
- attr_reader :method_types
6
-
7
- def initialize(method_types:)
5
+ def initialize(method_types: nil, private_method:, &block)
8
6
  @method_types = method_types
7
+ @generator = block
8
+ @private_method = private_method
9
+ end
10
+
11
+ def force
12
+ unless @method_types
13
+ @method_types = @generator&.call
14
+ @generator = nil
15
+ end
16
+ end
17
+
18
+ def method_types
19
+ force
20
+ @method_types or raise
21
+ end
22
+
23
+ def has_method_type?
24
+ force
25
+ @method_types ? true : false
9
26
  end
10
27
 
11
28
  def to_s
12
- "{ #{method_types.join(" || ")} }"
29
+ if @generator
30
+ "<< Lazy entry >>"
31
+ else
32
+ "{ #{method_types.join(" || ")} }"
33
+ end
34
+ end
35
+
36
+ def private_method?
37
+ @private_method
38
+ end
39
+
40
+ def public_method?
41
+ !private_method?
13
42
  end
14
43
  end
15
44
 
@@ -25,7 +54,11 @@ module Steep
25
54
  end
26
55
 
27
56
  def key?(name)
28
- methods.key?(name)
57
+ if entry = methods.fetch(name, nil)
58
+ entry.has_method_type?
59
+ else
60
+ false
61
+ end
29
62
  end
30
63
 
31
64
  def []=(name, entry)
@@ -37,10 +70,12 @@ module Steep
37
70
  return nil unless key?(name)
38
71
 
39
72
  resolved_methods[name] ||= begin
73
+ entry = methods[name]
40
74
  Entry.new(
41
- method_types: methods[name].method_types.map do |method_type|
75
+ method_types: entry.method_types.map do |method_type|
42
76
  method_type.subst(subst)
43
- end
77
+ end,
78
+ private_method: entry.private_method?
44
79
  )
45
80
  end
46
81
  end
@@ -48,7 +83,7 @@ module Steep
48
83
  def each(&block)
49
84
  if block
50
85
  methods.each_key do |name|
51
- entry = self[name] or raise
86
+ entry = self[name] or next
52
87
  yield [name, entry]
53
88
  end
54
89
  else
@@ -58,7 +93,9 @@ module Steep
58
93
 
59
94
  def each_name(&block)
60
95
  if block
61
- methods.each_key(&block)
96
+ each do |name, _|
97
+ yield name
98
+ end
62
99
  else
63
100
  enum_for :each_name
64
101
  end
@@ -76,19 +113,21 @@ module Steep
76
113
  Methods.new(substs: [*substs, subst], methods: methods)
77
114
  end
78
115
 
79
- def merge!(other)
116
+ def merge!(other, &block)
80
117
  other.each do |name, entry|
81
- methods[name] = entry
118
+ if block && (old_entry = methods[name])
119
+ methods[name] = yield(name, old_entry, entry)
120
+ else
121
+ methods[name] = entry
122
+ end
82
123
  end
83
124
  end
84
125
 
85
- def +(other)
86
- methods = Methods.new(substs: [], methods: {})
87
-
88
- methods.merge!(self)
89
- methods.merge!(other)
90
-
91
- methods
126
+ def public_methods
127
+ Methods.new(
128
+ substs: substs,
129
+ methods: methods.reject {|_, entry| entry.private_method? }
130
+ )
92
131
  end
93
132
  end
94
133
 
@@ -127,6 +166,18 @@ module Steep
127
166
  def public?
128
167
  !private?
129
168
  end
169
+
170
+ def public_shape
171
+ if public?
172
+ self
173
+ else
174
+ @public_shape ||= Shape.new(
175
+ type: type,
176
+ private: false,
177
+ methods: methods.public_methods
178
+ )
179
+ end
180
+ end
130
181
  end
131
182
  end
132
183
  end
@@ -138,6 +138,10 @@ module Steep
138
138
  self
139
139
  end
140
140
 
141
+ def update(self_type: self_type(), instance_type: instance_type(), module_type: module_type())
142
+ Substitution.new(dictionary: dictionary.dup, instance_type: instance_type, self_type: self_type, module_type: module_type)
143
+ end
144
+
141
145
  def merge(s)
142
146
  Substitution.new(dictionary: dictionary.dup,
143
147
  instance_type: instance_type,
@@ -207,7 +207,7 @@ module Steep
207
207
  end
208
208
 
209
209
  def deconstruct_send_node!(node)
210
- deconstruct_send_node(node) or raise
210
+ deconstruct_send_node(node) or raise(node.inspect)
211
211
  end
212
212
 
213
213
  def test_send_node(node)
@@ -218,6 +218,23 @@ module Steep
218
218
  end
219
219
  end
220
220
 
221
+ def private_send?(node)
222
+ case node.type
223
+ when :block, :numblock
224
+ private_send?(node.children[0])
225
+ when :send, :csend
226
+ receiver, = deconstruct_send_node!(node)
227
+
228
+ if receiver && receiver.type != :self
229
+ return false
230
+ end
231
+
232
+ true
233
+ else
234
+ raise "Unexpected node is given: #{node.inspect}"
235
+ end
236
+ end
237
+
221
238
  def deconstruct_sendish_and_block_nodes(*nodes)
222
239
  send_node, block_node = nodes.take(2)
223
240
 
@@ -611,18 +611,21 @@ module Steep
611
611
  range = range_for(position, prefix: prefix)
612
612
  context = typing.context_at(line: position.line, column: position.column)
613
613
 
614
- shape = subtyping.builder.shape(
615
- type,
616
- public_only: !include_private,
617
- config: Interface::Builder::Config.new(
618
- self_type: context.self_type,
619
- class_type: context.module_context&.module_type,
620
- instance_type: context.module_context&.instance_type,
621
- variable_bounds: context.variable_context.upper_bounds
622
- )
623
- )
614
+ config =
615
+ if (module_type = context.module_context&.module_type) && (instance_type = context.module_context&.instance_type)
616
+ Interface::Builder::Config.new(
617
+ self_type: context.self_type,
618
+ class_type: module_type,
619
+ instance_type: instance_type,
620
+ variable_bounds: context.variable_context.upper_bounds
621
+ )
622
+ else
623
+ Interface::Builder::Config.new(self_type: context.self_type, variable_bounds: context.variable_context.upper_bounds)
624
+ end
625
+
626
+ if shape = subtyping.builder.shape(type, config)
627
+ shape = shape.public_shape unless include_private
624
628
 
625
- if shape
626
629
  shape.methods.each do |name, method_entry|
627
630
  next if disallowed_method?(name)
628
631
 
@@ -728,13 +731,12 @@ module Steep
728
731
 
729
732
  case call
730
733
  when TypeInference::MethodCall::Typed, TypeInference::MethodCall::Error
734
+ context = typing.context_at(line: position.line, column: position.column)
731
735
  type = call.receiver_type
732
- shape = subtyping.builder.shape(
733
- type,
734
- public_only: !!receiver_node,
735
- config: Interface::Builder::Config.new(self_type: type, class_type: nil, instance_type: nil, variable_bounds: {})
736
- )
737
- if shape
736
+
737
+ config = Interface::Builder::Config.new(self_type: type, variable_bounds: context.variable_context.upper_bounds)
738
+ if shape = subtyping.builder.shape(type, config)
739
+ shape = shape.public_shape if private_send?(call_node)
738
740
  if method = shape.methods[call.method_name]
739
741
  method.method_types.each.with_index do |method_type, i|
740
742
  defn = method_type.method_decls.to_a[0]&.method_def
@@ -19,6 +19,8 @@ module Steep
19
19
  end
20
20
  end
21
21
 
22
+ include NodeHelper
23
+
22
24
  attr_reader :source, :path, :subtyping, :typing, :buffer
23
25
 
24
26
  def env
@@ -103,16 +105,11 @@ module Steep
103
105
  case call
104
106
  when MethodCall::Typed, MethodCall::Error
105
107
  type = call.receiver_type
106
- if type.is_a?(AST::Types::Self)
107
- type = context.self_type
108
- end
108
+ config = Interface::Builder::Config.new(self_type: context.self_type, variable_bounds: context.variable_context.upper_bounds)
109
+
110
+ if shape = subtyping.builder.shape(type, config)
111
+ shape = shape.public_shape if private_send?(node)
109
112
 
110
- shape = subtyping.builder.shape(
111
- type,
112
- public_only: !node.children[0].nil?,
113
- config: Interface::Builder::Config.new(self_type: type, class_type: nil, instance_type: nil, variable_bounds: {})
114
- )
115
- if shape
116
113
  if method = shape.methods[call.method_name]
117
114
  method.method_types.each.with_index do |method_type, i|
118
115
  defn = method_type.method_decls.to_a[0]&.method_def
@@ -410,14 +410,8 @@ module Steep
410
410
  relation.map {|type|
411
411
  builder.shape(
412
412
  type,
413
- public_only: true,
414
- config: Interface::Builder::Config.new(
415
- self_type: type,
416
- instance_type: instance_type,
417
- class_type: class_type,
418
- variable_bounds: variable_upper_bounds
419
- )
420
- ) or return Failure(relation, Result::Failure::UnknownPairError.new(relation: relation))
413
+ Interface::Builder::Config.new(self_type: type, variable_bounds: variable_upper_bounds)
414
+ )&.public_shape() or return Failure(relation, Result::Failure::UnknownPairError.new(relation: relation))
421
415
  }
422
416
  )
423
417
  end
@@ -530,14 +524,8 @@ module Steep
530
524
  relation.map {|type|
531
525
  builder.shape(
532
526
  type,
533
- public_only: true,
534
- config: Interface::Builder::Config.new(
535
- self_type: type,
536
- instance_type: instance_type,
537
- class_type: class_type,
538
- variable_bounds: variable_upper_bounds
539
- )
540
- ) or raise
527
+ Interface::Builder::Config.new(self_type: type, variable_bounds: variable_upper_bounds)
528
+ )&.public_shape or raise
541
529
  }
542
530
  )
543
531
  end
data/lib/steep/test.rb ADDED
@@ -0,0 +1,9 @@
1
+ Steep.logger.warn(true)
2
+
3
+ # class Steep::Subtyping::Result::All
4
+ # def add(*relations)
5
+ # rel = relations[0] # Relation[T] < Relation::_Subject
6
+ # yield rel # Relation[T] < Relation[_Subject]
7
+ # true
8
+ # end
9
+ # end
@@ -878,6 +878,7 @@ module Steep
878
878
  if self_type && method_context!.method
879
879
  if super_def = method_context!.super_method
880
880
  super_method = Interface::Shape::Entry.new(
881
+ private_method: true,
881
882
  method_types: super_def.defs.map {|type_def|
882
883
  decl = TypeInference::MethodCall::MethodDecl.new(
883
884
  method_name: InstanceMethodName.new(
@@ -1812,7 +1813,7 @@ module Steep
1812
1813
  .for_branch(right_node)
1813
1814
  .synthesize(right_node, hint: left_truthy.type, condition: true).to_ary
1814
1815
 
1815
- right_truthy, right_falsy = interpreter.eval(env: left_falsy.env, node: right_node)
1816
+ right_truthy, right_falsy = interpreter.eval(env: right_context.type_env, node: right_node)
1816
1817
 
1817
1818
  case
1818
1819
  when left_falsy.unreachable
@@ -2611,6 +2612,7 @@ module Steep
2611
2612
  end
2612
2613
  end
2613
2614
  rescue RBS::BaseError => exn
2615
+ Steep.logger.warn("hello")
2614
2616
  Steep.logger.warn { "Unexpected RBS error: #{exn.message}" }
2615
2617
  exn.backtrace&.each {|loc| Steep.logger.warn " #{loc}" }
2616
2618
  typing.add_error(Diagnostic::Ruby::UnexpectedError.new(node: node, error: exn))
@@ -3431,16 +3433,16 @@ module Steep
3431
3433
  self_type: self_type,
3432
3434
  class_type: module_context.module_type,
3433
3435
  instance_type: module_context.instance_type,
3434
- variable_bounds: variable_context.upper_bounds
3436
+ variable_bounds: context.variable_context.upper_bounds
3435
3437
  )
3436
3438
  end
3437
3439
 
3438
3440
  def calculate_interface(type, method_name = nil, private:)
3439
- shape = checker.builder.shape(
3440
- type,
3441
- public_only: !private,
3442
- config: builder_config
3443
- )
3441
+ shape = checker.builder.shape(type, builder_config)
3442
+
3443
+ unless private
3444
+ shape = shape&.public_shape
3445
+ end
3444
3446
 
3445
3447
  if method_name
3446
3448
  if shape
@@ -4349,7 +4351,7 @@ module Steep
4349
4351
  def for_block(body_node, block_params:, block_param_hint:, block_type_hint:, block_block_hint:, block_annotations:, node_type_hint:, block_self_hint:)
4350
4352
  block_param_pairs = block_param_hint && block_params.zip(block_param_hint, block_block_hint, factory: checker.factory)
4351
4353
 
4352
- # @type var param_types_hash: Hash[Symbol, AST::Types::t]
4354
+ # @type var param_types_hash: Hash[Symbol?, AST::Types::t]
4353
4355
  param_types_hash = {}
4354
4356
  if block_param_pairs
4355
4357
  block_param_pairs.each do |param, type|
@@ -4384,10 +4386,12 @@ module Steep
4384
4386
  end
4385
4387
  end
4386
4388
 
4387
- param_types_hash.delete_if {|name, _| SPECIAL_LVAR_NAMES.include?(name) }
4389
+ param_types_hash.delete_if {|name, _| name && SPECIAL_LVAR_NAMES.include?(name) }
4388
4390
 
4389
4391
  param_types = param_types_hash.each.with_object({}) do |pair, hash| #$ Hash[Symbol, [AST::Types::t, AST::Types::t?]]
4390
4392
  name, type = pair
4393
+ # skip unamed arguments `*`, `**` and `&`
4394
+ next if name.nil?
4391
4395
  hash[name] = [type, nil]
4392
4396
  end
4393
4397