rbs 4.0.0.dev.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 (281) 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 +18 -11
  5. data/.github/workflows/comments.yml +5 -3
  6. data/.github/workflows/dependabot.yml +2 -2
  7. data/.github/workflows/ruby.yml +27 -34
  8. data/.github/workflows/rust.yml +95 -0
  9. data/.github/workflows/typecheck.yml +2 -2
  10. data/.github/workflows/windows.yml +2 -2
  11. data/.rubocop.yml +1 -1
  12. data/CHANGELOG.md +323 -0
  13. data/README.md +1 -1
  14. data/Rakefile +43 -33
  15. data/Steepfile +1 -0
  16. data/config.yml +426 -24
  17. data/core/array.rbs +307 -227
  18. data/core/basic_object.rbs +9 -8
  19. data/core/binding.rbs +0 -2
  20. data/core/builtin.rbs +2 -2
  21. data/core/class.rbs +6 -5
  22. data/core/comparable.rbs +55 -34
  23. data/core/complex.rbs +104 -78
  24. data/core/dir.rbs +61 -49
  25. data/core/encoding.rbs +12 -15
  26. data/core/enumerable.rbs +179 -87
  27. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  28. data/core/enumerator.rbs +65 -2
  29. data/core/errno.rbs +11 -2
  30. data/core/errors.rbs +58 -29
  31. data/core/exception.rbs +13 -13
  32. data/core/fiber.rbs +74 -54
  33. data/core/file.rbs +280 -177
  34. data/core/file_test.rbs +3 -3
  35. data/core/float.rbs +257 -92
  36. data/core/gc.rbs +425 -281
  37. data/core/hash.rbs +1045 -739
  38. data/core/integer.rbs +135 -137
  39. data/core/io/buffer.rbs +53 -42
  40. data/core/io/wait.rbs +13 -35
  41. data/core/io.rbs +192 -144
  42. data/core/kernel.rbs +216 -155
  43. data/core/marshal.rbs +4 -4
  44. data/core/match_data.rbs +15 -13
  45. data/core/math.rbs +107 -66
  46. data/core/method.rbs +69 -33
  47. data/core/module.rbs +244 -106
  48. data/core/nil_class.rbs +7 -6
  49. data/core/numeric.rbs +74 -63
  50. data/core/object.rbs +9 -11
  51. data/core/object_space.rbs +30 -23
  52. data/core/pathname.rbs +1322 -0
  53. data/core/proc.rbs +95 -58
  54. data/core/process.rbs +222 -202
  55. data/core/ractor.rbs +371 -515
  56. data/core/random.rbs +21 -3
  57. data/core/range.rbs +159 -57
  58. data/core/rational.rbs +60 -89
  59. data/core/rbs/unnamed/argf.rbs +60 -53
  60. data/core/rbs/unnamed/env_class.rbs +19 -14
  61. data/core/rbs/unnamed/main_class.rbs +123 -0
  62. data/core/rbs/unnamed/random.rbs +11 -118
  63. data/core/regexp.rbs +258 -214
  64. data/core/ruby.rbs +53 -0
  65. data/core/ruby_vm.rbs +38 -34
  66. data/core/rubygems/config_file.rbs +5 -5
  67. data/core/rubygems/errors.rbs +4 -71
  68. data/core/rubygems/requirement.rbs +5 -5
  69. data/core/rubygems/rubygems.rbs +16 -82
  70. data/core/rubygems/version.rbs +2 -3
  71. data/core/set.rbs +490 -360
  72. data/core/signal.rbs +26 -16
  73. data/core/string.rbs +3234 -1285
  74. data/core/struct.rbs +27 -26
  75. data/core/symbol.rbs +41 -34
  76. data/core/thread.rbs +135 -67
  77. data/core/time.rbs +81 -50
  78. data/core/trace_point.rbs +41 -35
  79. data/core/true_class.rbs +2 -2
  80. data/core/unbound_method.rbs +24 -16
  81. data/core/warning.rbs +7 -7
  82. data/docs/aliases.md +79 -0
  83. data/docs/collection.md +3 -3
  84. data/docs/config.md +171 -0
  85. data/docs/encoding.md +56 -0
  86. data/docs/gem.md +0 -1
  87. data/docs/inline.md +576 -0
  88. data/docs/sigs.md +3 -3
  89. data/docs/syntax.md +46 -16
  90. data/docs/type_fingerprint.md +21 -0
  91. data/exe/rbs +1 -1
  92. data/ext/rbs_extension/ast_translation.c +544 -116
  93. data/ext/rbs_extension/ast_translation.h +3 -0
  94. data/ext/rbs_extension/class_constants.c +16 -2
  95. data/ext/rbs_extension/class_constants.h +8 -0
  96. data/ext/rbs_extension/extconf.rb +5 -1
  97. data/ext/rbs_extension/legacy_location.c +33 -56
  98. data/ext/rbs_extension/legacy_location.h +37 -0
  99. data/ext/rbs_extension/main.c +44 -35
  100. data/include/rbs/ast.h +448 -173
  101. data/include/rbs/defines.h +27 -0
  102. data/include/rbs/lexer.h +30 -11
  103. data/include/rbs/location.h +25 -44
  104. data/include/rbs/parser.h +6 -6
  105. data/include/rbs/string.h +0 -2
  106. data/include/rbs/util/rbs_allocator.h +34 -13
  107. data/include/rbs/util/rbs_assert.h +12 -1
  108. data/include/rbs/util/rbs_constant_pool.h +0 -3
  109. data/include/rbs/util/rbs_encoding.h +2 -0
  110. data/include/rbs/util/rbs_unescape.h +2 -1
  111. data/include/rbs.h +8 -0
  112. data/lib/rbs/ast/annotation.rb +1 -1
  113. data/lib/rbs/ast/comment.rb +1 -1
  114. data/lib/rbs/ast/declarations.rb +10 -10
  115. data/lib/rbs/ast/members.rb +14 -14
  116. data/lib/rbs/ast/ruby/annotations.rb +293 -3
  117. data/lib/rbs/ast/ruby/comment_block.rb +24 -0
  118. data/lib/rbs/ast/ruby/declarations.rb +198 -3
  119. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
  120. data/lib/rbs/ast/ruby/members.rb +532 -22
  121. data/lib/rbs/ast/type_param.rb +24 -4
  122. data/lib/rbs/buffer.rb +20 -15
  123. data/lib/rbs/cli/diff.rb +16 -15
  124. data/lib/rbs/cli/validate.rb +38 -106
  125. data/lib/rbs/cli.rb +52 -19
  126. data/lib/rbs/collection/config/lockfile_generator.rb +14 -2
  127. data/lib/rbs/collection/sources/git.rb +1 -0
  128. data/lib/rbs/definition.rb +1 -1
  129. data/lib/rbs/definition_builder/ancestor_builder.rb +62 -9
  130. data/lib/rbs/definition_builder/method_builder.rb +20 -0
  131. data/lib/rbs/definition_builder.rb +147 -25
  132. data/lib/rbs/diff.rb +7 -1
  133. data/lib/rbs/environment.rb +227 -74
  134. data/lib/rbs/environment_loader.rb +0 -6
  135. data/lib/rbs/errors.rb +27 -18
  136. data/lib/rbs/inline_parser.rb +342 -6
  137. data/lib/rbs/location_aux.rb +1 -1
  138. data/lib/rbs/locator.rb +5 -1
  139. data/lib/rbs/method_type.rb +5 -3
  140. data/lib/rbs/parser_aux.rb +20 -7
  141. data/lib/rbs/prototype/helpers.rb +57 -0
  142. data/lib/rbs/prototype/rb.rb +3 -28
  143. data/lib/rbs/prototype/rbi.rb +3 -20
  144. data/lib/rbs/prototype/runtime.rb +8 -0
  145. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  146. data/lib/rbs/resolver/type_name_resolver.rb +116 -38
  147. data/lib/rbs/subtractor.rb +3 -1
  148. data/lib/rbs/test/type_check.rb +19 -2
  149. data/lib/rbs/type_name.rb +1 -1
  150. data/lib/rbs/types.rb +88 -78
  151. data/lib/rbs/unit_test/type_assertions.rb +35 -8
  152. data/lib/rbs/validator.rb +2 -2
  153. data/lib/rbs/version.rb +1 -1
  154. data/lib/rbs.rb +1 -2
  155. data/lib/rdoc/discover.rb +1 -1
  156. data/lib/rdoc_plugin/parser.rb +1 -1
  157. data/rbs.gemspec +4 -3
  158. data/rust/.gitignore +1 -0
  159. data/rust/Cargo.lock +378 -0
  160. data/rust/Cargo.toml +7 -0
  161. data/rust/ruby-rbs/Cargo.toml +22 -0
  162. data/rust/ruby-rbs/build.rs +764 -0
  163. data/rust/ruby-rbs/examples/locations.rs +60 -0
  164. data/rust/ruby-rbs/src/lib.rs +1 -0
  165. data/rust/ruby-rbs/src/node/mod.rs +742 -0
  166. data/rust/ruby-rbs/tests/sanity.rs +47 -0
  167. data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
  168. data/rust/ruby-rbs-sys/Cargo.toml +23 -0
  169. data/rust/ruby-rbs-sys/build.rs +204 -0
  170. data/rust/ruby-rbs-sys/src/lib.rs +50 -0
  171. data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
  172. data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
  173. data/rust/ruby-rbs-sys/wrapper.h +1 -0
  174. data/schema/typeParam.json +17 -1
  175. data/sig/ast/ruby/annotations.rbs +315 -4
  176. data/sig/ast/ruby/comment_block.rbs +8 -0
  177. data/sig/ast/ruby/declarations.rbs +102 -4
  178. data/sig/ast/ruby/members.rbs +108 -2
  179. data/sig/cli/diff.rbs +5 -11
  180. data/sig/cli/validate.rbs +12 -8
  181. data/sig/cli.rbs +18 -18
  182. data/sig/definition.rbs +6 -1
  183. data/sig/definition_builder.rbs +2 -0
  184. data/sig/environment.rbs +70 -12
  185. data/sig/errors.rbs +13 -14
  186. data/sig/inline_parser.rbs +39 -2
  187. data/sig/locator.rbs +0 -2
  188. data/sig/manifest.yaml +0 -1
  189. data/sig/method_builder.rbs +3 -1
  190. data/sig/parser.rbs +31 -13
  191. data/sig/prototype/helpers.rbs +2 -0
  192. data/sig/resolver/type_name_resolver.rbs +35 -7
  193. data/sig/source.rbs +3 -3
  194. data/sig/type_param.rbs +13 -8
  195. data/sig/types.rbs +6 -7
  196. data/sig/unit_test/spy.rbs +0 -8
  197. data/sig/unit_test/type_assertions.rbs +11 -0
  198. data/src/ast.c +410 -153
  199. data/src/lexer.c +1392 -1313
  200. data/src/lexer.re +3 -0
  201. data/src/lexstate.c +58 -37
  202. data/src/location.c +8 -48
  203. data/src/parser.c +977 -516
  204. data/src/string.c +0 -48
  205. data/src/util/rbs_allocator.c +89 -71
  206. data/src/util/rbs_assert.c +1 -1
  207. data/src/util/rbs_buffer.c +2 -2
  208. data/src/util/rbs_constant_pool.c +10 -14
  209. data/src/util/rbs_encoding.c +4 -8
  210. data/src/util/rbs_unescape.c +56 -20
  211. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  212. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  213. data/stdlib/cgi/0/core.rbs +9 -393
  214. data/stdlib/cgi/0/manifest.yaml +1 -0
  215. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  216. data/stdlib/coverage/0/coverage.rbs +7 -4
  217. data/stdlib/date/0/date.rbs +92 -79
  218. data/stdlib/date/0/date_time.rbs +25 -24
  219. data/stdlib/delegate/0/delegator.rbs +10 -7
  220. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  221. data/stdlib/digest/0/digest.rbs +110 -0
  222. data/stdlib/erb/0/erb.rbs +748 -347
  223. data/stdlib/etc/0/etc.rbs +55 -50
  224. data/stdlib/fileutils/0/fileutils.rbs +158 -139
  225. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  226. data/stdlib/io-console/0/io-console.rbs +2 -2
  227. data/stdlib/json/0/json.rbs +217 -136
  228. data/stdlib/monitor/0/monitor.rbs +3 -3
  229. data/stdlib/net-http/0/net-http.rbs +162 -134
  230. data/stdlib/objspace/0/objspace.rbs +17 -34
  231. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  232. data/stdlib/open3/0/open3.rbs +469 -10
  233. data/stdlib/openssl/0/openssl.rbs +475 -357
  234. data/stdlib/optparse/0/optparse.rbs +26 -17
  235. data/stdlib/pathname/0/pathname.rbs +11 -1381
  236. data/stdlib/pp/0/pp.rbs +9 -8
  237. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  238. data/stdlib/pstore/0/pstore.rbs +35 -30
  239. data/stdlib/psych/0/psych.rbs +65 -12
  240. data/stdlib/psych/0/store.rbs +2 -4
  241. data/stdlib/pty/0/pty.rbs +9 -6
  242. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  243. data/stdlib/rdoc/0/code_object.rbs +2 -1
  244. data/stdlib/rdoc/0/parser.rbs +1 -1
  245. data/stdlib/rdoc/0/rdoc.rbs +1 -1
  246. data/stdlib/rdoc/0/store.rbs +1 -1
  247. data/stdlib/resolv/0/resolv.rbs +25 -68
  248. data/stdlib/ripper/0/ripper.rbs +22 -19
  249. data/stdlib/securerandom/0/manifest.yaml +2 -0
  250. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  251. data/stdlib/shellwords/0/shellwords.rbs +2 -2
  252. data/stdlib/singleton/0/singleton.rbs +3 -0
  253. data/stdlib/socket/0/addrinfo.rbs +7 -7
  254. data/stdlib/socket/0/basic_socket.rbs +3 -3
  255. data/stdlib/socket/0/ip_socket.rbs +10 -8
  256. data/stdlib/socket/0/socket.rbs +23 -10
  257. data/stdlib/socket/0/tcp_server.rbs +1 -1
  258. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  259. data/stdlib/socket/0/udp_socket.rbs +1 -1
  260. data/stdlib/socket/0/unix_server.rbs +1 -1
  261. data/stdlib/stringio/0/stringio.rbs +1177 -85
  262. data/stdlib/strscan/0/string_scanner.rbs +27 -25
  263. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  264. data/stdlib/time/0/time.rbs +8 -6
  265. data/stdlib/timeout/0/timeout.rbs +63 -7
  266. data/stdlib/tsort/0/cyclic.rbs +3 -0
  267. data/stdlib/tsort/0/tsort.rbs +7 -6
  268. data/stdlib/uri/0/common.rbs +42 -20
  269. data/stdlib/uri/0/file.rbs +3 -3
  270. data/stdlib/uri/0/generic.rbs +26 -18
  271. data/stdlib/uri/0/http.rbs +2 -2
  272. data/stdlib/uri/0/ldap.rbs +2 -2
  273. data/stdlib/uri/0/mailto.rbs +3 -3
  274. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  275. data/stdlib/zlib/0/deflate.rbs +4 -3
  276. data/stdlib/zlib/0/gzip_reader.rbs +6 -6
  277. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  278. data/stdlib/zlib/0/inflate.rbs +1 -1
  279. data/stdlib/zlib/0/need_dict.rbs +1 -1
  280. data/stdlib/zlib/0/zstream.rbs +1 -0
  281. metadata +50 -6
@@ -122,21 +122,17 @@ module RBS
122
122
  end
123
123
  end
124
124
 
125
- def class_entry(type_name)
126
- case
127
- when (class_entry = class_decls[type_name]).is_a?(ClassEntry)
128
- class_entry
129
- when (class_alias = class_alias_decls[type_name]).is_a?(ClassAliasEntry)
130
- class_alias
125
+ def class_entry(type_name, normalized: false)
126
+ case entry = constant_entry(type_name, normalized: normalized || false)
127
+ when ClassEntry, ClassAliasEntry
128
+ entry
131
129
  end
132
130
  end
133
131
 
134
- def module_entry(type_name)
135
- case
136
- when (module_entry = class_decls[type_name]).is_a?(ModuleEntry)
137
- module_entry
138
- when (module_alias = class_alias_decls[type_name]).is_a?(ModuleAliasEntry)
139
- module_alias
132
+ def module_entry(type_name, normalized: false)
133
+ case entry = constant_entry(type_name, normalized: normalized || false)
134
+ when ModuleEntry, ModuleAliasEntry
135
+ entry
140
136
  end
141
137
  end
142
138
 
@@ -152,26 +148,40 @@ module RBS
152
148
  end
153
149
 
154
150
  def normalized_module_entry(type_name)
155
- if name = normalize_module_name?(type_name)
156
- case entry = module_entry(name)
157
- when ModuleEntry, nil
158
- entry
159
- when ModuleAliasEntry
160
- raise
161
- end
162
- end
151
+ module_entry(type_name, normalized: true)
163
152
  end
164
153
 
165
- def module_class_entry(type_name)
166
- class_entry(type_name) || module_entry(type_name)
154
+ def module_class_entry(type_name, normalized: false)
155
+ entry = constant_entry(type_name, normalized: normalized || false)
156
+ if entry.is_a?(ConstantEntry)
157
+ nil
158
+ else
159
+ entry
160
+ end
167
161
  end
168
162
 
169
163
  def normalized_module_class_entry(type_name)
170
- normalized_class_entry(type_name) || normalized_module_entry(type_name)
164
+ module_class_entry(type_name, normalized: true)
171
165
  end
172
166
 
173
- def constant_entry(type_name)
174
- class_entry(type_name) || module_entry(type_name) || constant_decls[type_name]
167
+ def constant_entry(type_name, normalized: false)
168
+ if normalized
169
+ if normalized_name = normalize_module_name?(type_name)
170
+ class_decls.fetch(normalized_name, nil)
171
+ else
172
+ # The type_name may be declared with constant declaration
173
+ unless type_name.namespace.empty?
174
+ parent = type_name.namespace.to_type_name
175
+ normalized_parent = normalize_module_name?(parent) or return
176
+ constant_name = TypeName.new(name: type_name.name, namespace: normalized_parent.to_namespace)
177
+ constant_decls.fetch(constant_name, nil)
178
+ end
179
+ end
180
+ else
181
+ class_decls.fetch(type_name, nil) ||
182
+ class_alias_decls.fetch(type_name, nil) ||
183
+ constant_decls.fetch(type_name, nil)
184
+ end
175
185
  end
176
186
 
177
187
  def normalize_type_name?(name)
@@ -206,6 +216,10 @@ module RBS
206
216
  end
207
217
  end
208
218
 
219
+ def normalize_type_name(name)
220
+ normalize_type_name?(name) || name
221
+ end
222
+
209
223
  def normalized_type_name?(type_name)
210
224
  case
211
225
  when type_name.interface?
@@ -220,53 +234,44 @@ module RBS
220
234
  end
221
235
 
222
236
  def normalized_type_name!(name)
223
- normalized_type_name?(name) or raise "Normalized type name is expected but given `#{name}`, which is normalized to `#{normalize_type_name?(name)}`"
237
+ normalized_type_name?(name) or raise "Normalized type name is expected but given `#{name}`"
224
238
  name
225
239
  end
226
240
 
227
- def normalize_type_name(name)
228
- normalize_type_name?(name) || name
229
- end
230
-
231
- def normalize_module_name(name)
232
- normalize_module_name?(name) or name
233
- end
234
-
235
241
  def normalize_module_name?(name)
236
242
  raise "Class/module name is expected: #{name}" unless name.class?
237
243
  name = name.absolute! unless name.absolute?
238
244
 
239
- if @normalize_module_name_cache.key?(name)
240
- return @normalize_module_name_cache[name]
245
+ original_name = name
246
+
247
+ if @normalize_module_name_cache.key?(original_name)
248
+ return @normalize_module_name_cache[original_name]
241
249
  end
242
250
 
243
- unless name.namespace.empty?
244
- parent = name.namespace.to_type_name
245
- if normalized_parent = normalize_module_name?(parent)
246
- type_name = TypeName.new(namespace: normalized_parent.to_namespace, name: name.name)
247
- else
248
- @normalize_module_name_cache[name] = nil
249
- return
251
+ if alias_entry = class_alias_decls.fetch(name, nil)
252
+ unless alias_entry.decl.old_name.absolute?
253
+ # Having relative old_name means the type name resolution was failed.
254
+ # Run TypeNameResolver for failure reason
255
+ resolver = Resolver::TypeNameResolver.build(self)
256
+ name = resolver.resolve_namespace(name, context: nil)
257
+ @normalize_module_name_cache[original_name] = name
258
+ return name
250
259
  end
251
- else
252
- type_name = name
253
- end
254
260
 
255
- @normalize_module_name_cache[name] = false
261
+ name = alias_entry.decl.old_name
262
+ end
256
263
 
257
- entry = constant_entry(type_name)
264
+ if class_decls.key?(name)
265
+ @normalize_module_name_cache[original_name] = name
266
+ end
267
+ end
258
268
 
259
- normalized_type_name =
260
- case entry
261
- when ClassEntry, ModuleEntry
262
- type_name
263
- when ClassAliasEntry, ModuleAliasEntry
264
- normalize_module_name?(entry.decl.old_name)
265
- else
266
- nil
267
- end
269
+ def normalize_module_name(name)
270
+ normalize_module_name?(name) || name
271
+ end
268
272
 
269
- @normalize_module_name_cache[name] = normalized_type_name
273
+ def normalize_module_name!(name)
274
+ normalize_module_name?(name) or raise "Module name `#{name}` cannot be normalized"
270
275
  end
271
276
 
272
277
  def insert_rbs_decl(decl, context:, namespace:)
@@ -378,11 +383,10 @@ module RBS
378
383
  if entry.is_a?(ModuleEntry)
379
384
  raise DuplicatedDeclarationError.new(name, decl, *entry.each_decl.to_a)
380
385
  end
386
+ else
387
+ entry = class_decls[name] = ClassEntry.new(name)
381
388
  end
382
389
 
383
- entry = ClassEntry.new(name)
384
- class_decls[name] = entry
385
-
386
390
  entry << [context, decl]
387
391
 
388
392
  inner_context = [context, name] #: Resolver::context
@@ -400,17 +404,51 @@ module RBS
400
404
  if entry.is_a?(ClassEntry)
401
405
  raise DuplicatedDeclarationError.new(name, decl, *entry.each_decl.to_a)
402
406
  end
407
+ else
408
+ entry = class_decls[name] = ModuleEntry.new(name)
403
409
  end
404
410
 
405
- entry = ModuleEntry.new(name)
406
- class_decls[name] = entry
407
-
408
411
  entry << [context, decl]
409
412
 
410
413
  inner_context = [context, name] #: Resolver::context
411
414
  decl.each_decl do |member|
412
415
  insert_ruby_decl(member, context: inner_context, namespace: name.to_namespace)
413
416
  end
417
+
418
+ when AST::Ruby::Declarations::ConstantDecl
419
+ name = decl.constant_name.with_prefix(namespace)
420
+
421
+ if entry = constant_entry(name)
422
+ case entry
423
+ when ClassAliasEntry, ModuleAliasEntry, ConstantEntry
424
+ raise DuplicatedDeclarationError.new(name, decl, entry.decl)
425
+ when ClassEntry, ModuleEntry
426
+ raise DuplicatedDeclarationError.new(name, decl, *entry.each_decl.to_a)
427
+ end
428
+ end
429
+
430
+ constant_decls[name] = ConstantEntry.new(name: name, decl: decl, context: context)
431
+
432
+ when AST::Ruby::Declarations::ClassModuleAliasDecl
433
+ name = decl.new_name.with_prefix(namespace)
434
+
435
+ if entry = constant_entry(name)
436
+ case entry
437
+ when ClassAliasEntry, ModuleAliasEntry, ConstantEntry
438
+ raise DuplicatedDeclarationError.new(name, decl, entry.decl)
439
+ when ClassEntry, ModuleEntry
440
+ raise DuplicatedDeclarationError.new(name, decl, *entry.each_decl.to_a)
441
+ end
442
+ end
443
+
444
+ case decl.annotation
445
+ when AST::Ruby::Annotations::ClassAliasAnnotation
446
+ class_alias_decls[name] = ClassAliasEntry.new(name: name, decl: decl, context: context)
447
+ when AST::Ruby::Annotations::ModuleAliasAnnotation
448
+ class_alias_decls[name] = ModuleAliasEntry.new(name: name, decl: decl, context: context)
449
+ end
450
+ else
451
+ raise "Unknown Ruby declaration type: #{decl.class}"
414
452
  end
415
453
  end
416
454
 
@@ -482,7 +520,7 @@ module RBS
482
520
  end
483
521
 
484
522
  def resolve_type_names(only: nil)
485
- resolver = Resolver::TypeNameResolver.new(self)
523
+ resolver = Resolver::TypeNameResolver.build(self)
486
524
  env = Environment.new
487
525
 
488
526
  table = UseMap::Table.new()
@@ -495,7 +533,7 @@ module RBS
495
533
  each_rbs_source do |source|
496
534
  resolve = source.directives.find { _1.is_a?(AST::Directives::ResolveTypeNames) } #: AST::Directives::ResolveTypeNames?
497
535
  if !resolve || resolve.value
498
- _, decls = resolve_signature(resolver, table, source.directives, source.declarations)
536
+ _, decls = resolve_signature(resolver, table, source.directives, source.declarations, only: only)
499
537
  else
500
538
  decls = source.declarations
501
539
  end
@@ -504,7 +542,15 @@ module RBS
504
542
 
505
543
  each_ruby_source do |source|
506
544
  decls = source.declarations.map do |decl|
507
- resolve_ruby_decl(resolver, decl, context: nil, prefix: Namespace.root)
545
+ if only
546
+ if only.include?(decl)
547
+ resolve_ruby_decl(resolver, decl, context: nil, prefix: Namespace.root)
548
+ else
549
+ decl
550
+ end
551
+ else
552
+ resolve_ruby_decl(resolver, decl, context: nil, prefix: Namespace.root)
553
+ end
508
554
  end
509
555
 
510
556
  env.add_source(Source::Ruby.new(source.buffer, source.prism_result, decls, source.diagnostics))
@@ -671,7 +717,16 @@ module RBS
671
717
  inner_context = [context, full_name] #: Resolver::context
672
718
  inner_prefix = full_name.to_namespace
673
719
 
674
- AST::Ruby::Declarations::ClassDecl.new(decl.buffer, full_name, decl.node).tap do |resolved|
720
+ super_class = decl.super_class&.yield_self do |super_class|
721
+ AST::Ruby::Declarations::ClassDecl::SuperClass.new(
722
+ super_class.type_name_location,
723
+ super_class.operator_location,
724
+ absolute_type_name(resolver, nil, super_class.name, context: context),
725
+ super_class.type_annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
726
+ )
727
+ end
728
+
729
+ AST::Ruby::Declarations::ClassDecl.new(decl.buffer, full_name, decl.node, super_class).tap do |resolved|
675
730
  decl.members.each do |member|
676
731
  case member
677
732
  when AST::Ruby::Declarations::Base
@@ -694,12 +749,39 @@ module RBS
694
749
  case member
695
750
  when AST::Ruby::Declarations::Base
696
751
  resolved.members << resolve_ruby_decl(resolver, member, context: inner_context, prefix: inner_prefix)
752
+ when AST::Ruby::Members::Base
753
+ resolved.members << resolve_ruby_member(resolver, member, context: inner_context)
697
754
  else
698
755
  raise "Unknown member type: #{member.class}"
699
756
  end
700
757
  end
701
758
  end
702
759
 
760
+ when AST::Ruby::Declarations::ConstantDecl
761
+ full_name = decl.constant_name.with_prefix(prefix)
762
+
763
+ AST::Ruby::Declarations::ConstantDecl.new(
764
+ decl.buffer,
765
+ full_name,
766
+ decl.node,
767
+ decl.leading_comment,
768
+ decl.type_annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
769
+ )
770
+
771
+ when AST::Ruby::Declarations::ClassModuleAliasDecl
772
+ full_name = decl.new_name.with_prefix(prefix)
773
+ resolved_annotation = decl.annotation.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
774
+ resolved_infered_name = decl.infered_old_name&.yield_self {|name| absolute_type_name(resolver, nil, name, context: context) }
775
+
776
+ AST::Ruby::Declarations::ClassModuleAliasDecl.new(
777
+ decl.buffer,
778
+ decl.node,
779
+ full_name,
780
+ resolved_infered_name,
781
+ decl.leading_comment,
782
+ resolved_annotation
783
+ )
784
+
703
785
  else
704
786
  raise "Unknown declaration type: #{decl.class}"
705
787
  end
@@ -712,7 +794,65 @@ module RBS
712
794
  member.buffer,
713
795
  member.name,
714
796
  member.node,
715
- member.method_type.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
797
+ member.method_type.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) },
798
+ member.leading_comment
799
+ )
800
+ when AST::Ruby::Members::IncludeMember
801
+ resolved_annotation = member.annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
802
+ AST::Ruby::Members::IncludeMember.new(
803
+ member.buffer,
804
+ member.node,
805
+ absolute_type_name(resolver, nil, member.module_name, context: context),
806
+ resolved_annotation
807
+ )
808
+ when AST::Ruby::Members::ExtendMember
809
+ resolved_annotation = member.annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
810
+ AST::Ruby::Members::ExtendMember.new(
811
+ member.buffer,
812
+ member.node,
813
+ absolute_type_name(resolver, nil, member.module_name, context: context),
814
+ resolved_annotation
815
+ )
816
+ when AST::Ruby::Members::PrependMember
817
+ resolved_annotation = member.annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
818
+ AST::Ruby::Members::PrependMember.new(
819
+ member.buffer,
820
+ member.node,
821
+ absolute_type_name(resolver, nil, member.module_name, context: context),
822
+ resolved_annotation
823
+ )
824
+ when AST::Ruby::Members::AttrReaderMember
825
+ resolved_type_annotation = member.type_annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
826
+ AST::Ruby::Members::AttrReaderMember.new(
827
+ member.buffer,
828
+ member.node,
829
+ member.name_nodes,
830
+ member.leading_comment,
831
+ resolved_type_annotation
832
+ )
833
+ when AST::Ruby::Members::AttrWriterMember
834
+ resolved_type_annotation = member.type_annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
835
+ AST::Ruby::Members::AttrWriterMember.new(
836
+ member.buffer,
837
+ member.node,
838
+ member.name_nodes,
839
+ member.leading_comment,
840
+ resolved_type_annotation
841
+ )
842
+ when AST::Ruby::Members::AttrAccessorMember
843
+ resolved_type_annotation = member.type_annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
844
+ AST::Ruby::Members::AttrAccessorMember.new(
845
+ member.buffer,
846
+ member.node,
847
+ member.name_nodes,
848
+ member.leading_comment,
849
+ resolved_type_annotation
850
+ )
851
+ when AST::Ruby::Members::InstanceVariableMember
852
+ resolved_annotation = member.annotation.map_type_name {|name| absolute_type_name(resolver, nil, name, context: context) }
853
+ AST::Ruby::Members::InstanceVariableMember.new(
854
+ member.buffer,
855
+ resolved_annotation
716
856
  )
717
857
  else
718
858
  raise "Unknown member type: #{member.class}"
@@ -845,7 +985,7 @@ module RBS
845
985
  end
846
986
 
847
987
  def inspect
848
- ivars = %i[@declarations @class_decls @class_alias_decls @interface_decls @type_alias_decls @constant_decls @global_decls]
988
+ ivars = %i[@sources @class_decls @class_alias_decls @interface_decls @type_alias_decls @constant_decls @global_decls]
849
989
  "\#<RBS::Environment #{ivars.map { |iv| "#{iv}=(#{instance_variable_get(iv).size} items)"}.join(' ')}>"
850
990
  end
851
991
 
@@ -853,12 +993,25 @@ module RBS
853
993
  sources.map(&:buffer)
854
994
  end
855
995
 
856
- def unload(buffers)
857
- env = Environment.new
858
- bufs = buffers.to_set
996
+ def unload(paths)
997
+ ps = Set[]
998
+ paths.each do |path|
999
+ if path.is_a?(Buffer)
1000
+ ps << path.name
1001
+ else
1002
+ ps << path
1003
+ end
1004
+ end
1005
+
1006
+ env = Environment.new()
859
1007
 
860
1008
  each_rbs_source do |source|
861
- next if bufs.include?(source.buffer)
1009
+ next if ps.include?(source.buffer.name)
1010
+ env.add_source(source)
1011
+ end
1012
+
1013
+ each_ruby_source do |source|
1014
+ next if ps.include?(source.buffer.name)
862
1015
  env.add_source(source)
863
1016
  end
864
1017
 
@@ -50,12 +50,6 @@ module RBS
50
50
  when path
51
51
  dirs << path
52
52
  when library
53
- case library
54
- when 'rubygems', 'set'
55
- RBS.logger.warn "`#{library}` has been moved to core library, so it is always loaded. Remove explicit loading `#{library}`"
56
- return
57
- end
58
-
59
53
  if libs.add?(Library.new(name: library, version: version)) && resolve_dependencies
60
54
  resolve_dependencies(library: library, version: version)
61
55
  end
data/lib/rbs/errors.rb CHANGED
@@ -93,7 +93,7 @@ module RBS
93
93
  params =
94
94
  case
95
95
  when type_name.class?
96
- decl = env.normalized_module_class_entry(type_name) or raise
96
+ decl = env.module_class_entry(type_name, normalized: true) or raise
97
97
  decl.type_params
98
98
  when type_name.interface?
99
99
  env.interface_decls.fetch(type_name).decl.type_params
@@ -475,7 +475,7 @@ module RBS
475
475
  @type_name = type_name
476
476
  @member = member
477
477
 
478
- super "#{Location.to_string member.location}: Cannot #{mixin_name} a class `#{member.name}` in the definition of `#{type_name}`"
478
+ super "#{Location.to_string member.location}: Cannot #{mixin_name} a class `#{member_name(member)}` in the definition of `#{type_name}`"
479
479
  end
480
480
 
481
481
  def location
@@ -483,23 +483,43 @@ module RBS
483
483
  end
484
484
 
485
485
  def self.check!(type_name:, env:, member:)
486
- if env.class_decl?(member.name)
486
+ name = case member
487
+ when AST::Members::Include, AST::Members::Extend, AST::Members::Prepend
488
+ member.name
489
+ when AST::Ruby::Members::IncludeMember, AST::Ruby::Members::ExtendMember, AST::Ruby::Members::PrependMember
490
+ member.module_name
491
+ else
492
+ raise "Unknown member type: #{member.class}"
493
+ end
494
+
495
+ if env.class_decl?(name)
487
496
  raise new(type_name: type_name, member: member)
488
497
  end
489
498
  end
490
499
 
491
500
  private
492
501
 
502
+ def member_name(member)
503
+ case member
504
+ when AST::Members::Include, AST::Members::Extend, AST::Members::Prepend
505
+ member.name
506
+ when AST::Ruby::Members::IncludeMember, AST::Ruby::Members::ExtendMember, AST::Ruby::Members::PrependMember
507
+ member.module_name
508
+ else
509
+ raise "Unknown member type: #{member.class}"
510
+ end
511
+ end
512
+
493
513
  def mixin_name
494
514
  case member
495
- when AST::Members::Prepend
515
+ when AST::Members::Prepend, AST::Ruby::Members::PrependMember
496
516
  "prepend"
497
- when AST::Members::Include
517
+ when AST::Members::Include, AST::Ruby::Members::IncludeMember
498
518
  "include"
499
- when AST::Members::Extend
519
+ when AST::Members::Extend, AST::Ruby::Members::ExtendMember
500
520
  "extend"
501
521
  else
502
- raise
522
+ raise "Unknown member type: #{member.class}"
503
523
  end
504
524
  end
505
525
  end
@@ -591,17 +611,6 @@ module RBS
591
611
  end
592
612
  end
593
613
 
594
- class WillSyntaxError < DefinitionError
595
- include DetailedMessageable
596
-
597
- attr_reader :location
598
-
599
- def initialize(message, location:)
600
- super "#{Location.to_string(location)}: #{message}"
601
- @location = location
602
- end
603
- end
604
-
605
614
  class TypeParamDefaultReferenceError < DefinitionError
606
615
  include DetailedMessageable
607
616