steep 1.4.0.dev.2 → 1.4.0.dev.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 +4 -4
- data/.github/workflows/ruby.yml +1 -2
- data/Gemfile +1 -1
- data/Gemfile.lock +7 -9
- data/Gemfile.steep +1 -2
- data/Gemfile.steep.lock +9 -10
- data/README.md +7 -1
- data/Steepfile +0 -3
- data/bin/rbs +0 -1
- data/guides/README.md +5 -0
- data/guides/src/gem-rbs-collection/gem-rbs-collection.md +143 -0
- data/guides/src/getting-started/getting-started.md +164 -0
- data/guides/src/nil-optional/nil-optional.md +195 -0
- data/lib/steep/diagnostic/ruby.rb +79 -4
- data/lib/steep/drivers/check.rb +4 -4
- data/lib/steep/interface/block.rb +10 -0
- data/lib/steep/module_helper.rb +13 -11
- data/lib/steep/path_helper.rb +4 -0
- data/lib/steep/server/interaction_worker.rb +105 -92
- data/lib/steep/services/type_name_completion.rb +157 -0
- data/lib/steep/source.rb +1 -0
- data/lib/steep/type_construction.rb +402 -229
- data/lib/steep/type_inference/block_params.rb +13 -0
- data/lib/steep/type_inference/context.rb +3 -3
- data/lib/steep/type_inference/method_params.rb +42 -16
- data/lib/steep/type_inference/send_args.rb +79 -50
- data/lib/steep/type_inference/type_env.rb +7 -1
- data/lib/steep/version.rb +1 -1
- data/lib/steep.rb +1 -0
- data/rbs_collection.steep.lock.yaml +0 -28
- data/rbs_collection.steep.yaml +10 -9
- data/sample/lib/conference.rb +12 -0
- data/sample/sig/conference.rbs +5 -0
- data/sig/shims/language-server_protocol.rbs +12 -0
- data/sig/shims/parser/nodes.rbs +37 -0
- data/sig/shims/parser.rbs +1 -0
- data/sig/shims/string.rbs +4 -0
- data/sig/steep/ast/types/factory.rbs +10 -8
- data/sig/steep/diagnostic/lsp_formatter.rbs +1 -1
- data/sig/steep/diagnostic/ruby.rbs +38 -2
- data/sig/steep/drivers/check.rbs +1 -1
- data/sig/steep/drivers/checkfile.rbs +1 -1
- data/sig/steep/drivers/diagnostic_printer.rbs +1 -1
- data/sig/steep/drivers/watch.rbs +1 -1
- data/sig/steep/index/signature_symbol_provider.rbs +1 -1
- data/sig/steep/interface/block.rbs +2 -0
- data/sig/steep/interface/builder.rbs +5 -3
- data/sig/steep/interface/method_type.rbs +5 -3
- data/sig/steep/module_helper.rbs +9 -0
- data/sig/steep/path_helper.rbs +3 -1
- data/sig/steep/server/base_worker.rbs +1 -1
- data/sig/steep/server/interaction_worker.rbs +46 -17
- data/sig/steep/server/master.rbs +1 -1
- data/sig/steep/server/type_check_worker.rbs +7 -5
- data/sig/steep/server/worker_process.rbs +6 -4
- data/sig/steep/services/completion_provider.rbs +2 -0
- data/sig/steep/services/type_name_completion.rbs +122 -0
- data/sig/steep/type_construction.rbs +99 -30
- data/sig/steep/type_inference/block_params.rbs +4 -0
- data/sig/steep/type_inference/context.rbs +70 -22
- data/sig/steep/type_inference/method_params.rbs +43 -24
- data/sig/steep/type_inference/multiple_assignment.rbs +1 -1
- data/sig/steep/type_inference/send_args.rbs +13 -3
- data/sig/steep/typing.rbs +7 -2
- data/smoke/diagnostics/test_expectations.yml +1 -0
- data/steep.gemspec +0 -1
- metadata +10 -16
@@ -328,6 +328,19 @@ module Steep
|
|
328
328
|
end
|
329
329
|
end
|
330
330
|
|
331
|
+
def each_single_param()
|
332
|
+
each do |param|
|
333
|
+
case param
|
334
|
+
when Param
|
335
|
+
yield param
|
336
|
+
when MultipleParam
|
337
|
+
param.each_param do |p|
|
338
|
+
yield p
|
339
|
+
end
|
340
|
+
end
|
341
|
+
end
|
342
|
+
end
|
343
|
+
|
331
344
|
def self.from_multiple(node, annotations)
|
332
345
|
# @type var params: Array[Param | MultipleParam]
|
333
346
|
params = []
|
@@ -6,16 +6,16 @@ module Steep
|
|
6
6
|
attr_reader :method
|
7
7
|
attr_reader :method_type
|
8
8
|
attr_reader :return_type
|
9
|
-
attr_reader :constructor
|
10
9
|
attr_reader :super_method
|
10
|
+
attr_reader :forward_arg_type
|
11
11
|
|
12
|
-
def initialize(name:, method:, method_type:, return_type:,
|
12
|
+
def initialize(name:, method:, method_type:, return_type:, super_method:, forward_arg_type:)
|
13
13
|
@name = name
|
14
14
|
@method = method
|
15
15
|
@return_type = return_type
|
16
16
|
@method_type = method_type
|
17
|
-
@constructor = constructor
|
18
17
|
@super_method = super_method
|
18
|
+
@forward_arg_type = forward_arg_type
|
19
19
|
end
|
20
20
|
|
21
21
|
def block_type
|
@@ -143,24 +143,34 @@ module Steep
|
|
143
143
|
attr_reader :method_type
|
144
144
|
attr_reader :params
|
145
145
|
attr_reader :errors
|
146
|
+
attr_reader :forward_arg_type
|
146
147
|
|
147
|
-
def initialize(args:, method_type:)
|
148
|
+
def initialize(args:, method_type:, forward_arg_type:)
|
148
149
|
@args = args
|
149
150
|
@method_type = method_type
|
150
151
|
@params = {}
|
151
152
|
@errors = []
|
153
|
+
@forward_arg_type = forward_arg_type
|
152
154
|
end
|
153
155
|
|
154
156
|
def [](name)
|
155
157
|
params[name] or raise "Unknown variable name: #{name}"
|
156
158
|
end
|
157
159
|
|
160
|
+
def param?(name)
|
161
|
+
params.key?(name)
|
162
|
+
end
|
163
|
+
|
158
164
|
def size
|
159
165
|
params.size
|
160
166
|
end
|
161
167
|
|
162
168
|
def each_param(&block)
|
163
|
-
|
169
|
+
if block
|
170
|
+
params.each_value(&block)
|
171
|
+
else
|
172
|
+
params.each_value
|
173
|
+
end
|
164
174
|
end
|
165
175
|
|
166
176
|
def each
|
@@ -173,7 +183,12 @@ module Steep
|
|
173
183
|
end
|
174
184
|
end
|
175
185
|
|
186
|
+
def update(forward_arg_type: self.forward_arg_type)
|
187
|
+
MethodParams.new(args: args, method_type: method_type, forward_arg_type: forward_arg_type)
|
188
|
+
end
|
189
|
+
|
176
190
|
def self.empty(node:)
|
191
|
+
# @type var args_node: ::Parser::AST::Node
|
177
192
|
args_node =
|
178
193
|
case node.type
|
179
194
|
when :def
|
@@ -184,9 +199,10 @@ module Steep
|
|
184
199
|
raise
|
185
200
|
end
|
186
201
|
|
187
|
-
params = new(args: args_node.children, method_type: nil)
|
202
|
+
params = new(args: args_node.children, method_type: nil, forward_arg_type: nil)
|
188
203
|
|
189
204
|
args_node.children.each do |arg|
|
205
|
+
# @type var arg: ::Parser::AST::Node
|
190
206
|
case arg.type
|
191
207
|
when :arg, :optarg
|
192
208
|
name = arg.children[0]
|
@@ -210,6 +226,7 @@ module Steep
|
|
210
226
|
end
|
211
227
|
|
212
228
|
def self.build(node:, method_type:)
|
229
|
+
# @type var args_node: ::Parser::AST::Node
|
213
230
|
args_node =
|
214
231
|
case node.type
|
215
232
|
when :def
|
@@ -219,17 +236,17 @@ module Steep
|
|
219
236
|
else
|
220
237
|
raise
|
221
238
|
end
|
222
|
-
original = args_node.children
|
239
|
+
original = args_node.children #: Array[Parser::AST::Node]
|
223
240
|
args = original.dup
|
224
241
|
|
225
|
-
instance = new(args: original, method_type: method_type)
|
242
|
+
instance = new(args: original, method_type: method_type, forward_arg_type: nil)
|
226
243
|
|
227
244
|
positional_params = method_type.type.params.positional_params
|
228
245
|
|
229
246
|
loop do
|
230
|
-
arg = args.first
|
247
|
+
arg = args.first or break
|
231
248
|
|
232
|
-
case arg
|
249
|
+
case arg.type
|
233
250
|
when :arg
|
234
251
|
name = arg.children[0]
|
235
252
|
param = positional_params&.head
|
@@ -300,9 +317,14 @@ module Steep
|
|
300
317
|
args.shift
|
301
318
|
end
|
302
319
|
|
303
|
-
if (arg = args.first)
|
320
|
+
if (arg = args.first) && arg.type == :forward_arg
|
321
|
+
forward_params = method_type.type.params.update(positional_params: positional_params)
|
322
|
+
return instance.update(forward_arg_type: [forward_params, method_type.block])
|
323
|
+
end
|
324
|
+
|
325
|
+
if (arg = args.first) && arg.type == :restarg
|
304
326
|
name = arg.children[0]
|
305
|
-
rest_types = []
|
327
|
+
rest_types = [] #: Array[AST::Types::t]
|
306
328
|
has_error = false
|
307
329
|
|
308
330
|
loop do
|
@@ -325,7 +347,11 @@ module Steep
|
|
325
347
|
break
|
326
348
|
end
|
327
349
|
|
328
|
-
|
350
|
+
if positional_params
|
351
|
+
positional_params = positional_params.tail
|
352
|
+
else
|
353
|
+
raise "Fatal error"
|
354
|
+
end
|
329
355
|
end
|
330
356
|
|
331
357
|
type = rest_types.empty? ? nil : AST::Types::Union.build(types: rest_types)
|
@@ -348,9 +374,9 @@ module Steep
|
|
348
374
|
keywords = keyword_params.keywords
|
349
375
|
|
350
376
|
loop do
|
351
|
-
arg = args.first
|
377
|
+
arg = args.first or break
|
352
378
|
|
353
|
-
case arg
|
379
|
+
case arg.type
|
354
380
|
when :kwarg
|
355
381
|
name = arg.children[0]
|
356
382
|
|
@@ -421,9 +447,9 @@ module Steep
|
|
421
447
|
args.shift
|
422
448
|
end
|
423
449
|
|
424
|
-
if (arg = args.first)
|
450
|
+
if (arg = args.first) && arg.type == :kwrestarg
|
425
451
|
name = arg.children[0]
|
426
|
-
rest_types = []
|
452
|
+
rest_types = [] #: Array[AST::Types::t]
|
427
453
|
has_error = false
|
428
454
|
|
429
455
|
keywords.each do |keyword|
|
@@ -460,8 +486,8 @@ module Steep
|
|
460
486
|
end
|
461
487
|
end
|
462
488
|
|
463
|
-
if (arg = args.first)
|
464
|
-
name = arg.children[0]
|
489
|
+
if (arg = args.first) && arg.type == :blockarg
|
490
|
+
name = arg.children[0] #: Symbol
|
465
491
|
|
466
492
|
if method_type.block
|
467
493
|
instance.params[name] = BlockParameter.new(
|
@@ -101,6 +101,9 @@ module Steep
|
|
101
101
|
|
102
102
|
def next()
|
103
103
|
case
|
104
|
+
when node && node.type == :forwarded_args
|
105
|
+
# If the node is a `:forwarded_args`, abort
|
106
|
+
nil
|
104
107
|
when !node && param.is_a?(Interface::Function::Params::PositionalParams::Required)
|
105
108
|
[
|
106
109
|
MissingArg.new(params: positional_params),
|
@@ -410,8 +413,8 @@ module Steep
|
|
410
413
|
when type = keyword_type(key)
|
411
414
|
consumed_keys << key
|
412
415
|
types << type
|
413
|
-
when rest_type
|
414
|
-
types <<
|
416
|
+
when type = rest_type()
|
417
|
+
types << type
|
415
418
|
else
|
416
419
|
unexpected_keyword = key
|
417
420
|
end
|
@@ -483,6 +486,15 @@ module Steep
|
|
483
486
|
end
|
484
487
|
end
|
485
488
|
|
489
|
+
class ForwardedArgs
|
490
|
+
attr_reader :node, :params
|
491
|
+
|
492
|
+
def initialize(node:, params:)
|
493
|
+
@node = node
|
494
|
+
@params = params
|
495
|
+
end
|
496
|
+
end
|
497
|
+
|
486
498
|
attr_reader :node
|
487
499
|
attr_reader :arguments
|
488
500
|
attr_reader :type
|
@@ -499,6 +511,8 @@ module Steep
|
|
499
511
|
type.type.params
|
500
512
|
when AST::Types::Proc
|
501
513
|
type.type.params
|
514
|
+
else
|
515
|
+
raise
|
502
516
|
end
|
503
517
|
end
|
504
518
|
|
@@ -526,14 +540,20 @@ module Steep
|
|
526
540
|
end
|
527
541
|
|
528
542
|
def positional_arg
|
529
|
-
args =
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
543
|
+
args =
|
544
|
+
if keyword_params.empty?
|
545
|
+
arguments.take_while {|node| node.type != :block_pass }
|
546
|
+
else
|
547
|
+
arguments.take_while {|node| node.type != :kwargs && node.type != :block_pass }
|
548
|
+
end
|
549
|
+
|
534
550
|
PositionalArgs.new(args: args, index: 0, positional_params: positional_params)
|
535
551
|
end
|
536
552
|
|
553
|
+
def forwarded_args_node
|
554
|
+
arguments.find {|node| node.type == :forwarded_args }
|
555
|
+
end
|
556
|
+
|
537
557
|
def keyword_args
|
538
558
|
KeywordArgs.new(
|
539
559
|
kwarg_nodes: kwargs_node&.children || [],
|
@@ -551,6 +571,8 @@ module Steep
|
|
551
571
|
if block_given?
|
552
572
|
errors = []
|
553
573
|
|
574
|
+
last_positional_args = positional_arg
|
575
|
+
|
554
576
|
positional_arg.tap do |args|
|
555
577
|
while (value, args = args.next())
|
556
578
|
yield value
|
@@ -591,66 +613,73 @@ module Steep
|
|
591
613
|
when PositionalArgs::UnexpectedArg, PositionalArgs::MissingArg
|
592
614
|
errors << value
|
593
615
|
end
|
616
|
+
|
617
|
+
last_positional_args = args
|
594
618
|
end
|
595
619
|
end
|
596
620
|
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
when KeywordArgs::UnexpectedKeyword
|
603
|
-
errors << a
|
604
|
-
end
|
605
|
-
|
606
|
-
yield a
|
607
|
-
|
608
|
-
case a
|
609
|
-
when KeywordArgs::SplatArg
|
610
|
-
case type = a.type
|
611
|
-
when nil
|
612
|
-
raise
|
613
|
-
when AST::Types::Record
|
614
|
-
# @type var keys: Array[Symbol]
|
615
|
-
keys = _ = type.elements.keys
|
616
|
-
ts, args = args.consume_keys(keys, node: a.node)
|
621
|
+
if fag = forwarded_args_node
|
622
|
+
params = Interface::Function::Params.new(
|
623
|
+
positional_params: last_positional_args.positional_params,
|
624
|
+
keyword_params: keyword_params
|
625
|
+
)
|
617
626
|
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
627
|
+
forwarded_args = ForwardedArgs.new(node: fag, params: params)
|
628
|
+
else
|
629
|
+
keyword_args.tap do |args|
|
630
|
+
while (a, args = args.next)
|
631
|
+
case a
|
632
|
+
when KeywordArgs::MissingKeyword
|
633
|
+
errors << a
|
634
|
+
when KeywordArgs::UnexpectedKeyword
|
635
|
+
errors << a
|
636
|
+
end
|
628
637
|
|
629
|
-
|
630
|
-
|
631
|
-
|
638
|
+
yield a
|
639
|
+
|
640
|
+
case a
|
641
|
+
when KeywordArgs::SplatArg
|
642
|
+
case type = a.type
|
643
|
+
when nil
|
644
|
+
raise
|
645
|
+
when AST::Types::Record
|
646
|
+
# @type var keys: Array[Symbol]
|
647
|
+
keys = _ = type.elements.keys
|
648
|
+
ts, args = args.consume_keys(keys, node: a.node)
|
649
|
+
|
650
|
+
case ts
|
651
|
+
when KeywordArgs::UnexpectedKeyword
|
652
|
+
yield ts
|
653
|
+
errors << ts
|
654
|
+
when Array
|
655
|
+
pairs = keys.zip(ts) #: Array[[Symbol, AST::Types::t]]
|
656
|
+
record = AST::Types::Record.new(elements: Hash[pairs])
|
657
|
+
yield KeywordArgs::ArgTypePairs.new(pairs: [[a.node, record]])
|
658
|
+
end
|
632
659
|
else
|
633
|
-
|
660
|
+
args = args.update(index: args.index + 1)
|
661
|
+
|
662
|
+
if args.rest_type
|
663
|
+
type = AST::Builtin::Hash.instance_type(AST::Builtin::Symbol.instance_type, args.possible_value_type)
|
664
|
+
yield KeywordArgs::ArgTypePairs.new(pairs: [[a.node, type]])
|
665
|
+
else
|
666
|
+
yield KeywordArgs::UnexpectedKeyword.new(keyword: nil, node: a.node)
|
667
|
+
end
|
634
668
|
end
|
635
669
|
end
|
636
670
|
end
|
637
671
|
end
|
638
672
|
end
|
639
673
|
|
640
|
-
|
641
|
-
# if pass.node
|
642
|
-
# yield pass
|
643
|
-
# end
|
644
|
-
|
645
|
-
diagnostics = []
|
674
|
+
diagnostics = [] #: Array[Diagnostic::Ruby::Base]
|
646
675
|
|
647
|
-
missing_keywords = []
|
676
|
+
missing_keywords = [] #: Array[Symbol]
|
648
677
|
errors.each do |error|
|
649
678
|
case error
|
650
679
|
when KeywordArgs::UnexpectedKeyword
|
651
680
|
diagnostics << Diagnostic::Ruby::UnexpectedKeywordArgument.new(node: error.node, params: params)
|
652
681
|
when KeywordArgs::MissingKeyword
|
653
|
-
missing_keywords.push(*error.keywords)
|
682
|
+
missing_keywords.push(*error.keywords.to_a)
|
654
683
|
when PositionalArgs::UnexpectedArg
|
655
684
|
diagnostics << Diagnostic::Ruby::UnexpectedPositionalArgument.new(node: error.node, params: params)
|
656
685
|
when PositionalArgs::MissingArg
|
@@ -662,7 +691,7 @@ module Steep
|
|
662
691
|
diagnostics << Diagnostic::Ruby::InsufficientKeywordArguments.new(node: node, params: params, missing_keywords: missing_keywords)
|
663
692
|
end
|
664
693
|
|
665
|
-
diagnostics
|
694
|
+
[forwarded_args, diagnostics]
|
666
695
|
else
|
667
696
|
enum_for :each
|
668
697
|
end
|
@@ -308,7 +308,13 @@ module Steep
|
|
308
308
|
end
|
309
309
|
|
310
310
|
def local_variable_name?(name)
|
311
|
-
|
311
|
+
# Ruby constants start with Uppercase_Letter or Titlecase_Letter in the unicode property.
|
312
|
+
# If name start with `@`, it is instance variable or class instance variable.
|
313
|
+
# If name start with `$`, it is global variable.
|
314
|
+
return false if name.start_with?(/[\p{Uppercase_Letter}\p{Titlecase_Letter}@$]/)
|
315
|
+
return false if TypeConstruction::SPECIAL_LVAR_NAMES.include?(name)
|
316
|
+
|
317
|
+
true
|
312
318
|
end
|
313
319
|
|
314
320
|
def local_variable_name!(name)
|
data/lib/steep/version.rb
CHANGED
data/lib/steep.rb
CHANGED
@@ -105,6 +105,7 @@ require "steep/services/type_check_service"
|
|
105
105
|
require "steep/services/hover_provider/singleton_methods"
|
106
106
|
require "steep/services/hover_provider/ruby"
|
107
107
|
require "steep/services/hover_provider/rbs"
|
108
|
+
require "steep/services/type_name_completion"
|
108
109
|
require "steep/services/completion_provider"
|
109
110
|
require "steep/services/stats_calculator"
|
110
111
|
require "steep/services/file_loader"
|
@@ -15,14 +15,6 @@ gems:
|
|
15
15
|
revision: c42c09528dd99252db98f0744181a6de54ec2f55
|
16
16
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
17
17
|
repo_dir: gems
|
18
|
-
- name: ast
|
19
|
-
version: '2.4'
|
20
|
-
source:
|
21
|
-
type: git
|
22
|
-
name: ruby/gem_rbs_collection
|
23
|
-
revision: c42c09528dd99252db98f0744181a6de54ec2f55
|
24
|
-
remote: https://github.com/ruby/gem_rbs_collection.git
|
25
|
-
repo_dir: gems
|
26
18
|
- name: concurrent-ruby
|
27
19
|
version: '1.1'
|
28
20
|
source:
|
@@ -39,10 +31,6 @@ gems:
|
|
39
31
|
version: '0'
|
40
32
|
source:
|
41
33
|
type: stdlib
|
42
|
-
- name: dbm
|
43
|
-
version: '0'
|
44
|
-
source:
|
45
|
-
type: stdlib
|
46
34
|
- name: fileutils
|
47
35
|
version: '0'
|
48
36
|
source:
|
@@ -87,18 +75,6 @@ gems:
|
|
87
75
|
version: '0'
|
88
76
|
source:
|
89
77
|
type: stdlib
|
90
|
-
- name: optparse
|
91
|
-
version: '0'
|
92
|
-
source:
|
93
|
-
type: stdlib
|
94
|
-
- name: parallel
|
95
|
-
version: '1.20'
|
96
|
-
source:
|
97
|
-
type: git
|
98
|
-
name: ruby/gem_rbs_collection
|
99
|
-
revision: c42c09528dd99252db98f0744181a6de54ec2f55
|
100
|
-
remote: https://github.com/ruby/gem_rbs_collection.git
|
101
|
-
repo_dir: gems
|
102
78
|
- name: pathname
|
103
79
|
version: '0'
|
104
80
|
source:
|
@@ -115,10 +91,6 @@ gems:
|
|
115
91
|
version: '0'
|
116
92
|
source:
|
117
93
|
type: stdlib
|
118
|
-
- name: set
|
119
|
-
version: '0'
|
120
|
-
source:
|
121
|
-
type: stdlib
|
122
94
|
- name: singleton
|
123
95
|
version: '0'
|
124
96
|
source:
|
data/rbs_collection.steep.yaml
CHANGED
@@ -9,14 +9,15 @@ sources:
|
|
9
9
|
path: .gem_rbs_collection
|
10
10
|
|
11
11
|
gems:
|
12
|
-
# Skip loading rbs gem's RBS.
|
13
|
-
# It's unnecessary if you don't use rbs as a library.
|
14
|
-
- name: steep
|
15
|
-
ignore: true
|
16
|
-
- name: set
|
17
|
-
- name: rbs
|
18
|
-
ignore: true
|
19
12
|
- name: with_steep_types
|
20
13
|
ignore: true
|
21
|
-
- name:
|
22
|
-
- name:
|
14
|
+
- name: activesupport
|
15
|
+
- name: rainbow
|
16
|
+
- name: listen
|
17
|
+
- name: json
|
18
|
+
- name: logger
|
19
|
+
- name: fileutils
|
20
|
+
- name: strscan
|
21
|
+
- name: csv
|
22
|
+
- name: pathname
|
23
|
+
- name: securerandom
|
data/sample/lib/conference.rb
CHANGED
data/sample/sig/conference.rbs
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
module Parser
|
2
|
+
module AST
|
3
|
+
interface _BlockNode
|
4
|
+
def type: () -> :block
|
5
|
+
|
6
|
+
%a{pure} def loc: () -> (Source::Map & _BlockLocation)
|
7
|
+
end
|
8
|
+
|
9
|
+
interface _BlockLocation
|
10
|
+
%a{pure} def end: () -> Source::Range
|
11
|
+
end
|
12
|
+
|
13
|
+
interface _DefNode
|
14
|
+
def type: () -> :def
|
15
|
+
|
16
|
+
def children: () -> [Symbol, Node, Node?]
|
17
|
+
|
18
|
+
%a{pure} def loc: () -> (Source::Map & _DefLocation)
|
19
|
+
end
|
20
|
+
|
21
|
+
interface _DefLocation
|
22
|
+
%a{pure} def end: () -> Source::Range?
|
23
|
+
end
|
24
|
+
|
25
|
+
interface _CaseNode
|
26
|
+
def type: () -> :case
|
27
|
+
|
28
|
+
%a{pure} def loc: () -> (Source::Map & _CaseLocation)
|
29
|
+
end
|
30
|
+
|
31
|
+
interface _CaseLocation
|
32
|
+
%a{pure} def else: () -> Source::Range?
|
33
|
+
|
34
|
+
%a{pure} def end: () -> Source::Range
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/sig/shims/parser.rbs
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
use RBS::TypeName, RBS::Resolver::TypeNameResolver
|
2
|
+
|
1
3
|
module Steep
|
2
4
|
module AST
|
3
5
|
module Types
|
@@ -10,13 +12,13 @@ module Steep
|
|
10
12
|
|
11
13
|
attr_reader type_interface_cache: untyped
|
12
14
|
|
13
|
-
@type_name_resolver:
|
15
|
+
@type_name_resolver: TypeNameResolver?
|
14
16
|
|
15
17
|
def inspect: () -> String
|
16
18
|
|
17
19
|
def initialize: (builder: RBS::DefinitionBuilder) -> void
|
18
20
|
|
19
|
-
def type_name_resolver: () ->
|
21
|
+
def type_name_resolver: () -> TypeNameResolver
|
20
22
|
|
21
23
|
def type: (RBS::Types::t `type`) -> t
|
22
24
|
|
@@ -40,7 +42,7 @@ module Steep
|
|
40
42
|
|
41
43
|
def method_type_1: (Interface::MethodType method_type) -> RBS::MethodType
|
42
44
|
|
43
|
-
def unfold: (
|
45
|
+
def unfold: (TypeName type_name, Array[t] args) -> t
|
44
46
|
|
45
47
|
# Unfold type alias one step, or returns itself
|
46
48
|
#
|
@@ -51,7 +53,7 @@ module Steep
|
|
51
53
|
# * Unions and intersections are expanded
|
52
54
|
# * Returns `nil` if it is recursive
|
53
55
|
#
|
54
|
-
def deep_expand_alias: (t `type`, ?recursive: Set[
|
56
|
+
def deep_expand_alias: (t `type`, ?recursive: Set[TypeName]) -> t?
|
55
57
|
|
56
58
|
# Convert union types to array of types
|
57
59
|
#
|
@@ -59,17 +61,17 @@ module Steep
|
|
59
61
|
|
60
62
|
def unwrap_optional: (Types::t `type`) -> [Types::t, Types::t]
|
61
63
|
|
62
|
-
def module_name?: (
|
64
|
+
def module_name?: (TypeName type_name) -> bool
|
63
65
|
|
64
|
-
def class_name?: (
|
66
|
+
def class_name?: (TypeName type_name) -> bool
|
65
67
|
|
66
68
|
def env: () -> RBS::Environment
|
67
69
|
|
68
70
|
def absolute_type: (t `type`, context: RBS::Resolver::context) -> t
|
69
71
|
|
70
|
-
def absolute_type_name: (
|
72
|
+
def absolute_type_name: (TypeName type_name, context: RBS::Resolver::context) -> TypeName?
|
71
73
|
|
72
|
-
def instance_type: (
|
74
|
+
def instance_type: (TypeName type_name, ?args: Array[t]?, ?location: untyped?) -> t
|
73
75
|
|
74
76
|
def try_singleton_type: (t) -> t?
|
75
77
|
|