rbi 0.2.4 → 0.3.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.
@@ -37,8 +37,6 @@ module RBI
37
37
  # end
38
38
  # ~~~
39
39
  class Merge
40
- extend T::Sig
41
-
42
40
  class Keep < ::T::Enum
43
41
  enums do
44
42
  NONE = new
@@ -48,9 +46,7 @@ module RBI
48
46
  end
49
47
 
50
48
  class << self
51
- extend T::Sig
52
-
53
- sig { params(left: Tree, right: Tree, left_name: String, right_name: String, keep: Keep).returns(MergeTree) }
49
+ #: (Tree left, Tree right, ?left_name: String, ?right_name: String, ?keep: Keep) -> MergeTree
54
50
  def merge_trees(left, right, left_name: "left", right_name: "right", keep: Keep::NONE)
55
51
  left.nest_singleton_methods!
56
52
  right.nest_singleton_methods!
@@ -63,10 +59,10 @@ module RBI
63
59
  end
64
60
  end
65
61
 
66
- sig { returns(MergeTree) }
62
+ #: MergeTree
67
63
  attr_reader :tree
68
64
 
69
- sig { params(left_name: String, right_name: String, keep: Keep).void }
65
+ #: (?left_name: String, ?right_name: String, ?keep: Keep) -> void
70
66
  def initialize(left_name: "left", right_name: "right", keep: Keep::NONE)
71
67
  @left_name = left_name
72
68
  @right_name = right_name
@@ -75,7 +71,7 @@ module RBI
75
71
  @scope_stack = T.let([@tree], T::Array[Tree])
76
72
  end
77
73
 
78
- sig { params(tree: Tree).void }
74
+ #: (Tree tree) -> void
79
75
  def merge(tree)
80
76
  v = TreeMerger.new(@tree, left_name: @left_name, right_name: @right_name, keep: @keep)
81
77
  v.visit(tree)
@@ -84,26 +80,22 @@ module RBI
84
80
 
85
81
  # Used for logging / error displaying purpose
86
82
  class Conflict < T::Struct
87
- extend T::Sig
88
-
89
83
  const :left, Node
90
84
  const :right, Node
91
85
  const :left_name, String
92
86
  const :right_name, String
93
87
 
94
- sig { returns(String) }
88
+ #: -> String
95
89
  def to_s
96
90
  "Conflicting definitions for `#{left}`"
97
91
  end
98
92
  end
99
93
 
100
94
  class TreeMerger < Visitor
101
- extend T::Sig
102
-
103
- sig { returns(T::Array[Conflict]) }
95
+ #: Array[Conflict]
104
96
  attr_reader :conflicts
105
97
 
106
- sig { params(output: Tree, left_name: String, right_name: String, keep: Keep).void }
98
+ #: (Tree output, ?left_name: String, ?right_name: String, ?keep: Keep) -> void
107
99
  def initialize(output, left_name: "left", right_name: "right", keep: Keep::NONE)
108
100
  super()
109
101
  @tree = output
@@ -115,7 +107,8 @@ module RBI
115
107
  @conflicts = T.let([], T::Array[Conflict])
116
108
  end
117
109
 
118
- sig { override.params(node: T.nilable(Node)).void }
110
+ # @override
111
+ #: (Node? node) -> void
119
112
  def visit(node)
120
113
  return unless node
121
114
 
@@ -164,12 +157,12 @@ module RBI
164
157
 
165
158
  private
166
159
 
167
- sig { returns(Tree) }
160
+ #: -> Tree
168
161
  def current_scope
169
162
  T.must(@scope_stack.last)
170
163
  end
171
164
 
172
- sig { params(node: Node).returns(T.nilable(Node)) }
165
+ #: (Node node) -> Node?
173
166
  def previous_definition(node)
174
167
  case node
175
168
  when Indexable
@@ -181,14 +174,14 @@ module RBI
181
174
  nil
182
175
  end
183
176
 
184
- sig { params(left: Scope, right: Scope).void }
177
+ #: (Scope left, Scope right) -> void
185
178
  def make_conflict_scope(left, right)
186
179
  @conflicts << Conflict.new(left: left, right: right, left_name: @left_name, right_name: @right_name)
187
180
  scope_conflict = ScopeConflict.new(left: left, right: right, left_name: @left_name, right_name: @right_name)
188
181
  left.replace(scope_conflict)
189
182
  end
190
183
 
191
- sig { params(left: Node, right: Node).void }
184
+ #: (Node left, Node right) -> void
192
185
  def make_conflict_tree(left, right)
193
186
  @conflicts << Conflict.new(left: left, right: right, left_name: @left_name, right_name: @right_name)
194
187
  tree = left.parent_conflict_tree
@@ -200,7 +193,7 @@ module RBI
200
193
  tree.right << right
201
194
  end
202
195
 
203
- sig { params(left: Scope, right: Scope).returns(Scope) }
196
+ #: (Scope left, Scope right) -> Scope
204
197
  def replace_scope_header(left, right)
205
198
  right_copy = right.dup_empty
206
199
  left.replace(right_copy)
@@ -243,12 +236,14 @@ module RBI
243
236
  # end
244
237
  # ~~~
245
238
  class ConflictTreeMerger < Visitor
246
- sig { override.params(node: T.nilable(Node)).void }
239
+ # @override
240
+ #: (Node? node) -> void
247
241
  def visit(node)
248
242
  visit_all(node.nodes) if node.is_a?(Tree)
249
243
  end
250
244
 
251
- sig { override.params(nodes: T::Array[Node]).void }
245
+ # @override
246
+ #: (Array[Node] nodes) -> void
252
247
  def visit_all(nodes)
253
248
  last_conflict_tree = T.let(nil, T.nilable(ConflictTree))
254
249
  nodes.dup.each do |node|
@@ -269,7 +264,7 @@ module RBI
269
264
 
270
265
  private
271
266
 
272
- sig { params(left: Tree, right: Tree).void }
267
+ #: (Tree left, Tree right) -> void
273
268
  def merge_conflict_trees(left, right)
274
269
  right.nodes.dup.each do |node|
275
270
  left << node
@@ -280,19 +275,17 @@ module RBI
280
275
  end
281
276
 
282
277
  class Node
283
- extend T::Sig
284
-
285
278
  # Can `self` and `_other` be merged into a single definition?
286
- sig { params(_other: Node).returns(T::Boolean) }
279
+ #: (Node _other) -> bool
287
280
  def compatible_with?(_other)
288
281
  true
289
282
  end
290
283
 
291
284
  # Merge `self` and `other` into a single definition
292
- sig { params(other: Node).void }
285
+ #: (Node other) -> void
293
286
  def merge_with(other); end
294
287
 
295
- sig { returns(T.nilable(ConflictTree)) }
288
+ #: -> ConflictTree?
296
289
  def parent_conflict_tree
297
290
  parent = T.let(parent_tree, T.nilable(Node))
298
291
  while parent
@@ -305,9 +298,8 @@ module RBI
305
298
  end
306
299
 
307
300
  class NodeWithComments
308
- extend T::Sig
309
-
310
- sig { override.params(other: Node).void }
301
+ # @override
302
+ #: (Node other) -> void
311
303
  def merge_with(other)
312
304
  return unless other.is_a?(NodeWithComments)
313
305
 
@@ -318,9 +310,7 @@ module RBI
318
310
  end
319
311
 
320
312
  class Tree
321
- extend T::Sig
322
-
323
- sig { params(other: Tree, left_name: String, right_name: String, keep: Rewriters::Merge::Keep).returns(MergeTree) }
313
+ #: (Tree other, ?left_name: String, ?right_name: String, ?keep: Rewriters::Merge::Keep) -> MergeTree
324
314
  def merge(other, left_name: "left", right_name: "right", keep: Rewriters::Merge::Keep::NONE)
325
315
  Rewriters::Merge.merge_trees(self, other, left_name: left_name, right_name: right_name, keep: keep)
326
316
  end
@@ -328,19 +318,10 @@ module RBI
328
318
 
329
319
  # A tree that _might_ contain conflicts
330
320
  class MergeTree < Tree
331
- extend T::Sig
332
-
333
- sig { returns(T::Array[Rewriters::Merge::Conflict]) }
321
+ #: Array[Rewriters::Merge::Conflict]
334
322
  attr_reader :conflicts
335
323
 
336
- sig do
337
- params(
338
- loc: T.nilable(Loc),
339
- comments: T::Array[Comment],
340
- conflicts: T::Array[Rewriters::Merge::Conflict],
341
- block: T.nilable(T.proc.params(node: Tree).void),
342
- ).void
343
- end
324
+ #: (?loc: Loc?, ?comments: Array[Comment], ?conflicts: Array[Rewriters::Merge::Conflict]) ?{ (Tree node) -> void } -> void
344
325
  def initialize(loc: nil, comments: [], conflicts: [], &block)
345
326
  super(loc: loc, comments: comments)
346
327
  @conflicts = conflicts
@@ -351,10 +332,8 @@ module RBI
351
332
  class DuplicateNodeError < Error; end
352
333
 
353
334
  class Scope
354
- extend T::Sig
355
-
356
335
  # Duplicate `self` scope without its body
357
- sig { returns(T.self_type) }
336
+ #: -> self
358
337
  def dup_empty
359
338
  case self
360
339
  when Module
@@ -378,45 +357,40 @@ module RBI
378
357
  end
379
358
 
380
359
  class Class
381
- extend T::Sig
382
-
383
- sig { override.params(other: Node).returns(T::Boolean) }
360
+ # @override
361
+ #: (Node other) -> bool
384
362
  def compatible_with?(other)
385
363
  other.is_a?(Class) && superclass_name == other.superclass_name
386
364
  end
387
365
  end
388
366
 
389
367
  class Module
390
- extend T::Sig
391
-
392
- sig { override.params(other: Node).returns(T::Boolean) }
368
+ # @override
369
+ #: (Node other) -> bool
393
370
  def compatible_with?(other)
394
371
  other.is_a?(Module)
395
372
  end
396
373
  end
397
374
 
398
375
  class Struct
399
- extend T::Sig
400
-
401
- sig { override.params(other: Node).returns(T::Boolean) }
376
+ # @override
377
+ #: (Node other) -> bool
402
378
  def compatible_with?(other)
403
379
  other.is_a?(Struct) && members == other.members && keyword_init == other.keyword_init
404
380
  end
405
381
  end
406
382
 
407
383
  class Const
408
- extend T::Sig
409
-
410
- sig { override.params(other: Node).returns(T::Boolean) }
384
+ # @override
385
+ #: (Node other) -> bool
411
386
  def compatible_with?(other)
412
387
  other.is_a?(Const) && name == other.name && value == other.value
413
388
  end
414
389
  end
415
390
 
416
391
  class Attr
417
- extend T::Sig
418
-
419
- sig { override.params(other: Node).returns(T::Boolean) }
392
+ # @override
393
+ #: (Node other) -> bool
420
394
  def compatible_with?(other)
421
395
  return false unless other.is_a?(Attr)
422
396
  return false unless names == other.names
@@ -424,7 +398,8 @@ module RBI
424
398
  sigs.empty? || other.sigs.empty? || sigs == other.sigs
425
399
  end
426
400
 
427
- sig { override.params(other: Node).void }
401
+ # @override
402
+ #: (Node other) -> void
428
403
  def merge_with(other)
429
404
  return unless other.is_a?(Attr)
430
405
 
@@ -436,36 +411,32 @@ module RBI
436
411
  end
437
412
 
438
413
  class AttrReader
439
- extend T::Sig
440
-
441
- sig { override.params(other: Node).returns(T::Boolean) }
414
+ # @override
415
+ #: (Node other) -> bool
442
416
  def compatible_with?(other)
443
417
  other.is_a?(AttrReader) && super
444
418
  end
445
419
  end
446
420
 
447
421
  class AttrWriter
448
- extend T::Sig
449
-
450
- sig { override.params(other: Node).returns(T::Boolean) }
422
+ # @override
423
+ #: (Node other) -> bool
451
424
  def compatible_with?(other)
452
425
  other.is_a?(AttrWriter) && super
453
426
  end
454
427
  end
455
428
 
456
429
  class AttrAccessor
457
- extend T::Sig
458
-
459
- sig { override.params(other: Node).returns(T::Boolean) }
430
+ # @override
431
+ #: (Node other) -> bool
460
432
  def compatible_with?(other)
461
433
  other.is_a?(AttrAccessor) && super
462
434
  end
463
435
  end
464
436
 
465
437
  class Method
466
- extend T::Sig
467
-
468
- sig { override.params(other: Node).returns(T::Boolean) }
438
+ # @override
439
+ #: (Node other) -> bool
469
440
  def compatible_with?(other)
470
441
  return false unless other.is_a?(Method)
471
442
  return false unless name == other.name
@@ -474,7 +445,8 @@ module RBI
474
445
  sigs.empty? || other.sigs.empty? || sigs == other.sigs
475
446
  end
476
447
 
477
- sig { override.params(other: Node).void }
448
+ # @override
449
+ #: (Node other) -> void
478
450
  def merge_with(other)
479
451
  return unless other.is_a?(Method)
480
452
 
@@ -486,81 +458,72 @@ module RBI
486
458
  end
487
459
 
488
460
  class Mixin
489
- extend T::Sig
490
-
491
- sig { override.params(other: Node).returns(T::Boolean) }
461
+ # @override
462
+ #: (Node other) -> bool
492
463
  def compatible_with?(other)
493
464
  other.is_a?(Mixin) && names == other.names
494
465
  end
495
466
  end
496
467
 
497
468
  class Include
498
- extend T::Sig
499
-
500
- sig { override.params(other: Node).returns(T::Boolean) }
469
+ # @override
470
+ #: (Node other) -> bool
501
471
  def compatible_with?(other)
502
472
  other.is_a?(Include) && super
503
473
  end
504
474
  end
505
475
 
506
476
  class Extend
507
- extend T::Sig
508
-
509
- sig { override.params(other: Node).returns(T::Boolean) }
477
+ # @override
478
+ #: (Node other) -> bool
510
479
  def compatible_with?(other)
511
480
  other.is_a?(Extend) && super
512
481
  end
513
482
  end
514
483
 
515
484
  class MixesInClassMethods
516
- extend T::Sig
517
-
518
- sig { override.params(other: Node).returns(T::Boolean) }
485
+ # @override
486
+ #: (Node other) -> bool
519
487
  def compatible_with?(other)
520
488
  other.is_a?(MixesInClassMethods) && super
521
489
  end
522
490
  end
523
491
 
524
492
  class Helper
525
- extend T::Sig
526
-
527
- sig { override.params(other: Node).returns(T::Boolean) }
493
+ # @override
494
+ #: (Node other) -> bool
528
495
  def compatible_with?(other)
529
496
  other.is_a?(Helper) && name == other.name
530
497
  end
531
498
  end
532
499
 
533
500
  class Send
534
- extend T::Sig
535
-
536
- sig { override.params(other: Node).returns(T::Boolean) }
501
+ # @override
502
+ #: (Node other) -> bool
537
503
  def compatible_with?(other)
538
504
  other.is_a?(Send) && method == other.method && args == other.args
539
505
  end
540
506
  end
541
507
 
542
508
  class TStructField
543
- extend T::Sig
544
-
545
- sig { override.params(other: Node).returns(T::Boolean) }
509
+ # @override
510
+ #: (Node other) -> bool
546
511
  def compatible_with?(other)
547
512
  other.is_a?(TStructField) && name == other.name && type == other.type && default == other.default
548
513
  end
549
514
  end
550
515
 
551
516
  class TStructConst
552
- extend T::Sig
553
-
554
- sig { override.params(other: Node).returns(T::Boolean) }
517
+ # @override
518
+ #: (Node other) -> bool
555
519
  def compatible_with?(other)
556
520
  other.is_a?(TStructConst) && super
557
521
  end
558
522
  end
559
523
 
560
524
  class TStructProp
561
- extend T::Sig
562
-
563
- sig { override.params(other: Node).returns(T::Boolean) }
525
+ # @override
526
+ #: (Node other) -> bool
564
527
  def compatible_with?(other)
565
528
  other.is_a?(TStructProp) && super
566
529
  end
@@ -581,15 +544,13 @@ module RBI
581
544
  # end
582
545
  # ~~~
583
546
  class ConflictTree < Tree
584
- extend T::Sig
585
-
586
- sig { returns(Tree) }
547
+ #: Tree
587
548
  attr_reader :left, :right
588
549
 
589
- sig { returns(String) }
550
+ #: String
590
551
  attr_reader :left_name, :right_name
591
552
 
592
- sig { params(left_name: String, right_name: String).void }
553
+ #: (?left_name: String, ?right_name: String) -> void
593
554
  def initialize(left_name: "left", right_name: "right")
594
555
  super()
595
556
  @left_name = left_name
@@ -614,22 +575,13 @@ module RBI
614
575
  # end
615
576
  # ~~~
616
577
  class ScopeConflict < Tree
617
- extend T::Sig
618
-
619
- sig { returns(Scope) }
578
+ #: Scope
620
579
  attr_reader :left, :right
621
580
 
622
- sig { returns(String) }
581
+ #: String
623
582
  attr_reader :left_name, :right_name
624
583
 
625
- sig do
626
- params(
627
- left: Scope,
628
- right: Scope,
629
- left_name: String,
630
- right_name: String,
631
- ).void
632
- end
584
+ #: (left: Scope, right: Scope, ?left_name: String, ?right_name: String) -> void
633
585
  def initialize(left:, right:, left_name: "left", right_name: "right")
634
586
  super()
635
587
  @left = left
@@ -4,9 +4,8 @@
4
4
  module RBI
5
5
  module Rewriters
6
6
  class NestNonPublicMembers < Visitor
7
- extend T::Sig
8
-
9
- sig { override.params(node: T.nilable(Node)).void }
7
+ # @override
8
+ #: (Node? node) -> void
10
9
  def visit(node)
11
10
  return unless node
12
11
 
@@ -40,9 +39,7 @@ module RBI
40
39
  end
41
40
 
42
41
  class Tree
43
- extend T::Sig
44
-
45
- sig { void }
42
+ #: -> void
46
43
  def nest_non_public_members!
47
44
  visitor = Rewriters::NestNonPublicMembers.new
48
45
  visitor.visit(self)
@@ -50,12 +47,10 @@ module RBI
50
47
  end
51
48
 
52
49
  class VisibilityGroup < Tree
53
- extend T::Sig
54
-
55
- sig { returns(Visibility) }
50
+ #: Visibility
56
51
  attr_reader :visibility
57
52
 
58
- sig { params(visibility: Visibility).void }
53
+ #: (Visibility visibility) -> void
59
54
  def initialize(visibility)
60
55
  super()
61
56
  @visibility = visibility
@@ -4,9 +4,8 @@
4
4
  module RBI
5
5
  module Rewriters
6
6
  class NestSingletonMethods < Visitor
7
- extend T::Sig
8
-
9
- sig { override.params(node: T.nilable(Node)).void }
7
+ # @override
8
+ #: (Node? node) -> void
10
9
  def visit(node)
11
10
  return unless node
12
11
 
@@ -30,9 +29,7 @@ module RBI
30
29
  end
31
30
 
32
31
  class Tree
33
- extend T::Sig
34
-
35
- sig { void }
32
+ #: -> void
36
33
  def nest_singleton_methods!
37
34
  visitor = Rewriters::NestSingletonMethods.new
38
35
  visitor.visit(self)
@@ -20,16 +20,15 @@ module RBI
20
20
  # end
21
21
  # ~~~
22
22
  class NestTopLevelMembers < Visitor
23
- extend T::Sig
24
-
25
- sig { void }
23
+ #: -> void
26
24
  def initialize
27
25
  super
28
26
 
29
27
  @top_level_object_class = T.let(nil, T.nilable(Class))
30
28
  end
31
29
 
32
- sig { override.params(node: T.nilable(Node)).void }
30
+ # @override
31
+ #: (Node? node) -> void
33
32
  def visit(node)
34
33
  return unless node
35
34
 
@@ -57,9 +56,7 @@ module RBI
57
56
  end
58
57
 
59
58
  class Tree
60
- extend T::Sig
61
-
62
- sig { void }
59
+ #: -> void
63
60
  def nest_top_level_members!
64
61
  visitor = Rewriters::NestTopLevelMembers.new
65
62
  visitor.visit(self)
@@ -46,12 +46,10 @@ module RBI
46
46
  # OPERATIONS
47
47
  # ~~~
48
48
  class RemoveKnownDefinitions < Visitor
49
- extend T::Sig
50
-
51
- sig { returns(T::Array[Operation]) }
49
+ #: Array[Operation]
52
50
  attr_reader :operations
53
51
 
54
- sig { params(index: Index).void }
52
+ #: (Index index) -> void
55
53
  def initialize(index)
56
54
  super()
57
55
  @index = index
@@ -59,14 +57,7 @@ module RBI
59
57
  end
60
58
 
61
59
  class << self
62
- extend T::Sig
63
-
64
- sig do
65
- params(
66
- tree: Tree,
67
- index: Index,
68
- ).returns([Tree, T::Array[Operation]])
69
- end
60
+ #: (Tree tree, Index index) -> [Tree, Array[Operation]]
70
61
  def remove(tree, index)
71
62
  v = RemoveKnownDefinitions.new(index)
72
63
  v.visit(tree)
@@ -74,12 +65,13 @@ module RBI
74
65
  end
75
66
  end
76
67
 
77
- sig { params(nodes: T::Array[Node]).void }
68
+ #: (Array[Node] nodes) -> void
78
69
  def visit_all(nodes)
79
70
  nodes.dup.each { |node| visit(node) }
80
71
  end
81
72
 
82
- sig { override.params(node: T.nilable(Node)).void }
73
+ # @override
74
+ #: (Node? node) -> void
83
75
  def visit(node)
84
76
  return unless node
85
77
 
@@ -98,7 +90,7 @@ module RBI
98
90
 
99
91
  private
100
92
 
101
- sig { params(node: Indexable).returns(T.nilable(Node)) }
93
+ #: (Indexable node) -> Node?
102
94
  def previous_definition_for(node)
103
95
  node.index_ids.each do |id|
104
96
  previous = @index[id].first
@@ -107,7 +99,7 @@ module RBI
107
99
  nil
108
100
  end
109
101
 
110
- sig { params(node: Node, previous: Node).returns(T::Boolean) }
102
+ #: (Node node, Node previous) -> bool
111
103
  def can_delete_node?(node, previous)
112
104
  return false unless node.class == previous.class
113
105
 
@@ -125,19 +117,17 @@ module RBI
125
117
  end
126
118
  end
127
119
 
128
- sig { params(node: Node, previous: Node).void }
120
+ #: (Node node, Node previous) -> void
129
121
  def delete_node(node, previous)
130
122
  node.detach
131
123
  @operations << Operation.new(deleted_node: node, duplicate_of: previous)
132
124
  end
133
125
 
134
126
  class Operation < T::Struct
135
- extend T::Sig
136
-
137
127
  const :deleted_node, Node
138
128
  const :duplicate_of, Node
139
129
 
140
- sig { returns(String) }
130
+ #: -> String
141
131
  def to_s
142
132
  "Deleted #{duplicate_of} at #{deleted_node.loc} (duplicate from #{duplicate_of.loc})"
143
133
  end