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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -0
- data/Gemfile +0 -1
- data/Gemfile.lock +12 -11
- data/Gemfile.steep +1 -1
- data/Gemfile.steep.lock +9 -9
- data/README.md +3 -3
- data/Steepfile +23 -0
- data/bin/steep-prof +2 -1
- data/lib/steep/annotation_parser.rb +1 -1
- data/lib/steep/ast/types/class.rb +4 -0
- data/lib/steep/ast/types/factory.rb +86 -602
- data/lib/steep/ast/types/instance.rb +4 -0
- data/lib/steep/ast/types/literal.rb +1 -1
- data/lib/steep/ast/types/proc.rb +22 -8
- data/lib/steep/ast/types/self.rb +4 -0
- data/lib/steep/ast/types/union.rb +1 -1
- data/lib/steep/cli.rb +24 -1
- data/lib/steep/diagnostic/ruby.rb +17 -22
- data/lib/steep/drivers/checkfile.rb +205 -0
- data/lib/steep/drivers/validate.rb +3 -1
- data/lib/steep/equatable.rb +2 -0
- data/lib/steep/interface/block.rb +21 -11
- data/lib/steep/interface/builder.rb +756 -0
- data/lib/steep/interface/function.rb +32 -24
- data/lib/steep/interface/method_type.rb +191 -78
- data/lib/steep/interface/shape.rb +132 -0
- data/lib/steep/interface/substitution.rb +23 -12
- data/lib/steep/interface/type_param.rb +1 -2
- data/lib/steep/path_helper.rb +1 -1
- data/lib/steep/project.rb +5 -7
- data/lib/steep/server/base_worker.rb +2 -2
- data/lib/steep/server/change_buffer.rb +4 -3
- data/lib/steep/server/interaction_worker.rb +1 -1
- data/lib/steep/server/master.rb +69 -9
- data/lib/steep/server/type_check_worker.rb +13 -11
- data/lib/steep/server/worker_process.rb +9 -7
- data/lib/steep/services/completion_provider.rb +15 -3
- data/lib/steep/services/hover_provider/singleton_methods.rb +5 -6
- data/lib/steep/services/signature_service.rb +13 -8
- data/lib/steep/services/type_check_service.rb +2 -0
- data/lib/steep/signature/validator.rb +1 -1
- data/lib/steep/subtyping/check.rb +154 -103
- data/lib/steep/subtyping/relation.rb +3 -3
- data/lib/steep/subtyping/result.rb +20 -2
- data/lib/steep/subtyping/variable_variance.rb +9 -0
- data/lib/steep/type_construction.rb +558 -299
- data/lib/steep/type_inference/block_params.rb +169 -86
- data/lib/steep/type_inference/logic_type_interpreter.rb +9 -14
- data/lib/steep/type_inference/method_params.rb +12 -7
- data/lib/steep/type_inference/send_args.rb +41 -35
- data/lib/steep/type_inference/type_env_builder.rb +1 -1
- data/lib/steep/version.rb +1 -1
- data/lib/steep.rb +71 -2
- data/rbs_collection.steep.lock.yaml +18 -30
- data/rbs_collection.steep.yaml +1 -0
- data/sig/shims/language-server_protocol.rbs +20 -0
- data/sig/shims/tagged_logging.rbs +6 -0
- data/sig/steep/ast/annotation/collection.rbs +6 -6
- data/sig/steep/ast/types/class.rbs +3 -0
- data/sig/steep/ast/types/factory.rbs +38 -32
- data/sig/steep/ast/types/instance.rbs +3 -0
- data/sig/steep/ast/types/intersection.rbs +1 -1
- data/sig/steep/ast/types/literal.rbs +7 -7
- data/sig/steep/ast/types/name.rbs +14 -13
- data/sig/steep/ast/types/proc.rbs +3 -1
- data/sig/steep/ast/types/self.rbs +3 -0
- data/sig/steep/ast/types/var.rbs +1 -1
- data/sig/steep/diagnostic/ruby.rbs +30 -34
- data/sig/steep/drivers/annotations.rbs +17 -0
- data/sig/steep/drivers/check.rbs +33 -0
- data/sig/steep/drivers/checkfile.rbs +26 -0
- data/sig/steep/drivers/diagnostic_printer.rbs +25 -0
- data/sig/steep/drivers/init.rbs +19 -0
- data/sig/steep/drivers/langserver.rbs +35 -0
- data/sig/steep/drivers/print_project.rbs +15 -0
- data/sig/steep/drivers/stats.rbs +37 -0
- data/sig/steep/drivers/utils/driver_helper.rbs +23 -0
- data/sig/steep/drivers/utils/jobs_count.rbs +11 -0
- data/sig/steep/drivers/validate.rbs +15 -0
- data/sig/steep/drivers/vendor.rbs +19 -0
- data/sig/steep/drivers/watch.rbs +27 -0
- data/sig/steep/drivers/worker.rbs +31 -0
- data/sig/steep/equatable.rbs +11 -0
- data/sig/steep/index/rbs_index.rbs +91 -0
- data/sig/steep/index/signature_symbol_provider.rbs +29 -0
- data/sig/steep/index/source_index.rbs +63 -0
- data/sig/steep/interface/block.rbs +3 -1
- data/sig/steep/interface/builder.rbs +152 -0
- data/sig/steep/interface/function.rbs +67 -55
- data/sig/steep/interface/method_type.rbs +60 -12
- data/sig/steep/interface/shape.rbs +61 -0
- data/sig/steep/interface/substitution.rbs +18 -22
- data/sig/steep/interface/type_param.rbs +9 -1
- data/sig/steep/path_helper.rbs +7 -0
- data/sig/steep/project/pattern.rbs +10 -10
- data/sig/steep/project/target.rbs +2 -2
- data/sig/steep/project.rbs +15 -8
- data/sig/steep/server/base_worker.rbs +49 -0
- data/sig/steep/server/change_buffer.rbs +32 -0
- data/sig/steep/server/interaction_worker.rbs +41 -0
- data/sig/steep/server/lsp_formatter.rbs +29 -0
- data/sig/steep/server/master.rbs +260 -0
- data/sig/steep/server/type_check_worker.rbs +135 -0
- data/sig/steep/server/worker_process.rbs +29 -0
- data/sig/steep/services/completion_provider.rbs +5 -5
- data/sig/steep/services/content_change.rbs +14 -12
- data/sig/steep/services/file_loader.rbs +12 -4
- data/sig/steep/services/hover_provider/singleton_methods.rbs +1 -1
- data/sig/steep/services/path_assignment.rbs +7 -7
- data/sig/steep/services/signature_service.rbs +67 -40
- data/sig/steep/services/type_check_service.rbs +53 -39
- data/sig/steep/subtyping/check.rbs +80 -44
- data/sig/steep/subtyping/relation.rbs +24 -22
- data/sig/steep/subtyping/result.rbs +48 -30
- data/sig/steep/subtyping/variable_variance.rbs +2 -0
- data/sig/steep/type_construction.rbs +132 -23
- data/sig/steep/type_inference/block_params.rbs +120 -18
- data/sig/steep/type_inference/context.rbs +45 -20
- data/sig/steep/type_inference/context_array.rbs +37 -0
- data/sig/steep/type_inference/logic_type_interpreter.rbs +3 -1
- data/sig/steep/type_inference/method_params.rbs +13 -9
- data/sig/steep/type_inference/send_args.rbs +229 -0
- data/sig/steep/type_inference/type_env_builder.rbs +1 -1
- data/sig/steep/typing.rbs +4 -4
- data/sig/steep.rbs +4 -2
- data/smoke/block/e.rb +12 -0
- data/smoke/block/e.rbs +4 -0
- data/smoke/block/test_expectations.yml +12 -0
- data/smoke/regression/block_param_split.rb +7 -0
- data/smoke/regression/block_param_split.rbs +3 -0
- data/smoke/regression/empty_yield.rb +5 -0
- data/smoke/regression/empty_yield.rbs +3 -0
- data/smoke/regression/test_expectations.yml +12 -0
- data/smoke/yield/test_expectations.yml +4 -4
- data/steep.gemspec +2 -1
- metadata +61 -9
- data/lib/steep/interface/interface.rb +0 -34
- data/sig/steep/interface/interface.rbs +0 -23
- 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
|
-
|
37
|
+
target
|
38
38
|
else
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
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 =
|
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
|
-
|
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 (
|
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
|
data/lib/steep/server/master.rb
CHANGED
@@ -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
|
-
|
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 =
|
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
|
501
|
+
if block
|
451
502
|
yield interaction_worker if interaction_worker
|
452
|
-
typecheck_workers.each
|
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
|
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(
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
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
|
-
|
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
|
-
|
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
|
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
|
11
|
-
Ruby.new(service: service).content_for(target:
|
12
|
-
when
|
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 ||=
|
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 |
|
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.
|
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
|
-
|
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.
|
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|
|