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.
- checksums.yaml +7 -0
- data/.clang-format +75 -0
- data/.clangd +2 -0
- data/.github/dependabot.yml +24 -0
- data/.github/workflows/bundle-update.yml +63 -0
- data/.github/workflows/c-check.yml +61 -0
- data/.github/workflows/comments.yml +37 -0
- data/.github/workflows/dependabot.yml +30 -0
- data/.github/workflows/jruby.yml +67 -0
- data/.github/workflows/milestone.yml +83 -0
- data/.github/workflows/ruby.yml +158 -0
- data/.github/workflows/rust.yml +184 -0
- data/.github/workflows/truffleruby.yml +54 -0
- data/.github/workflows/typecheck.yml +39 -0
- data/.github/workflows/wasm.yml +53 -0
- data/.github/workflows/windows.yml +49 -0
- data/.gitignore +38 -0
- data/.rubocop.yml +72 -0
- data/BSDL +22 -0
- data/CHANGELOG.md +2292 -0
- data/COPYING +56 -0
- data/README.md +240 -0
- data/Rakefile +869 -0
- data/Steepfile +53 -0
- data/config.yml +913 -0
- data/core/array.rbs +4142 -0
- data/core/basic_object.rbs +376 -0
- data/core/binding.rbs +148 -0
- data/core/builtin.rbs +278 -0
- data/core/class.rbs +223 -0
- data/core/comparable.rbs +192 -0
- data/core/complex.rbs +812 -0
- data/core/constants.rbs +96 -0
- data/core/data.rbs +415 -0
- data/core/dir.rbs +993 -0
- data/core/encoding.rbs +1368 -0
- data/core/enumerable.rbs +2506 -0
- data/core/enumerator/arithmetic_sequence.rbs +70 -0
- data/core/enumerator/product.rbs +92 -0
- data/core/enumerator.rbs +705 -0
- data/core/env.rbs +6 -0
- data/core/errno.rbs +682 -0
- data/core/errors.rbs +789 -0
- data/core/exception.rbs +485 -0
- data/core/false_class.rbs +82 -0
- data/core/fiber.rbs +570 -0
- data/core/fiber_error.rbs +11 -0
- data/core/file.rbs +2045 -0
- data/core/file_constants.rbs +463 -0
- data/core/file_stat.rbs +534 -0
- data/core/file_test.rbs +331 -0
- data/core/float.rbs +1316 -0
- data/core/gc.rbs +788 -0
- data/core/global_variables.rbs +184 -0
- data/core/hash.rbs +2183 -0
- data/core/integer.rbs +1374 -0
- data/core/io/buffer.rbs +995 -0
- data/core/io/wait.rbs +48 -0
- data/core/io.rbs +3472 -0
- data/core/kernel.rbs +3172 -0
- data/core/marshal.rbs +207 -0
- data/core/match_data.rbs +637 -0
- data/core/math.rbs +770 -0
- data/core/method.rbs +422 -0
- data/core/module.rbs +1856 -0
- data/core/nil_class.rbs +210 -0
- data/core/numeric.rbs +832 -0
- data/core/object.rbs +108 -0
- data/core/object_space/weak_key_map.rbs +166 -0
- data/core/object_space.rbs +197 -0
- data/core/pathname.rbs +1322 -0
- data/core/proc.rbs +905 -0
- data/core/process.rbs +2316 -0
- data/core/ractor.rbs +924 -0
- data/core/random.rbs +255 -0
- data/core/range.rbs +1209 -0
- data/core/rational.rbs +502 -0
- data/core/rb_config.rbs +88 -0
- data/core/rbs/ops.rbs +154 -0
- data/core/rbs/unnamed/argf.rbs +1236 -0
- data/core/rbs/unnamed/env_class.rbs +1214 -0
- data/core/rbs/unnamed/main_class.rbs +123 -0
- data/core/rbs/unnamed/random.rbs +186 -0
- data/core/refinement.rbs +59 -0
- data/core/regexp.rbs +1974 -0
- data/core/ruby.rbs +53 -0
- data/core/ruby_vm.rbs +809 -0
- data/core/rubygems/basic_specification.rbs +6 -0
- data/core/rubygems/config_file.rbs +38 -0
- data/core/rubygems/dependency_installer.rbs +6 -0
- data/core/rubygems/errors.rbs +109 -0
- data/core/rubygems/installer.rbs +15 -0
- data/core/rubygems/path_support.rbs +6 -0
- data/core/rubygems/platform.rbs +7 -0
- data/core/rubygems/request_set.rbs +49 -0
- data/core/rubygems/requirement.rbs +148 -0
- data/core/rubygems/rubygems.rbs +1105 -0
- data/core/rubygems/source_list.rbs +15 -0
- data/core/rubygems/specification.rbs +23 -0
- data/core/rubygems/stream_ui.rbs +5 -0
- data/core/rubygems/uninstaller.rbs +10 -0
- data/core/rubygems/version.rbs +293 -0
- data/core/set.rbs +751 -0
- data/core/signal.rbs +110 -0
- data/core/string.rbs +5532 -0
- data/core/struct.rbs +668 -0
- data/core/symbol.rbs +482 -0
- data/core/thread.rbs +1826 -0
- data/core/thread_group.rbs +79 -0
- data/core/time.rbs +1793 -0
- data/core/trace_point.rbs +483 -0
- data/core/true_class.rbs +98 -0
- data/core/unbound_method.rbs +337 -0
- data/core/warning.rbs +87 -0
- data/docs/CONTRIBUTING.md +107 -0
- data/docs/aliases.md +79 -0
- data/docs/architecture.md +110 -0
- data/docs/collection.md +192 -0
- data/docs/config.md +171 -0
- data/docs/data_and_struct.md +86 -0
- data/docs/encoding.md +56 -0
- data/docs/gem.md +56 -0
- data/docs/inline.md +634 -0
- data/docs/rbs_by_example.md +309 -0
- data/docs/repo.md +125 -0
- data/docs/rust.md +96 -0
- data/docs/sigs.md +167 -0
- data/docs/stdlib.md +147 -0
- data/docs/syntax.md +940 -0
- data/docs/tools.md +17 -0
- data/docs/type_fingerprint.md +21 -0
- data/docs/wasm_serialization.md +80 -0
- data/exe/rbs +7 -0
- data/ext/rbs_extension/ast_translation.c +1855 -0
- data/ext/rbs_extension/ast_translation.h +41 -0
- data/ext/rbs_extension/class_constants.c +187 -0
- data/ext/rbs_extension/class_constants.h +104 -0
- data/ext/rbs_extension/compat.h +10 -0
- data/ext/rbs_extension/extconf.rb +40 -0
- data/ext/rbs_extension/legacy_location.c +294 -0
- data/ext/rbs_extension/legacy_location.h +82 -0
- data/ext/rbs_extension/main.c +613 -0
- data/ext/rbs_extension/rbs_extension.h +16 -0
- data/ext/rbs_extension/rbs_string_bridging.c +9 -0
- data/ext/rbs_extension/rbs_string_bridging.h +24 -0
- data/goodcheck.yml +91 -0
- data/include/rbs/ast.h +1047 -0
- data/include/rbs/defines.h +99 -0
- data/include/rbs/lexer.h +207 -0
- data/include/rbs/location.h +40 -0
- data/include/rbs/parser.h +153 -0
- data/include/rbs/serialize.h +39 -0
- data/include/rbs/string.h +47 -0
- data/include/rbs/util/rbs_allocator.h +59 -0
- data/include/rbs/util/rbs_assert.h +20 -0
- data/include/rbs/util/rbs_buffer.h +83 -0
- data/include/rbs/util/rbs_constant_pool.h +155 -0
- data/include/rbs/util/rbs_encoding.h +282 -0
- data/include/rbs/util/rbs_unescape.h +24 -0
- data/include/rbs.h +14 -0
- data/lib/rbs/ancestor_graph.rb +92 -0
- data/lib/rbs/annotate/annotations.rb +199 -0
- data/lib/rbs/annotate/formatter.rb +82 -0
- data/lib/rbs/annotate/rdoc_annotator.rb +398 -0
- data/lib/rbs/annotate/rdoc_source.rb +131 -0
- data/lib/rbs/annotate.rb +8 -0
- data/lib/rbs/ast/annotation.rb +29 -0
- data/lib/rbs/ast/comment.rb +29 -0
- data/lib/rbs/ast/declarations.rb +472 -0
- data/lib/rbs/ast/directives.rb +49 -0
- data/lib/rbs/ast/members.rb +451 -0
- data/lib/rbs/ast/ruby/annotations.rb +451 -0
- data/lib/rbs/ast/ruby/comment_block.rb +247 -0
- data/lib/rbs/ast/ruby/declarations.rb +291 -0
- data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
- data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
- data/lib/rbs/ast/ruby/members.rb +762 -0
- data/lib/rbs/ast/type_param.rb +235 -0
- data/lib/rbs/ast/visitor.rb +137 -0
- data/lib/rbs/buffer.rb +189 -0
- data/lib/rbs/builtin_names.rb +58 -0
- data/lib/rbs/cli/colored_io.rb +48 -0
- data/lib/rbs/cli/diff.rb +84 -0
- data/lib/rbs/cli/validate.rb +294 -0
- data/lib/rbs/cli.rb +1253 -0
- data/lib/rbs/collection/cleaner.rb +38 -0
- data/lib/rbs/collection/config/lockfile.rb +92 -0
- data/lib/rbs/collection/config/lockfile_generator.rb +269 -0
- data/lib/rbs/collection/config.rb +81 -0
- data/lib/rbs/collection/installer.rb +32 -0
- data/lib/rbs/collection/sources/base.rb +14 -0
- data/lib/rbs/collection/sources/git.rb +265 -0
- data/lib/rbs/collection/sources/local.rb +81 -0
- data/lib/rbs/collection/sources/rubygems.rb +48 -0
- data/lib/rbs/collection/sources/stdlib.rb +50 -0
- data/lib/rbs/collection/sources.rb +38 -0
- data/lib/rbs/collection.rb +16 -0
- data/lib/rbs/constant.rb +28 -0
- data/lib/rbs/definition.rb +415 -0
- data/lib/rbs/definition_builder/ancestor_builder.rb +678 -0
- data/lib/rbs/definition_builder/method_builder.rb +295 -0
- data/lib/rbs/definition_builder.rb +1054 -0
- data/lib/rbs/diff.rb +131 -0
- data/lib/rbs/environment/class_entry.rb +69 -0
- data/lib/rbs/environment/module_entry.rb +66 -0
- data/lib/rbs/environment/use_map.rb +77 -0
- data/lib/rbs/environment.rb +1028 -0
- data/lib/rbs/environment_loader.rb +167 -0
- data/lib/rbs/environment_walker.rb +155 -0
- data/lib/rbs/errors.rb +634 -0
- data/lib/rbs/factory.rb +18 -0
- data/lib/rbs/file_finder.rb +28 -0
- data/lib/rbs/inline_parser/comment_association.rb +117 -0
- data/lib/rbs/inline_parser.rb +568 -0
- data/lib/rbs/location_aux.rb +170 -0
- data/lib/rbs/locator.rb +247 -0
- data/lib/rbs/method_type.rb +145 -0
- data/lib/rbs/namespace.rb +154 -0
- data/lib/rbs/parser/lex_result.rb +15 -0
- data/lib/rbs/parser/token.rb +23 -0
- data/lib/rbs/parser_aux.rb +142 -0
- data/lib/rbs/prototype/helpers.rb +197 -0
- data/lib/rbs/prototype/node_usage.rb +99 -0
- data/lib/rbs/prototype/rb.rb +816 -0
- data/lib/rbs/prototype/rbi.rb +625 -0
- data/lib/rbs/prototype/runtime/helpers.rb +59 -0
- data/lib/rbs/prototype/runtime/reflection.rb +19 -0
- data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
- data/lib/rbs/prototype/runtime.rb +680 -0
- data/lib/rbs/repository.rb +127 -0
- data/lib/rbs/resolver/constant_resolver.rb +219 -0
- data/lib/rbs/resolver/type_name_resolver.rb +167 -0
- data/lib/rbs/rewriter.rb +70 -0
- data/lib/rbs/sorter.rb +198 -0
- data/lib/rbs/source.rb +99 -0
- data/lib/rbs/substitution.rb +83 -0
- data/lib/rbs/subtractor.rb +204 -0
- data/lib/rbs/test/errors.rb +80 -0
- data/lib/rbs/test/guaranteed.rb +30 -0
- data/lib/rbs/test/hook.rb +212 -0
- data/lib/rbs/test/observer.rb +19 -0
- data/lib/rbs/test/setup.rb +84 -0
- data/lib/rbs/test/setup_helper.rb +50 -0
- data/lib/rbs/test/tester.rb +167 -0
- data/lib/rbs/test/type_check.rb +457 -0
- data/lib/rbs/test.rb +112 -0
- data/lib/rbs/type_alias_dependency.rb +100 -0
- data/lib/rbs/type_alias_regularity.rb +126 -0
- data/lib/rbs/type_name.rb +122 -0
- data/lib/rbs/types.rb +1604 -0
- data/lib/rbs/unit_test/convertibles.rb +177 -0
- data/lib/rbs/unit_test/spy.rb +138 -0
- data/lib/rbs/unit_test/type_assertions.rb +383 -0
- data/lib/rbs/unit_test/with_aliases.rb +145 -0
- data/lib/rbs/unit_test.rb +6 -0
- data/lib/rbs/validator.rb +186 -0
- data/lib/rbs/variance_calculator.rb +189 -0
- data/lib/rbs/vendorer.rb +71 -0
- data/lib/rbs/version.rb +5 -0
- data/lib/rbs/wasm/deserializer.rb +213 -0
- data/lib/rbs/wasm/jars/asm-analysis.jar +0 -0
- data/lib/rbs/wasm/jars/asm-commons.jar +0 -0
- data/lib/rbs/wasm/jars/asm-tree.jar +0 -0
- data/lib/rbs/wasm/jars/asm-util.jar +0 -0
- data/lib/rbs/wasm/jars/asm.jar +0 -0
- data/lib/rbs/wasm/jars/compiler.jar +0 -0
- data/lib/rbs/wasm/jars/log.jar +0 -0
- data/lib/rbs/wasm/jars/runtime.jar +0 -0
- data/lib/rbs/wasm/jars/wasi.jar +0 -0
- data/lib/rbs/wasm/jars/wasm.jar +0 -0
- data/lib/rbs/wasm/location.rb +61 -0
- data/lib/rbs/wasm/parser.rb +137 -0
- data/lib/rbs/wasm/rbs_parser.wasm +0 -0
- data/lib/rbs/wasm/runtime.rb +217 -0
- data/lib/rbs/wasm/serialization_schema.rb +110 -0
- data/lib/rbs/writer.rb +424 -0
- data/lib/rbs.rb +117 -0
- data/lib/rdoc/discover.rb +20 -0
- data/lib/rdoc_plugin/parser.rb +163 -0
- data/rbs.gemspec +68 -0
- data/schema/annotation.json +14 -0
- data/schema/comment.json +26 -0
- data/schema/decls.json +326 -0
- data/schema/function.json +87 -0
- data/schema/location.json +56 -0
- data/schema/members.json +266 -0
- data/schema/methodType.json +50 -0
- data/schema/typeParam.json +52 -0
- data/schema/types.json +317 -0
- data/sig/ancestor_builder.rbs +163 -0
- data/sig/ancestor_graph.rbs +60 -0
- data/sig/annotate/annotations.rbs +102 -0
- data/sig/annotate/formatter.rbs +24 -0
- data/sig/annotate/rdoc_annotater.rbs +85 -0
- data/sig/annotate/rdoc_source.rbs +32 -0
- data/sig/annotation.rbs +27 -0
- data/sig/ast/ruby/annotations.rbs +470 -0
- data/sig/ast/ruby/comment_block.rbs +127 -0
- data/sig/ast/ruby/declarations.rbs +158 -0
- data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
- data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
- data/sig/ast/ruby/members.rbs +198 -0
- data/sig/buffer.rbs +108 -0
- data/sig/builtin_names.rbs +44 -0
- data/sig/cli/colored_io.rbs +15 -0
- data/sig/cli/diff.rbs +15 -0
- data/sig/cli/validate.rbs +47 -0
- data/sig/cli.rbs +89 -0
- data/sig/collection/cleaner.rbs +13 -0
- data/sig/collection/config/lockfile.rbs +74 -0
- data/sig/collection/config/lockfile_generator.rbs +68 -0
- data/sig/collection/config.rbs +46 -0
- data/sig/collection/installer.rbs +17 -0
- data/sig/collection/sources.rbs +214 -0
- data/sig/collection.rbs +4 -0
- data/sig/comment.rbs +26 -0
- data/sig/constant.rbs +21 -0
- data/sig/declarations.rbs +274 -0
- data/sig/definition.rbs +232 -0
- data/sig/definition_builder.rbs +181 -0
- data/sig/diff.rbs +28 -0
- data/sig/directives.rbs +77 -0
- data/sig/environment/class_entry.rbs +50 -0
- data/sig/environment/module_entry.rbs +50 -0
- data/sig/environment.rbs +286 -0
- data/sig/environment_loader.rbs +111 -0
- data/sig/environment_walker.rbs +65 -0
- data/sig/errors.rbs +408 -0
- data/sig/factory.rbs +5 -0
- data/sig/file_finder.rbs +28 -0
- data/sig/inline_parser/comment_association.rbs +71 -0
- data/sig/inline_parser.rbs +126 -0
- data/sig/location.rbs +135 -0
- data/sig/locator.rbs +56 -0
- data/sig/manifest.yaml +5 -0
- data/sig/members.rbs +258 -0
- data/sig/method_builder.rbs +89 -0
- data/sig/method_types.rbs +58 -0
- data/sig/namespace.rbs +161 -0
- data/sig/parser.rbs +164 -0
- data/sig/prototype/helpers.rbs +29 -0
- data/sig/prototype/node_usage.rbs +20 -0
- data/sig/prototype/rb.rbs +96 -0
- data/sig/prototype/rbi.rbs +75 -0
- data/sig/prototype/runtime.rbs +182 -0
- data/sig/rbs.rbs +21 -0
- data/sig/rdoc/rbs.rbs +67 -0
- data/sig/repository.rbs +85 -0
- data/sig/resolver/constant_resolver.rbs +92 -0
- data/sig/resolver/context.rbs +34 -0
- data/sig/resolver/type_name_resolver.rbs +61 -0
- data/sig/rewriter.rbs +45 -0
- data/sig/shims/bundler.rbs +38 -0
- data/sig/shims/enumerable.rbs +5 -0
- data/sig/shims/rubygems.rbs +19 -0
- data/sig/sorter.rbs +41 -0
- data/sig/source.rbs +48 -0
- data/sig/substitution.rbs +48 -0
- data/sig/subtractor.rbs +37 -0
- data/sig/test/errors.rbs +52 -0
- data/sig/test/guranteed.rbs +9 -0
- data/sig/test/type_check.rbs +19 -0
- data/sig/test.rbs +82 -0
- data/sig/type_alias_dependency.rbs +53 -0
- data/sig/type_alias_regularity.rbs +98 -0
- data/sig/type_param.rbs +115 -0
- data/sig/typename.rbs +89 -0
- data/sig/types.rbs +578 -0
- data/sig/unit_test/convertibles.rbs +154 -0
- data/sig/unit_test/spy.rbs +22 -0
- data/sig/unit_test/type_assertions.rbs +211 -0
- data/sig/unit_test/with_aliases.rbs +136 -0
- data/sig/use_map.rbs +35 -0
- data/sig/util.rbs +9 -0
- data/sig/validator.rbs +63 -0
- data/sig/variance_calculator.rbs +87 -0
- data/sig/vendorer.rbs +51 -0
- data/sig/version.rbs +3 -0
- data/sig/visitor.rbs +47 -0
- data/sig/wasm/deserializer.rbs +66 -0
- data/sig/wasm/serialization_schema.rbs +13 -0
- data/sig/writer.rbs +127 -0
- data/src/ast.c +1628 -0
- data/src/lexer.c +3217 -0
- data/src/lexer.re +155 -0
- data/src/lexstate.c +217 -0
- data/src/location.c +31 -0
- data/src/parser.c +4255 -0
- data/src/serialize.c +958 -0
- data/src/string.c +41 -0
- data/src/util/rbs_allocator.c +162 -0
- data/src/util/rbs_assert.c +19 -0
- data/src/util/rbs_buffer.c +54 -0
- data/src/util/rbs_constant_pool.c +268 -0
- data/src/util/rbs_encoding.c +21308 -0
- data/src/util/rbs_unescape.c +167 -0
- data/stdlib/abbrev/0/abbrev.rbs +66 -0
- data/stdlib/abbrev/0/array.rbs +26 -0
- data/stdlib/base64/0/base64.rbs +355 -0
- data/stdlib/benchmark/0/benchmark.rbs +452 -0
- data/stdlib/bigdecimal/0/big_decimal.rbs +1647 -0
- data/stdlib/bigdecimal-math/0/big_math.rbs +280 -0
- data/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
- data/stdlib/cgi/0/core.rbs +911 -0
- data/stdlib/cgi/0/manifest.yaml +4 -0
- data/stdlib/cgi-escape/0/escape.rbs +171 -0
- data/stdlib/coverage/0/coverage.rbs +266 -0
- data/stdlib/csv/0/csv.rbs +3776 -0
- data/stdlib/csv/0/manifest.yaml +3 -0
- data/stdlib/date/0/date.rbs +1598 -0
- data/stdlib/date/0/date_time.rbs +617 -0
- data/stdlib/date/0/time.rbs +26 -0
- data/stdlib/dbm/0/dbm.rbs +421 -0
- data/stdlib/delegate/0/delegator.rbs +187 -0
- data/stdlib/delegate/0/kernel.rbs +47 -0
- data/stdlib/delegate/0/simple_delegator.rbs +96 -0
- data/stdlib/did_you_mean/0/did_you_mean.rbs +344 -0
- data/stdlib/digest/0/digest.rbs +687 -0
- data/stdlib/erb/0/erb.rbs +933 -0
- data/stdlib/etc/0/etc.rbs +884 -0
- data/stdlib/fileutils/0/fileutils.rbs +1753 -0
- data/stdlib/find/0/find.rbs +49 -0
- data/stdlib/forwardable/0/forwardable.rbs +271 -0
- data/stdlib/io-console/0/io-console.rbs +414 -0
- data/stdlib/ipaddr/0/ipaddr.rbs +436 -0
- data/stdlib/json/0/json.rbs +1963 -0
- data/stdlib/kconv/0/kconv.rbs +166 -0
- data/stdlib/logger/0/formatter.rbs +45 -0
- data/stdlib/logger/0/log_device.rbs +100 -0
- data/stdlib/logger/0/logger.rbs +796 -0
- data/stdlib/logger/0/manifest.yaml +2 -0
- data/stdlib/logger/0/period.rbs +17 -0
- data/stdlib/logger/0/severity.rbs +34 -0
- data/stdlib/minitest/0/kernel.rbs +42 -0
- data/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
- data/stdlib/minitest/0/minitest/assertion.rbs +17 -0
- data/stdlib/minitest/0/minitest/assertions.rbs +590 -0
- data/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
- data/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
- data/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
- data/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
- data/stdlib/minitest/0/minitest/compress.rbs +13 -0
- data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
- data/stdlib/minitest/0/minitest/expectation.rbs +2 -0
- data/stdlib/minitest/0/minitest/expectations.rbs +21 -0
- data/stdlib/minitest/0/minitest/guard.rbs +64 -0
- data/stdlib/minitest/0/minitest/mock.rbs +64 -0
- data/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
- data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
- data/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
- data/stdlib/minitest/0/minitest/parallel.rbs +2 -0
- data/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
- data/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
- data/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
- data/stdlib/minitest/0/minitest/reportable.rbs +53 -0
- data/stdlib/minitest/0/minitest/reporter.rbs +5 -0
- data/stdlib/minitest/0/minitest/result.rbs +28 -0
- data/stdlib/minitest/0/minitest/runnable.rbs +163 -0
- data/stdlib/minitest/0/minitest/skip.rbs +6 -0
- data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
- data/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
- data/stdlib/minitest/0/minitest/spec.rbs +11 -0
- data/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
- data/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
- data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
- data/stdlib/minitest/0/minitest/test.rbs +69 -0
- data/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
- data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
- data/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
- data/stdlib/minitest/0/minitest/unit.rbs +4 -0
- data/stdlib/minitest/0/minitest.rbs +115 -0
- data/stdlib/monitor/0/monitor.rbs +363 -0
- data/stdlib/mutex_m/0/mutex_m.rbs +104 -0
- data/stdlib/net-http/0/manifest.yaml +3 -0
- data/stdlib/net-http/0/net-http.rbs +5580 -0
- data/stdlib/net-protocol/0/manifest.yaml +2 -0
- data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
- data/stdlib/net-smtp/0/manifest.yaml +2 -0
- data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
- data/stdlib/nkf/0/nkf.rbs +402 -0
- data/stdlib/objspace/0/objspace.rbs +470 -0
- data/stdlib/observable/0/observable.rbs +217 -0
- data/stdlib/open-uri/0/manifest.yaml +4 -0
- data/stdlib/open-uri/0/open-uri.rbs +433 -0
- data/stdlib/open3/0/open3.rbs +606 -0
- data/stdlib/openssl/0/manifest.yaml +3 -0
- data/stdlib/openssl/0/openssl.rbs +12231 -0
- data/stdlib/optparse/0/optparse.rbs +1734 -0
- data/stdlib/pathname/0/pathname.rbs +36 -0
- data/stdlib/pp/0/manifest.yaml +2 -0
- data/stdlib/pp/0/pp.rbs +301 -0
- data/stdlib/prettyprint/0/prettyprint.rbs +383 -0
- data/stdlib/pstore/0/pstore.rbs +608 -0
- data/stdlib/psych/0/core_ext.rbs +12 -0
- data/stdlib/psych/0/dbm.rbs +237 -0
- data/stdlib/psych/0/manifest.yaml +3 -0
- data/stdlib/psych/0/psych.rbs +455 -0
- data/stdlib/psych/0/store.rbs +57 -0
- data/stdlib/pty/0/pty.rbs +240 -0
- data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
- data/stdlib/rdoc/0/code_object.rbs +52 -0
- data/stdlib/rdoc/0/comment.rbs +61 -0
- data/stdlib/rdoc/0/context.rbs +153 -0
- data/stdlib/rdoc/0/markup.rbs +117 -0
- data/stdlib/rdoc/0/options.rbs +76 -0
- data/stdlib/rdoc/0/parser.rbs +56 -0
- data/stdlib/rdoc/0/rdoc.rbs +393 -0
- data/stdlib/rdoc/0/ri.rbs +17 -0
- data/stdlib/rdoc/0/store.rbs +48 -0
- data/stdlib/rdoc/0/top_level.rbs +97 -0
- data/stdlib/resolv/0/manifest.yaml +3 -0
- data/stdlib/resolv/0/resolv.rbs +1787 -0
- data/stdlib/ripper/0/ripper.rbs +1654 -0
- data/stdlib/securerandom/0/manifest.yaml +2 -0
- data/stdlib/securerandom/0/securerandom.rbs +49 -0
- data/stdlib/shellwords/0/shellwords.rbs +229 -0
- data/stdlib/singleton/0/singleton.rbs +134 -0
- data/stdlib/socket/0/addrinfo.rbs +666 -0
- data/stdlib/socket/0/basic_socket.rbs +590 -0
- data/stdlib/socket/0/constants.rbs +2295 -0
- data/stdlib/socket/0/ip_socket.rbs +94 -0
- data/stdlib/socket/0/socket.rbs +4170 -0
- data/stdlib/socket/0/socket_error.rbs +5 -0
- data/stdlib/socket/0/tcp_server.rbs +192 -0
- data/stdlib/socket/0/tcp_socket.rbs +87 -0
- data/stdlib/socket/0/udp_socket.rbs +133 -0
- data/stdlib/socket/0/unix_server.rbs +169 -0
- data/stdlib/socket/0/unix_socket.rbs +172 -0
- data/stdlib/stringio/0/stringio.rbs +1681 -0
- data/stdlib/strscan/0/string_scanner.rbs +1648 -0
- data/stdlib/tempfile/0/tempfile.rbs +483 -0
- data/stdlib/time/0/time.rbs +434 -0
- data/stdlib/timeout/0/timeout.rbs +137 -0
- data/stdlib/tmpdir/0/tmpdir.rbs +69 -0
- data/stdlib/tsort/0/cyclic.rbs +8 -0
- data/stdlib/tsort/0/interfaces.rbs +20 -0
- data/stdlib/tsort/0/tsort.rbs +410 -0
- data/stdlib/uri/0/common.rbs +621 -0
- data/stdlib/uri/0/file.rbs +118 -0
- data/stdlib/uri/0/ftp.rbs +13 -0
- data/stdlib/uri/0/generic.rbs +1116 -0
- data/stdlib/uri/0/http.rbs +104 -0
- data/stdlib/uri/0/https.rbs +14 -0
- data/stdlib/uri/0/ldap.rbs +230 -0
- data/stdlib/uri/0/ldaps.rbs +14 -0
- data/stdlib/uri/0/mailto.rbs +92 -0
- data/stdlib/uri/0/rfc2396_parser.rbs +189 -0
- data/stdlib/uri/0/rfc3986_parser.rbs +2 -0
- data/stdlib/uri/0/ws.rbs +13 -0
- data/stdlib/uri/0/wss.rbs +9 -0
- data/stdlib/yaml/0/manifest.yaml +2 -0
- data/stdlib/yaml/0/yaml.rbs +1 -0
- data/stdlib/zlib/0/buf_error.rbs +10 -0
- data/stdlib/zlib/0/data_error.rbs +10 -0
- data/stdlib/zlib/0/deflate.rbs +211 -0
- data/stdlib/zlib/0/error.rbs +20 -0
- data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
- data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
- data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
- data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
- data/stdlib/zlib/0/gzip_file.rbs +156 -0
- data/stdlib/zlib/0/gzip_reader.rbs +293 -0
- data/stdlib/zlib/0/gzip_writer.rbs +168 -0
- data/stdlib/zlib/0/inflate.rbs +180 -0
- data/stdlib/zlib/0/mem_error.rbs +10 -0
- data/stdlib/zlib/0/need_dict.rbs +13 -0
- data/stdlib/zlib/0/stream_end.rbs +11 -0
- data/stdlib/zlib/0/stream_error.rbs +11 -0
- data/stdlib/zlib/0/version_error.rbs +11 -0
- data/stdlib/zlib/0/zlib.rbs +449 -0
- data/stdlib/zlib/0/zstream.rbs +201 -0
- data/wasm/README.md +59 -0
- data/wasm/rbs_wasm.c +411 -0
- 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
|
+
```
|