steep 1.1.1 → 1.2.0.pre.1

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.
Files changed (140) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -0
  3. data/Gemfile +0 -1
  4. data/Gemfile.lock +12 -11
  5. data/Gemfile.steep +1 -1
  6. data/Gemfile.steep.lock +9 -9
  7. data/README.md +3 -3
  8. data/Steepfile +23 -0
  9. data/bin/steep-prof +2 -1
  10. data/lib/steep/annotation_parser.rb +1 -1
  11. data/lib/steep/ast/types/class.rb +4 -0
  12. data/lib/steep/ast/types/factory.rb +86 -602
  13. data/lib/steep/ast/types/instance.rb +4 -0
  14. data/lib/steep/ast/types/literal.rb +1 -1
  15. data/lib/steep/ast/types/proc.rb +22 -8
  16. data/lib/steep/ast/types/self.rb +4 -0
  17. data/lib/steep/ast/types/union.rb +1 -1
  18. data/lib/steep/cli.rb +24 -1
  19. data/lib/steep/diagnostic/ruby.rb +17 -22
  20. data/lib/steep/drivers/checkfile.rb +205 -0
  21. data/lib/steep/drivers/validate.rb +3 -1
  22. data/lib/steep/equatable.rb +2 -0
  23. data/lib/steep/interface/block.rb +21 -11
  24. data/lib/steep/interface/builder.rb +756 -0
  25. data/lib/steep/interface/function.rb +32 -24
  26. data/lib/steep/interface/method_type.rb +191 -78
  27. data/lib/steep/interface/shape.rb +132 -0
  28. data/lib/steep/interface/substitution.rb +23 -12
  29. data/lib/steep/interface/type_param.rb +1 -2
  30. data/lib/steep/path_helper.rb +1 -1
  31. data/lib/steep/project.rb +5 -7
  32. data/lib/steep/server/base_worker.rb +2 -2
  33. data/lib/steep/server/change_buffer.rb +4 -3
  34. data/lib/steep/server/interaction_worker.rb +1 -1
  35. data/lib/steep/server/master.rb +69 -9
  36. data/lib/steep/server/type_check_worker.rb +13 -11
  37. data/lib/steep/server/worker_process.rb +9 -7
  38. data/lib/steep/services/completion_provider.rb +15 -3
  39. data/lib/steep/services/hover_provider/singleton_methods.rb +5 -6
  40. data/lib/steep/services/signature_service.rb +13 -8
  41. data/lib/steep/services/type_check_service.rb +2 -0
  42. data/lib/steep/signature/validator.rb +1 -1
  43. data/lib/steep/subtyping/check.rb +154 -103
  44. data/lib/steep/subtyping/relation.rb +3 -3
  45. data/lib/steep/subtyping/result.rb +20 -2
  46. data/lib/steep/subtyping/variable_variance.rb +9 -0
  47. data/lib/steep/type_construction.rb +558 -299
  48. data/lib/steep/type_inference/block_params.rb +169 -86
  49. data/lib/steep/type_inference/logic_type_interpreter.rb +9 -14
  50. data/lib/steep/type_inference/method_params.rb +12 -7
  51. data/lib/steep/type_inference/send_args.rb +41 -35
  52. data/lib/steep/type_inference/type_env_builder.rb +1 -1
  53. data/lib/steep/version.rb +1 -1
  54. data/lib/steep.rb +71 -2
  55. data/rbs_collection.steep.lock.yaml +18 -30
  56. data/rbs_collection.steep.yaml +1 -0
  57. data/sig/shims/language-server_protocol.rbs +20 -0
  58. data/sig/shims/tagged_logging.rbs +6 -0
  59. data/sig/steep/ast/annotation/collection.rbs +6 -6
  60. data/sig/steep/ast/types/class.rbs +3 -0
  61. data/sig/steep/ast/types/factory.rbs +38 -32
  62. data/sig/steep/ast/types/instance.rbs +3 -0
  63. data/sig/steep/ast/types/intersection.rbs +1 -1
  64. data/sig/steep/ast/types/literal.rbs +7 -7
  65. data/sig/steep/ast/types/name.rbs +14 -13
  66. data/sig/steep/ast/types/proc.rbs +3 -1
  67. data/sig/steep/ast/types/self.rbs +3 -0
  68. data/sig/steep/ast/types/var.rbs +1 -1
  69. data/sig/steep/diagnostic/ruby.rbs +30 -34
  70. data/sig/steep/drivers/annotations.rbs +17 -0
  71. data/sig/steep/drivers/check.rbs +33 -0
  72. data/sig/steep/drivers/checkfile.rbs +26 -0
  73. data/sig/steep/drivers/diagnostic_printer.rbs +25 -0
  74. data/sig/steep/drivers/init.rbs +19 -0
  75. data/sig/steep/drivers/langserver.rbs +35 -0
  76. data/sig/steep/drivers/print_project.rbs +15 -0
  77. data/sig/steep/drivers/stats.rbs +37 -0
  78. data/sig/steep/drivers/utils/driver_helper.rbs +23 -0
  79. data/sig/steep/drivers/utils/jobs_count.rbs +11 -0
  80. data/sig/steep/drivers/validate.rbs +15 -0
  81. data/sig/steep/drivers/vendor.rbs +19 -0
  82. data/sig/steep/drivers/watch.rbs +27 -0
  83. data/sig/steep/drivers/worker.rbs +31 -0
  84. data/sig/steep/equatable.rbs +11 -0
  85. data/sig/steep/index/rbs_index.rbs +91 -0
  86. data/sig/steep/index/signature_symbol_provider.rbs +29 -0
  87. data/sig/steep/index/source_index.rbs +63 -0
  88. data/sig/steep/interface/block.rbs +3 -1
  89. data/sig/steep/interface/builder.rbs +152 -0
  90. data/sig/steep/interface/function.rbs +67 -55
  91. data/sig/steep/interface/method_type.rbs +60 -12
  92. data/sig/steep/interface/shape.rbs +61 -0
  93. data/sig/steep/interface/substitution.rbs +18 -22
  94. data/sig/steep/interface/type_param.rbs +9 -1
  95. data/sig/steep/path_helper.rbs +7 -0
  96. data/sig/steep/project/pattern.rbs +10 -10
  97. data/sig/steep/project/target.rbs +2 -2
  98. data/sig/steep/project.rbs +15 -8
  99. data/sig/steep/server/base_worker.rbs +49 -0
  100. data/sig/steep/server/change_buffer.rbs +32 -0
  101. data/sig/steep/server/interaction_worker.rbs +41 -0
  102. data/sig/steep/server/lsp_formatter.rbs +29 -0
  103. data/sig/steep/server/master.rbs +260 -0
  104. data/sig/steep/server/type_check_worker.rbs +135 -0
  105. data/sig/steep/server/worker_process.rbs +29 -0
  106. data/sig/steep/services/completion_provider.rbs +5 -5
  107. data/sig/steep/services/content_change.rbs +14 -12
  108. data/sig/steep/services/file_loader.rbs +12 -4
  109. data/sig/steep/services/hover_provider/singleton_methods.rbs +1 -1
  110. data/sig/steep/services/path_assignment.rbs +7 -7
  111. data/sig/steep/services/signature_service.rbs +67 -40
  112. data/sig/steep/services/type_check_service.rbs +53 -39
  113. data/sig/steep/subtyping/check.rbs +80 -44
  114. data/sig/steep/subtyping/relation.rbs +24 -22
  115. data/sig/steep/subtyping/result.rbs +48 -30
  116. data/sig/steep/subtyping/variable_variance.rbs +2 -0
  117. data/sig/steep/type_construction.rbs +132 -23
  118. data/sig/steep/type_inference/block_params.rbs +120 -18
  119. data/sig/steep/type_inference/context.rbs +45 -20
  120. data/sig/steep/type_inference/context_array.rbs +37 -0
  121. data/sig/steep/type_inference/logic_type_interpreter.rbs +3 -1
  122. data/sig/steep/type_inference/method_params.rbs +13 -9
  123. data/sig/steep/type_inference/send_args.rbs +229 -0
  124. data/sig/steep/type_inference/type_env_builder.rbs +1 -1
  125. data/sig/steep/typing.rbs +4 -4
  126. data/sig/steep.rbs +4 -2
  127. data/smoke/block/e.rb +12 -0
  128. data/smoke/block/e.rbs +4 -0
  129. data/smoke/block/test_expectations.yml +12 -0
  130. data/smoke/regression/block_param_split.rb +7 -0
  131. data/smoke/regression/block_param_split.rbs +3 -0
  132. data/smoke/regression/empty_yield.rb +5 -0
  133. data/smoke/regression/empty_yield.rbs +3 -0
  134. data/smoke/regression/test_expectations.yml +12 -0
  135. data/smoke/yield/test_expectations.yml +4 -4
  136. data/steep.gemspec +2 -1
  137. metadata +61 -9
  138. data/lib/steep/interface/interface.rb +0 -34
  139. data/sig/steep/interface/interface.rbs +0 -23
  140. data/sig/version.rbs +0 -3
data/lib/steep/project.rb CHANGED
@@ -34,14 +34,12 @@ module Steep
34
34
 
35
35
  def targets_for_path(path)
36
36
  if target = target_for_source_path(path)
37
- [target, []]
37
+ target
38
38
  else
39
- [
40
- nil,
41
- targets.select do |target|
42
- target.possible_signature_file?(path)
43
- end
44
- ]
39
+ ts = targets.select {|target| target.possible_signature_file?(path) }
40
+ unless ts.empty?
41
+ ts
42
+ end
45
43
  end
46
44
  end
47
45
  end
@@ -6,7 +6,7 @@ module Steep
6
6
  attr_reader :project
7
7
  attr_reader :reader, :writer, :queue
8
8
 
9
- ShutdownJob = Struct.new(:id, keyword_init: true)
9
+ ShutdownJob = _ = Struct.new(:id, keyword_init: true)
10
10
 
11
11
  def initialize(project:, reader:, writer:)
12
12
  @project = project
@@ -14,7 +14,7 @@ module Steep
14
14
  @writer = writer
15
15
  @skip_job = false
16
16
  @shutdown = false
17
- @skip_jobs_after_shutdown = nil
17
+ @skip_jobs_after_shutdown = false
18
18
  end
19
19
 
20
20
  def skip_jobs_after_shutdown!(flag = true)
@@ -11,11 +11,12 @@ module Steep
11
11
  end
12
12
 
13
13
  def pop_buffer
14
- changes = {}
15
- @mutex.synchronize do
16
- changes.merge!(buffered_changes)
14
+ changes = @mutex.synchronize do
15
+ copy = buffered_changes.dup
17
16
  buffered_changes.clear
17
+ copy
18
18
  end
19
+
19
20
  if block_given?
20
21
  yield changes
21
22
  else
@@ -126,7 +126,7 @@ module Steep
126
126
  is_incomplete: false,
127
127
  items: completion_items
128
128
  )
129
- when (_, targets = project.targets_for_path(job.path))
129
+ when (targets = project.targets_for_path(job.path)).is_a?(Array)
130
130
  target = targets[0] or return
131
131
  sig_service = service.signature_services[target.name]
132
132
  relative_path = job.path
@@ -172,6 +172,7 @@ module Steep
172
172
 
173
173
  def update_priority(open: nil, close: nil)
174
174
  path = open || close
175
+ path or raise
175
176
 
176
177
  target_paths.each {|paths| paths << path }
177
178
 
@@ -263,7 +264,6 @@ module Steep
263
264
 
264
265
  def initialize()
265
266
  @handlers = {}
266
- @waiting_handlers = Set[]
267
267
  @completion_handler = nil
268
268
  end
269
269
 
@@ -321,13 +321,61 @@ module Steep
321
321
  end
322
322
  end
323
323
 
324
- ReceiveMessageJob = Struct.new(:source, :message, keyword_init: true) do
324
+ module MessageUtils
325
+ def request?
326
+ if method && id
327
+ true
328
+ else
329
+ false
330
+ end
331
+ end
332
+
333
+ def response?
334
+ if id && !method
335
+ true
336
+ else
337
+ false
338
+ end
339
+ end
340
+
341
+ def notification?
342
+ if method && !id
343
+ true
344
+ else
345
+ false
346
+ end
347
+ end
348
+
349
+ def method
350
+ message[:method]
351
+ end
352
+
353
+ def id
354
+ message[:id]
355
+ end
356
+
357
+ def result
358
+ message[:result]
359
+ end
360
+
361
+ def params
362
+ message[:params]
363
+ end
364
+ end
365
+
366
+ ReceiveMessageJob = _ = Struct.new(:source, :message, keyword_init: true) do
367
+ # @implements ReceiveMessageJob
368
+
325
369
  def response?
326
370
  message.key?(:id) && !message.key?(:method)
327
371
  end
372
+
373
+ include MessageUtils
328
374
  end
329
375
 
330
- SendMessageJob = Struct.new(:dest, :message, keyword_init: true) do
376
+ SendMessageJob = _ = Struct.new(:dest, :message, keyword_init: true) do
377
+ # @implements SendMessageJob
378
+
331
379
  def self.to_worker(worker, message:)
332
380
  new(dest: worker, message: message)
333
381
  end
@@ -335,9 +383,10 @@ module Steep
335
383
  def self.to_client(message:)
336
384
  new(dest: :client, message: message)
337
385
  end
386
+
387
+ include MessageUtils
338
388
  end
339
389
 
340
- attr_reader :steepfile
341
390
  attr_reader :project
342
391
  attr_reader :reader, :writer
343
392
  attr_reader :commandline_args
@@ -373,6 +422,7 @@ module Steep
373
422
  Steep.logger.tagged "master" do
374
423
  tags = Steep.logger.formatter.current_tags.dup
375
424
 
425
+ # @type var worker_threads: Array[Thread]
376
426
  worker_threads = []
377
427
 
378
428
  if interaction_worker
@@ -404,7 +454,8 @@ module Steep
404
454
  while job = job_queue.deq
405
455
  case job
406
456
  when ReceiveMessageJob
407
- src = if job.source == :client
457
+ src = case job.source
458
+ when :client
408
459
  :client
409
460
  else
410
461
  job.source.name
@@ -447,9 +498,9 @@ module Steep
447
498
  end
448
499
 
449
500
  def each_worker(&block)
450
- if block_given?
501
+ if block
451
502
  yield interaction_worker if interaction_worker
452
- typecheck_workers.each &block
503
+ typecheck_workers.each(&block)
453
504
  else
454
505
  enum_for :each_worker
455
506
  end
@@ -460,7 +511,7 @@ module Steep
460
511
  end
461
512
 
462
513
  def work_done_progress_supported?
463
- initialize_params&.dig(:capabilities, :window, :workDoneProgress)
514
+ initialize_params&.dig(:capabilities, :window, :workDoneProgress) ? true : false
464
515
  end
465
516
 
466
517
  def process_message_from_client(message)
@@ -641,6 +692,14 @@ module Steep
641
692
  )
642
693
  end
643
694
 
695
+ when "$/ping"
696
+ job_queue << SendMessageJob.to_client(
697
+ message: {
698
+ id: message[:id],
699
+ result: message[:params]
700
+ }
701
+ )
702
+
644
703
  when "shutdown"
645
704
  result_controller << group_request do |group|
646
705
  each_worker do |worker|
@@ -794,9 +853,10 @@ module Steep
794
853
  def send_request(method:, id: fresh_request_id(), params: nil, worker:, &block)
795
854
  Steep.logger.info "Sending request #{method}(#{id}) to #{worker.name}"
796
855
 
856
+ # @type var message: lsp_request
797
857
  message = { method: method, id: id, params: params }
798
858
  ResultHandler.new(request: message).tap do |handler|
799
- yield handler if block_given?
859
+ yield handler if block
800
860
  job_queue << SendMessageJob.to_worker(worker, message: message)
801
861
  end
802
862
  end
@@ -5,13 +5,15 @@ module Steep
5
5
  attr_reader :commandline_args
6
6
  attr_reader :current_type_check_guid
7
7
 
8
- WorkspaceSymbolJob = Struct.new(:query, :id, keyword_init: true)
9
- StatsJob = Struct.new(:id, keyword_init: true)
10
- StartTypeCheckJob = Struct.new(:guid, :changes, keyword_init: true)
11
- TypeCheckCodeJob = Struct.new(:guid, :path, keyword_init: true)
12
- ValidateAppSignatureJob = Struct.new(:guid, :path, keyword_init: true)
13
- ValidateLibrarySignatureJob = Struct.new(:guid, :path, keyword_init: true)
14
- GotoJob = Struct.new(:id, :kind, :params, keyword_init: true) do
8
+ WorkspaceSymbolJob = _ = Struct.new(:query, :id, keyword_init: true)
9
+ StatsJob = _ = Struct.new(:id, keyword_init: true)
10
+ StartTypeCheckJob = _ = Struct.new(:guid, :changes, keyword_init: true)
11
+ TypeCheckCodeJob = _ = Struct.new(:guid, :path, keyword_init: true)
12
+ ValidateAppSignatureJob = _ = Struct.new(:guid, :path, keyword_init: true)
13
+ ValidateLibrarySignatureJob = _ = Struct.new(:guid, :path, keyword_init: true)
14
+ GotoJob = _ = Struct.new(:id, :kind, :params, keyword_init: true) do
15
+ # @implements GotoJob
16
+
15
17
  def self.implementation(id:, params:)
16
18
  new(
17
19
  kind: :implementation,
@@ -86,10 +88,10 @@ module Steep
86
88
  queue << StartTypeCheckJob.new(guid: guid, changes: changes)
87
89
  end
88
90
 
89
- priority_paths = Set.new(params[:priority_uris].map {|uri| Steep::PathHelper.to_pathname(uri) })
90
- library_paths = params[:library_uris].map {|uri| Steep::PathHelper.to_pathname(uri) }
91
- signature_paths = params[:signature_uris].map {|uri| Steep::PathHelper.to_pathname(uri) }
92
- code_paths = params[:code_uris].map {|uri| Steep::PathHelper.to_pathname(uri) }
91
+ priority_paths = Set.new(params[:priority_uris].map {|uri| Steep::PathHelper.to_pathname(uri) || raise })
92
+ library_paths = params[:library_uris].map {|uri| Steep::PathHelper.to_pathname(uri) || raise }
93
+ signature_paths = params[:signature_uris].map {|uri| Steep::PathHelper.to_pathname(uri) || raise }
94
+ code_paths = params[:code_uris].map {|uri| Steep::PathHelper.to_pathname(uri) || raise }
93
95
 
94
96
  library_paths.each do |path|
95
97
  if priority_paths.include?(path)
@@ -52,13 +52,15 @@ module Steep
52
52
 
53
53
  def self.spawn_typecheck_workers(steepfile:, args:, steep_command: "steep", count: [Etc.nprocessors - 1, 1].max, delay_shutdown: false)
54
54
  count.times.map do |i|
55
- spawn_worker(:typecheck,
56
- name: "typecheck@#{i}",
57
- steepfile: steepfile,
58
- steep_command: steep_command,
59
- options: ["--max-index=#{count}", "--index=#{i}", *args],
60
- delay_shutdown: delay_shutdown,
61
- index: i)
55
+ spawn_worker(
56
+ :typecheck,
57
+ name: "typecheck@#{i}",
58
+ steepfile: steepfile,
59
+ steep_command: steep_command,
60
+ options: ["--max-index=#{count}", "--index=#{i}", *args],
61
+ delay_shutdown: delay_shutdown,
62
+ index: i
63
+ )
62
64
  end
63
65
  end
64
66
 
@@ -343,9 +343,21 @@ module Steep
343
343
 
344
344
  def method_items_for_receiver_type(type, include_private:, prefix:, position:, items:)
345
345
  range = range_for(position, prefix: prefix)
346
- interface = subtyping.factory.interface(type, self_type: type, private: include_private)
346
+ context = typing.context_at(line: position.line, column: position.column)
347
+
348
+ shape = subtyping.builder.shape(
349
+ type,
350
+ public_only: !include_private,
351
+ config: Interface::Builder::Config.new(
352
+ self_type: context.self_type,
353
+ class_type: context.module_context&.module_type,
354
+ instance_type: context.module_context&.instance_type,
355
+ variable_bounds: context.variable_context.upper_bounds
356
+ )
357
+ )
358
+ # factory.shape(type, self_type: type, private: include_private)
347
359
 
348
- interface.methods.each do |name, method_entry|
360
+ shape.methods.each do |name, method_entry|
349
361
  next if disallowed_method?(name)
350
362
 
351
363
  if name.to_s.start_with?(prefix)
@@ -355,7 +367,7 @@ module Steep
355
367
  identifier: name,
356
368
  range: range,
357
369
  receiver_type: type,
358
- method_type: subtyping.factory.method_type_1(method_type, self_type: type),
370
+ method_type: subtyping.factory.method_type_1(method_type),
359
371
  method_decls: method_type.method_decls
360
372
  )
361
373
  end
@@ -4,13 +4,12 @@ module Steep
4
4
  module SingletonMethods
5
5
  def content_for(service:, path:, line:, column:)
6
6
  project = service.project
7
- target_for_code, targets_for_sigs = project.targets_for_path(path)
8
7
 
9
- case
10
- when target_for_code
11
- Ruby.new(service: service).content_for(target: target_for_code, path: path, line: line, column: column)
12
- when target = targets_for_sigs.first
13
- RBS.new(service: service).content_for(target: target, path: path, line: line, column: column)
8
+ case (target = project.targets_for_path(path))
9
+ when Project::Target
10
+ Ruby.new(service: service).content_for(target: target, path: path, line: line, column: column)
11
+ when Array
12
+ RBS.new(service: service).content_for(target: target[0], path: path, line: line, column: column)
14
13
  end
15
14
  end
16
15
  end
@@ -48,7 +48,11 @@ module Steep
48
48
  end
49
49
 
50
50
  def subtyping
51
- @subtyping ||= Subtyping::Check.new(factory: AST::Types::Factory.new(builder: builder))
51
+ @subtyping ||= begin
52
+ factory = AST::Types::Factory.new(builder: builder)
53
+ interface_builder = Interface::Builder.new(factory)
54
+ Subtyping::Check.new(builder: interface_builder)
55
+ end
52
56
  end
53
57
 
54
58
  def rbs_index
@@ -59,7 +63,7 @@ module Steep
59
63
  end
60
64
  end
61
65
 
62
- FileStatus = Struct.new(:path, :content, :decls, keyword_init: true)
66
+ FileStatus = _ = Struct.new(:path, :content, :decls, keyword_init: true)
63
67
 
64
68
  def initialize(env:)
65
69
  builder = RBS::DefinitionBuilder.new(env: env)
@@ -96,7 +100,7 @@ module Steep
96
100
  end
97
101
 
98
102
  def pending_changed_paths
99
- case status
103
+ case status = status()
100
104
  when LoadedStatus
101
105
  Set[]
102
106
  when SyntaxErrorStatus, AncestorErrorStatus
@@ -109,7 +113,7 @@ module Steep
109
113
  end
110
114
 
111
115
  def latest_builder
112
- case status
116
+ case status = status()
113
117
  when LoadedStatus
114
118
  status.builder
115
119
  when SyntaxErrorStatus, AncestorErrorStatus
@@ -130,7 +134,8 @@ module Steep
130
134
  def apply_changes(files, changes)
131
135
  Steep.logger.tagged "#apply_changes" do
132
136
  Steep.measure2 "Applying change" do |sampler|
133
- changes.each.with_object({}) do |(path, cs), update|
137
+ changes.each.with_object({}) do |pair, update|
138
+ path, cs = pair
134
139
  sampler.sample "#{path}" do
135
140
  old_text = files[path]&.content
136
141
  content = cs.inject(old_text || "") {|text, change| change.apply_to(text) }
@@ -183,7 +188,7 @@ module Steep
183
188
  )
184
189
  else
185
190
  files = self.files.merge(updates)
186
- updated_files = paths.each.with_object({}) do |path, hash|
191
+ updated_files = paths.each_with_object({}) do |path, hash|
187
192
  hash[path] = files[path]
188
193
  end
189
194
  result =
@@ -228,7 +233,7 @@ module Steep
228
233
  errors << content.decls
229
234
  else
230
235
  begin
231
- content.decls.each do |decl|
236
+ decls.each do |decl|
232
237
  env << decl
233
238
  new_decls << decl
234
239
  end
@@ -376,7 +381,7 @@ module Steep
376
381
  end
377
382
 
378
383
  def add_nested_decls(env:, names:, set:)
379
- tops = names.each.with_object(Set[]) do |name, tops|
384
+ tops = names.each_with_object(Set[]) do |name, tops|
380
385
  unless name.namespace.empty?
381
386
  tops << name.namespace.path[0]
382
387
  end
@@ -100,6 +100,7 @@ module Steep
100
100
  end
101
101
 
102
102
  def signature_diagnostics
103
+ # @type var signature_diagnostics: Hash[Pathname, Array[Diagnostic::Signature::Base]]
103
104
  signature_diagnostics = {}
104
105
 
105
106
  project.targets.each do |target|
@@ -191,6 +192,7 @@ module Steep
191
192
  def validate_signature(path:, &block)
192
193
  Steep.logger.tagged "#validate_signature(path=#{path})" do
193
194
  Steep.measure "validation" do
195
+ # @type var accumulated_diagnostics: Array[Diagnostic::Signature::Base]
194
196
  accumulated_diagnostics = []
195
197
 
196
198
  project.targets.each do |target|
@@ -72,7 +72,7 @@ module Steep
72
72
 
73
73
  checker.check(
74
74
  Subtyping::Relation.new(sub_type: arg_type, super_type: upper_bound_type),
75
- self_type: nil,
75
+ self_type: AST::Types::Self.instance,
76
76
  class_type: nil,
77
77
  instance_type: nil,
78
78
  constraints: constraints