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.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/lib/rbi/formatter.rb +5 -16
- data/lib/rbi/index.rb +37 -41
- data/lib/rbi/loc.rb +6 -18
- data/lib/rbi/model.rb +207 -575
- data/lib/rbi/parser.rb +64 -63
- data/lib/rbi/printer.rb +135 -101
- data/lib/rbi/rbs/method_type_translator.rb +120 -0
- data/lib/rbi/rbs/type_translator.rb +181 -0
- data/lib/rbi/rbs_printer.rb +178 -116
- data/lib/rbi/rewriters/add_sig_templates.rb +7 -10
- data/lib/rbi/rewriters/annotate.rb +6 -9
- data/lib/rbi/rewriters/attr_to_methods.rb +16 -32
- data/lib/rbi/rewriters/deannotate.rb +5 -8
- data/lib/rbi/rewriters/filter_versions.rb +7 -12
- data/lib/rbi/rewriters/flatten_singleton_methods.rb +3 -6
- data/lib/rbi/rewriters/flatten_visibilities.rb +4 -7
- data/lib/rbi/rewriters/group_nodes.rb +6 -11
- data/lib/rbi/rewriters/merge_trees.rb +74 -122
- data/lib/rbi/rewriters/nest_non_public_members.rb +5 -10
- data/lib/rbi/rewriters/nest_singleton_methods.rb +3 -6
- data/lib/rbi/rewriters/nest_top_level_members.rb +4 -7
- data/lib/rbi/rewriters/remove_known_definitions.rb +10 -20
- data/lib/rbi/rewriters/sort_nodes.rb +7 -10
- data/lib/rbi/rewriters/translate_rbs_sigs.rb +87 -0
- data/lib/rbi/type.rb +127 -129
- data/lib/rbi/type_parser.rb +15 -15
- data/lib/rbi/type_visitor.rb +19 -21
- data/lib/rbi/version.rb +1 -1
- data/lib/rbi/visitor.rb +50 -46
- data/lib/rbi.rb +7 -3
- data/rbi/rbi.rbi +4686 -0
- metadata +21 -3
@@ -4,15 +4,14 @@
|
|
4
4
|
module RBI
|
5
5
|
module Rewriters
|
6
6
|
class AddSigTemplates < Visitor
|
7
|
-
|
8
|
-
|
9
|
-
sig { params(with_todo_comment: T::Boolean).void }
|
7
|
+
#: (?with_todo_comment: bool) -> void
|
10
8
|
def initialize(with_todo_comment: true)
|
11
9
|
super()
|
12
10
|
@with_todo_comment = with_todo_comment
|
13
11
|
end
|
14
12
|
|
15
|
-
|
13
|
+
# @override
|
14
|
+
#: (Node? node) -> void
|
16
15
|
def visit(node)
|
17
16
|
case node
|
18
17
|
when Tree
|
@@ -26,7 +25,7 @@ module RBI
|
|
26
25
|
|
27
26
|
private
|
28
27
|
|
29
|
-
|
28
|
+
#: (Attr attr) -> void
|
30
29
|
def add_attr_sig(attr)
|
31
30
|
return unless attr.sigs.empty?
|
32
31
|
return if attr.names.size > 1
|
@@ -41,7 +40,7 @@ module RBI
|
|
41
40
|
add_todo_comment(attr)
|
42
41
|
end
|
43
42
|
|
44
|
-
|
43
|
+
#: (Method method) -> void
|
45
44
|
def add_method_sig(method)
|
46
45
|
return unless method.sigs.empty?
|
47
46
|
|
@@ -52,7 +51,7 @@ module RBI
|
|
52
51
|
add_todo_comment(method)
|
53
52
|
end
|
54
53
|
|
55
|
-
|
54
|
+
#: (NodeWithComments node) -> void
|
56
55
|
def add_todo_comment(node)
|
57
56
|
node.comments << Comment.new("TODO: fill in signature with appropriate type information") if @with_todo_comment
|
58
57
|
end
|
@@ -60,9 +59,7 @@ module RBI
|
|
60
59
|
end
|
61
60
|
|
62
61
|
class Tree
|
63
|
-
|
64
|
-
|
65
|
-
sig { params(with_todo_comment: T::Boolean).void }
|
62
|
+
#: (?with_todo_comment: bool) -> void
|
66
63
|
def add_sig_templates!(with_todo_comment: true)
|
67
64
|
visitor = Rewriters::AddSigTemplates.new(with_todo_comment: with_todo_comment)
|
68
65
|
visitor.visit(self)
|
@@ -4,9 +4,7 @@
|
|
4
4
|
module RBI
|
5
5
|
module Rewriters
|
6
6
|
class Annotate < Visitor
|
7
|
-
|
8
|
-
|
9
|
-
sig { params(annotation: String, annotate_scopes: T::Boolean, annotate_properties: T::Boolean).void }
|
7
|
+
#: (String annotation, ?annotate_scopes: bool, ?annotate_properties: bool) -> void
|
10
8
|
def initialize(annotation, annotate_scopes: false, annotate_properties: false)
|
11
9
|
super()
|
12
10
|
@annotation = annotation
|
@@ -14,7 +12,8 @@ module RBI
|
|
14
12
|
@annotate_properties = annotate_properties
|
15
13
|
end
|
16
14
|
|
17
|
-
|
15
|
+
# @override
|
16
|
+
#: (Node? node) -> void
|
18
17
|
def visit(node)
|
19
18
|
case node
|
20
19
|
when Scope
|
@@ -27,14 +26,14 @@ module RBI
|
|
27
26
|
|
28
27
|
private
|
29
28
|
|
30
|
-
|
29
|
+
#: (NodeWithComments node) -> void
|
31
30
|
def annotate_node(node)
|
32
31
|
return if node.annotations.one?(@annotation)
|
33
32
|
|
34
33
|
node.comments << Comment.new("@#{@annotation}")
|
35
34
|
end
|
36
35
|
|
37
|
-
|
36
|
+
#: (Node node) -> bool
|
38
37
|
def root?(node)
|
39
38
|
parent = node.parent_tree
|
40
39
|
parent.is_a?(Tree) && parent.parent_tree.nil?
|
@@ -43,9 +42,7 @@ module RBI
|
|
43
42
|
end
|
44
43
|
|
45
44
|
class Tree
|
46
|
-
|
47
|
-
|
48
|
-
sig { params(annotation: String, annotate_scopes: T::Boolean, annotate_properties: T::Boolean).void }
|
45
|
+
#: (String annotation, ?annotate_scopes: bool, ?annotate_properties: bool) -> void
|
49
46
|
def annotate!(annotation, annotate_scopes: false, annotate_properties: false)
|
50
47
|
visitor = Rewriters::Annotate.new(
|
51
48
|
annotation,
|
@@ -3,10 +3,10 @@
|
|
3
3
|
|
4
4
|
module RBI
|
5
5
|
class UnexpectedMultipleSigsError < Error
|
6
|
-
|
6
|
+
#: Node
|
7
7
|
attr_reader :node
|
8
8
|
|
9
|
-
|
9
|
+
#: (Node node) -> void
|
10
10
|
def initialize(node)
|
11
11
|
super(<<~MSG)
|
12
12
|
This declaration cannot have more than one sig.
|
@@ -20,9 +20,8 @@ module RBI
|
|
20
20
|
|
21
21
|
module Rewriters
|
22
22
|
class AttrToMethods < Visitor
|
23
|
-
|
24
|
-
|
25
|
-
sig { override.params(node: T.nilable(Node)).void }
|
23
|
+
# @override
|
24
|
+
#: (Node? node) -> void
|
26
25
|
def visit(node)
|
27
26
|
case node
|
28
27
|
when Tree
|
@@ -35,7 +34,7 @@ module RBI
|
|
35
34
|
|
36
35
|
private
|
37
36
|
|
38
|
-
|
37
|
+
#: (Node node, with: Array[Node]) -> void
|
39
38
|
def replace(node, with:)
|
40
39
|
tree = node.parent_tree
|
41
40
|
raise ReplaceNodeError, "Can't replace #{self} without a parent tree" unless tree
|
@@ -47,9 +46,7 @@ module RBI
|
|
47
46
|
end
|
48
47
|
|
49
48
|
class Tree
|
50
|
-
|
51
|
-
|
52
|
-
sig { void }
|
49
|
+
#: -> void
|
53
50
|
def replace_attributes_with_methods!
|
54
51
|
visitor = Rewriters::AttrToMethods.new
|
55
52
|
visitor.visit(self)
|
@@ -62,7 +59,8 @@ module RBI
|
|
62
59
|
|
63
60
|
private
|
64
61
|
|
65
|
-
|
62
|
+
# @final
|
63
|
+
#: -> [Sig?, (Type | String)?]
|
66
64
|
def parse_sig
|
67
65
|
raise UnexpectedMultipleSigsError, self if 1 < sigs.count
|
68
66
|
|
@@ -77,15 +75,7 @@ module RBI
|
|
77
75
|
[sig, attribute_type]
|
78
76
|
end
|
79
77
|
|
80
|
-
sig
|
81
|
-
params(
|
82
|
-
name: String,
|
83
|
-
sig: T.nilable(Sig),
|
84
|
-
visibility: Visibility,
|
85
|
-
loc: T.nilable(Loc),
|
86
|
-
comments: T::Array[Comment],
|
87
|
-
).returns(Method)
|
88
|
-
end
|
78
|
+
#: (String name, Sig? sig, Visibility visibility, Loc? loc, Array[Comment] comments) -> Method
|
89
79
|
def create_getter_method(name, sig, visibility, loc, comments)
|
90
80
|
Method.new(
|
91
81
|
name,
|
@@ -97,16 +87,7 @@ module RBI
|
|
97
87
|
)
|
98
88
|
end
|
99
89
|
|
100
|
-
sig
|
101
|
-
params(
|
102
|
-
name: String,
|
103
|
-
sig: T.nilable(Sig),
|
104
|
-
attribute_type: T.nilable(T.any(Type, String)),
|
105
|
-
visibility: Visibility,
|
106
|
-
loc: T.nilable(Loc),
|
107
|
-
comments: T::Array[Comment],
|
108
|
-
).returns(Method)
|
109
|
-
end
|
90
|
+
#: (String name, Sig? sig, (Type | String)? attribute_type, Visibility visibility, Loc? loc, Array[Comment] comments) -> Method
|
110
91
|
def create_setter_method(name, sig, attribute_type, visibility, loc, comments) # rubocop:disable Metrics/ParameterLists
|
111
92
|
sig = if sig # Modify the original sig to correct the name, and remove the return type
|
112
93
|
params = attribute_type ? [SigParam.new(name, attribute_type)] : []
|
@@ -136,7 +117,8 @@ module RBI
|
|
136
117
|
end
|
137
118
|
|
138
119
|
class AttrAccessor
|
139
|
-
|
120
|
+
# @override
|
121
|
+
#: -> Array[Method]
|
140
122
|
def convert_to_methods
|
141
123
|
sig, attribute_type = parse_sig
|
142
124
|
|
@@ -150,7 +132,8 @@ module RBI
|
|
150
132
|
end
|
151
133
|
|
152
134
|
class AttrReader
|
153
|
-
|
135
|
+
# @override
|
136
|
+
#: -> Array[Method]
|
154
137
|
def convert_to_methods
|
155
138
|
sig, _ = parse_sig
|
156
139
|
|
@@ -159,7 +142,8 @@ module RBI
|
|
159
142
|
end
|
160
143
|
|
161
144
|
class AttrWriter
|
162
|
-
|
145
|
+
# @override
|
146
|
+
#: -> Array[Method]
|
163
147
|
def convert_to_methods
|
164
148
|
sig, attribute_type = parse_sig
|
165
149
|
|
@@ -4,15 +4,14 @@
|
|
4
4
|
module RBI
|
5
5
|
module Rewriters
|
6
6
|
class Deannotate < Visitor
|
7
|
-
|
8
|
-
|
9
|
-
sig { params(annotation: String).void }
|
7
|
+
#: (String annotation) -> void
|
10
8
|
def initialize(annotation)
|
11
9
|
super()
|
12
10
|
@annotation = annotation
|
13
11
|
end
|
14
12
|
|
15
|
-
|
13
|
+
# @override
|
14
|
+
#: (Node? node) -> void
|
16
15
|
def visit(node)
|
17
16
|
case node
|
18
17
|
when Scope, Const, Attr, Method, TStructField, TypeMember
|
@@ -23,7 +22,7 @@ module RBI
|
|
23
22
|
|
24
23
|
private
|
25
24
|
|
26
|
-
|
25
|
+
#: (NodeWithComments node) -> void
|
27
26
|
def deannotate_node(node)
|
28
27
|
return unless node.annotations.one?(@annotation)
|
29
28
|
|
@@ -35,9 +34,7 @@ module RBI
|
|
35
34
|
end
|
36
35
|
|
37
36
|
class Tree
|
38
|
-
|
39
|
-
|
40
|
-
sig { params(annotation: String).void }
|
37
|
+
#: (String annotation) -> void
|
41
38
|
def deannotate!(annotation)
|
42
39
|
visitor = Rewriters::Deannotate.new(annotation)
|
43
40
|
visitor.visit(self)
|
@@ -55,27 +55,24 @@ module RBI
|
|
55
55
|
# RBI with no versions:
|
56
56
|
# - RBI with no version annotations are automatically counted towards ALL versions
|
57
57
|
class FilterVersions < Visitor
|
58
|
-
extend T::Sig
|
59
|
-
|
60
58
|
VERSION_PREFIX = "version "
|
61
59
|
|
62
60
|
class << self
|
63
|
-
|
64
|
-
|
65
|
-
sig { params(tree: Tree, version: Gem::Version).void }
|
61
|
+
#: (Tree tree, Gem::Version version) -> void
|
66
62
|
def filter(tree, version)
|
67
63
|
v = new(version)
|
68
64
|
v.visit(tree)
|
69
65
|
end
|
70
66
|
end
|
71
67
|
|
72
|
-
|
68
|
+
#: (Gem::Version version) -> void
|
73
69
|
def initialize(version)
|
74
70
|
super()
|
75
71
|
@version = version
|
76
72
|
end
|
77
73
|
|
78
|
-
|
74
|
+
# @override
|
75
|
+
#: (Node? node) -> void
|
79
76
|
def visit(node)
|
80
77
|
return unless node
|
81
78
|
|
@@ -90,7 +87,7 @@ module RBI
|
|
90
87
|
end
|
91
88
|
|
92
89
|
class Node
|
93
|
-
|
90
|
+
#: (Gem::Version version) -> bool
|
94
91
|
def satisfies_version?(version)
|
95
92
|
return true unless is_a?(NodeWithComments)
|
96
93
|
|
@@ -100,7 +97,7 @@ module RBI
|
|
100
97
|
end
|
101
98
|
|
102
99
|
class NodeWithComments
|
103
|
-
|
100
|
+
#: -> Array[Gem::Requirement]
|
104
101
|
def version_requirements
|
105
102
|
annotations.select do |annotation|
|
106
103
|
annotation.start_with?(Rewriters::FilterVersions::VERSION_PREFIX)
|
@@ -112,9 +109,7 @@ module RBI
|
|
112
109
|
end
|
113
110
|
|
114
111
|
class Tree
|
115
|
-
|
116
|
-
|
117
|
-
sig { params(version: Gem::Version).void }
|
112
|
+
#: (Gem::Version version) -> void
|
118
113
|
def filter_versions!(version)
|
119
114
|
visitor = Rewriters::FilterVersions.new(version)
|
120
115
|
visitor.visit(self)
|
@@ -28,9 +28,8 @@ module RBI
|
|
28
28
|
# end
|
29
29
|
# ~~~
|
30
30
|
class FlattenSingletonMethods < Visitor
|
31
|
-
|
32
|
-
|
33
|
-
sig { override.params(node: T.nilable(Node)).void }
|
31
|
+
# @override
|
32
|
+
#: (Node? node) -> void
|
34
33
|
def visit(node)
|
35
34
|
return unless node
|
36
35
|
|
@@ -54,9 +53,7 @@ module RBI
|
|
54
53
|
end
|
55
54
|
|
56
55
|
class Tree
|
57
|
-
|
58
|
-
|
59
|
-
sig { void }
|
56
|
+
#: -> void
|
60
57
|
def flatten_singleton_methods!
|
61
58
|
visitor = Rewriters::FlattenSingletonMethods.new
|
62
59
|
visitor.visit(self)
|
@@ -25,16 +25,15 @@ module RBI
|
|
25
25
|
# end
|
26
26
|
# ~~~
|
27
27
|
class FlattenVisibilities < Visitor
|
28
|
-
|
29
|
-
|
30
|
-
sig { void }
|
28
|
+
#: -> void
|
31
29
|
def initialize
|
32
30
|
super
|
33
31
|
|
34
32
|
@current_visibility = T.let([Public.new], T::Array[Visibility])
|
35
33
|
end
|
36
34
|
|
37
|
-
|
35
|
+
# @override
|
36
|
+
#: (Node? node) -> void
|
38
37
|
def visit(node)
|
39
38
|
return unless node
|
40
39
|
|
@@ -54,9 +53,7 @@ module RBI
|
|
54
53
|
end
|
55
54
|
|
56
55
|
class Tree
|
57
|
-
|
58
|
-
|
59
|
-
sig { void }
|
56
|
+
#: -> void
|
60
57
|
def flatten_visibilities!
|
61
58
|
visitor = Rewriters::FlattenVisibilities.new
|
62
59
|
visitor.visit(self)
|
@@ -6,9 +6,8 @@ module RBI
|
|
6
6
|
|
7
7
|
module Rewriters
|
8
8
|
class GroupNodes < Visitor
|
9
|
-
|
10
|
-
|
11
|
-
sig { override.params(node: T.nilable(Node)).void }
|
9
|
+
# @override
|
10
|
+
#: (Node? node) -> void
|
12
11
|
def visit(node)
|
13
12
|
return unless node
|
14
13
|
|
@@ -32,7 +31,7 @@ module RBI
|
|
32
31
|
|
33
32
|
private
|
34
33
|
|
35
|
-
|
34
|
+
#: (Node node) -> Group::Kind
|
36
35
|
def group_kind(node)
|
37
36
|
case node
|
38
37
|
when Group
|
@@ -75,9 +74,7 @@ module RBI
|
|
75
74
|
end
|
76
75
|
|
77
76
|
class Tree
|
78
|
-
|
79
|
-
|
80
|
-
sig { void }
|
77
|
+
#: -> void
|
81
78
|
def group_nodes!
|
82
79
|
visitor = Rewriters::GroupNodes.new
|
83
80
|
visitor.visit(self)
|
@@ -85,12 +82,10 @@ module RBI
|
|
85
82
|
end
|
86
83
|
|
87
84
|
class Group < Tree
|
88
|
-
|
89
|
-
|
90
|
-
sig { returns(Kind) }
|
85
|
+
#: Kind
|
91
86
|
attr_reader :kind
|
92
87
|
|
93
|
-
|
88
|
+
#: (Kind kind) -> void
|
94
89
|
def initialize(kind)
|
95
90
|
super()
|
96
91
|
@kind = kind
|