rbs 3.10.4 → 4.0.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.
Files changed (267) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +14 -14
  3. data/.github/workflows/bundle-update.yml +60 -0
  4. data/.github/workflows/c-check.yml +7 -5
  5. data/.github/workflows/comments.yml +2 -2
  6. data/.github/workflows/dependabot.yml +2 -2
  7. data/.github/workflows/ruby.yml +16 -26
  8. data/.github/workflows/rust.yml +95 -0
  9. data/.github/workflows/typecheck.yml +1 -1
  10. data/.github/workflows/windows.yml +2 -2
  11. data/.rubocop.yml +2 -2
  12. data/.vscode/extensions.json +5 -0
  13. data/.vscode/settings.json +19 -0
  14. data/CHANGELOG.md +202 -2
  15. data/Rakefile +9 -23
  16. data/Steepfile +2 -0
  17. data/config.yml +457 -13
  18. data/core/array.rbs +218 -188
  19. data/core/basic_object.rbs +9 -8
  20. data/core/binding.rbs +0 -2
  21. data/core/builtin.rbs +2 -2
  22. data/core/class.rbs +6 -5
  23. data/core/comparable.rbs +45 -31
  24. data/core/complex.rbs +66 -55
  25. data/core/dir.rbs +57 -45
  26. data/core/encoding.rbs +6 -6
  27. data/core/enumerable.rbs +105 -91
  28. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  29. data/core/enumerator.rbs +24 -3
  30. data/core/errno.rbs +3 -2
  31. data/core/errors.rbs +31 -29
  32. data/core/exception.rbs +12 -12
  33. data/core/fiber.rbs +47 -36
  34. data/core/file.rbs +242 -169
  35. data/core/file_test.rbs +2 -2
  36. data/core/float.rbs +42 -68
  37. data/core/gc.rbs +78 -70
  38. data/core/hash.rbs +70 -60
  39. data/core/integer.rbs +32 -75
  40. data/core/io/buffer.rbs +36 -36
  41. data/core/io/wait.rbs +7 -7
  42. data/core/io.rbs +192 -146
  43. data/core/kernel.rbs +198 -147
  44. data/core/marshal.rbs +3 -3
  45. data/core/match_data.rbs +14 -12
  46. data/core/math.rbs +69 -67
  47. data/core/method.rbs +6 -8
  48. data/core/module.rbs +148 -88
  49. data/core/nil_class.rbs +4 -3
  50. data/core/numeric.rbs +53 -50
  51. data/core/object.rbs +6 -8
  52. data/core/object_space.rbs +11 -10
  53. data/core/pathname.rbs +131 -81
  54. data/core/proc.rbs +65 -34
  55. data/core/process.rbs +221 -201
  56. data/core/ractor.rbs +15 -11
  57. data/core/random.rbs +21 -3
  58. data/core/range.rbs +152 -49
  59. data/core/rational.rbs +5 -56
  60. data/core/rbs/unnamed/argf.rbs +58 -51
  61. data/core/rbs/unnamed/env_class.rbs +18 -13
  62. data/core/rbs/unnamed/main_class.rbs +123 -0
  63. data/core/rbs/unnamed/random.rbs +7 -116
  64. data/core/regexp.rbs +236 -197
  65. data/core/ruby.rbs +1 -1
  66. data/core/ruby_vm.rbs +32 -30
  67. data/core/rubygems/config_file.rbs +5 -5
  68. data/core/rubygems/errors.rbs +1 -1
  69. data/core/rubygems/requirement.rbs +5 -5
  70. data/core/rubygems/rubygems.rbs +5 -3
  71. data/core/set.rbs +17 -16
  72. data/core/signal.rbs +2 -2
  73. data/core/string.rbs +318 -298
  74. data/core/struct.rbs +26 -25
  75. data/core/symbol.rbs +25 -24
  76. data/core/thread.rbs +40 -41
  77. data/core/time.rbs +47 -42
  78. data/core/trace_point.rbs +34 -31
  79. data/core/true_class.rbs +2 -2
  80. data/core/unbound_method.rbs +10 -10
  81. data/core/warning.rbs +7 -7
  82. data/docs/collection.md +1 -1
  83. data/docs/config.md +171 -0
  84. data/docs/inline.md +576 -0
  85. data/docs/syntax.md +46 -16
  86. data/docs/type_fingerprint.md +21 -0
  87. data/exe/rbs +1 -1
  88. data/ext/rbs_extension/ast_translation.c +595 -98
  89. data/ext/rbs_extension/class_constants.c +30 -0
  90. data/ext/rbs_extension/class_constants.h +15 -0
  91. data/ext/rbs_extension/legacy_location.c +30 -53
  92. data/ext/rbs_extension/legacy_location.h +37 -0
  93. data/ext/rbs_extension/main.c +125 -24
  94. data/include/rbs/ast.h +485 -150
  95. data/include/rbs/lexer.h +11 -4
  96. data/include/rbs/location.h +25 -44
  97. data/include/rbs/parser.h +20 -2
  98. data/include/rbs/util/rbs_constant_pool.h +0 -3
  99. data/include/rbs.h +8 -0
  100. data/lib/rbs/ast/annotation.rb +1 -1
  101. data/lib/rbs/ast/comment.rb +1 -1
  102. data/lib/rbs/ast/declarations.rb +10 -10
  103. data/lib/rbs/ast/members.rb +14 -14
  104. data/lib/rbs/ast/ruby/annotations.rb +409 -0
  105. data/lib/rbs/ast/ruby/comment_block.rb +245 -0
  106. data/lib/rbs/ast/ruby/declarations.rb +281 -0
  107. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  108. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  109. data/lib/rbs/ast/ruby/members.rb +723 -0
  110. data/lib/rbs/ast/type_param.rb +24 -4
  111. data/lib/rbs/buffer.rb +105 -20
  112. data/lib/rbs/cli/diff.rb +16 -15
  113. data/lib/rbs/cli/validate.rb +62 -125
  114. data/lib/rbs/cli.rb +55 -23
  115. data/lib/rbs/collection/config/lockfile_generator.rb +8 -4
  116. data/lib/rbs/collection/sources/git.rb +1 -0
  117. data/lib/rbs/collection.rb +0 -1
  118. data/lib/rbs/definition.rb +6 -1
  119. data/lib/rbs/definition_builder/ancestor_builder.rb +119 -63
  120. data/lib/rbs/definition_builder/method_builder.rb +65 -30
  121. data/lib/rbs/definition_builder.rb +177 -20
  122. data/lib/rbs/diff.rb +7 -1
  123. data/lib/rbs/environment/class_entry.rb +69 -0
  124. data/lib/rbs/environment/module_entry.rb +66 -0
  125. data/lib/rbs/environment.rb +338 -155
  126. data/lib/rbs/environment_loader.rb +2 -2
  127. data/lib/rbs/errors.rb +30 -20
  128. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  129. data/lib/rbs/inline_parser.rb +542 -0
  130. data/lib/rbs/location_aux.rb +36 -4
  131. data/lib/rbs/locator.rb +5 -1
  132. data/lib/rbs/method_type.rb +5 -3
  133. data/lib/rbs/namespace.rb +0 -7
  134. data/lib/rbs/parser_aux.rb +31 -8
  135. data/lib/rbs/prototype/helpers.rb +57 -0
  136. data/lib/rbs/prototype/rb.rb +3 -28
  137. data/lib/rbs/prototype/rbi.rb +3 -20
  138. data/lib/rbs/prototype/runtime.rb +10 -2
  139. data/lib/rbs/resolver/type_name_resolver.rb +0 -8
  140. data/lib/rbs/source.rb +99 -0
  141. data/lib/rbs/subtractor.rb +4 -3
  142. data/lib/rbs/test/type_check.rb +5 -2
  143. data/lib/rbs/type_name.rb +1 -8
  144. data/lib/rbs/types.rb +88 -78
  145. data/lib/rbs/unit_test/convertibles.rb +1 -0
  146. data/lib/rbs/unit_test/type_assertions.rb +35 -8
  147. data/lib/rbs/validator.rb +2 -2
  148. data/lib/rbs/version.rb +1 -1
  149. data/lib/rbs.rb +12 -1
  150. data/rbs.gemspec +3 -2
  151. data/rust/.gitignore +1 -0
  152. data/rust/Cargo.lock +378 -0
  153. data/rust/Cargo.toml +7 -0
  154. data/rust/ruby-rbs/Cargo.toml +22 -0
  155. data/rust/ruby-rbs/build.rs +764 -0
  156. data/rust/ruby-rbs/examples/locations.rs +60 -0
  157. data/rust/ruby-rbs/src/lib.rs +1 -0
  158. data/rust/ruby-rbs/src/node/mod.rs +742 -0
  159. data/rust/ruby-rbs/tests/sanity.rs +47 -0
  160. data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
  161. data/rust/ruby-rbs-sys/Cargo.toml +23 -0
  162. data/rust/ruby-rbs-sys/build.rs +204 -0
  163. data/rust/ruby-rbs-sys/src/lib.rs +50 -0
  164. data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
  165. data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
  166. data/rust/ruby-rbs-sys/wrapper.h +1 -0
  167. data/schema/typeParam.json +17 -1
  168. data/sig/ancestor_builder.rbs +1 -1
  169. data/sig/ast/ruby/annotations.rbs +421 -0
  170. data/sig/ast/ruby/comment_block.rbs +127 -0
  171. data/sig/ast/ruby/declarations.rbs +158 -0
  172. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  173. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  174. data/sig/ast/ruby/members.rbs +178 -0
  175. data/sig/buffer.rbs +63 -5
  176. data/sig/cli/diff.rbs +5 -11
  177. data/sig/cli/validate.rbs +12 -8
  178. data/sig/cli.rbs +18 -18
  179. data/sig/definition.rbs +6 -0
  180. data/sig/definition_builder.rbs +3 -1
  181. data/sig/environment/class_entry.rbs +50 -0
  182. data/sig/environment/module_entry.rbs +50 -0
  183. data/sig/environment.rbs +37 -81
  184. data/sig/errors.rbs +26 -20
  185. data/sig/inline_parser/comment_association.rbs +71 -0
  186. data/sig/inline_parser.rbs +124 -0
  187. data/sig/location.rbs +32 -7
  188. data/sig/locator.rbs +0 -2
  189. data/sig/method_builder.rbs +9 -4
  190. data/sig/namespace.rbs +0 -5
  191. data/sig/parser.rbs +47 -13
  192. data/sig/prototype/helpers.rbs +2 -0
  193. data/sig/resolver/type_name_resolver.rbs +0 -3
  194. data/sig/source.rbs +48 -0
  195. data/sig/type_param.rbs +13 -8
  196. data/sig/typename.rbs +0 -5
  197. data/sig/types.rbs +6 -7
  198. data/sig/unit_test/spy.rbs +0 -8
  199. data/sig/unit_test/type_assertions.rbs +11 -0
  200. data/src/ast.c +491 -143
  201. data/src/lexer.c +1552 -1314
  202. data/src/lexer.re +7 -0
  203. data/src/lexstate.c +8 -1
  204. data/src/location.c +8 -48
  205. data/src/parser.c +1107 -409
  206. data/src/util/rbs_constant_pool.c +0 -4
  207. data/stdlib/bigdecimal/0/big_decimal.rbs +16 -16
  208. data/stdlib/cgi-escape/0/escape.rbs +4 -4
  209. data/stdlib/coverage/0/coverage.rbs +4 -3
  210. data/stdlib/date/0/date.rbs +33 -28
  211. data/stdlib/date/0/date_time.rbs +24 -23
  212. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  213. data/stdlib/digest/0/digest.rbs +110 -0
  214. data/stdlib/erb/0/erb.rbs +64 -53
  215. data/stdlib/etc/0/etc.rbs +55 -50
  216. data/stdlib/fileutils/0/fileutils.rbs +140 -126
  217. data/stdlib/forwardable/0/forwardable.rbs +10 -10
  218. data/stdlib/io-console/0/io-console.rbs +2 -2
  219. data/stdlib/json/0/json.rbs +158 -131
  220. data/stdlib/monitor/0/monitor.rbs +3 -3
  221. data/stdlib/net-http/0/net-http.rbs +159 -134
  222. data/stdlib/objspace/0/objspace.rbs +8 -30
  223. data/stdlib/open-uri/0/open-uri.rbs +8 -8
  224. data/stdlib/open3/0/open3.rbs +469 -10
  225. data/stdlib/openssl/0/openssl.rbs +144 -129
  226. data/stdlib/optparse/0/optparse.rbs +23 -14
  227. data/stdlib/pathname/0/pathname.rbs +2 -2
  228. data/stdlib/pp/0/pp.rbs +9 -8
  229. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  230. data/stdlib/pstore/0/pstore.rbs +35 -30
  231. data/stdlib/psych/0/psych.rbs +62 -9
  232. data/stdlib/psych/0/store.rbs +2 -4
  233. data/stdlib/pty/0/pty.rbs +9 -6
  234. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  235. data/stdlib/rdoc/0/code_object.rbs +2 -1
  236. data/stdlib/rdoc/0/parser.rbs +1 -1
  237. data/stdlib/rdoc/0/store.rbs +1 -1
  238. data/stdlib/ripper/0/ripper.rbs +20 -17
  239. data/stdlib/securerandom/0/manifest.yaml +2 -0
  240. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  241. data/stdlib/shellwords/0/shellwords.rbs +2 -2
  242. data/stdlib/socket/0/addrinfo.rbs +9 -9
  243. data/stdlib/socket/0/basic_socket.rbs +3 -3
  244. data/stdlib/socket/0/ip_socket.rbs +10 -8
  245. data/stdlib/socket/0/socket.rbs +10 -9
  246. data/stdlib/socket/0/tcp_server.rbs +1 -1
  247. data/stdlib/socket/0/tcp_socket.rbs +1 -1
  248. data/stdlib/socket/0/udp_socket.rbs +1 -1
  249. data/stdlib/socket/0/unix_server.rbs +1 -1
  250. data/stdlib/stringio/0/stringio.rbs +55 -54
  251. data/stdlib/strscan/0/string_scanner.rbs +46 -44
  252. data/stdlib/tempfile/0/tempfile.rbs +24 -20
  253. data/stdlib/time/0/time.rbs +7 -5
  254. data/stdlib/tsort/0/tsort.rbs +7 -6
  255. data/stdlib/uri/0/common.rbs +31 -18
  256. data/stdlib/uri/0/file.rbs +2 -2
  257. data/stdlib/uri/0/generic.rbs +9 -2
  258. data/stdlib/uri/0/http.rbs +2 -2
  259. data/stdlib/uri/0/ldap.rbs +2 -2
  260. data/stdlib/uri/0/mailto.rbs +3 -3
  261. data/stdlib/uri/0/rfc2396_parser.rbs +6 -5
  262. data/stdlib/zlib/0/deflate.rbs +4 -3
  263. data/stdlib/zlib/0/gzip_reader.rbs +6 -6
  264. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  265. data/stdlib/zlib/0/inflate.rbs +1 -1
  266. data/stdlib/zlib/0/need_dict.rbs +1 -1
  267. metadata +66 -3
@@ -0,0 +1,281 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module AST
5
+ module Ruby
6
+ module Declarations
7
+ class Base
8
+ attr_reader :buffer
9
+
10
+ include Helpers::ConstantHelper
11
+ include Helpers::LocationHelper
12
+
13
+ def initialize(buffer)
14
+ @buffer = buffer
15
+ end
16
+ end
17
+
18
+ class ClassDecl < Base
19
+ class SuperClass
20
+ attr_reader :type_name_location
21
+
22
+ attr_reader :operator_location
23
+
24
+ attr_reader :type_name
25
+
26
+ attr_reader :type_annotation
27
+
28
+ def initialize(type_name_location, operator_location, type_name, type_annotation)
29
+ @type_name_location = type_name_location
30
+ @operator_location = operator_location
31
+ @type_name = type_name
32
+ @type_annotation = type_annotation
33
+ end
34
+
35
+ def type_args
36
+ if type_annotation
37
+ type_annotation.type_args
38
+ else
39
+ []
40
+ end
41
+ end
42
+
43
+ def location
44
+ if type_annotation
45
+ Location.new(
46
+ type_name_location.buffer,
47
+ type_name_location.start_pos,
48
+ type_annotation.location.end_pos
49
+ )
50
+ else
51
+ type_name_location
52
+ end
53
+ end
54
+
55
+ alias name type_name
56
+ alias args type_args
57
+
58
+ def type_fingerprint
59
+ [
60
+ type_name.to_s,
61
+ type_annotation&.type_fingerprint
62
+ ]
63
+ end
64
+ end
65
+
66
+ attr_reader :class_name
67
+
68
+ attr_reader :members
69
+
70
+ attr_reader :node
71
+
72
+ attr_reader :super_class
73
+
74
+ def initialize(buffer, name, node, super_class)
75
+ super(buffer)
76
+ @class_name = name
77
+ @node = node
78
+ @members = []
79
+ @super_class = super_class
80
+ end
81
+
82
+ def each_decl(&block)
83
+ return enum_for(:each_decl) unless block
84
+
85
+ @members.each do |member|
86
+ if member.is_a?(Base)
87
+ yield member
88
+ end
89
+ end
90
+ end
91
+
92
+ def type_params = []
93
+
94
+ def location
95
+ rbs_location(node.location)
96
+ end
97
+
98
+ def name_location
99
+ rbs_location(node.constant_path.location)
100
+ end
101
+
102
+ def type_fingerprint
103
+ result = [] #: Array[untyped]
104
+
105
+ result << "decls/class"
106
+ result << class_name.to_s
107
+ result << super_class&.type_fingerprint
108
+ result << members.map { _1.type_fingerprint }
109
+
110
+ result
111
+ end
112
+ end
113
+
114
+ class ModuleDecl < Base
115
+ attr_reader :module_name
116
+
117
+ attr_reader :members
118
+
119
+ attr_reader :node
120
+
121
+ def initialize(buffer, name, node)
122
+ super(buffer)
123
+ @module_name = name
124
+ @node = node
125
+ @members = []
126
+ end
127
+
128
+ def each_decl(&block)
129
+ return enum_for(:each_decl) unless block
130
+
131
+ @members.each do |member|
132
+ if member.is_a?(Base)
133
+ yield member
134
+ end
135
+ end
136
+ end
137
+
138
+ def type_params = []
139
+
140
+ def self_types = []
141
+
142
+ def location
143
+ rbs_location(node.location)
144
+ end
145
+
146
+ def name_location
147
+ rbs_location(node.constant_path.location)
148
+ end
149
+
150
+ def type_fingerprint
151
+ result = [] #: Array[untyped]
152
+
153
+ result << "decls/module"
154
+ result << module_name.to_s
155
+ result << members.map { _1.type_fingerprint}
156
+
157
+ result
158
+ end
159
+ end
160
+
161
+ class ConstantDecl < Base
162
+ attr_reader :leading_comment
163
+ attr_reader :constant_name
164
+ attr_reader :node
165
+ attr_reader :type_annotation
166
+
167
+ def initialize(buffer, constant_name, node, leading_comment, type_annotation)
168
+ super(buffer)
169
+ @constant_name = constant_name
170
+ @node = node
171
+ @leading_comment = leading_comment
172
+ @type_annotation = type_annotation
173
+ end
174
+
175
+ def location
176
+ rbs_location(node.location)
177
+ end
178
+
179
+ def name_location
180
+ case node
181
+ when Prism::ConstantWriteNode
182
+ rbs_location(node.name_loc)
183
+ when Prism::ConstantPathWriteNode
184
+ rbs_location(node.target.location)
185
+ end
186
+ end
187
+
188
+ def type
189
+ return type_annotation.type if type_annotation
190
+
191
+ case node.value
192
+ when Prism::IntegerNode
193
+ BuiltinNames::Integer.instance_type
194
+ when Prism::FloatNode
195
+ BuiltinNames::Float.instance_type
196
+ when Prism::StringNode
197
+ BuiltinNames::String.instance_type
198
+ when Prism::TrueNode, Prism::FalseNode
199
+ Types::Bases::Bool.new(location: nil)
200
+ when Prism::SymbolNode
201
+ BuiltinNames::Symbol.instance_type
202
+ when Prism::NilNode
203
+ Types::Bases::Nil.new(location: nil)
204
+ else
205
+ Types::Bases::Any.new(location: nil)
206
+ end
207
+ end
208
+
209
+ def comment
210
+ leading_comment&.as_comment
211
+ end
212
+
213
+ def type_fingerprint
214
+ [
215
+ "decls/constant",
216
+ constant_name.to_s,
217
+ type.to_s,
218
+ leading_comment&.as_comment&.string
219
+ ]
220
+ end
221
+ end
222
+
223
+ class ClassModuleAliasDecl < Base
224
+ attr_reader :node
225
+ attr_reader :leading_comment
226
+ attr_reader :new_name
227
+ attr_reader :infered_old_name
228
+ attr_reader :annotation
229
+
230
+ def initialize(buffer, node, new_name, infered_old_name, leading_comment, annotation)
231
+ super(buffer)
232
+ @node = node
233
+ @new_name = new_name
234
+ @infered_old_name = infered_old_name
235
+ @leading_comment = leading_comment
236
+ @annotation = annotation
237
+ end
238
+
239
+ def location
240
+ rbs_location(node.location)
241
+ end
242
+
243
+ def name_location
244
+ case node
245
+ when Prism::ConstantWriteNode
246
+ rbs_location(node.name_loc)
247
+ when Prism::ConstantPathWriteNode
248
+ rbs_location(node.target.location)
249
+ end
250
+ end
251
+
252
+ def old_name
253
+ # Return explicit type name from annotation if provided, otherwise use inferred name
254
+ case
255
+ when annotation.type_name
256
+ annotation.type_name
257
+ when infered_old_name
258
+ infered_old_name
259
+ else
260
+ raise "No old name available"
261
+ end
262
+ end
263
+
264
+ def comment
265
+ leading_comment&.as_comment
266
+ end
267
+
268
+ def type_fingerprint
269
+ [
270
+ "decls/class_module_alias",
271
+ annotation.type_fingerprint,
272
+ new_name.to_s,
273
+ old_name.to_s,
274
+ leading_comment&.as_comment&.string
275
+ ]
276
+ end
277
+ end
278
+ end
279
+ end
280
+ end
281
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module AST
5
+ module Ruby
6
+ module Helpers
7
+ module ConstantHelper
8
+ module_function
9
+
10
+ def constant_as_type_name(node)
11
+ case node
12
+ when Prism::ConstantPathNode, Prism::ConstantReadNode
13
+ begin
14
+ TypeName.parse(node.full_name)
15
+ rescue Prism::ConstantPathNode::DynamicPartsInConstantPathError
16
+ nil
17
+ end
18
+ when Prism::ConstantWriteNode
19
+ TypeName.new(name: node.name, namespace: Namespace.empty)
20
+ when Prism::ConstantPathWriteNode
21
+ constant_as_type_name(node.target)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module AST
5
+ module Ruby
6
+ module Helpers
7
+ module LocationHelper
8
+ def rbs_location(location)
9
+ Location.new(buffer, location.start_character_offset, location.end_character_offset)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end