rbs 3.9.5 → 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 (330) hide show
  1. checksums.yaml +4 -4
  2. data/.clang-format +74 -0
  3. data/.clangd +2 -0
  4. data/.github/dependabot.yml +14 -14
  5. data/.github/workflows/bundle-update.yml +60 -0
  6. data/.github/workflows/c-check.yml +58 -0
  7. data/.github/workflows/comments.yml +5 -3
  8. data/.github/workflows/dependabot.yml +2 -2
  9. data/.github/workflows/ruby.yml +40 -32
  10. data/.github/workflows/rust.yml +95 -0
  11. data/.github/workflows/typecheck.yml +2 -2
  12. data/.github/workflows/windows.yml +3 -3
  13. data/.gitignore +4 -0
  14. data/.rubocop.yml +2 -2
  15. data/.vscode/extensions.json +5 -0
  16. data/.vscode/settings.json +19 -0
  17. data/CHANGELOG.md +284 -0
  18. data/README.md +38 -1
  19. data/Rakefile +144 -29
  20. data/Steepfile +2 -0
  21. data/config.yml +634 -62
  22. data/core/array.rbs +307 -227
  23. data/core/basic_object.rbs +9 -8
  24. data/core/binding.rbs +0 -2
  25. data/core/builtin.rbs +2 -2
  26. data/core/class.rbs +6 -5
  27. data/core/comparable.rbs +55 -34
  28. data/core/complex.rbs +104 -78
  29. data/core/dir.rbs +61 -49
  30. data/core/encoding.rbs +12 -15
  31. data/core/enumerable.rbs +188 -87
  32. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  33. data/core/enumerator.rbs +65 -2
  34. data/core/errno.rbs +11 -2
  35. data/core/errors.rbs +58 -29
  36. data/core/exception.rbs +13 -13
  37. data/core/fiber.rbs +74 -54
  38. data/core/file.rbs +280 -177
  39. data/core/file_test.rbs +3 -3
  40. data/core/float.rbs +257 -92
  41. data/core/gc.rbs +425 -281
  42. data/core/hash.rbs +1045 -739
  43. data/core/integer.rbs +135 -137
  44. data/core/io/buffer.rbs +53 -42
  45. data/core/io/wait.rbs +13 -35
  46. data/core/io.rbs +196 -148
  47. data/core/kernel.rbs +216 -155
  48. data/core/marshal.rbs +4 -4
  49. data/core/match_data.rbs +15 -13
  50. data/core/math.rbs +107 -66
  51. data/core/method.rbs +69 -33
  52. data/core/module.rbs +244 -106
  53. data/core/nil_class.rbs +7 -6
  54. data/core/numeric.rbs +74 -63
  55. data/core/object.rbs +9 -11
  56. data/core/object_space.rbs +30 -23
  57. data/core/pathname.rbs +1322 -0
  58. data/core/proc.rbs +95 -58
  59. data/core/process.rbs +222 -202
  60. data/core/ractor.rbs +371 -515
  61. data/core/random.rbs +21 -3
  62. data/core/range.rbs +159 -57
  63. data/core/rational.rbs +60 -89
  64. data/core/rbs/unnamed/argf.rbs +60 -53
  65. data/core/rbs/unnamed/env_class.rbs +19 -14
  66. data/core/rbs/unnamed/main_class.rbs +123 -0
  67. data/core/rbs/unnamed/random.rbs +11 -118
  68. data/core/regexp.rbs +258 -214
  69. data/core/ruby.rbs +53 -0
  70. data/core/ruby_vm.rbs +38 -34
  71. data/core/rubygems/config_file.rbs +5 -5
  72. data/core/rubygems/errors.rbs +4 -71
  73. data/core/rubygems/requirement.rbs +5 -5
  74. data/core/rubygems/rubygems.rbs +16 -82
  75. data/core/rubygems/version.rbs +2 -3
  76. data/core/set.rbs +490 -360
  77. data/core/signal.rbs +26 -16
  78. data/core/string.rbs +3303 -1365
  79. data/core/struct.rbs +27 -26
  80. data/core/symbol.rbs +41 -34
  81. data/core/thread.rbs +135 -74
  82. data/core/time.rbs +81 -50
  83. data/core/trace_point.rbs +41 -35
  84. data/core/true_class.rbs +2 -2
  85. data/core/unbound_method.rbs +24 -16
  86. data/core/warning.rbs +7 -7
  87. data/docs/aliases.md +79 -0
  88. data/docs/collection.md +3 -3
  89. data/docs/config.md +171 -0
  90. data/docs/encoding.md +56 -0
  91. data/docs/gem.md +0 -1
  92. data/docs/inline.md +576 -0
  93. data/docs/sigs.md +3 -3
  94. data/docs/syntax.md +46 -16
  95. data/docs/type_fingerprint.md +21 -0
  96. data/exe/rbs +1 -1
  97. data/ext/rbs_extension/ast_translation.c +1513 -0
  98. data/ext/rbs_extension/ast_translation.h +37 -0
  99. data/ext/rbs_extension/class_constants.c +185 -0
  100. data/{include/rbs/constants.h → ext/rbs_extension/class_constants.h} +22 -1
  101. data/ext/rbs_extension/compat.h +10 -0
  102. data/ext/rbs_extension/extconf.rb +25 -1
  103. data/ext/rbs_extension/legacy_location.c +294 -0
  104. data/ext/rbs_extension/legacy_location.h +82 -0
  105. data/ext/rbs_extension/main.c +468 -24
  106. data/ext/rbs_extension/rbs_extension.h +6 -21
  107. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  108. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  109. data/include/rbs/ast.h +1022 -0
  110. data/include/rbs/defines.h +86 -0
  111. data/include/rbs/lexer.h +206 -0
  112. data/include/rbs/location.h +40 -0
  113. data/include/rbs/parser.h +153 -0
  114. data/include/rbs/string.h +47 -0
  115. data/include/rbs/util/rbs_allocator.h +59 -0
  116. data/include/rbs/util/rbs_assert.h +20 -0
  117. data/include/rbs/util/rbs_buffer.h +83 -0
  118. data/include/rbs/util/rbs_constant_pool.h +6 -70
  119. data/include/rbs/util/rbs_encoding.h +282 -0
  120. data/include/rbs/util/rbs_unescape.h +24 -0
  121. data/include/rbs.h +9 -2
  122. data/lib/rbs/annotate/formatter.rb +3 -13
  123. data/lib/rbs/annotate/rdoc_annotator.rb +3 -1
  124. data/lib/rbs/annotate/rdoc_source.rb +1 -1
  125. data/lib/rbs/ast/annotation.rb +1 -1
  126. data/lib/rbs/ast/comment.rb +1 -1
  127. data/lib/rbs/ast/declarations.rb +10 -10
  128. data/lib/rbs/ast/members.rb +14 -14
  129. data/lib/rbs/ast/ruby/annotations.rb +409 -0
  130. data/lib/rbs/ast/ruby/comment_block.rb +245 -0
  131. data/lib/rbs/ast/ruby/declarations.rb +281 -0
  132. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  133. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  134. data/lib/rbs/ast/ruby/members.rb +723 -0
  135. data/lib/rbs/ast/type_param.rb +24 -4
  136. data/lib/rbs/buffer.rb +105 -20
  137. data/lib/rbs/cli/diff.rb +16 -15
  138. data/lib/rbs/cli/validate.rb +63 -126
  139. data/lib/rbs/cli.rb +56 -24
  140. data/lib/rbs/collection/config/lockfile_generator.rb +14 -2
  141. data/lib/rbs/collection/sources/git.rb +1 -0
  142. data/lib/rbs/collection.rb +0 -1
  143. data/lib/rbs/definition.rb +6 -1
  144. data/lib/rbs/definition_builder/ancestor_builder.rb +121 -65
  145. data/lib/rbs/definition_builder/method_builder.rb +65 -30
  146. data/lib/rbs/definition_builder.rb +177 -20
  147. data/lib/rbs/diff.rb +7 -1
  148. data/lib/rbs/environment/class_entry.rb +69 -0
  149. data/lib/rbs/environment/module_entry.rb +66 -0
  150. data/lib/rbs/environment.rb +402 -214
  151. data/lib/rbs/environment_loader.rb +2 -8
  152. data/lib/rbs/errors.rb +31 -21
  153. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  154. data/lib/rbs/inline_parser.rb +542 -0
  155. data/lib/rbs/location_aux.rb +36 -4
  156. data/lib/rbs/locator.rb +5 -1
  157. data/lib/rbs/method_type.rb +5 -3
  158. data/lib/rbs/namespace.rb +0 -7
  159. data/lib/rbs/parser_aux.rb +35 -7
  160. data/lib/rbs/prototype/helpers.rb +57 -0
  161. data/lib/rbs/prototype/rb.rb +3 -28
  162. data/lib/rbs/prototype/rbi.rb +3 -20
  163. data/lib/rbs/prototype/runtime.rb +10 -2
  164. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  165. data/lib/rbs/resolver/type_name_resolver.rb +116 -38
  166. data/lib/rbs/source.rb +99 -0
  167. data/lib/rbs/subtractor.rb +7 -4
  168. data/lib/rbs/test/type_check.rb +19 -2
  169. data/lib/rbs/type_name.rb +1 -8
  170. data/lib/rbs/types.rb +91 -79
  171. data/lib/rbs/unit_test/convertibles.rb +1 -0
  172. data/lib/rbs/unit_test/type_assertions.rb +35 -8
  173. data/lib/rbs/validator.rb +2 -2
  174. data/lib/rbs/version.rb +1 -1
  175. data/lib/rbs.rb +13 -2
  176. data/lib/rdoc/discover.rb +1 -1
  177. data/lib/rdoc_plugin/parser.rb +3 -3
  178. data/rbs.gemspec +4 -2
  179. data/rust/.gitignore +1 -0
  180. data/rust/Cargo.lock +378 -0
  181. data/rust/Cargo.toml +7 -0
  182. data/rust/ruby-rbs/Cargo.toml +22 -0
  183. data/rust/ruby-rbs/build.rs +764 -0
  184. data/rust/ruby-rbs/examples/locations.rs +60 -0
  185. data/rust/ruby-rbs/src/lib.rs +1 -0
  186. data/rust/ruby-rbs/src/node/mod.rs +742 -0
  187. data/rust/ruby-rbs/tests/sanity.rs +47 -0
  188. data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
  189. data/rust/ruby-rbs-sys/Cargo.toml +23 -0
  190. data/rust/ruby-rbs-sys/build.rs +204 -0
  191. data/rust/ruby-rbs-sys/src/lib.rs +50 -0
  192. data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
  193. data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
  194. data/rust/ruby-rbs-sys/wrapper.h +1 -0
  195. data/schema/typeParam.json +17 -1
  196. data/sig/ancestor_builder.rbs +1 -1
  197. data/sig/annotate/formatter.rbs +2 -2
  198. data/sig/annotate/rdoc_annotater.rbs +1 -1
  199. data/sig/ast/ruby/annotations.rbs +421 -0
  200. data/sig/ast/ruby/comment_block.rbs +127 -0
  201. data/sig/ast/ruby/declarations.rbs +158 -0
  202. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  203. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  204. data/sig/ast/ruby/members.rbs +178 -0
  205. data/sig/buffer.rbs +63 -5
  206. data/sig/cli/diff.rbs +5 -11
  207. data/sig/cli/validate.rbs +12 -8
  208. data/sig/cli.rbs +18 -18
  209. data/sig/definition.rbs +6 -0
  210. data/sig/definition_builder.rbs +3 -1
  211. data/sig/environment/class_entry.rbs +50 -0
  212. data/sig/environment/module_entry.rbs +50 -0
  213. data/sig/environment.rbs +94 -87
  214. data/sig/errors.rbs +26 -20
  215. data/sig/inline_parser/comment_association.rbs +71 -0
  216. data/sig/inline_parser.rbs +124 -0
  217. data/sig/location.rbs +32 -7
  218. data/sig/locator.rbs +0 -2
  219. data/sig/manifest.yaml +0 -1
  220. data/sig/method_builder.rbs +9 -4
  221. data/sig/namespace.rbs +0 -5
  222. data/sig/parser.rbs +67 -13
  223. data/sig/prototype/helpers.rbs +2 -0
  224. data/sig/resolver/type_name_resolver.rbs +35 -7
  225. data/sig/source.rbs +48 -0
  226. data/sig/type_param.rbs +13 -8
  227. data/sig/typename.rbs +0 -5
  228. data/sig/types.rbs +10 -8
  229. data/sig/unit_test/spy.rbs +0 -8
  230. data/sig/unit_test/type_assertions.rbs +11 -0
  231. data/src/ast.c +1604 -0
  232. data/src/lexer.c +3194 -0
  233. data/src/lexer.re +154 -0
  234. data/src/lexstate.c +212 -0
  235. data/src/location.c +31 -0
  236. data/src/parser.c +4205 -0
  237. data/src/string.c +41 -0
  238. data/src/util/rbs_allocator.c +165 -0
  239. data/src/util/rbs_assert.c +19 -0
  240. data/src/util/rbs_buffer.c +54 -0
  241. data/src/util/rbs_constant_pool.c +18 -92
  242. data/src/util/rbs_encoding.c +21308 -0
  243. data/src/util/rbs_unescape.c +167 -0
  244. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  245. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  246. data/stdlib/cgi/0/core.rbs +9 -393
  247. data/stdlib/cgi/0/manifest.yaml +1 -0
  248. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  249. data/stdlib/coverage/0/coverage.rbs +7 -4
  250. data/stdlib/date/0/date.rbs +92 -79
  251. data/stdlib/date/0/date_time.rbs +25 -24
  252. data/stdlib/delegate/0/delegator.rbs +10 -7
  253. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  254. data/stdlib/digest/0/digest.rbs +110 -0
  255. data/stdlib/erb/0/erb.rbs +748 -347
  256. data/stdlib/etc/0/etc.rbs +55 -50
  257. data/stdlib/fileutils/0/fileutils.rbs +158 -139
  258. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  259. data/stdlib/io-console/0/io-console.rbs +2 -2
  260. data/stdlib/json/0/json.rbs +226 -179
  261. data/stdlib/monitor/0/monitor.rbs +3 -3
  262. data/stdlib/net-http/0/net-http.rbs +162 -134
  263. data/stdlib/objspace/0/objspace.rbs +17 -34
  264. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  265. data/stdlib/open3/0/open3.rbs +469 -10
  266. data/stdlib/openssl/0/openssl.rbs +475 -357
  267. data/stdlib/optparse/0/optparse.rbs +26 -17
  268. data/stdlib/pathname/0/pathname.rbs +11 -1381
  269. data/stdlib/pp/0/pp.rbs +9 -8
  270. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  271. data/stdlib/pstore/0/pstore.rbs +35 -30
  272. data/stdlib/psych/0/psych.rbs +65 -12
  273. data/stdlib/psych/0/store.rbs +2 -4
  274. data/stdlib/pty/0/pty.rbs +9 -6
  275. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  276. data/stdlib/rdoc/0/code_object.rbs +4 -3
  277. data/stdlib/rdoc/0/comment.rbs +2 -0
  278. data/stdlib/rdoc/0/options.rbs +76 -0
  279. data/stdlib/rdoc/0/parser.rbs +1 -1
  280. data/stdlib/rdoc/0/rdoc.rbs +7 -5
  281. data/stdlib/rdoc/0/store.rbs +2 -2
  282. data/stdlib/resolv/0/resolv.rbs +25 -68
  283. data/stdlib/ripper/0/ripper.rbs +25 -19
  284. data/stdlib/securerandom/0/manifest.yaml +2 -0
  285. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  286. data/stdlib/shellwords/0/shellwords.rbs +2 -2
  287. data/stdlib/singleton/0/singleton.rbs +3 -0
  288. data/stdlib/socket/0/addrinfo.rbs +9 -9
  289. data/stdlib/socket/0/basic_socket.rbs +3 -3
  290. data/stdlib/socket/0/ip_socket.rbs +10 -8
  291. data/stdlib/socket/0/socket.rbs +23 -10
  292. data/stdlib/socket/0/tcp_server.rbs +1 -1
  293. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  294. data/stdlib/socket/0/udp_socket.rbs +1 -1
  295. data/stdlib/socket/0/unix_server.rbs +1 -1
  296. data/stdlib/stringio/0/stringio.rbs +1177 -85
  297. data/stdlib/strscan/0/string_scanner.rbs +27 -25
  298. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  299. data/stdlib/time/0/time.rbs +8 -6
  300. data/stdlib/timeout/0/timeout.rbs +63 -7
  301. data/stdlib/tsort/0/cyclic.rbs +3 -0
  302. data/stdlib/tsort/0/tsort.rbs +7 -6
  303. data/stdlib/uri/0/common.rbs +42 -20
  304. data/stdlib/uri/0/file.rbs +3 -3
  305. data/stdlib/uri/0/generic.rbs +26 -18
  306. data/stdlib/uri/0/http.rbs +2 -2
  307. data/stdlib/uri/0/ldap.rbs +2 -2
  308. data/stdlib/uri/0/mailto.rbs +3 -3
  309. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  310. data/stdlib/zlib/0/deflate.rbs +4 -3
  311. data/stdlib/zlib/0/gzip_reader.rbs +6 -6
  312. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  313. data/stdlib/zlib/0/inflate.rbs +1 -1
  314. data/stdlib/zlib/0/need_dict.rbs +1 -1
  315. data/stdlib/zlib/0/zstream.rbs +1 -0
  316. metadata +121 -18
  317. data/ext/rbs_extension/lexer.c +0 -2728
  318. data/ext/rbs_extension/lexer.h +0 -179
  319. data/ext/rbs_extension/lexer.re +0 -147
  320. data/ext/rbs_extension/lexstate.c +0 -175
  321. data/ext/rbs_extension/location.c +0 -325
  322. data/ext/rbs_extension/location.h +0 -85
  323. data/ext/rbs_extension/parser.c +0 -2982
  324. data/ext/rbs_extension/parser.h +0 -18
  325. data/ext/rbs_extension/parserstate.c +0 -411
  326. data/ext/rbs_extension/parserstate.h +0 -163
  327. data/ext/rbs_extension/unescape.c +0 -32
  328. data/include/rbs/ruby_objs.h +0 -72
  329. data/src/constants.c +0 -153
  330. data/src/ruby_objs.c +0 -799
@@ -173,12 +173,12 @@ module RBS
173
173
  end
174
174
 
175
175
  def validate_super_class!(type_name, entry)
176
- with_super_classes = entry.decls.select {|d| d.decl.super_class }
176
+ with_super_classes = entry.each_decl.select {|decl| decl.super_class }
177
177
 
178
178
  return if with_super_classes.size <= 1
179
179
 
180
- super_types = with_super_classes.map do |d|
181
- super_class = d.decl.super_class or raise
180
+ super_types = with_super_classes.map do |decl|
181
+ super_class = decl.super_class or raise
182
182
  Types::ClassInstance.new(name: super_class.name, args: super_class.args, location: nil)
183
183
  end
184
184
 
@@ -200,8 +200,8 @@ module RBS
200
200
  case entry
201
201
  when Environment::ClassEntry
202
202
  validate_super_class!(type_name, entry)
203
- primary = entry.primary
204
- super_class = primary.decl.super_class
203
+ primary = entry.primary_decl
204
+ super_class = primary.super_class
205
205
 
206
206
  if type_name != BuiltinNames::BasicObject.name
207
207
  if super_class
@@ -214,13 +214,13 @@ module RBS
214
214
 
215
215
  super_name = env.normalize_module_name(super_name)
216
216
 
217
- NoSuperclassFoundError.check!(super_name, env: env, location: primary.decl.location)
217
+ NoSuperclassFoundError.check!(super_name, env: env, location: primary.location)
218
218
  if super_class
219
219
  InheritModuleError.check!(super_class, env: env)
220
220
  InvalidTypeApplicationError.check2!(type_name: super_class.name, args: super_class.args, env: env, location: super_class.location)
221
221
  end
222
222
 
223
- super_entry = env.normalized_class_entry(super_name) or raise
223
+ super_entry = env.class_entry(super_name, normalized: true) or raise
224
224
  super_args = AST::TypeParam.normalize_args(super_entry.type_params, super_args)
225
225
 
226
226
  ancestors = OneAncestors.class_instance(
@@ -248,7 +248,7 @@ module RBS
248
248
 
249
249
  module_name = module_self.name
250
250
  if module_name.class?
251
- module_entry = env.normalized_module_class_entry(module_name) or raise
251
+ module_entry = env.module_class_entry(module_name, normalized: true) or raise
252
252
  module_name = module_entry.name
253
253
  self_args = AST::TypeParam.normalize_args(module_entry.type_params, module_self.args)
254
254
  end
@@ -283,8 +283,8 @@ module RBS
283
283
  case entry
284
284
  when Environment::ClassEntry
285
285
  validate_super_class!(type_name, entry)
286
- primary = entry.primary
287
- super_class = primary.decl.super_class
286
+ primary = entry.primary_decl
287
+ super_class = primary.super_class
288
288
 
289
289
  if type_name != BuiltinNames::BasicObject.name
290
290
  if super_class
@@ -295,7 +295,7 @@ module RBS
295
295
 
296
296
  super_name = env.normalize_module_name(super_name)
297
297
 
298
- NoSuperclassFoundError.check!(super_name, env: env, location: primary.decl.location)
298
+ NoSuperclassFoundError.check!(super_name, env: env, location: primary.location)
299
299
  if super_class
300
300
  InheritModuleError.check!(super_class, env: env)
301
301
  end
@@ -348,75 +348,131 @@ module RBS
348
348
  end
349
349
 
350
350
  def mixin_ancestors0(decl, type_name, align_params:, included_modules:, included_interfaces:, extended_modules:, prepended_modules:, extended_interfaces:)
351
- decl.each_mixin do |member|
352
- case member
353
- when AST::Members::Include
354
- module_name = member.name
355
- module_args = member.args.map {|type| align_params ? type.sub(align_params) : type }
351
+ case decl
352
+ when AST::Declarations::Base
353
+ decl.each_mixin do |member|
354
+ case member
355
+ when AST::Members::Include
356
+ module_name = member.name
357
+ module_args = member.args.map {|type| align_params ? type.sub(align_params) : type }
356
358
 
357
- case
358
- when member.name.class? && included_modules
359
- MixinClassError.check!(type_name: type_name, env: env, member: member)
360
- NoMixinFoundError.check!(member.name, env: env, member: member)
359
+ case
360
+ when member.name.class? && included_modules
361
+ MixinClassError.check!(type_name: type_name, env: env, member: member)
362
+ NoMixinFoundError.check!(member.name, env: env, member: member)
361
363
 
362
- module_decl = env.normalized_module_entry(module_name) or raise
363
- module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
364
+ module_decl = env.module_entry(module_name, normalized: true) or raise
365
+ module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
364
366
 
365
- module_name = env.normalize_module_name(module_name)
366
- included_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
367
- when member.name.interface? && included_interfaces
368
- NoMixinFoundError.check!(member.name, env: env, member: member)
367
+ module_name = env.normalize_module_name(module_name)
368
+ included_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
369
+ when member.name.interface? && included_interfaces
370
+ NoMixinFoundError.check!(member.name, env: env, member: member)
369
371
 
370
- interface_decl = env.interface_decls.fetch(module_name)
371
- module_args = AST::TypeParam.normalize_args(interface_decl.decl.type_params, module_args)
372
+ interface_decl = env.interface_decls.fetch(module_name)
373
+ module_args = AST::TypeParam.normalize_args(interface_decl.decl.type_params, module_args)
372
374
 
373
- included_interfaces << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
374
- end
375
+ included_interfaces << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
376
+ end
375
377
 
376
- when AST::Members::Prepend
377
- if prepended_modules
378
- MixinClassError.check!(type_name: type_name, env: env, member: member)
379
- NoMixinFoundError.check!(member.name, env: env, member: member)
378
+ when AST::Members::Prepend
379
+ if prepended_modules
380
+ MixinClassError.check!(type_name: type_name, env: env, member: member)
381
+ NoMixinFoundError.check!(member.name, env: env, member: member)
380
382
 
381
- module_decl = env.normalized_module_entry(member.name) or raise
382
- module_name = module_decl.name
383
+ module_decl = env.module_entry(member.name, normalized: true) or raise
384
+ module_name = module_decl.name
383
385
 
384
- module_args = member.args.map {|type| align_params ? type.sub(align_params) : type }
385
- module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
386
+ module_args = member.args.map {|type| align_params ? type.sub(align_params) : type }
387
+ module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
386
388
 
387
- prepended_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
388
- end
389
+ prepended_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
390
+ end
389
391
 
390
- when AST::Members::Extend
391
- module_name = member.name
392
- module_args = member.args
392
+ when AST::Members::Extend
393
+ module_name = member.name
394
+ module_args = member.args
393
395
 
394
- case
395
- when member.name.class? && extended_modules
396
- MixinClassError.check!(type_name: type_name, env: env, member: member)
397
- NoMixinFoundError.check!(member.name, env: env, member: member)
396
+ case
397
+ when member.name.class? && extended_modules
398
+ MixinClassError.check!(type_name: type_name, env: env, member: member)
399
+ NoMixinFoundError.check!(member.name, env: env, member: member)
398
400
 
399
- module_decl = env.normalized_module_entry(module_name) or raise
400
- module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
401
+ module_decl = env.module_entry(module_name, normalized: true) or raise
402
+ module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
401
403
 
402
- module_name = env.normalize_module_name(module_name)
403
- extended_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
404
- when member.name.interface? && extended_interfaces
405
- NoMixinFoundError.check!(member.name, env: env, member: member)
404
+ module_name = env.normalize_module_name(module_name)
405
+ extended_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
406
+ when member.name.interface? && extended_interfaces
407
+ NoMixinFoundError.check!(member.name, env: env, member: member)
406
408
 
407
- interface_decl = env.interface_decls.fetch(module_name)
408
- module_args = AST::TypeParam.normalize_args(interface_decl.decl.type_params, module_args)
409
+ interface_decl = env.interface_decls.fetch(module_name)
410
+ module_args = AST::TypeParam.normalize_args(interface_decl.decl.type_params, module_args)
409
411
 
410
- extended_interfaces << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
412
+ extended_interfaces << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
413
+ end
414
+ end
415
+ end
416
+ when AST::Ruby::Declarations::Base
417
+ decl.members.each do |member|
418
+ case member
419
+ when AST::Ruby::Members::IncludeMember
420
+ if included_modules
421
+ module_name = member.module_name
422
+ module_args = member.type_args
423
+
424
+ # Check if mixing in a class (not allowed)
425
+ if env.class_decl?(module_name)
426
+ raise MixinClassError.new(type_name: type_name, member: member)
427
+ end
428
+
429
+ # Check if module exists
430
+ module_decl = env.module_entry(module_name, normalized: true) or raise NoMixinFoundError.new(type_name: module_name, member: member)
431
+ module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
432
+ module_name = env.normalize_module_name(module_name)
433
+ included_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
434
+ end
435
+
436
+ when AST::Ruby::Members::ExtendMember
437
+ if extended_modules
438
+ module_name = member.module_name
439
+ module_args = member.type_args
440
+
441
+ # Check if mixing in a class (not allowed)
442
+ if env.class_decl?(module_name)
443
+ raise MixinClassError.new(type_name: type_name, member: member)
444
+ end
445
+
446
+ # Check if module exists
447
+ module_decl = env.module_entry(module_name, normalized: true) or raise NoMixinFoundError.new(type_name: module_name, member: member)
448
+ module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
449
+ module_name = env.normalize_module_name(module_name)
450
+ extended_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
451
+ end
452
+
453
+ when AST::Ruby::Members::PrependMember
454
+ if prepended_modules
455
+ module_name = member.module_name
456
+ module_args = member.type_args
457
+
458
+ # Check if mixing in a class (not allowed)
459
+ if env.class_decl?(module_name)
460
+ raise MixinClassError.new(type_name: type_name, member: member)
461
+ end
462
+
463
+ # Check if module exists
464
+ module_decl = env.module_entry(module_name, normalized: true) or raise NoMixinFoundError.new(type_name: module_name, member: member)
465
+ module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
466
+ module_name = env.normalize_module_name(module_name)
467
+ prepended_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
468
+ end
411
469
  end
412
470
  end
413
471
  end
414
472
  end
415
473
 
416
474
  def mixin_ancestors(entry, type_name, included_modules:, included_interfaces:, extended_modules:, prepended_modules:, extended_interfaces:)
417
- entry.decls.each do |d|
418
- decl = d.decl
419
-
475
+ entry.each_decl do |decl|
420
476
  align_params = Substitution.build(
421
477
  decl.type_params.each.map(&:name),
422
478
  entry.type_params.map {|param| Types::Variable.new(name: param.name, location: param.location) }
@@ -445,7 +501,7 @@ module RBS
445
501
 
446
502
  RecursiveAncestorError.check!(self_ancestor,
447
503
  ancestors: building_ancestors,
448
- location: entry.primary.decl.location)
504
+ location: entry.primary_decl.location)
449
505
  building_ancestors.push self_ancestor
450
506
 
451
507
  one_ancestors = one_instance_ancestors(type_name)
@@ -462,7 +518,7 @@ module RBS
462
518
 
463
519
  super_ancestors =
464
520
  instance_ancestors(super_name, building_ancestors: building_ancestors)
465
- .apply(super_args, env: env, location: entry.primary.decl.super_class&.location)
521
+ .apply(super_args, env: env, location: entry.primary_decl.super_class&.location)
466
522
  super_ancestors.map! {|ancestor| fill_ancestor_source(ancestor, name: super_name, source: :super) }
467
523
  ancestors.unshift(*super_ancestors)
468
524
  end
@@ -481,7 +537,7 @@ module RBS
481
537
  included_modules.each do |mod|
482
538
  name = mod.name
483
539
  arg_types = mod.args
484
- mod.source.is_a?(AST::Members::Include) or raise
540
+ (mod.source.is_a?(AST::Members::Include) || mod.source.is_a?(AST::Ruby::Members::IncludeMember)) or raise
485
541
  mod_ancestors =
486
542
  instance_ancestors(name, building_ancestors: building_ancestors)
487
543
  .apply(arg_types, env: env, location: mod.source.location)
@@ -496,7 +552,7 @@ module RBS
496
552
  prepended_modules.each do |mod|
497
553
  name = mod.name
498
554
  arg_types = mod.args
499
- mod.source.is_a?(AST::Members::Prepend) or raise
555
+ (mod.source.is_a?(AST::Members::Prepend) || mod.source.is_a?(AST::Ruby::Members::PrependMember)) or raise
500
556
  mod_ancestors =
501
557
  instance_ancestors(name, building_ancestors: building_ancestors)
502
558
  .apply(arg_types, env: env, location: mod.source.location)
@@ -522,7 +578,7 @@ module RBS
522
578
 
523
579
  RecursiveAncestorError.check!(self_ancestor,
524
580
  ancestors: building_ancestors,
525
- location: entry.primary.decl.location)
581
+ location: entry.primary_decl.location)
526
582
  building_ancestors.push self_ancestor
527
583
 
528
584
  one_ancestors = one_singleton_ancestors(type_name)
@@ -551,7 +607,7 @@ module RBS
551
607
  extended_modules.each do |mod|
552
608
  name = mod.name
553
609
  args = mod.args
554
- mod.source.is_a?(AST::Members::Extend) or raise
610
+ (mod.source.is_a?(AST::Members::Extend) || mod.source.is_a?(AST::Ruby::Members::ExtendMember)) or raise
555
611
  mod_ancestors =
556
612
  instance_ancestors(name, building_ancestors: building_ancestors)
557
613
  .apply(args, env: env, location: mod.source.location)
@@ -103,37 +103,54 @@ module RBS
103
103
  args = entry.type_params.map {|param| Types::Variable.new(name: param.name, location: param.location) }
104
104
  type = Types::ClassInstance.new(name: type_name, args: args, location: nil)
105
105
  Methods.new(type: type).tap do |methods|
106
- entry.decls.each do |d|
107
- subst = Substitution.build(d.decl.type_params.each.map(&:name), args)
108
- each_member_with_accessibility(d.decl.members) do |member, accessibility|
109
- case member
110
- when AST::Members::MethodDefinition
111
- case member.kind
112
- when :instance
113
- build_method(
114
- methods,
115
- type,
116
- member: member.update(overloads: member.overloads.map {|overload| overload.sub(subst) }),
117
- accessibility: member.visibility || accessibility
118
- )
119
- when :singleton_instance
106
+ entry.each_decl do |decl|
107
+ subst = Substitution.build(decl.type_params.each.map(&:name), args)
108
+ case decl
109
+ when AST::Declarations::Base
110
+ each_rbs_member_with_accessibility(decl.members) do |member, accessibility|
111
+ case member
112
+ when AST::Members::MethodDefinition
113
+ case member.kind
114
+ when :instance
115
+ build_method(
116
+ methods,
117
+ type,
118
+ member: member.update(overloads: member.overloads.map {|overload| overload.sub(subst) }),
119
+ accessibility: member.visibility || accessibility
120
+ )
121
+ when :singleton_instance
122
+ build_method(
123
+ methods,
124
+ type,
125
+ member: member.update(overloads: member.overloads.map {|overload| overload.sub(subst) }),
126
+ accessibility: :private
127
+ )
128
+ end
129
+ when AST::Members::AttrReader, AST::Members::AttrWriter, AST::Members::AttrAccessor
130
+ if member.kind == :instance
131
+ build_attribute(methods,
132
+ type,
133
+ member: member.update(type: member.type.sub(subst)),
134
+ accessibility: member.visibility || accessibility)
135
+ end
136
+ when AST::Members::Alias
137
+ if member.kind == :instance
138
+ build_alias(methods, type, member: member)
139
+ end
140
+ end
141
+ end
142
+ when AST::Ruby::Declarations::Base
143
+ decl.members.each do |member|
144
+ case member
145
+ when AST::Ruby::Members::DefMember
120
146
  build_method(
121
147
  methods,
122
148
  type,
123
- member: member.update(overloads: member.overloads.map {|overload| overload.sub(subst) }),
124
- accessibility: :private
149
+ member: member,
150
+ accessibility: :public
125
151
  )
126
- end
127
- when AST::Members::AttrReader, AST::Members::AttrWriter, AST::Members::AttrAccessor
128
- if member.kind == :instance
129
- build_attribute(methods,
130
- type,
131
- member: member.update(type: member.type.sub(subst)),
132
- accessibility: member.visibility || accessibility)
133
- end
134
- when AST::Members::Alias
135
- if member.kind == :instance
136
- build_alias(methods, type, member: member)
152
+ when AST::Ruby::Members::AttrReaderMember, AST::Ruby::Members::AttrWriterMember, AST::Ruby::Members::AttrAccessorMember
153
+ build_ruby_attribute(methods, type, member: member, accessibility: :public)
137
154
  end
138
155
  end
139
156
  end
@@ -149,8 +166,8 @@ module RBS
149
166
  type = Types::ClassSingleton.new(name: type_name, location: nil)
150
167
 
151
168
  Methods.new(type: type).tap do |methods|
152
- entry.decls.each do |d|
153
- d.decl.members.each do |member|
169
+ entry.each_decl do |decl|
170
+ decl.members.each do |member|
154
171
  case member
155
172
  when AST::Members::MethodDefinition
156
173
  if member.singleton?
@@ -212,6 +229,24 @@ module RBS
212
229
  end
213
230
  end
214
231
 
232
+ def build_ruby_attribute(methods, type, member:, accessibility:)
233
+ member.names.each do |name|
234
+ if member.is_a?(AST::Ruby::Members::AttrReaderMember) || member.is_a?(AST::Ruby::Members::AttrAccessorMember)
235
+ defn = methods.methods[name] ||= Methods::Definition.empty(type: type, name: name)
236
+
237
+ defn.accessibilities << accessibility
238
+ defn.originals << member
239
+ end
240
+
241
+ if member.is_a?(AST::Ruby::Members::AttrWriterMember) || member.is_a?(AST::Ruby::Members::AttrAccessorMember)
242
+ defn = methods.methods[:"#{name}="] ||= Methods::Definition.empty(type: type, name: :"#{name}=")
243
+
244
+ defn.accessibilities << accessibility
245
+ defn.originals << member
246
+ end
247
+ end
248
+ end
249
+
215
250
  def build_method(methods, type, member:, accessibility:)
216
251
  defn = methods.methods[member.name] ||= Methods::Definition.empty(type: type, name: member.name)
217
252
 
@@ -223,7 +258,7 @@ module RBS
223
258
  end
224
259
  end
225
260
 
226
- def each_member_with_accessibility(members, accessibility: :public)
261
+ def each_rbs_member_with_accessibility(members, accessibility: :public)
227
262
  members.each do |member|
228
263
  case member
229
264
  when AST::Members::Public