steep 1.4.0.dev.2 → 1.4.0.dev.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|