rbs 4.1.0.pre.2-java

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 (574) hide show
  1. checksums.yaml +7 -0
  2. data/.clang-format +75 -0
  3. data/.clangd +2 -0
  4. data/.github/dependabot.yml +24 -0
  5. data/.github/workflows/bundle-update.yml +63 -0
  6. data/.github/workflows/c-check.yml +61 -0
  7. data/.github/workflows/comments.yml +37 -0
  8. data/.github/workflows/dependabot.yml +30 -0
  9. data/.github/workflows/jruby.yml +67 -0
  10. data/.github/workflows/milestone.yml +83 -0
  11. data/.github/workflows/ruby.yml +158 -0
  12. data/.github/workflows/rust.yml +184 -0
  13. data/.github/workflows/truffleruby.yml +54 -0
  14. data/.github/workflows/typecheck.yml +39 -0
  15. data/.github/workflows/wasm.yml +53 -0
  16. data/.github/workflows/windows.yml +49 -0
  17. data/.gitignore +38 -0
  18. data/.rubocop.yml +72 -0
  19. data/BSDL +22 -0
  20. data/CHANGELOG.md +2292 -0
  21. data/COPYING +56 -0
  22. data/README.md +240 -0
  23. data/Rakefile +869 -0
  24. data/Steepfile +53 -0
  25. data/config.yml +913 -0
  26. data/core/array.rbs +4142 -0
  27. data/core/basic_object.rbs +376 -0
  28. data/core/binding.rbs +148 -0
  29. data/core/builtin.rbs +278 -0
  30. data/core/class.rbs +223 -0
  31. data/core/comparable.rbs +192 -0
  32. data/core/complex.rbs +812 -0
  33. data/core/constants.rbs +96 -0
  34. data/core/data.rbs +415 -0
  35. data/core/dir.rbs +993 -0
  36. data/core/encoding.rbs +1368 -0
  37. data/core/enumerable.rbs +2506 -0
  38. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  39. data/core/enumerator/product.rbs +92 -0
  40. data/core/enumerator.rbs +705 -0
  41. data/core/env.rbs +6 -0
  42. data/core/errno.rbs +682 -0
  43. data/core/errors.rbs +789 -0
  44. data/core/exception.rbs +485 -0
  45. data/core/false_class.rbs +82 -0
  46. data/core/fiber.rbs +570 -0
  47. data/core/fiber_error.rbs +11 -0
  48. data/core/file.rbs +2045 -0
  49. data/core/file_constants.rbs +463 -0
  50. data/core/file_stat.rbs +534 -0
  51. data/core/file_test.rbs +331 -0
  52. data/core/float.rbs +1316 -0
  53. data/core/gc.rbs +788 -0
  54. data/core/global_variables.rbs +184 -0
  55. data/core/hash.rbs +2183 -0
  56. data/core/integer.rbs +1374 -0
  57. data/core/io/buffer.rbs +995 -0
  58. data/core/io/wait.rbs +48 -0
  59. data/core/io.rbs +3472 -0
  60. data/core/kernel.rbs +3172 -0
  61. data/core/marshal.rbs +207 -0
  62. data/core/match_data.rbs +637 -0
  63. data/core/math.rbs +770 -0
  64. data/core/method.rbs +422 -0
  65. data/core/module.rbs +1856 -0
  66. data/core/nil_class.rbs +210 -0
  67. data/core/numeric.rbs +832 -0
  68. data/core/object.rbs +108 -0
  69. data/core/object_space/weak_key_map.rbs +166 -0
  70. data/core/object_space.rbs +197 -0
  71. data/core/pathname.rbs +1322 -0
  72. data/core/proc.rbs +905 -0
  73. data/core/process.rbs +2316 -0
  74. data/core/ractor.rbs +924 -0
  75. data/core/random.rbs +255 -0
  76. data/core/range.rbs +1209 -0
  77. data/core/rational.rbs +502 -0
  78. data/core/rb_config.rbs +88 -0
  79. data/core/rbs/ops.rbs +154 -0
  80. data/core/rbs/unnamed/argf.rbs +1236 -0
  81. data/core/rbs/unnamed/env_class.rbs +1214 -0
  82. data/core/rbs/unnamed/main_class.rbs +123 -0
  83. data/core/rbs/unnamed/random.rbs +186 -0
  84. data/core/refinement.rbs +59 -0
  85. data/core/regexp.rbs +1974 -0
  86. data/core/ruby.rbs +53 -0
  87. data/core/ruby_vm.rbs +809 -0
  88. data/core/rubygems/basic_specification.rbs +6 -0
  89. data/core/rubygems/config_file.rbs +38 -0
  90. data/core/rubygems/dependency_installer.rbs +6 -0
  91. data/core/rubygems/errors.rbs +109 -0
  92. data/core/rubygems/installer.rbs +15 -0
  93. data/core/rubygems/path_support.rbs +6 -0
  94. data/core/rubygems/platform.rbs +7 -0
  95. data/core/rubygems/request_set.rbs +49 -0
  96. data/core/rubygems/requirement.rbs +148 -0
  97. data/core/rubygems/rubygems.rbs +1105 -0
  98. data/core/rubygems/source_list.rbs +15 -0
  99. data/core/rubygems/specification.rbs +23 -0
  100. data/core/rubygems/stream_ui.rbs +5 -0
  101. data/core/rubygems/uninstaller.rbs +10 -0
  102. data/core/rubygems/version.rbs +293 -0
  103. data/core/set.rbs +751 -0
  104. data/core/signal.rbs +110 -0
  105. data/core/string.rbs +5532 -0
  106. data/core/struct.rbs +668 -0
  107. data/core/symbol.rbs +482 -0
  108. data/core/thread.rbs +1826 -0
  109. data/core/thread_group.rbs +79 -0
  110. data/core/time.rbs +1793 -0
  111. data/core/trace_point.rbs +483 -0
  112. data/core/true_class.rbs +98 -0
  113. data/core/unbound_method.rbs +337 -0
  114. data/core/warning.rbs +87 -0
  115. data/docs/CONTRIBUTING.md +107 -0
  116. data/docs/aliases.md +79 -0
  117. data/docs/architecture.md +110 -0
  118. data/docs/collection.md +192 -0
  119. data/docs/config.md +171 -0
  120. data/docs/data_and_struct.md +86 -0
  121. data/docs/encoding.md +56 -0
  122. data/docs/gem.md +56 -0
  123. data/docs/inline.md +634 -0
  124. data/docs/rbs_by_example.md +309 -0
  125. data/docs/repo.md +125 -0
  126. data/docs/rust.md +96 -0
  127. data/docs/sigs.md +167 -0
  128. data/docs/stdlib.md +147 -0
  129. data/docs/syntax.md +940 -0
  130. data/docs/tools.md +17 -0
  131. data/docs/type_fingerprint.md +21 -0
  132. data/docs/wasm_serialization.md +80 -0
  133. data/exe/rbs +7 -0
  134. data/ext/rbs_extension/ast_translation.c +1855 -0
  135. data/ext/rbs_extension/ast_translation.h +41 -0
  136. data/ext/rbs_extension/class_constants.c +187 -0
  137. data/ext/rbs_extension/class_constants.h +104 -0
  138. data/ext/rbs_extension/compat.h +10 -0
  139. data/ext/rbs_extension/extconf.rb +40 -0
  140. data/ext/rbs_extension/legacy_location.c +294 -0
  141. data/ext/rbs_extension/legacy_location.h +82 -0
  142. data/ext/rbs_extension/main.c +613 -0
  143. data/ext/rbs_extension/rbs_extension.h +16 -0
  144. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  145. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  146. data/goodcheck.yml +91 -0
  147. data/include/rbs/ast.h +1047 -0
  148. data/include/rbs/defines.h +99 -0
  149. data/include/rbs/lexer.h +207 -0
  150. data/include/rbs/location.h +40 -0
  151. data/include/rbs/parser.h +153 -0
  152. data/include/rbs/serialize.h +39 -0
  153. data/include/rbs/string.h +47 -0
  154. data/include/rbs/util/rbs_allocator.h +59 -0
  155. data/include/rbs/util/rbs_assert.h +20 -0
  156. data/include/rbs/util/rbs_buffer.h +83 -0
  157. data/include/rbs/util/rbs_constant_pool.h +155 -0
  158. data/include/rbs/util/rbs_encoding.h +282 -0
  159. data/include/rbs/util/rbs_unescape.h +24 -0
  160. data/include/rbs.h +14 -0
  161. data/lib/rbs/ancestor_graph.rb +92 -0
  162. data/lib/rbs/annotate/annotations.rb +199 -0
  163. data/lib/rbs/annotate/formatter.rb +82 -0
  164. data/lib/rbs/annotate/rdoc_annotator.rb +398 -0
  165. data/lib/rbs/annotate/rdoc_source.rb +131 -0
  166. data/lib/rbs/annotate.rb +8 -0
  167. data/lib/rbs/ast/annotation.rb +29 -0
  168. data/lib/rbs/ast/comment.rb +29 -0
  169. data/lib/rbs/ast/declarations.rb +472 -0
  170. data/lib/rbs/ast/directives.rb +49 -0
  171. data/lib/rbs/ast/members.rb +451 -0
  172. data/lib/rbs/ast/ruby/annotations.rb +451 -0
  173. data/lib/rbs/ast/ruby/comment_block.rb +247 -0
  174. data/lib/rbs/ast/ruby/declarations.rb +291 -0
  175. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  176. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  177. data/lib/rbs/ast/ruby/members.rb +762 -0
  178. data/lib/rbs/ast/type_param.rb +235 -0
  179. data/lib/rbs/ast/visitor.rb +137 -0
  180. data/lib/rbs/buffer.rb +189 -0
  181. data/lib/rbs/builtin_names.rb +58 -0
  182. data/lib/rbs/cli/colored_io.rb +48 -0
  183. data/lib/rbs/cli/diff.rb +84 -0
  184. data/lib/rbs/cli/validate.rb +294 -0
  185. data/lib/rbs/cli.rb +1253 -0
  186. data/lib/rbs/collection/cleaner.rb +38 -0
  187. data/lib/rbs/collection/config/lockfile.rb +92 -0
  188. data/lib/rbs/collection/config/lockfile_generator.rb +269 -0
  189. data/lib/rbs/collection/config.rb +81 -0
  190. data/lib/rbs/collection/installer.rb +32 -0
  191. data/lib/rbs/collection/sources/base.rb +14 -0
  192. data/lib/rbs/collection/sources/git.rb +265 -0
  193. data/lib/rbs/collection/sources/local.rb +81 -0
  194. data/lib/rbs/collection/sources/rubygems.rb +48 -0
  195. data/lib/rbs/collection/sources/stdlib.rb +50 -0
  196. data/lib/rbs/collection/sources.rb +38 -0
  197. data/lib/rbs/collection.rb +16 -0
  198. data/lib/rbs/constant.rb +28 -0
  199. data/lib/rbs/definition.rb +415 -0
  200. data/lib/rbs/definition_builder/ancestor_builder.rb +678 -0
  201. data/lib/rbs/definition_builder/method_builder.rb +295 -0
  202. data/lib/rbs/definition_builder.rb +1054 -0
  203. data/lib/rbs/diff.rb +131 -0
  204. data/lib/rbs/environment/class_entry.rb +69 -0
  205. data/lib/rbs/environment/module_entry.rb +66 -0
  206. data/lib/rbs/environment/use_map.rb +77 -0
  207. data/lib/rbs/environment.rb +1028 -0
  208. data/lib/rbs/environment_loader.rb +167 -0
  209. data/lib/rbs/environment_walker.rb +155 -0
  210. data/lib/rbs/errors.rb +634 -0
  211. data/lib/rbs/factory.rb +18 -0
  212. data/lib/rbs/file_finder.rb +28 -0
  213. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  214. data/lib/rbs/inline_parser.rb +568 -0
  215. data/lib/rbs/location_aux.rb +170 -0
  216. data/lib/rbs/locator.rb +247 -0
  217. data/lib/rbs/method_type.rb +145 -0
  218. data/lib/rbs/namespace.rb +154 -0
  219. data/lib/rbs/parser/lex_result.rb +15 -0
  220. data/lib/rbs/parser/token.rb +23 -0
  221. data/lib/rbs/parser_aux.rb +142 -0
  222. data/lib/rbs/prototype/helpers.rb +197 -0
  223. data/lib/rbs/prototype/node_usage.rb +99 -0
  224. data/lib/rbs/prototype/rb.rb +816 -0
  225. data/lib/rbs/prototype/rbi.rb +625 -0
  226. data/lib/rbs/prototype/runtime/helpers.rb +59 -0
  227. data/lib/rbs/prototype/runtime/reflection.rb +19 -0
  228. data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
  229. data/lib/rbs/prototype/runtime.rb +680 -0
  230. data/lib/rbs/repository.rb +127 -0
  231. data/lib/rbs/resolver/constant_resolver.rb +219 -0
  232. data/lib/rbs/resolver/type_name_resolver.rb +167 -0
  233. data/lib/rbs/rewriter.rb +70 -0
  234. data/lib/rbs/sorter.rb +198 -0
  235. data/lib/rbs/source.rb +99 -0
  236. data/lib/rbs/substitution.rb +83 -0
  237. data/lib/rbs/subtractor.rb +204 -0
  238. data/lib/rbs/test/errors.rb +80 -0
  239. data/lib/rbs/test/guaranteed.rb +30 -0
  240. data/lib/rbs/test/hook.rb +212 -0
  241. data/lib/rbs/test/observer.rb +19 -0
  242. data/lib/rbs/test/setup.rb +84 -0
  243. data/lib/rbs/test/setup_helper.rb +50 -0
  244. data/lib/rbs/test/tester.rb +167 -0
  245. data/lib/rbs/test/type_check.rb +457 -0
  246. data/lib/rbs/test.rb +112 -0
  247. data/lib/rbs/type_alias_dependency.rb +100 -0
  248. data/lib/rbs/type_alias_regularity.rb +126 -0
  249. data/lib/rbs/type_name.rb +122 -0
  250. data/lib/rbs/types.rb +1604 -0
  251. data/lib/rbs/unit_test/convertibles.rb +177 -0
  252. data/lib/rbs/unit_test/spy.rb +138 -0
  253. data/lib/rbs/unit_test/type_assertions.rb +383 -0
  254. data/lib/rbs/unit_test/with_aliases.rb +145 -0
  255. data/lib/rbs/unit_test.rb +6 -0
  256. data/lib/rbs/validator.rb +186 -0
  257. data/lib/rbs/variance_calculator.rb +189 -0
  258. data/lib/rbs/vendorer.rb +71 -0
  259. data/lib/rbs/version.rb +5 -0
  260. data/lib/rbs/wasm/deserializer.rb +213 -0
  261. data/lib/rbs/wasm/jars/asm-analysis.jar +0 -0
  262. data/lib/rbs/wasm/jars/asm-commons.jar +0 -0
  263. data/lib/rbs/wasm/jars/asm-tree.jar +0 -0
  264. data/lib/rbs/wasm/jars/asm-util.jar +0 -0
  265. data/lib/rbs/wasm/jars/asm.jar +0 -0
  266. data/lib/rbs/wasm/jars/compiler.jar +0 -0
  267. data/lib/rbs/wasm/jars/log.jar +0 -0
  268. data/lib/rbs/wasm/jars/runtime.jar +0 -0
  269. data/lib/rbs/wasm/jars/wasi.jar +0 -0
  270. data/lib/rbs/wasm/jars/wasm.jar +0 -0
  271. data/lib/rbs/wasm/location.rb +61 -0
  272. data/lib/rbs/wasm/parser.rb +137 -0
  273. data/lib/rbs/wasm/rbs_parser.wasm +0 -0
  274. data/lib/rbs/wasm/runtime.rb +217 -0
  275. data/lib/rbs/wasm/serialization_schema.rb +110 -0
  276. data/lib/rbs/writer.rb +424 -0
  277. data/lib/rbs.rb +117 -0
  278. data/lib/rdoc/discover.rb +20 -0
  279. data/lib/rdoc_plugin/parser.rb +163 -0
  280. data/rbs.gemspec +68 -0
  281. data/schema/annotation.json +14 -0
  282. data/schema/comment.json +26 -0
  283. data/schema/decls.json +326 -0
  284. data/schema/function.json +87 -0
  285. data/schema/location.json +56 -0
  286. data/schema/members.json +266 -0
  287. data/schema/methodType.json +50 -0
  288. data/schema/typeParam.json +52 -0
  289. data/schema/types.json +317 -0
  290. data/sig/ancestor_builder.rbs +163 -0
  291. data/sig/ancestor_graph.rbs +60 -0
  292. data/sig/annotate/annotations.rbs +102 -0
  293. data/sig/annotate/formatter.rbs +24 -0
  294. data/sig/annotate/rdoc_annotater.rbs +85 -0
  295. data/sig/annotate/rdoc_source.rbs +32 -0
  296. data/sig/annotation.rbs +27 -0
  297. data/sig/ast/ruby/annotations.rbs +470 -0
  298. data/sig/ast/ruby/comment_block.rbs +127 -0
  299. data/sig/ast/ruby/declarations.rbs +158 -0
  300. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  301. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  302. data/sig/ast/ruby/members.rbs +198 -0
  303. data/sig/buffer.rbs +108 -0
  304. data/sig/builtin_names.rbs +44 -0
  305. data/sig/cli/colored_io.rbs +15 -0
  306. data/sig/cli/diff.rbs +15 -0
  307. data/sig/cli/validate.rbs +47 -0
  308. data/sig/cli.rbs +89 -0
  309. data/sig/collection/cleaner.rbs +13 -0
  310. data/sig/collection/config/lockfile.rbs +74 -0
  311. data/sig/collection/config/lockfile_generator.rbs +68 -0
  312. data/sig/collection/config.rbs +46 -0
  313. data/sig/collection/installer.rbs +17 -0
  314. data/sig/collection/sources.rbs +214 -0
  315. data/sig/collection.rbs +4 -0
  316. data/sig/comment.rbs +26 -0
  317. data/sig/constant.rbs +21 -0
  318. data/sig/declarations.rbs +274 -0
  319. data/sig/definition.rbs +232 -0
  320. data/sig/definition_builder.rbs +181 -0
  321. data/sig/diff.rbs +28 -0
  322. data/sig/directives.rbs +77 -0
  323. data/sig/environment/class_entry.rbs +50 -0
  324. data/sig/environment/module_entry.rbs +50 -0
  325. data/sig/environment.rbs +286 -0
  326. data/sig/environment_loader.rbs +111 -0
  327. data/sig/environment_walker.rbs +65 -0
  328. data/sig/errors.rbs +408 -0
  329. data/sig/factory.rbs +5 -0
  330. data/sig/file_finder.rbs +28 -0
  331. data/sig/inline_parser/comment_association.rbs +71 -0
  332. data/sig/inline_parser.rbs +126 -0
  333. data/sig/location.rbs +135 -0
  334. data/sig/locator.rbs +56 -0
  335. data/sig/manifest.yaml +5 -0
  336. data/sig/members.rbs +258 -0
  337. data/sig/method_builder.rbs +89 -0
  338. data/sig/method_types.rbs +58 -0
  339. data/sig/namespace.rbs +161 -0
  340. data/sig/parser.rbs +164 -0
  341. data/sig/prototype/helpers.rbs +29 -0
  342. data/sig/prototype/node_usage.rbs +20 -0
  343. data/sig/prototype/rb.rbs +96 -0
  344. data/sig/prototype/rbi.rbs +75 -0
  345. data/sig/prototype/runtime.rbs +182 -0
  346. data/sig/rbs.rbs +21 -0
  347. data/sig/rdoc/rbs.rbs +67 -0
  348. data/sig/repository.rbs +85 -0
  349. data/sig/resolver/constant_resolver.rbs +92 -0
  350. data/sig/resolver/context.rbs +34 -0
  351. data/sig/resolver/type_name_resolver.rbs +61 -0
  352. data/sig/rewriter.rbs +45 -0
  353. data/sig/shims/bundler.rbs +38 -0
  354. data/sig/shims/enumerable.rbs +5 -0
  355. data/sig/shims/rubygems.rbs +19 -0
  356. data/sig/sorter.rbs +41 -0
  357. data/sig/source.rbs +48 -0
  358. data/sig/substitution.rbs +48 -0
  359. data/sig/subtractor.rbs +37 -0
  360. data/sig/test/errors.rbs +52 -0
  361. data/sig/test/guranteed.rbs +9 -0
  362. data/sig/test/type_check.rbs +19 -0
  363. data/sig/test.rbs +82 -0
  364. data/sig/type_alias_dependency.rbs +53 -0
  365. data/sig/type_alias_regularity.rbs +98 -0
  366. data/sig/type_param.rbs +115 -0
  367. data/sig/typename.rbs +89 -0
  368. data/sig/types.rbs +578 -0
  369. data/sig/unit_test/convertibles.rbs +154 -0
  370. data/sig/unit_test/spy.rbs +22 -0
  371. data/sig/unit_test/type_assertions.rbs +211 -0
  372. data/sig/unit_test/with_aliases.rbs +136 -0
  373. data/sig/use_map.rbs +35 -0
  374. data/sig/util.rbs +9 -0
  375. data/sig/validator.rbs +63 -0
  376. data/sig/variance_calculator.rbs +87 -0
  377. data/sig/vendorer.rbs +51 -0
  378. data/sig/version.rbs +3 -0
  379. data/sig/visitor.rbs +47 -0
  380. data/sig/wasm/deserializer.rbs +66 -0
  381. data/sig/wasm/serialization_schema.rbs +13 -0
  382. data/sig/writer.rbs +127 -0
  383. data/src/ast.c +1628 -0
  384. data/src/lexer.c +3217 -0
  385. data/src/lexer.re +155 -0
  386. data/src/lexstate.c +217 -0
  387. data/src/location.c +31 -0
  388. data/src/parser.c +4255 -0
  389. data/src/serialize.c +958 -0
  390. data/src/string.c +41 -0
  391. data/src/util/rbs_allocator.c +162 -0
  392. data/src/util/rbs_assert.c +19 -0
  393. data/src/util/rbs_buffer.c +54 -0
  394. data/src/util/rbs_constant_pool.c +268 -0
  395. data/src/util/rbs_encoding.c +21308 -0
  396. data/src/util/rbs_unescape.c +167 -0
  397. data/stdlib/abbrev/0/abbrev.rbs +66 -0
  398. data/stdlib/abbrev/0/array.rbs +26 -0
  399. data/stdlib/base64/0/base64.rbs +355 -0
  400. data/stdlib/benchmark/0/benchmark.rbs +452 -0
  401. data/stdlib/bigdecimal/0/big_decimal.rbs +1647 -0
  402. data/stdlib/bigdecimal-math/0/big_math.rbs +280 -0
  403. data/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
  404. data/stdlib/cgi/0/core.rbs +911 -0
  405. data/stdlib/cgi/0/manifest.yaml +4 -0
  406. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  407. data/stdlib/coverage/0/coverage.rbs +266 -0
  408. data/stdlib/csv/0/csv.rbs +3776 -0
  409. data/stdlib/csv/0/manifest.yaml +3 -0
  410. data/stdlib/date/0/date.rbs +1598 -0
  411. data/stdlib/date/0/date_time.rbs +617 -0
  412. data/stdlib/date/0/time.rbs +26 -0
  413. data/stdlib/dbm/0/dbm.rbs +421 -0
  414. data/stdlib/delegate/0/delegator.rbs +187 -0
  415. data/stdlib/delegate/0/kernel.rbs +47 -0
  416. data/stdlib/delegate/0/simple_delegator.rbs +96 -0
  417. data/stdlib/did_you_mean/0/did_you_mean.rbs +344 -0
  418. data/stdlib/digest/0/digest.rbs +687 -0
  419. data/stdlib/erb/0/erb.rbs +933 -0
  420. data/stdlib/etc/0/etc.rbs +884 -0
  421. data/stdlib/fileutils/0/fileutils.rbs +1753 -0
  422. data/stdlib/find/0/find.rbs +49 -0
  423. data/stdlib/forwardable/0/forwardable.rbs +271 -0
  424. data/stdlib/io-console/0/io-console.rbs +414 -0
  425. data/stdlib/ipaddr/0/ipaddr.rbs +436 -0
  426. data/stdlib/json/0/json.rbs +1963 -0
  427. data/stdlib/kconv/0/kconv.rbs +166 -0
  428. data/stdlib/logger/0/formatter.rbs +45 -0
  429. data/stdlib/logger/0/log_device.rbs +100 -0
  430. data/stdlib/logger/0/logger.rbs +796 -0
  431. data/stdlib/logger/0/manifest.yaml +2 -0
  432. data/stdlib/logger/0/period.rbs +17 -0
  433. data/stdlib/logger/0/severity.rbs +34 -0
  434. data/stdlib/minitest/0/kernel.rbs +42 -0
  435. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
  436. data/stdlib/minitest/0/minitest/assertion.rbs +17 -0
  437. data/stdlib/minitest/0/minitest/assertions.rbs +590 -0
  438. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
  439. data/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
  440. data/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
  441. data/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
  442. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  443. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  444. data/stdlib/minitest/0/minitest/expectation.rbs +2 -0
  445. data/stdlib/minitest/0/minitest/expectations.rbs +21 -0
  446. data/stdlib/minitest/0/minitest/guard.rbs +64 -0
  447. data/stdlib/minitest/0/minitest/mock.rbs +64 -0
  448. data/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
  449. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
  450. data/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
  451. data/stdlib/minitest/0/minitest/parallel.rbs +2 -0
  452. data/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
  453. data/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
  454. data/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
  455. data/stdlib/minitest/0/minitest/reportable.rbs +53 -0
  456. data/stdlib/minitest/0/minitest/reporter.rbs +5 -0
  457. data/stdlib/minitest/0/minitest/result.rbs +28 -0
  458. data/stdlib/minitest/0/minitest/runnable.rbs +163 -0
  459. data/stdlib/minitest/0/minitest/skip.rbs +6 -0
  460. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
  461. data/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
  462. data/stdlib/minitest/0/minitest/spec.rbs +11 -0
  463. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
  464. data/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
  465. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
  466. data/stdlib/minitest/0/minitest/test.rbs +69 -0
  467. data/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
  468. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  469. data/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
  470. data/stdlib/minitest/0/minitest/unit.rbs +4 -0
  471. data/stdlib/minitest/0/minitest.rbs +115 -0
  472. data/stdlib/monitor/0/monitor.rbs +363 -0
  473. data/stdlib/mutex_m/0/mutex_m.rbs +104 -0
  474. data/stdlib/net-http/0/manifest.yaml +3 -0
  475. data/stdlib/net-http/0/net-http.rbs +5580 -0
  476. data/stdlib/net-protocol/0/manifest.yaml +2 -0
  477. data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  478. data/stdlib/net-smtp/0/manifest.yaml +2 -0
  479. data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  480. data/stdlib/nkf/0/nkf.rbs +402 -0
  481. data/stdlib/objspace/0/objspace.rbs +470 -0
  482. data/stdlib/observable/0/observable.rbs +217 -0
  483. data/stdlib/open-uri/0/manifest.yaml +4 -0
  484. data/stdlib/open-uri/0/open-uri.rbs +433 -0
  485. data/stdlib/open3/0/open3.rbs +606 -0
  486. data/stdlib/openssl/0/manifest.yaml +3 -0
  487. data/stdlib/openssl/0/openssl.rbs +12231 -0
  488. data/stdlib/optparse/0/optparse.rbs +1734 -0
  489. data/stdlib/pathname/0/pathname.rbs +36 -0
  490. data/stdlib/pp/0/manifest.yaml +2 -0
  491. data/stdlib/pp/0/pp.rbs +301 -0
  492. data/stdlib/prettyprint/0/prettyprint.rbs +383 -0
  493. data/stdlib/pstore/0/pstore.rbs +608 -0
  494. data/stdlib/psych/0/core_ext.rbs +12 -0
  495. data/stdlib/psych/0/dbm.rbs +237 -0
  496. data/stdlib/psych/0/manifest.yaml +3 -0
  497. data/stdlib/psych/0/psych.rbs +455 -0
  498. data/stdlib/psych/0/store.rbs +57 -0
  499. data/stdlib/pty/0/pty.rbs +240 -0
  500. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  501. data/stdlib/rdoc/0/code_object.rbs +52 -0
  502. data/stdlib/rdoc/0/comment.rbs +61 -0
  503. data/stdlib/rdoc/0/context.rbs +153 -0
  504. data/stdlib/rdoc/0/markup.rbs +117 -0
  505. data/stdlib/rdoc/0/options.rbs +76 -0
  506. data/stdlib/rdoc/0/parser.rbs +56 -0
  507. data/stdlib/rdoc/0/rdoc.rbs +393 -0
  508. data/stdlib/rdoc/0/ri.rbs +17 -0
  509. data/stdlib/rdoc/0/store.rbs +48 -0
  510. data/stdlib/rdoc/0/top_level.rbs +97 -0
  511. data/stdlib/resolv/0/manifest.yaml +3 -0
  512. data/stdlib/resolv/0/resolv.rbs +1787 -0
  513. data/stdlib/ripper/0/ripper.rbs +1654 -0
  514. data/stdlib/securerandom/0/manifest.yaml +2 -0
  515. data/stdlib/securerandom/0/securerandom.rbs +49 -0
  516. data/stdlib/shellwords/0/shellwords.rbs +229 -0
  517. data/stdlib/singleton/0/singleton.rbs +134 -0
  518. data/stdlib/socket/0/addrinfo.rbs +666 -0
  519. data/stdlib/socket/0/basic_socket.rbs +590 -0
  520. data/stdlib/socket/0/constants.rbs +2295 -0
  521. data/stdlib/socket/0/ip_socket.rbs +94 -0
  522. data/stdlib/socket/0/socket.rbs +4170 -0
  523. data/stdlib/socket/0/socket_error.rbs +5 -0
  524. data/stdlib/socket/0/tcp_server.rbs +192 -0
  525. data/stdlib/socket/0/tcp_socket.rbs +87 -0
  526. data/stdlib/socket/0/udp_socket.rbs +133 -0
  527. data/stdlib/socket/0/unix_server.rbs +169 -0
  528. data/stdlib/socket/0/unix_socket.rbs +172 -0
  529. data/stdlib/stringio/0/stringio.rbs +1681 -0
  530. data/stdlib/strscan/0/string_scanner.rbs +1648 -0
  531. data/stdlib/tempfile/0/tempfile.rbs +483 -0
  532. data/stdlib/time/0/time.rbs +434 -0
  533. data/stdlib/timeout/0/timeout.rbs +137 -0
  534. data/stdlib/tmpdir/0/tmpdir.rbs +69 -0
  535. data/stdlib/tsort/0/cyclic.rbs +8 -0
  536. data/stdlib/tsort/0/interfaces.rbs +20 -0
  537. data/stdlib/tsort/0/tsort.rbs +410 -0
  538. data/stdlib/uri/0/common.rbs +621 -0
  539. data/stdlib/uri/0/file.rbs +118 -0
  540. data/stdlib/uri/0/ftp.rbs +13 -0
  541. data/stdlib/uri/0/generic.rbs +1116 -0
  542. data/stdlib/uri/0/http.rbs +104 -0
  543. data/stdlib/uri/0/https.rbs +14 -0
  544. data/stdlib/uri/0/ldap.rbs +230 -0
  545. data/stdlib/uri/0/ldaps.rbs +14 -0
  546. data/stdlib/uri/0/mailto.rbs +92 -0
  547. data/stdlib/uri/0/rfc2396_parser.rbs +189 -0
  548. data/stdlib/uri/0/rfc3986_parser.rbs +2 -0
  549. data/stdlib/uri/0/ws.rbs +13 -0
  550. data/stdlib/uri/0/wss.rbs +9 -0
  551. data/stdlib/yaml/0/manifest.yaml +2 -0
  552. data/stdlib/yaml/0/yaml.rbs +1 -0
  553. data/stdlib/zlib/0/buf_error.rbs +10 -0
  554. data/stdlib/zlib/0/data_error.rbs +10 -0
  555. data/stdlib/zlib/0/deflate.rbs +211 -0
  556. data/stdlib/zlib/0/error.rbs +20 -0
  557. data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  558. data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  559. data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  560. data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  561. data/stdlib/zlib/0/gzip_file.rbs +156 -0
  562. data/stdlib/zlib/0/gzip_reader.rbs +293 -0
  563. data/stdlib/zlib/0/gzip_writer.rbs +168 -0
  564. data/stdlib/zlib/0/inflate.rbs +180 -0
  565. data/stdlib/zlib/0/mem_error.rbs +10 -0
  566. data/stdlib/zlib/0/need_dict.rbs +13 -0
  567. data/stdlib/zlib/0/stream_end.rbs +11 -0
  568. data/stdlib/zlib/0/stream_error.rbs +11 -0
  569. data/stdlib/zlib/0/version_error.rbs +11 -0
  570. data/stdlib/zlib/0/zlib.rbs +449 -0
  571. data/stdlib/zlib/0/zstream.rbs +201 -0
  572. data/wasm/README.md +59 -0
  573. data/wasm/rbs_wasm.c +411 -0
  574. metadata +660 -0
data/docs/inline.md ADDED
@@ -0,0 +1,634 @@
1
+ # Inline RBS Type Declaration
2
+
3
+ Inline RBS type declarations allow you to write type annotations directly in your Ruby source files using comments. Instead of maintaining separate `.rbs` files, you can keep your type information alongside your Ruby code, making it easier to keep types and implementation in sync.
4
+
5
+ The following example defines `Calculator` class and `add` instance method. The `@rbs` comment gives the type of the `add` method with the RBS method type syntax.
6
+
7
+ ```ruby
8
+ class Calculator
9
+ # @rbs (Integer, Integer) -> Integer
10
+ def add(a, b)
11
+ a + b
12
+ end
13
+ end
14
+ ```
15
+
16
+ ## Classes
17
+
18
+ Inline RBS supports class definitions from your Ruby code. When you define a class in Ruby, the library recognizes it and the corresponding class definition is generated in RBS.
19
+
20
+ ```ruby
21
+ class App
22
+ end
23
+ ```
24
+
25
+ The `::App` class is defined in RBS and you can use it as a type.
26
+
27
+ ### Non-constant class paths
28
+
29
+ Only classes with constant names are imported. Dynamic or non-constant class definitions are ignored:
30
+
31
+ ```ruby
32
+ # This class is imported
33
+ class MyClass
34
+ end
35
+
36
+ # This is ignored - dynamic class definition
37
+ MyClass = Class.new do
38
+ end
39
+
40
+ # This is also ignored - non-constant class name
41
+ object = Object
42
+ class object::MyClass
43
+ end
44
+ ```
45
+
46
+ ### Class Nesting
47
+
48
+ Nested classes work as expected:
49
+
50
+ ```ruby
51
+ class Client
52
+ class Error
53
+ end
54
+ end
55
+ ```
56
+
57
+ This creates the types `::Client` and `::Client::Error`.
58
+
59
+ ### Inheritance
60
+
61
+ Class declarations can have a super class.
62
+
63
+ ```ruby
64
+ class UsersController < ApplicationController
65
+ end
66
+ ```
67
+
68
+ The super class specification must be a constant.
69
+
70
+ The super class specification allows type applications.
71
+
72
+ ```ruby
73
+ class StringArray < Array #[String]
74
+ end
75
+ ```
76
+
77
+ ### Current Limitations
78
+
79
+ - Generic class definitions are not supported
80
+
81
+ ## Modules
82
+
83
+ Inline RBS supports module definitions from your Ruby code. When you define a module in Ruby, the library recognizes it and the corresponding module definition is generated in RBS.
84
+
85
+ ```ruby
86
+ module Helper
87
+ end
88
+ ```
89
+
90
+ The `::Helper` module is defined in RBS and you can use it as a type.
91
+
92
+ ### Non-constant module paths
93
+
94
+ Only modules with constant names are imported. Dynamic or non-constant module definitions are ignored:
95
+
96
+ ```ruby
97
+ # This module is imported
98
+ module MyModule
99
+ end
100
+
101
+ # This is ignored - dynamic module definition
102
+ MyModule = Module.new do
103
+ end
104
+
105
+ # This is also ignored - non-constant module name
106
+ object = Object
107
+ module object::MyModule
108
+ end
109
+ ```
110
+
111
+ ### Module Nesting
112
+
113
+ Nested modules work as expected:
114
+
115
+ ```ruby
116
+ module API
117
+ module V1
118
+ module Resources
119
+ end
120
+ end
121
+ end
122
+ ```
123
+
124
+ This creates the types `::API`, `::API::V1`, and `::API::V1::Resources`.
125
+
126
+ ### `module-self` constraint
127
+
128
+ The `module-self` constraint declares which classes or modules the module can be mixed into.
129
+
130
+ ```ruby
131
+ # @rbs module-self: _Each[String]
132
+ module Enumerable2
133
+ end
134
+ ```
135
+
136
+ This is equivalent to `module Enumerable2 : _Each[String]` in RBS, meaning `Enumerable2` can only be included in classes that satisfy the `_Each[String]` interface.
137
+
138
+ Multiple `module-self` constraints can be declared with separate annotations:
139
+
140
+ ```ruby
141
+ # @rbs module-self: _Each[String]
142
+ # @rbs module-self: Comparable
143
+ module StringCollection
144
+ end
145
+ ```
146
+
147
+ You can add a description after `--`:
148
+
149
+ ```ruby
150
+ # @rbs module-self: Minitest::Test -- depending on assertion methods
151
+ module TestHelper
152
+ end
153
+ ```
154
+
155
+ ### Current Limitations
156
+
157
+ - Generic module definitions are not supported
158
+
159
+ ## Method Definitions
160
+
161
+ Inline RBS supports methods defined using the `def` syntax in Ruby.
162
+
163
+ ```ruby
164
+ class Calculator
165
+ def add(x, y) = x+y
166
+
167
+ def self.zero = 0
168
+ end
169
+ ```
170
+
171
+ It detects method definitions and allows you to add annotation comments to describe their types.
172
+
173
+ ### Unannotated method definition
174
+
175
+ Methods defined with `def` syntax are detected, but their inferred type depends on whether a super method exists.
176
+
177
+ If there is no super method, the inferred type is `(?) -> untyped` -- it accepts any arguments without type checking and returns an `untyped` object.
178
+
179
+ ```ruby
180
+ class Calculator
181
+ def add(x, y) = x+y
182
+ end
183
+ ```
184
+
185
+ The type of `Calculator#add` is `(?) -> untyped`.
186
+
187
+ If the super class (or an included module) defines a method with the same name, the unannotated method inherits that type.
188
+
189
+ ```ruby
190
+ class Calculator
191
+ # @rbs (Integer, Integer) -> Integer
192
+ def add(x, y) = x + y
193
+ end
194
+
195
+ class ScientificCalculator < Calculator
196
+ def add(x, y) = x + y # No annotation
197
+ end
198
+ ```
199
+
200
+ The type of `ScientificCalculator#add` is `(Integer, Integer) -> Integer`, inherited from `Calculator#add`.
201
+
202
+ ### Method type annotation syntax
203
+
204
+ You can define the type of the method using `@rbs` and `:` syntax.
205
+
206
+ ```ruby
207
+ class Calculator
208
+ # @rbs (Integer, Integer) -> Integer
209
+ def add(x, y) = x + y
210
+
211
+ #: (Integer, Integer) -> Integer
212
+ def subtract(x, y) = x - y
213
+ end
214
+ ```
215
+
216
+ The type of both methods is `(Integer, Integer) -> Integer` -- they take two `Integer` objects and return an `Integer` object.
217
+
218
+ Both syntaxes support method overloading:
219
+
220
+ ```ruby
221
+ class Calculator
222
+ # @rbs (Integer, Integer) -> Integer
223
+ # | (Float, Float) -> Float
224
+ def add(x, y) = x + y
225
+
226
+ #: (Integer, Integer) -> Integer
227
+ #: (Float, Float) -> Float
228
+ def subtract(x, y) = x - y
229
+ end
230
+ ```
231
+
232
+ The type of both methods is `(Integer, Integer) -> Integer | (Float, Float) -> Float`.
233
+
234
+ > [!NOTE]
235
+ > The `@rbs METHOD-TYPE` syntax allows overloads with the `|` operator, just like in RBS files.
236
+ > Multiple `: METHOD-TYPE` declarations are required for overloads.
237
+
238
+ The `#:` syntax can also be used as a trailing annotation to declare the return type of a method:
239
+
240
+ ```ruby
241
+ class Calculator
242
+ def add(x, y) #: Integer
243
+ x + y
244
+ end
245
+
246
+ def subtract(x, y) = x - y #: Integer
247
+ end
248
+ ```
249
+
250
+ The `@rbs METHOD-TYPE` syntax allows having `...` at the last part.
251
+
252
+ ```ruby
253
+ class Calculator2 < Calculator
254
+ # @rbs (Float, Float) -> Float | ...
255
+ def add(x, y) = x + y
256
+
257
+ # @rbs ...
258
+ def subtract(x, y) = super
259
+ end
260
+ ```
261
+
262
+ #### Doc-style syntax
263
+
264
+ The doc-style syntax allows annotating individual method parameters and the return type using `@rbs NAME: TYPE` comments.
265
+
266
+ The `@rbs PARAM_NAME: T` syntax declares the type of a parameter:
267
+
268
+ ```ruby
269
+ class Calculator
270
+ # @rbs x: Integer
271
+ # @rbs y: Integer
272
+ # @rbs a: String
273
+ # @rbs b: bool
274
+ def add(x, y = 1, a:, b: false)
275
+ pp(x:, y:, a:, b:)
276
+ end
277
+ end
278
+ ```
279
+
280
+ You can add a description after `--`:
281
+
282
+ ```ruby
283
+ class Calculator
284
+ # @rbs x: Integer -- required positional argument
285
+ # @rbs y: Integer -- optional positional argument
286
+ # @rbs a: String -- required keyword argument
287
+ # @rbs b: bool -- optional keyword argument
288
+ def add(x, y = 1, a:, b: false)
289
+ pp(x:, y:, a:, b:)
290
+ end
291
+ end
292
+ ```
293
+
294
+ Types of splat (`*a`) and double-splat (`**b`) parameters can be declared too.
295
+
296
+ ```ruby
297
+ class Foo
298
+ # @rbs *a: String -- The type of `a` is `Array[String]`
299
+ # @rbs **b: bool -- The type of `b` is `Hash[Symbol, bool]`
300
+ def foo(*a, **b)
301
+ end
302
+
303
+ # @rbs *: String -- Parameter name is optional
304
+ # @rbs **: bool -- Parameter name can be omitted in Ruby too
305
+ def bar(*a, **)
306
+ end
307
+ end
308
+ ```
309
+
310
+ Types of block parameter (`&block`) can be declared.
311
+
312
+ ```ruby
313
+ class Foo
314
+ # @rbs &block: () -> void
315
+ def foo(&block)
316
+ end
317
+
318
+ # @rbs &: () -> void -- The parameter name can be omitted
319
+ def bar(&)
320
+ end
321
+
322
+ # @rbs &block: ? () -> untyped -- The `?` prefix is for optional block
323
+ def baz(&block)
324
+ end
325
+ end
326
+ ```
327
+
328
+ The `@rbs return: T` syntax declares the return type of a method:
329
+
330
+ ```ruby
331
+ class Calculator
332
+ # @rbs return: String -- a human-readable representation
333
+ def to_s
334
+ "Calculator"
335
+ end
336
+ end
337
+ ```
338
+
339
+ Both can be combined:
340
+
341
+ ```ruby
342
+ class Calculator
343
+ # @rbs x: Integer -- the first operand
344
+ # @rbs y: Integer -- the second operand
345
+ # @rbs return: Integer
346
+ def add(x, y:)
347
+ x + y
348
+ end
349
+ end
350
+ ```
351
+
352
+ ### Current Limitations
353
+
354
+ - Method visibility declaration is not supported yet
355
+ - The `class << self` syntax is not supported
356
+ - Top-level method definitions (outside any class/module) are not supported
357
+ - Method definitions with a non-self receiver (e.g. `def obj.foo`) are not supported
358
+
359
+ ## Attributes
360
+
361
+ Inline RBS supports Ruby's attribute methods: `attr_reader`, `attr_writer`, and `attr_accessor`.
362
+
363
+ ```ruby
364
+ class Person
365
+ attr_reader :name #: String
366
+ attr_writer :age #: Integer
367
+ attr_accessor :email #: String?
368
+ end
369
+ ```
370
+
371
+ It detects these attribute declarations and generates the corresponding getter and setter methods.
372
+
373
+ The accessor methods and instance variables are defined.
374
+
375
+ ### Unannotated attributes
376
+
377
+ Attributes defined without type annotations are treated as `untyped`:
378
+
379
+ ```ruby
380
+ class Person
381
+ attr_reader :name
382
+ attr_writer :age
383
+ attr_accessor :email
384
+ end
385
+ ```
386
+
387
+ ### Type annotations for attributes
388
+
389
+ You can add type annotations to attributes using the `#:` syntax in trailing comments:
390
+
391
+ ```ruby
392
+ class Person
393
+ attr_reader :name #: String
394
+ attr_writer :age #: Integer
395
+ attr_accessor :email #: String?
396
+ end
397
+ ```
398
+
399
+ This generates the following typed methods:
400
+ - `name: () -> String`
401
+ - `age=: (Integer) -> Integer`
402
+ - `email: () -> String?` and `email=: (String?) -> String?`
403
+
404
+ ### Multiple attributes
405
+
406
+ When declaring multiple attributes in one line, the type annotation applies to all attributes:
407
+
408
+ ```ruby
409
+ class Person
410
+ attr_reader :first_name, :last_name #: String
411
+ attr_accessor :age, :height #: Integer
412
+ end
413
+ ```
414
+
415
+ All attributes in each declaration share the same type.
416
+
417
+ ### Non-symbol attribute names
418
+
419
+ Attribute names must be symbol literals.
420
+
421
+ ```ruby
422
+ class Person
423
+ attr_reader "name" #: String
424
+
425
+ age = :age
426
+ attr_writer age #: Integer
427
+ end
428
+ ```
429
+
430
+ The attribute definitions are ignored because the names are given by string literals and local variables.
431
+
432
+ ### Current Limitations
433
+
434
+ - Attribute visibility is not supported yet. All attributes are _public_
435
+ - Top-level attribute definitions (outside any class/module) are not supported
436
+
437
+ ## Mixin
438
+
439
+ Inline RBS supports Ruby's mixin methods: `include`, `extend`, and `prepend`.
440
+
441
+ ```ruby
442
+ module Printable
443
+ # @rbs () -> String
444
+ def to_print
445
+ to_s
446
+ end
447
+ end
448
+
449
+ class Document
450
+ include Printable
451
+ extend Enumerable #[String]
452
+ prepend Trackable
453
+ end
454
+ ```
455
+
456
+ It detects these mixin declarations and adds them to the class or module definition.
457
+
458
+ ### Basic mixin usage
459
+
460
+ Mixins work just like in regular RBS files:
461
+
462
+ ```ruby
463
+ module Helper
464
+ end
465
+
466
+ class MyClass
467
+ include Helper
468
+ extend Helper
469
+ prepend Helper
470
+ end
471
+ ```
472
+
473
+ ### Type arguments for generic modules
474
+
475
+ You can specify type arguments for generic modules using the `#[...]` syntax:
476
+
477
+ ```ruby
478
+ class TodoList
479
+ include Enumerable #[String]
480
+
481
+ # @rbs () { (String) -> void } -> void
482
+ def each(&block)
483
+ @items.each(&block)
484
+ end
485
+ end
486
+ ```
487
+
488
+ ### Module name requirements
489
+
490
+ Only constant module names are supported. Dynamic module references are not allowed:
491
+
492
+ ```ruby
493
+ class MyClass
494
+ include Helper # ✓ Works - constant name
495
+
496
+ mod = Helper
497
+ include mod # ✗ Ignored - non-constant module reference
498
+
499
+ include Helper.new # ✗ Ignored - not a simple constant
500
+ end
501
+ ```
502
+
503
+ ### Module name resolution
504
+
505
+ The module name resolution is based on the nesting of the class/module definitions, unlike Ruby.
506
+
507
+ Modules accessible through ancestors (super-class/included modules) are not supported.
508
+
509
+ ### Current Limitations
510
+
511
+ - Only single module arguments are supported (no `include A, B` syntax)
512
+ - Module names must be constants
513
+
514
+ ## Instance Variables
515
+
516
+ Inline RBS declaration allows defining instance variables.
517
+
518
+ ```ruby
519
+ class Person
520
+ # @rbs @name: String
521
+ # @rbs @age: Integer? --
522
+ # how old is the person?
523
+ # `nil` means it's unspecified.
524
+
525
+ # @rbs (String name, Integer? age) -> void
526
+ def initialize(name, age)
527
+ @name = name
528
+ @age = age
529
+ end
530
+ end
531
+ ```
532
+
533
+ The `@rbs @VAR-NAME: TYPE` syntax enclosed in `class`/`module` syntax declares instance variables.
534
+ You can add the documentation of the variable followed by two hyphens (`--`).
535
+
536
+ Instance variable declarations must be under the `class`/`module` syntax, and they are ignored if written inside method definitions.
537
+
538
+ ### Current Limitations
539
+
540
+ - Only instance variables of class/module instances are allowed
541
+
542
+ ## Constants
543
+
544
+ Constants are supported by inline RBS declaration.
545
+
546
+ ```ruby
547
+ Foo = 123
548
+
549
+ module Bar
550
+ Baz = [1, ""] #: [Integer, String]
551
+ end
552
+
553
+ # Version of the library
554
+ #
555
+ VERSION = "1.2.3".freeze #: String
556
+ ```
557
+
558
+ ### Type Inference for Literal Constants
559
+
560
+ The types of constants may be automatically inferred when the right-hand side consists of literals:
561
+
562
+ - **Integers**: `COUNT = 42` → `Integer`
563
+ - **Floats**: `RATE = 3.14` → `Float`
564
+ - **Booleans**: `ENABLED = true` → `bool`
565
+ - **Strings**: `NAME = "test"` → `String`
566
+ - **Symbols**: `STATUS = :ready` → `Symbol`
567
+ - **Nil**: `EMPTY = nil` → `nil`
568
+
569
+ ```ruby
570
+ MAX_SIZE = 100 # Inferred as Integer
571
+ PI = 3.14159 # Inferred as Float
572
+ DEBUG = false # Inferred as bool
573
+ APP_NAME = "MyApp" # Inferred as String
574
+ DEFAULT_MODE = :strict # Inferred as Symbol
575
+ NONE = nil # Inferred as nil
576
+ ```
577
+
578
+ ### Explicit Type Annotations
579
+
580
+ For more complex types or when you want to override inference, use the `#:` syntax:
581
+
582
+ ```ruby
583
+ ITEMS = [1, "hello"] #: [Integer, String]
584
+ CONFIG = { name: "app", version: 1 } #: { name: String, version: Integer }
585
+ CALLBACK = -> { puts "done" } #: ^() -> void
586
+ ```
587
+
588
+ ### Documentation Comments
589
+
590
+ Comments above constant declarations become part of the constant's documentation:
591
+
592
+ ```ruby
593
+ # The maximum number of retries allowed
594
+ # before giving up on the operation
595
+ MAX_RETRIES = 3
596
+
597
+ # Application configuration loaded from environment
598
+ #
599
+ # This hash contains all the runtime configuration
600
+ # settings for the application.
601
+ CONFIG = load_config() #: Hash[String, untyped]
602
+ ```
603
+
604
+ ## Class/module Aliases
605
+
606
+ Class and module aliases can be defined by assigning existing classes or modules to constants using the `#: class-alias` or `#: module-alias` syntax.
607
+
608
+ ```ruby
609
+ MyObject = Object #: class-alias
610
+
611
+ MyKernel = Kernel #: module-alias
612
+ ```
613
+
614
+ This creates new type names that refer to the same class or module as the original.
615
+
616
+ The annotations can have optional type name to specify the class/module name, for the case it cannot be inferred through the right-hand-side of the constant declaration.
617
+
618
+ ```ruby
619
+ MyObject = object #: class-alias Object
620
+
621
+ MyKernel = kernel #: module-alias Kernel
622
+ ```
623
+
624
+ ## Skip Annotation
625
+
626
+ The `@rbs skip` annotation makes inline RBS ignore the following declaration.
627
+
628
+ ```ruby
629
+ class Calculator
630
+ # @rbs skip
631
+ def debug_internal
632
+ end
633
+ end
634
+ ```