rbi 0.4.2 → 0.5.0
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/Gemfile +1 -1
- data/lib/rbi/model.rb +79 -2
- data/lib/rbi/parser.rb +43 -8
- data/lib/rbi/printer.rb +15 -2
- data/lib/rbi/rbs/method_type_translator.rb +1 -1
- data/lib/rbi/rbs/type_translator.rb +7 -4
- data/lib/rbi/rbs_printer.rb +78 -100
- data/lib/rbi/rewriters/add_sig_templates.rb +6 -1
- data/lib/rbi/rewriters/attr_to_methods.rb +1 -0
- data/lib/rbi/rewriters/merge_trees.rb +33 -6
- data/lib/rbi/type.rb +12 -12
- data/lib/rbi/type_parser.rb +4 -6
- data/lib/rbi/version.rb +1 -1
- data/lib/rbi/visitor.rb +10 -0
- data/rbi/rbi.rbi +161 -38
- metadata +1 -1
|
@@ -324,11 +324,26 @@ module RBI
|
|
|
324
324
|
#: (Node other) -> void
|
|
325
325
|
def merge_with(other)
|
|
326
326
|
return unless other.is_a?(NodeWithComments)
|
|
327
|
+
return unless other.comments?
|
|
328
|
+
|
|
329
|
+
comments_by_text = {} #: Hash[String, Array[Comment]]
|
|
330
|
+
comments.each { |comment| index_comment(comments_by_text, comment) }
|
|
327
331
|
|
|
328
332
|
other.comments.each do |comment|
|
|
329
|
-
comments << comment
|
|
333
|
+
comments << comment if index_comment(comments_by_text, comment)
|
|
330
334
|
end
|
|
331
335
|
end
|
|
336
|
+
|
|
337
|
+
private
|
|
338
|
+
|
|
339
|
+
#: (Hash[String, Array[Comment]] index, Comment comment) -> bool
|
|
340
|
+
def index_comment(index, comment)
|
|
341
|
+
same_text = index[comment.text] ||= []
|
|
342
|
+
return false if same_text.any? { |indexed| indexed == comment }
|
|
343
|
+
|
|
344
|
+
same_text << comment
|
|
345
|
+
true
|
|
346
|
+
end
|
|
332
347
|
end
|
|
333
348
|
|
|
334
349
|
class Tree
|
|
@@ -467,6 +482,9 @@ module RBI
|
|
|
467
482
|
return false unless other.is_a?(Method)
|
|
468
483
|
return false unless name == other.name
|
|
469
484
|
return false unless params.size == other.params.size
|
|
485
|
+
if (params_have_forwarding?(params) || params_have_forwarding?(other.params)) && params != other.params
|
|
486
|
+
return false
|
|
487
|
+
end
|
|
470
488
|
|
|
471
489
|
if sigs.empty? && other.sigs.empty?
|
|
472
490
|
compatible_params?(other)
|
|
@@ -485,8 +503,9 @@ module RBI
|
|
|
485
503
|
super
|
|
486
504
|
|
|
487
505
|
if sigs.empty? && !other.sigs.empty?
|
|
488
|
-
@params = other.params.dup
|
|
506
|
+
@params = other.params.map(&:dup)
|
|
489
507
|
@sigs = other.sigs.dup
|
|
508
|
+
rename_sigs_params(@sigs, @params)
|
|
490
509
|
return
|
|
491
510
|
end
|
|
492
511
|
|
|
@@ -503,8 +522,10 @@ module RBI
|
|
|
503
522
|
#: (Method other) -> bool
|
|
504
523
|
def compatible_params?(other)
|
|
505
524
|
return true if params == other.params
|
|
525
|
+
return false unless params.size == other.params.size
|
|
506
526
|
|
|
507
527
|
params.zip(other.params).all? do |p1, p2|
|
|
528
|
+
p2 = p2 #: as !nil
|
|
508
529
|
p1.compatible_with?(p2)
|
|
509
530
|
end
|
|
510
531
|
end
|
|
@@ -512,20 +533,26 @@ module RBI
|
|
|
512
533
|
#: (Array[Param] preferred, Array[Param] fallback) -> Array[Param]
|
|
513
534
|
def merge_params(preferred, fallback)
|
|
514
535
|
preferred.zip(fallback).map do |p1, p2|
|
|
536
|
+
p2 = p2 #: as !nil
|
|
515
537
|
if p1.anonymous?
|
|
516
|
-
p2.dup
|
|
538
|
+
p2.dup
|
|
517
539
|
else
|
|
518
540
|
p1.dup
|
|
519
541
|
end
|
|
520
542
|
end
|
|
521
543
|
end
|
|
522
544
|
|
|
545
|
+
#: (Array[Param] params) -> bool
|
|
546
|
+
def params_have_forwarding?(params)
|
|
547
|
+
params.any?(ForwardingParam)
|
|
548
|
+
end
|
|
549
|
+
|
|
523
550
|
#: (Array[Sig] sigs, Array[Param] params) -> void
|
|
524
551
|
def rename_sigs_params(sigs, params)
|
|
525
552
|
sigs.each do |sig|
|
|
526
|
-
sig_params = sig.params.
|
|
527
|
-
param =
|
|
528
|
-
name = if sig_param.anonymous? && !param.anonymous?
|
|
553
|
+
sig_params = sig.params.each_with_index.map do |sig_param, index|
|
|
554
|
+
param = params[index]
|
|
555
|
+
name = if param && sig_param.anonymous? && !param.anonymous?
|
|
529
556
|
param.name #: as !nil
|
|
530
557
|
else
|
|
531
558
|
sig_param.name
|
data/lib/rbi/type.rb
CHANGED
|
@@ -315,29 +315,29 @@ module RBI
|
|
|
315
315
|
#: Simple
|
|
316
316
|
attr_reader :type
|
|
317
317
|
|
|
318
|
-
#: Type
|
|
319
|
-
attr_reader :
|
|
318
|
+
#: Array[Type]
|
|
319
|
+
attr_reader :type_parameters
|
|
320
320
|
|
|
321
|
-
#: (Simple type,
|
|
322
|
-
def initialize(type,
|
|
321
|
+
#: (Simple type, *Type type_parameters) -> void
|
|
322
|
+
def initialize(type, *type_parameters)
|
|
323
323
|
super()
|
|
324
324
|
@type = type
|
|
325
|
-
@
|
|
325
|
+
@type_parameters = type_parameters #: Array[Type]
|
|
326
326
|
end
|
|
327
327
|
|
|
328
328
|
# @override
|
|
329
329
|
#: (BasicObject other) -> bool
|
|
330
330
|
def ==(other)
|
|
331
|
-
ClassOf === other && @type == other.type && @
|
|
331
|
+
ClassOf === other && @type == other.type && @type_parameters == other.type_parameters
|
|
332
332
|
end
|
|
333
333
|
|
|
334
334
|
# @override
|
|
335
335
|
#: -> String
|
|
336
336
|
def to_rbi
|
|
337
|
-
if @
|
|
338
|
-
"::T.class_of(#{@type.to_rbi})[#{@type_parameter.to_rbi}]"
|
|
339
|
-
else
|
|
337
|
+
if @type_parameters.empty?
|
|
340
338
|
"::T.class_of(#{@type.to_rbi})"
|
|
339
|
+
else
|
|
340
|
+
"::T.class_of(#{@type.to_rbi})[#{@type_parameters.map(&:to_rbi).join(", ")}]"
|
|
341
341
|
end
|
|
342
342
|
end
|
|
343
343
|
|
|
@@ -913,9 +913,9 @@ module RBI
|
|
|
913
913
|
end
|
|
914
914
|
|
|
915
915
|
# Builds a type that represents the singleton class of another type like `T.class_of(Foo)`.
|
|
916
|
-
#: (Simple type,
|
|
917
|
-
def class_of(type,
|
|
918
|
-
ClassOf.new(type,
|
|
916
|
+
#: (Simple type, *(Type | Array[Type]) type_parameters) -> ClassOf
|
|
917
|
+
def class_of(type, *type_parameters)
|
|
918
|
+
ClassOf.new(type, *type_parameters.flatten)
|
|
919
919
|
end
|
|
920
920
|
|
|
921
921
|
# Builds a type that represents a nilable of another type like `T.nilable(String)`.
|
data/lib/rbi/type_parser.rb
CHANGED
|
@@ -130,7 +130,7 @@ module RBI
|
|
|
130
130
|
return Type::Generic.new(recv.slice, *args.map { |arg| parse_node(arg) })
|
|
131
131
|
end
|
|
132
132
|
when Prism::CallNode
|
|
133
|
-
# `T.class_of(Foo)[Bar]`
|
|
133
|
+
# `T.class_of(Foo)[Foo]` or `T.class_of(Foo)[Foo, Bar]`
|
|
134
134
|
if t_class_of?(recv)
|
|
135
135
|
type_args = check_arguments_exactly!(recv, 1)
|
|
136
136
|
type = parse_node(
|
|
@@ -138,11 +138,9 @@ module RBI
|
|
|
138
138
|
)
|
|
139
139
|
raise Error, "Expected a simple type, got `#{type}`" unless type.is_a?(Type::Simple)
|
|
140
140
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
)
|
|
145
|
-
return Type::ClassOf.new(type, type_param)
|
|
141
|
+
type_parameter_args = check_arguments_at_least!(node, 1)
|
|
142
|
+
type_parameters = type_parameter_args.map { |arg| parse_node(arg) }
|
|
143
|
+
return Type::ClassOf.new(type, *type_parameters)
|
|
146
144
|
end
|
|
147
145
|
end
|
|
148
146
|
|
data/lib/rbi/version.rb
CHANGED
data/lib/rbi/visitor.rb
CHANGED
|
@@ -63,8 +63,12 @@ module RBI
|
|
|
63
63
|
visit_kw_opt_param(node)
|
|
64
64
|
when KwRestParam
|
|
65
65
|
visit_kw_rest_param(node)
|
|
66
|
+
when NoKwParam
|
|
67
|
+
visit_no_kw_param(node)
|
|
66
68
|
when BlockParam
|
|
67
69
|
visit_block_param(node)
|
|
70
|
+
when ForwardingParam
|
|
71
|
+
visit_forwarding_param(node)
|
|
68
72
|
when Include
|
|
69
73
|
visit_include(node)
|
|
70
74
|
when Extend
|
|
@@ -173,9 +177,15 @@ module RBI
|
|
|
173
177
|
#: (KwRestParam node) -> void
|
|
174
178
|
def visit_kw_rest_param(node); end
|
|
175
179
|
|
|
180
|
+
#: (NoKwParam node) -> void
|
|
181
|
+
def visit_no_kw_param(node); end
|
|
182
|
+
|
|
176
183
|
#: (BlockParam node) -> void
|
|
177
184
|
def visit_block_param(node); end
|
|
178
185
|
|
|
186
|
+
#: (ForwardingParam node) -> void
|
|
187
|
+
def visit_forwarding_param(node); end
|
|
188
|
+
|
|
179
189
|
#: (Include node) -> void
|
|
180
190
|
def visit_include(node); end
|
|
181
191
|
|