rbs-inline 0.1.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 +7 -0
- data/CHANGELOG.md +5 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/LICENSE.txt +21 -0
- data/README.md +109 -0
- data/Rakefile +12 -0
- data/Steepfile +27 -0
- data/exe/rbs-inline +6 -0
- data/lib/rbs/inline/annotation_parser.rb +765 -0
- data/lib/rbs/inline/ast/annotations.rb +454 -0
- data/lib/rbs/inline/ast/comment_lines.rb +42 -0
- data/lib/rbs/inline/ast/declarations.rb +243 -0
- data/lib/rbs/inline/ast/members.rb +599 -0
- data/lib/rbs/inline/ast/tree.rb +141 -0
- data/lib/rbs/inline/cli.rb +106 -0
- data/lib/rbs/inline/node_utils.rb +12 -0
- data/lib/rbs/inline/parser.rb +360 -0
- data/lib/rbs/inline/version.rb +7 -0
- data/lib/rbs/inline/writer.rb +210 -0
- data/lib/rbs/inline.rb +22 -0
- data/rbs_collection.lock.yaml +68 -0
- data/rbs_collection.yaml +17 -0
- data/sig/generated/rbs/inline/annotation_parser.rbs +222 -0
- data/sig/generated/rbs/inline/ast/annotations.rbs +185 -0
- data/sig/generated/rbs/inline/ast/declarations.rbs +116 -0
- data/sig/generated/rbs/inline/ast/members.rbs +179 -0
- data/sig/generated/rbs/inline/cli.rbs +21 -0
- data/sig/generated/rbs/inline/parser.rbs +116 -0
- data/sig/rbs/inline/annotation_parser.rbs +0 -0
- data/sig/rbs/inline/ast/comment_lines.rbs +27 -0
- data/sig/rbs/inline/ast/members.rbs +24 -0
- data/sig/rbs/inline/ast/tree.rbs +98 -0
- data/sig/rbs/inline/node_utils.rbs +7 -0
- data/sig/rbs/inline/writer.rbs +27 -0
- data/sig/rbs/inline.rbs +41 -0
- data/yard-samples/hello.rb +6 -0
- data/yard-samples/sample1.rb +26 -0
- metadata +111 -0
@@ -0,0 +1,243 @@
|
|
1
|
+
# rbs_inline: enabled
|
2
|
+
|
3
|
+
module RBS
|
4
|
+
module Inline
|
5
|
+
module AST
|
6
|
+
module Declarations
|
7
|
+
module ConstantUtil
|
8
|
+
# @rbs node: Prism::Node
|
9
|
+
# @rbs returns TypeName?
|
10
|
+
def type_name(node)
|
11
|
+
case node
|
12
|
+
when Prism::ConstantReadNode
|
13
|
+
TypeName(node.name.to_s)
|
14
|
+
when Prism::ConstantPathNode
|
15
|
+
if node.parent
|
16
|
+
if parent = type_name(node.parent)
|
17
|
+
if child = type_name(node.child)
|
18
|
+
return parent + child
|
19
|
+
end
|
20
|
+
end
|
21
|
+
else
|
22
|
+
type_name(node.child)&.absolute!
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# @rbs! type t = ClassDecl | ModuleDecl | ConstantDecl
|
29
|
+
|
30
|
+
# @rbs!
|
31
|
+
# interface _WithComments
|
32
|
+
# def comments: () -> AnnotationParser::ParsingResult?
|
33
|
+
# end
|
34
|
+
|
35
|
+
# @rbs module-self _WithComments
|
36
|
+
module Generics
|
37
|
+
# @rbs returns Array[RBS::AST::TypeParam]
|
38
|
+
def type_params
|
39
|
+
if comments = comments()
|
40
|
+
comments.annotations.filter_map do |annotation|
|
41
|
+
if annotation.is_a?(Annotations::Generic)
|
42
|
+
annotation.type_param
|
43
|
+
end
|
44
|
+
end
|
45
|
+
else
|
46
|
+
[]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
class Base
|
52
|
+
end
|
53
|
+
|
54
|
+
# @rbs generic NODE < Prism::Node
|
55
|
+
class ModuleOrClass < Base
|
56
|
+
# The node that represents the declaration
|
57
|
+
attr_reader :node #:: NODE
|
58
|
+
|
59
|
+
# Leading comment
|
60
|
+
attr_reader :comments #:: AnnotationParser::ParsingResult?
|
61
|
+
|
62
|
+
# Members included in the declaration
|
63
|
+
attr_reader :members #:: Array[Members::t | t]
|
64
|
+
|
65
|
+
# @rbs node: NODE
|
66
|
+
# @rbs comments: AnnotationParser::ParsingResult?
|
67
|
+
def initialize(node, comments) #:: void
|
68
|
+
@node = node
|
69
|
+
@comments = comments
|
70
|
+
@members = []
|
71
|
+
end
|
72
|
+
|
73
|
+
# Type parameters for the declaration
|
74
|
+
def type_params #:: Array[RBS::AST::TypeParam]
|
75
|
+
if comments = comments()
|
76
|
+
comments.annotations.filter_map do |annotation|
|
77
|
+
if annotation.is_a?(Annotations::Generic)
|
78
|
+
annotation.type_param
|
79
|
+
end
|
80
|
+
end
|
81
|
+
else
|
82
|
+
[]
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def start_line #:: Integer
|
87
|
+
node.location.start_line
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
class ClassDecl < ModuleOrClass #[Prism::ClassNode]
|
92
|
+
include ConstantUtil
|
93
|
+
|
94
|
+
# Type application for super class
|
95
|
+
attr_reader :super_app #:: Annotations::Application?
|
96
|
+
|
97
|
+
# @rbs node: Prism::ClassNode
|
98
|
+
# @rbs comments: AnnotationParser::ParsingResult?
|
99
|
+
# @rbs super_app: Annotations::Application?
|
100
|
+
# @rbs returns void
|
101
|
+
def initialize(node, comments, super_app)
|
102
|
+
super(node, comments)
|
103
|
+
|
104
|
+
@super_app = super_app
|
105
|
+
end
|
106
|
+
|
107
|
+
# @rbs %a{pure}
|
108
|
+
def class_name #:: TypeName?
|
109
|
+
type_name(node.constant_path)
|
110
|
+
end
|
111
|
+
|
112
|
+
# @rbs %a{pure}
|
113
|
+
def super_class #:: RBS::AST::Declarations::Class::Super?
|
114
|
+
if comments
|
115
|
+
if inherits = comments.annotations.find {|a| a.is_a?(Annotations::Inherits) } #: Annotations::Inherits?
|
116
|
+
super_name = inherits.super_name
|
117
|
+
super_args = inherits.args
|
118
|
+
|
119
|
+
if super_name && super_args
|
120
|
+
return RBS::AST::Declarations::Class::Super.new(
|
121
|
+
name: super_name,
|
122
|
+
args: super_args,
|
123
|
+
location: nil
|
124
|
+
)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
if node.superclass
|
130
|
+
super_name = nil #: TypeName?
|
131
|
+
super_args = nil #: Array[Types::t]?
|
132
|
+
|
133
|
+
if super_app
|
134
|
+
super_args = super_app.types
|
135
|
+
end
|
136
|
+
|
137
|
+
super_name = type_name(node.superclass)
|
138
|
+
|
139
|
+
if super_name
|
140
|
+
return RBS::AST::Declarations::Class::Super.new(
|
141
|
+
name: super_name,
|
142
|
+
args: super_args || [],
|
143
|
+
location: nil
|
144
|
+
)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
class ModuleDecl < ModuleOrClass #[Prism::ModuleNode]
|
151
|
+
include ConstantUtil
|
152
|
+
|
153
|
+
# @rbs %a{pure}
|
154
|
+
def module_name #:: TypeName?
|
155
|
+
type_name(node.constant_path)
|
156
|
+
end
|
157
|
+
|
158
|
+
# @rbs %a{pure}
|
159
|
+
def module_selfs #:: Array[Annotations::ModuleSelf]
|
160
|
+
if comments
|
161
|
+
comments.annotations.filter_map do |ann|
|
162
|
+
if ann.is_a?(AST::Annotations::ModuleSelf)
|
163
|
+
ann
|
164
|
+
end
|
165
|
+
end
|
166
|
+
else
|
167
|
+
[]
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
class ConstantDecl < Base
|
173
|
+
include ConstantUtil
|
174
|
+
|
175
|
+
attr_reader :node #:: Prism::ConstantWriteNode
|
176
|
+
attr_reader :comments #:: AnnotationParser::ParsingResult?
|
177
|
+
attr_reader :assertion #:: Annotations::Assertion?
|
178
|
+
|
179
|
+
# @rbs node: Prism::ConstantWriteNode
|
180
|
+
# @rbs comments: AnnotationParser::ParsingResult?
|
181
|
+
# @rbs assertion: Annotations::Assertion?
|
182
|
+
def initialize(node, comments, assertion)
|
183
|
+
@node = node
|
184
|
+
@comments = comments
|
185
|
+
@assertion = assertion
|
186
|
+
end
|
187
|
+
|
188
|
+
# @rbs %a{pure}
|
189
|
+
# @rbs returns Types::t
|
190
|
+
def type
|
191
|
+
if assertion
|
192
|
+
case assertion.type
|
193
|
+
when MethodType, nil
|
194
|
+
# skip
|
195
|
+
else
|
196
|
+
return assertion.type
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
if literal = literal_type
|
201
|
+
return literal
|
202
|
+
end
|
203
|
+
|
204
|
+
Types::Bases::Any.new(location: nil)
|
205
|
+
end
|
206
|
+
|
207
|
+
# @rbs %a{pure}
|
208
|
+
# @rbs return Types::t?
|
209
|
+
def literal_type
|
210
|
+
case node.value
|
211
|
+
when Prism::StringNode, Prism::InterpolatedStringNode
|
212
|
+
BuiltinNames::String.instance_type
|
213
|
+
when Prism::SymbolNode, Prism::InterpolatedSymbolNode
|
214
|
+
BuiltinNames::Symbol.instance_type
|
215
|
+
when Prism::RegularExpressionNode, Prism::InterpolatedRegularExpressionNode
|
216
|
+
BuiltinNames::Regexp.instance_type
|
217
|
+
when Prism::IntegerNode
|
218
|
+
BuiltinNames::Integer.instance_type
|
219
|
+
when Prism::FloatNode
|
220
|
+
BuiltinNames::Float.instance_type
|
221
|
+
when Prism::ArrayNode
|
222
|
+
BuiltinNames::Array.instance_type
|
223
|
+
when Prism::HashNode
|
224
|
+
BuiltinNames::Hash.instance_type
|
225
|
+
when Prism::TrueNode, Prism::FalseNode
|
226
|
+
Types::Bases::Bool.new(location: nil)
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
# @rbs %a{pure}
|
231
|
+
# @rbs returns TypeName?
|
232
|
+
def constant_name
|
233
|
+
TypeName.new(name: node.name, namespace: Namespace.empty)
|
234
|
+
end
|
235
|
+
|
236
|
+
def start_line #:: Integer
|
237
|
+
node.location.start_line
|
238
|
+
end
|
239
|
+
end
|
240
|
+
end
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|