rbs 4.1.0-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/.dockerignore +37 -0
- data/.github/dependabot.yml +24 -0
- data/.github/workflows/bundle-update.yml +63 -0
- data/.github/workflows/c-check.yml +66 -0
- data/.github/workflows/comments.yml +37 -0
- data/.github/workflows/dependabot.yml +30 -0
- data/.github/workflows/jruby.yml +79 -0
- data/.github/workflows/milestone.yml +91 -0
- data/.github/workflows/ruby.yml +158 -0
- data/.github/workflows/rust.yml +186 -0
- data/.github/workflows/truffleruby.yml +54 -0
- data/.github/workflows/typecheck.yml +39 -0
- data/.github/workflows/wasm.yml +55 -0
- data/.github/workflows/windows.yml +49 -0
- data/.gitignore +39 -0
- data/.rubocop.yml +72 -0
- data/BSDL +22 -0
- data/CHANGELOG.md +2380 -0
- data/COPYING +56 -0
- data/Dockerfile.jruby +53 -0
- data/README.md +240 -0
- data/Rakefile +856 -0
- data/Steepfile +55 -0
- data/config.yml +913 -0
- data/core/array.rbs +4205 -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 +1292 -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 +1312 -0
- data/core/proc.rbs +905 -0
- data/core/process.rbs +2316 -0
- data/core/ractor.rbs +914 -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 +112 -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 +138 -0
- data/core/rubygems/rubygems.rbs +1108 -0
- data/core/rubygems/source_list.rbs +15 -0
- data/core/rubygems/specification.rbs +31 -0
- data/core/rubygems/stream_ui.rbs +5 -0
- data/core/rubygems/uninstaller.rbs +10 -0
- data/core/rubygems/version.rbs +133 -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 +1821 -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/release.md +69 -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 +299 -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 +144 -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 +793 -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/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 +196 -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/rbs_jars.rb +39 -0
- data/lib/rdoc/discover.rb +20 -0
- data/lib/rdoc_plugin/parser.rb +168 -0
- data/rbs.gemspec +81 -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 +104 -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 +3221 -0
- data/src/lexer.re +155 -0
- data/src/lexstate.c +221 -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 +171 -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 +188 -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 +693 -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 +431 -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 +12237 -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/manifest.yaml +3 -0
- data/stdlib/tempfile/0/tempfile.rbs +483 -0
- data/stdlib/time/0/time.rbs +434 -0
- data/stdlib/timeout/0/timeout.rbs +132 -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 +1111 -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 +200 -0
- data/wasm/README.md +60 -0
- data/wasm/rbs_wasm.c +423 -0
- metadata +671 -0
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
# RBS By Example
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
The purpose of this doc is to teach you how to write RBS signatures by using the standard library's methods as a guide.
|
|
6
|
+
|
|
7
|
+
## Examples
|
|
8
|
+
|
|
9
|
+
In each example, the first snippet is for *Ruby* and the second one is for *RBS*.
|
|
10
|
+
|
|
11
|
+
### Zero argument methods
|
|
12
|
+
|
|
13
|
+
**Example:** `String#empty?`
|
|
14
|
+
|
|
15
|
+
```ruby
|
|
16
|
+
"".empty?
|
|
17
|
+
# => true
|
|
18
|
+
"hello".empty?
|
|
19
|
+
# => false
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
```rbs
|
|
23
|
+
class String
|
|
24
|
+
def empty?: () -> bool
|
|
25
|
+
end
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
`String`'s `#empty` method takes no parameters, and returns a boolean value
|
|
29
|
+
|
|
30
|
+
### Single argument methods
|
|
31
|
+
|
|
32
|
+
**Example:** `String#include?`
|
|
33
|
+
|
|
34
|
+
```ruby
|
|
35
|
+
"homeowner".include?("house")
|
|
36
|
+
# => false
|
|
37
|
+
"homeowner".include?("meow")
|
|
38
|
+
# => true
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
```rbs
|
|
42
|
+
class String
|
|
43
|
+
def include?: (String) -> bool
|
|
44
|
+
end
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
`String`'s `include?` method takes one argument, a `String`, and returns a
|
|
48
|
+
boolean value
|
|
49
|
+
|
|
50
|
+
### Variable argument methods
|
|
51
|
+
|
|
52
|
+
**Example:** `String#end_with?`
|
|
53
|
+
|
|
54
|
+
```ruby
|
|
55
|
+
"hello?".end_with?("!")
|
|
56
|
+
# => false
|
|
57
|
+
"hello?".end_with?("?")
|
|
58
|
+
# => true
|
|
59
|
+
"hello?".end_with?("?", "!")
|
|
60
|
+
# => true
|
|
61
|
+
"hello?".end_with?(".", "!")
|
|
62
|
+
# => false
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
```rbs
|
|
66
|
+
class String
|
|
67
|
+
def end_with?: (*String) -> bool
|
|
68
|
+
end
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
`String`'s `#end_with?` method takes any number of `String` arguments, and
|
|
72
|
+
returns a boolean value.
|
|
73
|
+
|
|
74
|
+
### Optional positional arguments
|
|
75
|
+
|
|
76
|
+
**Example:** `String#ljust`
|
|
77
|
+
|
|
78
|
+
```ruby
|
|
79
|
+
"hello".ljust(4)
|
|
80
|
+
#=> "hello"
|
|
81
|
+
"hello".ljust(20)
|
|
82
|
+
#=> "hello "
|
|
83
|
+
"hello".ljust(20, '1234')
|
|
84
|
+
#=> "hello123412341234123"
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
```rbs
|
|
88
|
+
class String
|
|
89
|
+
def ljust: (Integer, ?String) -> String
|
|
90
|
+
end
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
`String`'s `ljust` takes one `Integer` argument, and an optional `String` argument, indicated by the the `?` prefix marker. It returns a `String`.
|
|
94
|
+
|
|
95
|
+
### Multiple signatures for a single method
|
|
96
|
+
|
|
97
|
+
**Example:** `Array#*`
|
|
98
|
+
|
|
99
|
+
```ruby
|
|
100
|
+
[1, 2, 3] * ","
|
|
101
|
+
# => "1,2,3"
|
|
102
|
+
[1, 2, 3] * 2
|
|
103
|
+
# => [1, 2, 3, 1, 2, 3]
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
*Note:* Some of the signatures after this point include type variables (e.g. `Elem`, `T`).
|
|
107
|
+
For now, it's safe to ignore them, but they're included for completeness.
|
|
108
|
+
|
|
109
|
+
```rbs
|
|
110
|
+
class Array[E]
|
|
111
|
+
def *: (String) -> String
|
|
112
|
+
| (Integer) -> Array[E]
|
|
113
|
+
end
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
`Array`'s `*` method, when given a `String` returns a `String`. When given an
|
|
117
|
+
`Integer`, it returns an `Array` of the same contained type `E` (in our example case, `E` corresponds to `Integer`).
|
|
118
|
+
|
|
119
|
+
### Union types
|
|
120
|
+
|
|
121
|
+
**Example:** `String#<<`
|
|
122
|
+
|
|
123
|
+
```ruby
|
|
124
|
+
a = "hello "
|
|
125
|
+
a << "world"
|
|
126
|
+
#=> "hello world"
|
|
127
|
+
a << 33
|
|
128
|
+
#=> "hello world!"
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
```rbs
|
|
132
|
+
class String
|
|
133
|
+
def <<: (String | Integer) -> String
|
|
134
|
+
end
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
`String`'s `<<` operator takes either a `String` or an `Integer`, and returns a `String`.
|
|
138
|
+
|
|
139
|
+
### Nilable types
|
|
140
|
+
|
|
141
|
+
```ruby
|
|
142
|
+
[1, 2, 3].first
|
|
143
|
+
# => 1
|
|
144
|
+
[].first
|
|
145
|
+
# => nil
|
|
146
|
+
[1, 2, 3].first(2)
|
|
147
|
+
# => [1, 2]
|
|
148
|
+
[].first(2)
|
|
149
|
+
# => []
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
```rbs
|
|
153
|
+
class Enumerable[E]
|
|
154
|
+
def first: () -> E?
|
|
155
|
+
| (Integer) -> Array[E]
|
|
156
|
+
end
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
`Enumerable`'s `#first` method has two different signatures.
|
|
160
|
+
|
|
161
|
+
When called with no arguments, the return value will either be an instance of
|
|
162
|
+
whatever type is contained in the enumerable, or `nil`. We represent that with
|
|
163
|
+
the type variable `E`, and the `?` suffix nilable marker.
|
|
164
|
+
|
|
165
|
+
When called with an `Integer` positional argument, the return value will be an
|
|
166
|
+
`Array` of whatever type is contained.
|
|
167
|
+
|
|
168
|
+
The `?` syntax is a convenient shorthand for a union with nil. An equivalent union type would be `(E | nil)`.
|
|
169
|
+
|
|
170
|
+
### Keyword Arguments
|
|
171
|
+
|
|
172
|
+
**Example**: `String#lines`
|
|
173
|
+
|
|
174
|
+
```ruby
|
|
175
|
+
"hello\nworld\n".lines
|
|
176
|
+
# => ["hello\n", "world\n"]
|
|
177
|
+
"hello world".lines(' ')
|
|
178
|
+
# => ["hello ", " ", "world"]
|
|
179
|
+
"hello\nworld\n".lines(chomp: true)
|
|
180
|
+
# => ["hello", "world"]
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
```rbs
|
|
184
|
+
class String
|
|
185
|
+
def lines: (?String, ?chomp: bool) -> Array[String]
|
|
186
|
+
end
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
`String`'s `#lines` method take two arguments: one optional String argument, and another optional boolean keyword argument. It returns an `Array` of `String`s.
|
|
190
|
+
|
|
191
|
+
Keyword arguments are declared similar to in ruby, with the keyword immediately followed by a colon. Keyword arguments that are optional are indicated as optional using the same `?` prefix as positional arguments.
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
### Class methods
|
|
195
|
+
|
|
196
|
+
**Example**: `Time.now`
|
|
197
|
+
|
|
198
|
+
```ruby
|
|
199
|
+
Time.now
|
|
200
|
+
# => 2009-06-24 12:39:54 +0900
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
```rbs
|
|
204
|
+
class Time
|
|
205
|
+
def self.now: () -> Time
|
|
206
|
+
end
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
`Time`'s class method `now` takes no arguments, and returns an instance of the
|
|
210
|
+
`Time` class.
|
|
211
|
+
|
|
212
|
+
### Block Arguments
|
|
213
|
+
|
|
214
|
+
**Example**: `Array#filter`
|
|
215
|
+
|
|
216
|
+
```ruby
|
|
217
|
+
[1,2,3,4,5].filter {|num| num.even? }
|
|
218
|
+
# => [2, 4]
|
|
219
|
+
%w[ a b c d e f ].filter {|v| v =~ /[aeiou]/ }
|
|
220
|
+
# => ["a", "e"]
|
|
221
|
+
[1,2,3,4,5].filter
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
```rbs
|
|
225
|
+
class Array[E]
|
|
226
|
+
def filter: () { (E) -> boolish } -> ::Array[E]
|
|
227
|
+
| () -> ::Enumerator[E, ::Array[E]]
|
|
228
|
+
end
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
`Array`'s `#filter` method, when called with no arguments returns an Enumerator.
|
|
232
|
+
|
|
233
|
+
When called with a block, the method returns an `Array` of whatever type the original contained. The block will take one argument, of the type of the contained value, and the block will return a truthy or falsy value.
|
|
234
|
+
|
|
235
|
+
`boolish` is a special keyword for any type that will be treated as if it were a `bool`.
|
|
236
|
+
|
|
237
|
+
### Type Variables
|
|
238
|
+
|
|
239
|
+
**Example**: `Hash`, `Hash#keys`
|
|
240
|
+
|
|
241
|
+
```ruby
|
|
242
|
+
h = { "a" => 100, "b" => 200, "c" => 300, "d" => 400 }
|
|
243
|
+
h.keys
|
|
244
|
+
# => ["a", "b", "c", "d"]
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
```rbs
|
|
248
|
+
class Hash[K, V]
|
|
249
|
+
def keys: () -> Array[K]
|
|
250
|
+
end
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
Generic types in RBS are parameterized at declaration time. These type variables are then available throughout all the methods contained in the `class` block.
|
|
254
|
+
|
|
255
|
+
`Hash`'s `#keys` method takes no arguments, and returns an `Array` of the first type parameter. In the above example, `a` is of concrete type `Hash[String, Integer]`, so `#keys` returns an `Array` for `String`.
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
```ruby
|
|
259
|
+
a = [ "a", "b", "c", "d" ]
|
|
260
|
+
a.collect {|x| x + "!"}
|
|
261
|
+
# => ["a!", "b!", "c!", "d!"]
|
|
262
|
+
a.collect.with_index {|x, i| x * i}
|
|
263
|
+
# => ["", "b", "cc", "ddd"]
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
```rbs
|
|
267
|
+
class Array[E]
|
|
268
|
+
def collect: [U] () { (E) -> U } -> Array[U]
|
|
269
|
+
| () -> Enumerator[E, Array[untyped]]
|
|
270
|
+
end
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
Type variables can also be introduced in methods. Here, in `Array`'s `#collect` method, we introduce a type variable `U`. The block passed to `#collect` will receive a parameter of type `E`, and return a value of type `U`. Then `#collect` will return an `Array` of type `U`.
|
|
274
|
+
|
|
275
|
+
In this example, the method receives its signature from the inferred return type of the passed block. When then block is absent, as in when the method returns an `Enumerator`, we can't infer the type, and so the return value of the enumerator can only be described as `Array[untyped]`.
|
|
276
|
+
|
|
277
|
+
### Tuples
|
|
278
|
+
|
|
279
|
+
**Examples**: `Enumerable#partition`, `Enumerable#to_h`
|
|
280
|
+
|
|
281
|
+
```ruby
|
|
282
|
+
(1..6).partition { |v| v.even? }
|
|
283
|
+
# => [[2, 4, 6], [1, 3, 5]]
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
```rbs
|
|
287
|
+
class Enumerable[E]
|
|
288
|
+
def partition: () { (E) -> boolish } -> [Array[E], Array[E]]
|
|
289
|
+
| () -> ::Enumerator[E, [Array[E], Array[E] ]]
|
|
290
|
+
end
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
`Enumerable`'s `partition` method, when given a block, returns a 2-item tuple of `Array`s containing the original type of the `Enumerable`.
|
|
294
|
+
|
|
295
|
+
Tuples can be of any size, and they can have mixed types.
|
|
296
|
+
|
|
297
|
+
```ruby
|
|
298
|
+
(1..5).to_h {|x| [x, x ** 2]}
|
|
299
|
+
# => {1=>1, 2=>4, 3=>9, 4=>16, 5=>25}
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
```rbs
|
|
303
|
+
class Enumerable[E]
|
|
304
|
+
def to_h: () -> ::Hash[untyped, untyped]
|
|
305
|
+
| [T, U] () { (E) -> [T, U] } -> ::Hash[T, U]
|
|
306
|
+
end
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
`Enumerable`'s `to_h` method, when given a block that returns a 2-item tuple, returns a `Hash` with keys the type of the first position in the tuple, and values the type of the second position in the tuple.
|
data/docs/release.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Releasing RBS
|
|
2
|
+
|
|
3
|
+
Each release ships **two gems**:
|
|
4
|
+
|
|
5
|
+
| Gem | Platform | Parser | How it is built |
|
|
6
|
+
| --- | --- | --- | --- |
|
|
7
|
+
| `rbs-X.Y.Z.gem` | `ruby` (MRI) | C extension | `rake release` (re-builds it) |
|
|
8
|
+
| `rbs-X.Y.Z-java.gem` | `java` (JRuby) | WebAssembly (`lib/rbs/wasm`) | Docker image, pushed manually |
|
|
9
|
+
|
|
10
|
+
The `-java` gem contains no native code — just `rbs_parser.wasm`. The Chicory/ASM
|
|
11
|
+
jars it needs are not shipped in the gem; they are declared as `jar-dependencies`
|
|
12
|
+
requirements and fetched from Maven when the gem is installed. So the gem can be
|
|
13
|
+
built once in any environment and runs on every JRuby.
|
|
14
|
+
|
|
15
|
+
## Prerequisites
|
|
16
|
+
|
|
17
|
+
- Push rights to the `rbs` gem on RubyGems (`gem signin`). If your account has
|
|
18
|
+
MFA enabled, `gem push` / `rake release` will prompt for an OTP.
|
|
19
|
+
- Docker, for the `-java` gem. The WASI SDK is baked into the image, so there is
|
|
20
|
+
nothing to install on the host.
|
|
21
|
+
|
|
22
|
+
## Steps
|
|
23
|
+
|
|
24
|
+
### 1. Release the `ruby` gem
|
|
25
|
+
|
|
26
|
+
Once the version is bumped and committed, run on CRuby:
|
|
27
|
+
|
|
28
|
+
```console
|
|
29
|
+
$ bundle exec rake release
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
This re-builds the `ruby`-platform gem and then:
|
|
33
|
+
|
|
34
|
+
- creates the tag `vX.Y.Z`,
|
|
35
|
+
- pushes the current branch and the tag to `origin`,
|
|
36
|
+
- pushes the gem to RubyGems,
|
|
37
|
+
- runs `release:note`, which opens a GitHub **draft** release (with
|
|
38
|
+
`--prerelease` for `*.pre.*` versions) and prints the remaining manual steps.
|
|
39
|
+
|
|
40
|
+
### 2. Build and push the `java` gem
|
|
41
|
+
|
|
42
|
+
The `java` gem is not built by `rake release`, so build and push it manually:
|
|
43
|
+
|
|
44
|
+
```console
|
|
45
|
+
# Build from the committed state (the gemspec's file list comes from `git ls-files`).
|
|
46
|
+
$ docker build -f Dockerfile.jruby -t rbs-jruby .
|
|
47
|
+
|
|
48
|
+
# Build rbs_parser.wasm and the -java gem into ./pkg on the host. The Chicory/ASM
|
|
49
|
+
# jars are not bundled; they are fetched from Maven when the gem is installed.
|
|
50
|
+
$ docker run --rm -e RBS_PLATFORM=java -v "$PWD/pkg:/out" rbs-jruby \
|
|
51
|
+
gem build rbs.gemspec -o /out/rbs-X.Y.Z-java.gem
|
|
52
|
+
|
|
53
|
+
$ gem push pkg/rbs-X.Y.Z-java.gem
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Optionally confirm it installs and runs on JRuby before pushing:
|
|
57
|
+
|
|
58
|
+
```console
|
|
59
|
+
$ docker run --rm -v "$PWD/pkg:/pkg" -w /tmp rbs-jruby bash -c \
|
|
60
|
+
'gem install /pkg/rbs-X.Y.Z-java.gem && ruby -e "require %q{rbs}; puts [RUBY_ENGINE, RBS::VERSION].join(%q{ })"'
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Notes
|
|
64
|
+
|
|
65
|
+
- Prereleases (`X.Y.Z.pre.N`) are only installed with `gem install rbs --pre`;
|
|
66
|
+
a plain `gem install rbs` is unaffected. On JRuby, `gem install rbs [--pre]`
|
|
67
|
+
resolves to the `-java` gem automatically.
|
|
68
|
+
- The Dockerfile pins the WASI SDK / Chicory / ASM versions to match the
|
|
69
|
+
`wasm` and `jruby` CI workflows. Keep them in sync when bumping.
|
data/docs/repo.md
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# Third-party RBS Repository
|
|
2
|
+
|
|
3
|
+
This is the spec of the directory structure for RBS files of gems without RBS files. It allows distributing RBS type definitions of gems separately from the `.gemspec` files so that the Ruby developers can type check their Ruby programs even if the dependent gems don't ship with their type definitions.
|
|
4
|
+
|
|
5
|
+
The spec includes:
|
|
6
|
+
|
|
7
|
+
* The directory structure, and
|
|
8
|
+
* The RBS file lookup rules given _repository root_, gem name, and version.
|
|
9
|
+
|
|
10
|
+
## Motivating Example
|
|
11
|
+
|
|
12
|
+
Assume there is a rubygem called `bug-free-doodle` and our application depends on the library. We are trying to type check our application and we need RBS files of `bug-free-doodle`. The problem is that the `bug-free-doodle` gem doesn't ship with RBS files. The type checkers cannot resolve the type of constant `Bug::Free::Doodle` and its methods.
|
|
13
|
+
|
|
14
|
+
One workaround is to add type definitions of the library in the application signatures.
|
|
15
|
+
|
|
16
|
+
```rbs
|
|
17
|
+
# sig/polyfill/bug-free-doodle.rbs
|
|
18
|
+
|
|
19
|
+
module Bug
|
|
20
|
+
module Free
|
|
21
|
+
class Doodle
|
|
22
|
+
attr_reader name: Symbol
|
|
23
|
+
attr_reader strokes: Array[Stroke]
|
|
24
|
+
|
|
25
|
+
def initialize: (name: Symbol) -> void
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
You may want to distribute the RBS file to anyone who needs it. Which version do we support? Testing it? How to load the RBS files? This is the spec you need!
|
|
32
|
+
|
|
33
|
+
### Third-party RBS repository
|
|
34
|
+
|
|
35
|
+
Make a directory (or you may want to `git init`) to put your _third party RBSs_.
|
|
36
|
+
|
|
37
|
+
```sh
|
|
38
|
+
$ make my-rbs # Or you may want a git repository: git init my-rbs
|
|
39
|
+
$ cd my-rbs
|
|
40
|
+
$ mkdir gems
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
We call the `my-rbs/gems` directory _repository root_. Note that it is different from the root of the git repository. The RBS repository root is the directory that contains directories of gem names.
|
|
44
|
+
|
|
45
|
+
Make a directory for the gem and the version.
|
|
46
|
+
|
|
47
|
+
```sh
|
|
48
|
+
$ mkdir gems/bug-free-doodle
|
|
49
|
+
$ mkdir gems/bug-free-doodle/1.2.3
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
And copy the RBS file in it.
|
|
53
|
+
|
|
54
|
+
```sh
|
|
55
|
+
$ cp your-app/sig/polyfill/bug-free-doodle.rbs gems/bug-free-doodle/1.2.3
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Reading Third-party RBS
|
|
59
|
+
|
|
60
|
+
`rbs` command accepts `--repo` option which points to a _repository root_. You can specify `-r` option to let the command know which gems you want to load.
|
|
61
|
+
|
|
62
|
+
In this case, the _repository root_ is `./gems` and we are trying to load `bug-free-doodle` gem.
|
|
63
|
+
|
|
64
|
+
```sh
|
|
65
|
+
$ rbs --repo=gems -r bug-free-doodle paths
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
The `-r` option also accepts gem name with version.
|
|
69
|
+
|
|
70
|
+
```sh
|
|
71
|
+
$ rbs --repo=gems -r bug-free-doodle:1.2.3 paths
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Note that the version resolution is not compatible with semantic versioning. It is optimistic. It resolves to some version unless no version for the gem is available.
|
|
75
|
+
|
|
76
|
+
## Directory Structure
|
|
77
|
+
|
|
78
|
+
There are directories for each gem under _repository root_. We also have directories for each version of each gem.
|
|
79
|
+
|
|
80
|
+
- $REPO_ROOT/bug-free-doodle/0.2.0
|
|
81
|
+
- $REPO_ROOT/bug-free-doodle/1.0
|
|
82
|
+
- $REPO_ROOT/bug-free-doodle/1.2.3
|
|
83
|
+
- $REPO_ROOT/bug-free-doodle/2.0
|
|
84
|
+
|
|
85
|
+
Note that we assume that we have git repositories for each RBS repository, and we have a directory at the root of the git repository for _repository root_.
|
|
86
|
+
|
|
87
|
+
So the git repository structure would be something like the following:
|
|
88
|
+
|
|
89
|
+
- /Gemfile
|
|
90
|
+
- /Gemfile.lock
|
|
91
|
+
- /README.md
|
|
92
|
+
- /LICENSE
|
|
93
|
+
- /gems/bug-free-doodle/1.2.3/bug-free-doodle.rbs
|
|
94
|
+
|
|
95
|
+
You should have `Gemfile` and `Gemfile.lock` to manage dependencies, `README.md` and `LICENSE` to documentation, and `gems` directory as _repository root_.
|
|
96
|
+
|
|
97
|
+
(We call _repository root_ `gems` in this doc, but the name can be anything you like.)
|
|
98
|
+
|
|
99
|
+
## Version Resolution
|
|
100
|
+
|
|
101
|
+
The version resolution in RBS is optimistic. We don't block loading RBS files for _incompatible_ version in terms of semantic versioning.
|
|
102
|
+
|
|
103
|
+
It tries to resolve version _n_ as follows:
|
|
104
|
+
|
|
105
|
+
1. It resolves to _m_ such that _m_ is the latest version available and _m_ <= _n_ holds.
|
|
106
|
+
2. It resolves to the oldest version when rule 1 cannot find version _m_.
|
|
107
|
+
|
|
108
|
+
If two versions, `0.4.0`, `1.0.0` are available for a gem:
|
|
109
|
+
|
|
110
|
+
| Requested version | Resolved version |
|
|
111
|
+
|-------------------|------------------|
|
|
112
|
+
| `0.3.0` | `0.4.0` (Rule 2) |
|
|
113
|
+
| `0.4.0` | `0.4.0` |
|
|
114
|
+
| `0.5.0` | `0.4.0` |
|
|
115
|
+
| `1.0.0` | `1.0.0` |
|
|
116
|
+
| `2.0.0` | `1.0.0` |
|
|
117
|
+
|
|
118
|
+
This is not compatible with the concept of semantic versioning. We don't want to block users to load RBS even for incompatible versions of gems.
|
|
119
|
+
|
|
120
|
+
We believe this makes more sense because:
|
|
121
|
+
|
|
122
|
+
* Using (potentially) incompatible type definitions are better than no type definition.
|
|
123
|
+
* Users can stop loading RBS if incompatibility causes an issue and falling back to hand-written polyfills.
|
|
124
|
+
|
|
125
|
+
|
data/docs/rust.md
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Rust Crates
|
|
2
|
+
|
|
3
|
+
RBS provides two Rust crates:
|
|
4
|
+
|
|
5
|
+
- **`ruby-rbs-sys`** -- Low-level FFI bindings to the RBS C parser
|
|
6
|
+
- **`ruby-rbs`** -- High-level safe Rust API for parsing RBS signatures
|
|
7
|
+
|
|
8
|
+
Both crates are published to [crates.io](https://crates.io/) and are developed within the `rust/` directory of this repository.
|
|
9
|
+
|
|
10
|
+
## Vendored RBS Source
|
|
11
|
+
|
|
12
|
+
The Rust crates depend on the RBS C parser source code (`include/`, `src/`) and configuration (`config.yml`) from this repository. These files are vendored into each crate's `vendor/rbs/` directory, which is managed by Rake tasks and not tracked by git.
|
|
13
|
+
|
|
14
|
+
The file `rust/rbs_version` records which version of RBS the Rust crates are pinned to.
|
|
15
|
+
|
|
16
|
+
## Setup
|
|
17
|
+
|
|
18
|
+
After cloning the repository, set up the vendored source before building the Rust crates:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
rake rust:rbs:sync # Uses the pinned version from rust/rbs_version
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Then build and test:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
cd rust
|
|
28
|
+
cargo test
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Rake Tasks
|
|
32
|
+
|
|
33
|
+
### `rake rust:rbs:sync`
|
|
34
|
+
|
|
35
|
+
Copies the source files from the pinned version into each crate's `vendor/rbs/`. The copied files are made read-only to prevent accidental edits.
|
|
36
|
+
|
|
37
|
+
### `rake rust:rbs:pin[VERSION]`
|
|
38
|
+
|
|
39
|
+
Records a git tag in `rust/rbs_version`. For example:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
rake rust:rbs:pin[v4.0.3]
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### `rake rust:publish:ruby-rbs-sys` / `rake rust:publish:ruby-rbs`
|
|
46
|
+
|
|
47
|
+
Publishes each crate to crates.io individually. Each task:
|
|
48
|
+
|
|
49
|
+
1. Verifies `rust/rbs_version` is set
|
|
50
|
+
2. Verifies vendor directories contain real files (not symlinks)
|
|
51
|
+
3. Verifies the git working tree is clean
|
|
52
|
+
4. Creates a release branch and commits the vendor files
|
|
53
|
+
5. Runs a dry-run to check packaging
|
|
54
|
+
6. Publishes the crate
|
|
55
|
+
|
|
56
|
+
Set `RBS_RUST_PUBLISH_DRY_RUN=1` to only run the dry-run step and skip the actual publish to crates.io. This is used in CI to verify that the crates can be packaged correctly.
|
|
57
|
+
|
|
58
|
+
### `rake rust:rbs:symlink`
|
|
59
|
+
|
|
60
|
+
If your development needs unreleased version of RBS source code, use `rake rust:rbs:symlink` to set up symlinks in vendor directories to refer the worktree source code. Changes to the C parser source are immediately reflected in Rust builds.
|
|
61
|
+
|
|
62
|
+
## Publishing Workflow
|
|
63
|
+
|
|
64
|
+
1. Pin the RBS version to release against:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
rake rust:rbs:pin[v4.0.3]
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
2. Sync the vendored source:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
rake rust:rbs:sync
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
3. Update crate versions in `rust/ruby-rbs-sys/Cargo.toml` and `rust/ruby-rbs/Cargo.toml`.
|
|
77
|
+
|
|
78
|
+
4. Build and test:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
cd rust && cargo test
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
5. Commit the version changes and `rust/rbs_version`:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
git add rust/rbs_version rust/ruby-rbs-sys/Cargo.toml rust/ruby-rbs/Cargo.toml
|
|
88
|
+
git commit -m "Bump Rust crate versions"
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
6. Publish each crate:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
rake rust:publish:ruby-rbs-sys
|
|
95
|
+
rake rust:publish:ruby-rbs
|
|
96
|
+
```
|