rbs-relaxed 3.9.0.1
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/.github/dependabot.yml +22 -0
- data/.github/workflows/comments.yml +35 -0
- data/.github/workflows/dependabot.yml +30 -0
- data/.github/workflows/ruby.yml +82 -0
- data/.github/workflows/typecheck.yml +38 -0
- data/.github/workflows/windows.yml +43 -0
- data/.gitignore +23 -0
- data/.rubocop.yml +68 -0
- data/BSDL +22 -0
- data/CHANGELOG.md +1868 -0
- data/COPYING +56 -0
- data/README.md +203 -0
- data/Rakefile +417 -0
- data/Steepfile +44 -0
- data/config.yml +313 -0
- data/core/array.rbs +4062 -0
- data/core/basic_object.rbs +375 -0
- data/core/binding.rbs +150 -0
- data/core/builtin.rbs +277 -0
- data/core/class.rbs +220 -0
- data/core/comparable.rbs +171 -0
- data/core/complex.rbs +786 -0
- data/core/constants.rbs +96 -0
- data/core/data.rbs +415 -0
- data/core/dir.rbs +981 -0
- data/core/encoding.rbs +1371 -0
- data/core/enumerable.rbs +2405 -0
- data/core/enumerator/product.rbs +92 -0
- data/core/enumerator.rbs +630 -0
- data/core/env.rbs +6 -0
- data/core/errno.rbs +673 -0
- data/core/errors.rbs +760 -0
- data/core/exception.rbs +485 -0
- data/core/false_class.rbs +82 -0
- data/core/fiber.rbs +550 -0
- data/core/fiber_error.rbs +11 -0
- data/core/file.rbs +2936 -0
- data/core/file_test.rbs +331 -0
- data/core/float.rbs +1151 -0
- data/core/gc.rbs +644 -0
- data/core/global_variables.rbs +184 -0
- data/core/hash.rbs +1861 -0
- data/core/integer.rbs +1413 -0
- data/core/io/buffer.rbs +984 -0
- data/core/io/wait.rbs +70 -0
- data/core/io.rbs +3406 -0
- data/core/kernel.rbs +3096 -0
- data/core/marshal.rbs +207 -0
- data/core/match_data.rbs +635 -0
- data/core/math.rbs +729 -0
- data/core/method.rbs +386 -0
- data/core/module.rbs +1704 -0
- data/core/nil_class.rbs +209 -0
- data/core/numeric.rbs +818 -0
- data/core/object.rbs +110 -0
- data/core/object_space/weak_key_map.rbs +166 -0
- data/core/object_space.rbs +190 -0
- data/core/proc.rbs +868 -0
- data/core/process.rbs +2296 -0
- data/core/ractor.rbs +1068 -0
- data/core/random.rbs +237 -0
- data/core/range.rbs +1107 -0
- data/core/rational.rbs +531 -0
- data/core/rb_config.rbs +88 -0
- data/core/rbs/unnamed/argf.rbs +1229 -0
- data/core/rbs/unnamed/env_class.rbs +1209 -0
- data/core/rbs/unnamed/random.rbs +293 -0
- data/core/refinement.rbs +59 -0
- data/core/regexp.rbs +1930 -0
- data/core/ruby_vm.rbs +765 -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 +176 -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 +1171 -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 +294 -0
- data/core/set.rbs +621 -0
- data/core/signal.rbs +100 -0
- data/core/string.rbs +3583 -0
- data/core/struct.rbs +667 -0
- data/core/symbol.rbs +475 -0
- data/core/thread.rbs +1765 -0
- data/core/thread_group.rbs +79 -0
- data/core/time.rbs +1762 -0
- data/core/trace_point.rbs +477 -0
- data/core/true_class.rbs +98 -0
- data/core/unbound_method.rbs +329 -0
- data/core/warning.rbs +87 -0
- data/docs/CONTRIBUTING.md +106 -0
- data/docs/architecture.md +110 -0
- data/docs/collection.md +192 -0
- data/docs/data_and_struct.md +86 -0
- data/docs/gem.md +57 -0
- data/docs/rbs_by_example.md +309 -0
- data/docs/repo.md +125 -0
- data/docs/sigs.md +167 -0
- data/docs/stdlib.md +147 -0
- data/docs/syntax.md +910 -0
- data/docs/tools.md +17 -0
- data/exe/rbs +7 -0
- data/ext/rbs_extension/extconf.rb +15 -0
- data/ext/rbs_extension/lexer.c +2728 -0
- data/ext/rbs_extension/lexer.h +179 -0
- data/ext/rbs_extension/lexer.re +147 -0
- data/ext/rbs_extension/lexstate.c +175 -0
- data/ext/rbs_extension/location.c +325 -0
- data/ext/rbs_extension/location.h +85 -0
- data/ext/rbs_extension/main.c +33 -0
- data/ext/rbs_extension/parser.c +2973 -0
- data/ext/rbs_extension/parser.h +18 -0
- data/ext/rbs_extension/parserstate.c +397 -0
- data/ext/rbs_extension/parserstate.h +163 -0
- data/ext/rbs_extension/rbs_extension.h +31 -0
- data/ext/rbs_extension/unescape.c +32 -0
- data/goodcheck.yml +91 -0
- data/include/rbs/constants.h +82 -0
- data/include/rbs/ruby_objs.h +72 -0
- data/include/rbs/util/rbs_constant_pool.h +219 -0
- data/include/rbs.h +7 -0
- data/lib/rbs/ancestor_graph.rb +92 -0
- data/lib/rbs/annotate/annotations.rb +199 -0
- data/lib/rbs/annotate/formatter.rb +92 -0
- data/lib/rbs/annotate/rdoc_annotator.rb +400 -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 +467 -0
- data/lib/rbs/ast/directives.rb +49 -0
- data/lib/rbs/ast/members.rb +451 -0
- data/lib/rbs/ast/type_param.rb +225 -0
- data/lib/rbs/ast/visitor.rb +137 -0
- data/lib/rbs/buffer.rb +67 -0
- data/lib/rbs/builtin_names.rb +58 -0
- data/lib/rbs/cli/colored_io.rb +48 -0
- data/lib/rbs/cli/diff.rb +83 -0
- data/lib/rbs/cli/validate.rb +357 -0
- data/lib/rbs/cli.rb +1223 -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 +218 -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 +258 -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 +401 -0
- data/lib/rbs/definition_builder/ancestor_builder.rb +620 -0
- data/lib/rbs/definition_builder/method_builder.rb +254 -0
- data/lib/rbs/definition_builder.rb +845 -0
- data/lib/rbs/diff.rb +125 -0
- data/lib/rbs/environment/use_map.rb +77 -0
- data/lib/rbs/environment.rb +829 -0
- data/lib/rbs/environment_loader.rb +173 -0
- data/lib/rbs/environment_walker.rb +155 -0
- data/lib/rbs/errors.rb +645 -0
- data/lib/rbs/factory.rb +18 -0
- data/lib/rbs/file_finder.rb +28 -0
- data/lib/rbs/location_aux.rb +138 -0
- data/lib/rbs/locator.rb +243 -0
- data/lib/rbs/method_type.rb +143 -0
- data/lib/rbs/namespace.rb +125 -0
- data/lib/rbs/parser/lex_result.rb +15 -0
- data/lib/rbs/parser/token.rb +23 -0
- data/lib/rbs/parser_aux.rb +114 -0
- data/lib/rbs/prototype/helpers.rb +140 -0
- data/lib/rbs/prototype/node_usage.rb +99 -0
- data/lib/rbs/prototype/rb.rb +840 -0
- data/lib/rbs/prototype/rbi.rb +641 -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 +667 -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 +91 -0
- data/lib/rbs/sorter.rb +198 -0
- data/lib/rbs/substitution.rb +83 -0
- data/lib/rbs/subtractor.rb +201 -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 +435 -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 +109 -0
- data/lib/rbs/types.rb +1596 -0
- data/lib/rbs/unit_test/convertibles.rb +176 -0
- data/lib/rbs/unit_test/spy.rb +138 -0
- data/lib/rbs/unit_test/type_assertions.rb +347 -0
- data/lib/rbs/unit_test/with_aliases.rb +143 -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/writer.rb +424 -0
- data/lib/rbs.rb +94 -0
- data/lib/rdoc/discover.rb +20 -0
- data/lib/rdoc_plugin/parser.rb +163 -0
- data/rbs-relaxed.gemspec +48 -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 +36 -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 +82 -0
- data/sig/annotate/rdoc_source.rbs +30 -0
- data/sig/annotation.rbs +27 -0
- data/sig/buffer.rbs +32 -0
- data/sig/builtin_names.rbs +44 -0
- data/sig/cli/colored_io.rbs +15 -0
- data/sig/cli/diff.rbs +21 -0
- data/sig/cli/validate.rbs +43 -0
- data/sig/cli.rbs +87 -0
- data/sig/collection/cleaner.rbs +13 -0
- data/sig/collection/config/lockfile.rbs +74 -0
- data/sig/collection/config/lockfile_generator.rbs +66 -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 +267 -0
- data/sig/definition.rbs +173 -0
- data/sig/definition_builder.rbs +165 -0
- data/sig/diff.rbs +28 -0
- data/sig/directives.rbs +77 -0
- data/sig/environment.rbs +279 -0
- data/sig/environment_loader.rbs +111 -0
- data/sig/environment_walker.rbs +65 -0
- data/sig/errors.rbs +405 -0
- data/sig/factory.rbs +5 -0
- data/sig/file_finder.rbs +28 -0
- data/sig/location.rbs +110 -0
- data/sig/locator.rbs +58 -0
- data/sig/manifest.yaml +7 -0
- data/sig/members.rbs +258 -0
- data/sig/method_builder.rbs +84 -0
- data/sig/method_types.rbs +58 -0
- data/sig/namespace.rbs +146 -0
- data/sig/parser.rbs +100 -0
- data/sig/prototype/helpers.rbs +27 -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 +35 -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/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 +110 -0
- data/sig/typename.rbs +79 -0
- data/sig/types.rbs +579 -0
- data/sig/unit_test/convertibles.rbs +154 -0
- data/sig/unit_test/spy.rbs +30 -0
- data/sig/unit_test/type_assertions.rbs +196 -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/writer.rbs +127 -0
- data/src/constants.c +153 -0
- data/src/ruby_objs.c +795 -0
- data/src/util/rbs_constant_pool.c +342 -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 +1629 -0
- data/stdlib/bigdecimal-math/0/big_math.rbs +119 -0
- data/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
- data/stdlib/cgi/0/core.rbs +1285 -0
- data/stdlib/cgi/0/manifest.yaml +3 -0
- data/stdlib/coverage/0/coverage.rbs +263 -0
- data/stdlib/csv/0/csv.rbs +3776 -0
- data/stdlib/csv/0/manifest.yaml +3 -0
- data/stdlib/date/0/date.rbs +1585 -0
- data/stdlib/date/0/date_time.rbs +616 -0
- data/stdlib/date/0/time.rbs +26 -0
- data/stdlib/dbm/0/dbm.rbs +421 -0
- data/stdlib/delegate/0/delegator.rbs +184 -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 +343 -0
- data/stdlib/digest/0/digest.rbs +577 -0
- data/stdlib/erb/0/erb.rbs +532 -0
- data/stdlib/etc/0/etc.rbs +865 -0
- data/stdlib/fileutils/0/fileutils.rbs +1734 -0
- data/stdlib/find/0/find.rbs +49 -0
- data/stdlib/forwardable/0/forwardable.rbs +268 -0
- data/stdlib/io-console/0/io-console.rbs +414 -0
- data/stdlib/ipaddr/0/ipaddr.rbs +428 -0
- data/stdlib/json/0/json.rbs +1916 -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 +5552 -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 +487 -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 +393 -0
- data/stdlib/open3/0/open3.rbs +147 -0
- data/stdlib/openssl/0/manifest.yaml +3 -0
- data/stdlib/openssl/0/openssl.rbs +12113 -0
- data/stdlib/optparse/0/optparse.rbs +1725 -0
- data/stdlib/pathname/0/pathname.rbs +1406 -0
- data/stdlib/pp/0/manifest.yaml +2 -0
- data/stdlib/pp/0/pp.rbs +300 -0
- data/stdlib/prettyprint/0/prettyprint.rbs +383 -0
- data/stdlib/pstore/0/pstore.rbs +603 -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 +402 -0
- data/stdlib/psych/0/store.rbs +59 -0
- data/stdlib/pty/0/pty.rbs +237 -0
- data/stdlib/rdoc/0/code_object.rbs +51 -0
- data/stdlib/rdoc/0/comment.rbs +59 -0
- data/stdlib/rdoc/0/context.rbs +153 -0
- data/stdlib/rdoc/0/markup.rbs +117 -0
- data/stdlib/rdoc/0/parser.rbs +56 -0
- data/stdlib/rdoc/0/rdoc.rbs +391 -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 +1830 -0
- data/stdlib/ripper/0/ripper.rbs +1648 -0
- data/stdlib/securerandom/0/securerandom.rbs +62 -0
- data/stdlib/shellwords/0/shellwords.rbs +229 -0
- data/stdlib/singleton/0/singleton.rbs +131 -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 +92 -0
- data/stdlib/socket/0/socket.rbs +4157 -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 +79 -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 +567 -0
- data/stdlib/strscan/0/string_scanner.rbs +1627 -0
- data/stdlib/tempfile/0/tempfile.rbs +479 -0
- data/stdlib/time/0/time.rbs +432 -0
- data/stdlib/timeout/0/timeout.rbs +81 -0
- data/stdlib/tmpdir/0/tmpdir.rbs +69 -0
- data/stdlib/tsort/0/cyclic.rbs +5 -0
- data/stdlib/tsort/0/interfaces.rbs +20 -0
- data/stdlib/tsort/0/tsort.rbs +409 -0
- data/stdlib/uri/0/common.rbs +582 -0
- data/stdlib/uri/0/file.rbs +118 -0
- data/stdlib/uri/0/ftp.rbs +13 -0
- data/stdlib/uri/0/generic.rbs +1108 -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 +210 -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 +166 -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
- metadata +532 -0
@@ -0,0 +1,329 @@
|
|
1
|
+
# <!-- rdoc-file=proc.c -->
|
2
|
+
# Ruby supports two forms of objectified methods. Class Method is used to
|
3
|
+
# represent methods that are associated with a particular object: these method
|
4
|
+
# objects are bound to that object. Bound method objects for an object can be
|
5
|
+
# created using Object#method.
|
6
|
+
#
|
7
|
+
# Ruby also supports unbound methods; methods objects that are not associated
|
8
|
+
# with a particular object. These can be created either by calling
|
9
|
+
# Module#instance_method or by calling #unbind on a bound method object. The
|
10
|
+
# result of both of these is an UnboundMethod object.
|
11
|
+
#
|
12
|
+
# Unbound methods can only be called after they are bound to an object. That
|
13
|
+
# object must be a kind_of? the method's original class.
|
14
|
+
#
|
15
|
+
# class Square
|
16
|
+
# def area
|
17
|
+
# @side * @side
|
18
|
+
# end
|
19
|
+
# def initialize(side)
|
20
|
+
# @side = side
|
21
|
+
# end
|
22
|
+
# end
|
23
|
+
#
|
24
|
+
# area_un = Square.instance_method(:area)
|
25
|
+
#
|
26
|
+
# s = Square.new(12)
|
27
|
+
# area = area_un.bind(s)
|
28
|
+
# area.call #=> 144
|
29
|
+
#
|
30
|
+
# Unbound methods are a reference to the method at the time it was objectified:
|
31
|
+
# subsequent changes to the underlying class will not affect the unbound method.
|
32
|
+
#
|
33
|
+
# class Test
|
34
|
+
# def test
|
35
|
+
# :original
|
36
|
+
# end
|
37
|
+
# end
|
38
|
+
# um = Test.instance_method(:test)
|
39
|
+
# class Test
|
40
|
+
# def test
|
41
|
+
# :modified
|
42
|
+
# end
|
43
|
+
# end
|
44
|
+
# t = Test.new
|
45
|
+
# t.test #=> :modified
|
46
|
+
# um.bind(t).call #=> :original
|
47
|
+
#
|
48
|
+
class UnboundMethod
|
49
|
+
# <!--
|
50
|
+
# rdoc-file=proc.c
|
51
|
+
# - meth.eql?(other_meth) -> true or false
|
52
|
+
# - meth == other_meth -> true or false
|
53
|
+
# -->
|
54
|
+
# Two unbound method objects are equal if they refer to the same method
|
55
|
+
# definition.
|
56
|
+
#
|
57
|
+
# Array.instance_method(:each_slice) == Enumerable.instance_method(:each_slice)
|
58
|
+
# #=> true
|
59
|
+
#
|
60
|
+
# Array.instance_method(:sum) == Enumerable.instance_method(:sum)
|
61
|
+
# #=> false, Array redefines the method for efficiency
|
62
|
+
#
|
63
|
+
def ==: (untyped other) -> bool
|
64
|
+
|
65
|
+
# <!-- rdoc-file=proc.c -->
|
66
|
+
# Two unbound method objects are equal if they refer to the same method
|
67
|
+
# definition.
|
68
|
+
#
|
69
|
+
# Array.instance_method(:each_slice) == Enumerable.instance_method(:each_slice)
|
70
|
+
# #=> true
|
71
|
+
#
|
72
|
+
# Array.instance_method(:sum) == Enumerable.instance_method(:sum)
|
73
|
+
# #=> false, Array redefines the method for efficiency
|
74
|
+
#
|
75
|
+
alias eql? ==
|
76
|
+
|
77
|
+
# <!--
|
78
|
+
# rdoc-file=proc.c
|
79
|
+
# - meth.hash -> integer
|
80
|
+
# -->
|
81
|
+
# Returns a hash value corresponding to the method object.
|
82
|
+
#
|
83
|
+
# See also Object#hash.
|
84
|
+
#
|
85
|
+
def hash: () -> Integer
|
86
|
+
|
87
|
+
# <!--
|
88
|
+
# rdoc-file=proc.c
|
89
|
+
# - method.clone -> new_method
|
90
|
+
# -->
|
91
|
+
# Returns a clone of this method.
|
92
|
+
#
|
93
|
+
# class A
|
94
|
+
# def foo
|
95
|
+
# return "bar"
|
96
|
+
# end
|
97
|
+
# end
|
98
|
+
#
|
99
|
+
# m = A.new.method(:foo)
|
100
|
+
# m.call # => "bar"
|
101
|
+
# n = m.clone.call # => "bar"
|
102
|
+
#
|
103
|
+
def clone: () -> instance
|
104
|
+
|
105
|
+
# <!--
|
106
|
+
# rdoc-file=proc.c
|
107
|
+
# - meth.arity -> integer
|
108
|
+
# -->
|
109
|
+
# Returns an indication of the number of arguments accepted by a method. Returns
|
110
|
+
# a nonnegative integer for methods that take a fixed number of arguments. For
|
111
|
+
# Ruby methods that take a variable number of arguments, returns -n-1, where n
|
112
|
+
# is the number of required arguments. Keyword arguments will be considered as a
|
113
|
+
# single additional argument, that argument being mandatory if any keyword
|
114
|
+
# argument is mandatory. For methods written in C, returns -1 if the call takes
|
115
|
+
# a variable number of arguments.
|
116
|
+
#
|
117
|
+
# class C
|
118
|
+
# def one; end
|
119
|
+
# def two(a); end
|
120
|
+
# def three(*a); end
|
121
|
+
# def four(a, b); end
|
122
|
+
# def five(a, b, *c); end
|
123
|
+
# def six(a, b, *c, &d); end
|
124
|
+
# def seven(a, b, x:0); end
|
125
|
+
# def eight(x:, y:); end
|
126
|
+
# def nine(x:, y:, **z); end
|
127
|
+
# def ten(*a, x:, y:); end
|
128
|
+
# end
|
129
|
+
# c = C.new
|
130
|
+
# c.method(:one).arity #=> 0
|
131
|
+
# c.method(:two).arity #=> 1
|
132
|
+
# c.method(:three).arity #=> -1
|
133
|
+
# c.method(:four).arity #=> 2
|
134
|
+
# c.method(:five).arity #=> -3
|
135
|
+
# c.method(:six).arity #=> -3
|
136
|
+
# c.method(:seven).arity #=> -3
|
137
|
+
# c.method(:eight).arity #=> 1
|
138
|
+
# c.method(:nine).arity #=> 1
|
139
|
+
# c.method(:ten).arity #=> -2
|
140
|
+
#
|
141
|
+
# "cat".method(:size).arity #=> 0
|
142
|
+
# "cat".method(:replace).arity #=> 1
|
143
|
+
# "cat".method(:squeeze).arity #=> -1
|
144
|
+
# "cat".method(:count).arity #=> -1
|
145
|
+
#
|
146
|
+
def arity: () -> Integer
|
147
|
+
|
148
|
+
# <!--
|
149
|
+
# rdoc-file=proc.c
|
150
|
+
# - umeth.bind(obj) -> method
|
151
|
+
# -->
|
152
|
+
# Bind *umeth* to *obj*. If Klass was the class from which *umeth* was obtained,
|
153
|
+
# `obj.kind_of?(Klass)` must be true.
|
154
|
+
#
|
155
|
+
# class A
|
156
|
+
# def test
|
157
|
+
# puts "In test, class = #{self.class}"
|
158
|
+
# end
|
159
|
+
# end
|
160
|
+
# class B < A
|
161
|
+
# end
|
162
|
+
# class C < B
|
163
|
+
# end
|
164
|
+
#
|
165
|
+
# um = B.instance_method(:test)
|
166
|
+
# bm = um.bind(C.new)
|
167
|
+
# bm.call
|
168
|
+
# bm = um.bind(B.new)
|
169
|
+
# bm.call
|
170
|
+
# bm = um.bind(A.new)
|
171
|
+
# bm.call
|
172
|
+
#
|
173
|
+
# *produces:*
|
174
|
+
#
|
175
|
+
# In test, class = C
|
176
|
+
# In test, class = B
|
177
|
+
# prog.rb:16:in `bind': bind argument must be an instance of B (TypeError)
|
178
|
+
# from prog.rb:16
|
179
|
+
#
|
180
|
+
def bind: (untyped obj) -> Method
|
181
|
+
|
182
|
+
# <!--
|
183
|
+
# rdoc-file=proc.c
|
184
|
+
# - meth.to_s -> string
|
185
|
+
# - meth.inspect -> string
|
186
|
+
# -->
|
187
|
+
# Returns a human-readable description of the underlying method.
|
188
|
+
#
|
189
|
+
# "cat".method(:count).inspect #=> "#<Method: String#count(*)>"
|
190
|
+
# (1..3).method(:map).inspect #=> "#<Method: Range(Enumerable)#map()>"
|
191
|
+
#
|
192
|
+
# In the latter case, the method description includes the "owner" of the
|
193
|
+
# original method (`Enumerable` module, which is included into `Range`).
|
194
|
+
#
|
195
|
+
# `inspect` also provides, when possible, method argument names (call sequence)
|
196
|
+
# and source location.
|
197
|
+
#
|
198
|
+
# require 'net/http'
|
199
|
+
# Net::HTTP.method(:get).inspect
|
200
|
+
# #=> "#<Method: Net::HTTP.get(uri_or_host, path=..., port=...) <skip>/lib/ruby/2.7.0/net/http.rb:457>"
|
201
|
+
#
|
202
|
+
# `...` in argument definition means argument is optional (has some default
|
203
|
+
# value).
|
204
|
+
#
|
205
|
+
# For methods defined in C (language core and extensions), location and argument
|
206
|
+
# names can't be extracted, and only generic information is provided in form of
|
207
|
+
# `*` (any number of arguments) or `_` (some positional argument).
|
208
|
+
#
|
209
|
+
# "cat".method(:count).inspect #=> "#<Method: String#count(*)>"
|
210
|
+
# "cat".method(:+).inspect #=> "#<Method: String#+(_)>""
|
211
|
+
#
|
212
|
+
def inspect: () -> String
|
213
|
+
|
214
|
+
# <!-- rdoc-file=proc.c -->
|
215
|
+
# Returns a human-readable description of the underlying method.
|
216
|
+
#
|
217
|
+
# "cat".method(:count).inspect #=> "#<Method: String#count(*)>"
|
218
|
+
# (1..3).method(:map).inspect #=> "#<Method: Range(Enumerable)#map()>"
|
219
|
+
#
|
220
|
+
# In the latter case, the method description includes the "owner" of the
|
221
|
+
# original method (`Enumerable` module, which is included into `Range`).
|
222
|
+
#
|
223
|
+
# `inspect` also provides, when possible, method argument names (call sequence)
|
224
|
+
# and source location.
|
225
|
+
#
|
226
|
+
# require 'net/http'
|
227
|
+
# Net::HTTP.method(:get).inspect
|
228
|
+
# #=> "#<Method: Net::HTTP.get(uri_or_host, path=..., port=...) <skip>/lib/ruby/2.7.0/net/http.rb:457>"
|
229
|
+
#
|
230
|
+
# `...` in argument definition means argument is optional (has some default
|
231
|
+
# value).
|
232
|
+
#
|
233
|
+
# For methods defined in C (language core and extensions), location and argument
|
234
|
+
# names can't be extracted, and only generic information is provided in form of
|
235
|
+
# `*` (any number of arguments) or `_` (some positional argument).
|
236
|
+
#
|
237
|
+
# "cat".method(:count).inspect #=> "#<Method: String#count(*)>"
|
238
|
+
# "cat".method(:+).inspect #=> "#<Method: String#+(_)>""
|
239
|
+
#
|
240
|
+
alias to_s inspect
|
241
|
+
|
242
|
+
# <!--
|
243
|
+
# rdoc-file=proc.c
|
244
|
+
# - meth.name -> symbol
|
245
|
+
# -->
|
246
|
+
# Returns the name of the method.
|
247
|
+
#
|
248
|
+
def name: () -> Symbol
|
249
|
+
|
250
|
+
# <!--
|
251
|
+
# rdoc-file=proc.c
|
252
|
+
# - meth.owner -> class_or_module
|
253
|
+
# -->
|
254
|
+
# Returns the class or module on which this method is defined. In other words,
|
255
|
+
#
|
256
|
+
# meth.owner.instance_methods(false).include?(meth.name) # => true
|
257
|
+
#
|
258
|
+
# holds as long as the method is not removed/undefined/replaced, (with
|
259
|
+
# private_instance_methods instead of instance_methods if the method is
|
260
|
+
# private).
|
261
|
+
#
|
262
|
+
# See also Method#receiver.
|
263
|
+
#
|
264
|
+
# (1..3).method(:map).owner #=> Enumerable
|
265
|
+
#
|
266
|
+
def owner: () -> (Class | Module)
|
267
|
+
|
268
|
+
# <!--
|
269
|
+
# rdoc-file=proc.c
|
270
|
+
# - meth.parameters -> array
|
271
|
+
# -->
|
272
|
+
# Returns the parameter information of this method.
|
273
|
+
#
|
274
|
+
# def foo(bar); end
|
275
|
+
# method(:foo).parameters #=> [[:req, :bar]]
|
276
|
+
#
|
277
|
+
# def foo(bar, baz, bat, &blk); end
|
278
|
+
# method(:foo).parameters #=> [[:req, :bar], [:req, :baz], [:req, :bat], [:block, :blk]]
|
279
|
+
#
|
280
|
+
# def foo(bar, *args); end
|
281
|
+
# method(:foo).parameters #=> [[:req, :bar], [:rest, :args]]
|
282
|
+
#
|
283
|
+
# def foo(bar, baz, *args, &blk); end
|
284
|
+
# method(:foo).parameters #=> [[:req, :bar], [:req, :baz], [:rest, :args], [:block, :blk]]
|
285
|
+
#
|
286
|
+
def parameters: () -> Method::param_types
|
287
|
+
|
288
|
+
# <!--
|
289
|
+
# rdoc-file=proc.c
|
290
|
+
# - meth.source_location -> [String, Integer]
|
291
|
+
# -->
|
292
|
+
# Returns the Ruby source filename and line number containing this method or nil
|
293
|
+
# if this method was not defined in Ruby (i.e. native).
|
294
|
+
#
|
295
|
+
def source_location: () -> [String, Integer]?
|
296
|
+
|
297
|
+
# <!--
|
298
|
+
# rdoc-file=proc.c
|
299
|
+
# - meth.super_method -> method
|
300
|
+
# -->
|
301
|
+
# Returns a Method of superclass which would be called when super is used or nil
|
302
|
+
# if there is no method on superclass.
|
303
|
+
#
|
304
|
+
def super_method: () -> UnboundMethod?
|
305
|
+
|
306
|
+
# <!--
|
307
|
+
# rdoc-file=proc.c
|
308
|
+
# - meth.original_name -> symbol
|
309
|
+
# -->
|
310
|
+
# Returns the original name of the method.
|
311
|
+
#
|
312
|
+
# class C
|
313
|
+
# def foo; end
|
314
|
+
# alias bar foo
|
315
|
+
# end
|
316
|
+
# C.instance_method(:bar).original_name # => :foo
|
317
|
+
#
|
318
|
+
def original_name: () -> Symbol
|
319
|
+
|
320
|
+
# <!--
|
321
|
+
# rdoc-file=proc.c
|
322
|
+
# - umeth.bind_call(recv, args, ...) -> obj
|
323
|
+
# -->
|
324
|
+
# Bind *umeth* to *recv* and then invokes the method with the specified
|
325
|
+
# arguments. This is semantically equivalent to `umeth.bind(recv).call(args,
|
326
|
+
# ...)`.
|
327
|
+
#
|
328
|
+
def bind_call: (untyped recv, *untyped, **untyped) ?{ (?) -> untyped } -> untyped
|
329
|
+
end
|
data/core/warning.rbs
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
# <!-- rdoc-file=error.c -->
|
2
|
+
# The Warning module contains a single method named #warn, and the module
|
3
|
+
# extends itself, making Warning.warn available. Warning.warn is called for all
|
4
|
+
# warnings issued by Ruby. By default, warnings are printed to $stderr.
|
5
|
+
#
|
6
|
+
# Changing the behavior of Warning.warn is useful to customize how warnings are
|
7
|
+
# handled by Ruby, for instance by filtering some warnings, and/or outputting
|
8
|
+
# warnings somewhere other than `$stderr`.
|
9
|
+
#
|
10
|
+
# If you want to change the behavior of Warning.warn you should use
|
11
|
+
# `Warning.extend(MyNewModuleWithWarnMethod)` and you can use `super` to get the
|
12
|
+
# default behavior of printing the warning to `$stderr`.
|
13
|
+
#
|
14
|
+
# Example:
|
15
|
+
# module MyWarningFilter
|
16
|
+
# def warn(message, category: nil, **kwargs)
|
17
|
+
# if /some warning I want to ignore/.match?(message)
|
18
|
+
# # ignore
|
19
|
+
# else
|
20
|
+
# super
|
21
|
+
# end
|
22
|
+
# end
|
23
|
+
# end
|
24
|
+
# Warning.extend MyWarningFilter
|
25
|
+
#
|
26
|
+
# You should never redefine Warning#warn (the instance method), as that will
|
27
|
+
# then no longer provide a way to use the default behavior.
|
28
|
+
#
|
29
|
+
# The [warning](https://rubygems.org/gems/warning) gem provides convenient ways
|
30
|
+
# to customize Warning.warn.
|
31
|
+
#
|
32
|
+
module Warning
|
33
|
+
# The types of categories the `Warning` module understands.
|
34
|
+
#
|
35
|
+
type category = :deprecated | :experimental | :performance
|
36
|
+
|
37
|
+
# <!--
|
38
|
+
# rdoc-file=error.c
|
39
|
+
# - Warning[category] -> true or false
|
40
|
+
# -->
|
41
|
+
# Returns the flag to show the warning messages for `category`. Supported
|
42
|
+
# categories are:
|
43
|
+
#
|
44
|
+
# `:deprecated`
|
45
|
+
# : deprecation warnings
|
46
|
+
# * assignment of non-nil value to `$,` and `$;`
|
47
|
+
# * keyword arguments
|
48
|
+
# etc.
|
49
|
+
#
|
50
|
+
#
|
51
|
+
# `:experimental`
|
52
|
+
# : experimental features
|
53
|
+
#
|
54
|
+
#
|
55
|
+
# `:performance`
|
56
|
+
# : performance hints
|
57
|
+
# * Shape variation limit
|
58
|
+
#
|
59
|
+
def self.[]: (category) -> bool
|
60
|
+
|
61
|
+
# <!--
|
62
|
+
# rdoc-file=error.c
|
63
|
+
# - Warning[category] = flag -> flag
|
64
|
+
# -->
|
65
|
+
# Sets the warning flags for `category`. See Warning.[] for the categories.
|
66
|
+
#
|
67
|
+
def self.[]=: [T] (category, T flag) -> T
|
68
|
+
|
69
|
+
# <!--
|
70
|
+
# rdoc-file=error.c
|
71
|
+
# - categories -> array
|
72
|
+
# -->
|
73
|
+
# Returns a list of the supported category symbols.
|
74
|
+
#
|
75
|
+
def self.categories: () -> Array[Symbol]
|
76
|
+
|
77
|
+
# <!--
|
78
|
+
# rdoc-file=error.c
|
79
|
+
# - warn(msg, category: nil) -> nil
|
80
|
+
# -->
|
81
|
+
# Writes warning message `msg` to $stderr. This method is called by Ruby for all
|
82
|
+
# emitted warnings. A `category` may be included with the warning.
|
83
|
+
#
|
84
|
+
# See the documentation of the Warning module for how to customize this.
|
85
|
+
#
|
86
|
+
def self?.warn: (String message, ?category: category?) -> nil
|
87
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
# Core and Standard Library Signatures Contribution Guide
|
2
|
+
|
3
|
+
## Guides
|
4
|
+
|
5
|
+
* [RBS by Example](rbs_by_example.md)
|
6
|
+
* [Writing Signature Guide](sigs.md)
|
7
|
+
* [Testing Core API and Standard Library Types](stdlib.md)
|
8
|
+
* [Syntax](syntax.md)
|
9
|
+
|
10
|
+
## Introduction
|
11
|
+
|
12
|
+
The RBS repository contains the type definitions of Core API and Standard Libraries.
|
13
|
+
There are some discussions whether if it is the best to have them in this repository, but we have them and continue updating the files meanwhile.
|
14
|
+
|
15
|
+
The target version of the bundled type definitions is the latest _release_ of Ruby -- `3.1` as of January 2022.
|
16
|
+
|
17
|
+
**The core API** type definitions are in `core` directory.
|
18
|
+
You will find the familiar class names in the directory, like `string.rbs` or `array.rbs`.
|
19
|
+
|
20
|
+
**The standard libraries** type definitions are in `stdlib` directory.
|
21
|
+
They have the [third party repository](repo.md) structure.
|
22
|
+
There is a `set` directory for the `set` library, and it contains `0` directory.
|
23
|
+
Because RBS supports the latest release of Ruby, we have one set of RBS files which corresponds to the bundled versions of the libraries.
|
24
|
+
|
25
|
+
## Steps for Contribution
|
26
|
+
|
27
|
+
1. Pick the class/library you will work for.
|
28
|
+
2. Make a directory `stdlib/foo/0` if you work for one of the standard libraries.
|
29
|
+
3. Write RBS type definitions and tests.
|
30
|
+
|
31
|
+
You will typically follow the steps as follows:
|
32
|
+
|
33
|
+
1. Run `rbs prototype runtime` to generate list of methods.
|
34
|
+
2. Run `rbs annotate` to import RDoc comments.
|
35
|
+
3. Run `rake generate:stdlib_test[LIB]` to generate a test case.
|
36
|
+
4. Write the type definitions and tests.
|
37
|
+
|
38
|
+
See the next *Useful Tools* section and the guides above for writing and testing RBS files.
|
39
|
+
|
40
|
+
## Useful Tools
|
41
|
+
|
42
|
+
* `rbs prototype runtime --merge String`
|
43
|
+
* Generate a prototype using runtime API.
|
44
|
+
* `--merge` tells to use the method types in RBS if exists.
|
45
|
+
* `rbs prototype runtime --merge --method-owner=Numeric Integer`
|
46
|
+
* You can use --method-owner if you want to print method of other classes too, for documentation purpose.
|
47
|
+
* `rbs annotate core/string.rbs`
|
48
|
+
* Import RDoc comments.
|
49
|
+
* The imported docs contain the description, *arglists*, and filenames to help writing types.
|
50
|
+
* `bin/query-rdoc String#initialize`
|
51
|
+
* Print RDoc documents in the format you can copy-and-paste to RBS.
|
52
|
+
* `bin/sort core/string.rbs`
|
53
|
+
* Sort declarations members in RBS files.
|
54
|
+
* `rbs -r LIB validate`
|
55
|
+
Validate the syntax and some of the semantics.
|
56
|
+
* `rake generate:stdlib_test[String]`
|
57
|
+
Scaffold the stdlib test.
|
58
|
+
* `rake test/stdlib/Array_test.rb`
|
59
|
+
Run specific stdlib test with the path.
|
60
|
+
|
61
|
+
### Standard STDLIB Members Order
|
62
|
+
|
63
|
+
We define the standard members order so that ordering doesn't bother reading diffs or git-annotate outputs.
|
64
|
+
|
65
|
+
1. `def self.new` or `def initialize`
|
66
|
+
2. Mixins
|
67
|
+
3. Attributes
|
68
|
+
4. Singleton methods
|
69
|
+
5. `public` & public instance methods
|
70
|
+
6. `private` & private instance methods
|
71
|
+
|
72
|
+
```rbs
|
73
|
+
class HelloWorld[X]
|
74
|
+
def self.new: [A] () { (void) -> A } -> HelloWorld[A] # new or initialize comes first
|
75
|
+
def initialize: () -> void
|
76
|
+
|
77
|
+
include Enumerable[X, void] # Mixin comes next
|
78
|
+
|
79
|
+
attr_reader language: (:ja | :en) # Attributes
|
80
|
+
|
81
|
+
def self.all_languages: () -> Array[Symbol] # Singleton methods
|
82
|
+
|
83
|
+
public # Public instance methods
|
84
|
+
|
85
|
+
def each: () { (A) -> void } -> void # Members are sorted dictionary order
|
86
|
+
|
87
|
+
def to_s: (?Locale) -> String
|
88
|
+
|
89
|
+
private # Private instance methods
|
90
|
+
|
91
|
+
alias validate validate_locale
|
92
|
+
|
93
|
+
def validate_locale: () -> void
|
94
|
+
end
|
95
|
+
```
|
96
|
+
|
97
|
+
## Q&A
|
98
|
+
|
99
|
+
### Some of the standard libraries are gems. Why we put the files in this repo?
|
100
|
+
|
101
|
+
You are correct. We want to move to their repos. We haven't started the migration yet.
|
102
|
+
|
103
|
+
### How can we handle incompatibilities of core APIs and standard libraries between Rubies
|
104
|
+
|
105
|
+
We ignore the incompatibilities for now.
|
106
|
+
We focus on the latest version of core APIs and standard libraries.
|
@@ -0,0 +1,110 @@
|
|
1
|
+
# Architecture
|
2
|
+
|
3
|
+
This guide describes the outline of the architecture of RBS library. It helps you to understand the structure and key features of the library to start contributing to the library.
|
4
|
+
|
5
|
+
## Bird's Eye View
|
6
|
+
|
7
|
+
The goal of the library is simple: Read RBS files and generate the structure of Ruby programs.
|
8
|
+
|
9
|
+
```
|
10
|
+
RBS files
|
11
|
+
↓ -- RBS::Parser
|
12
|
+
Syntax tree
|
13
|
+
↓
|
14
|
+
Environment
|
15
|
+
↓ -- Definition builder
|
16
|
+
Definition
|
17
|
+
```
|
18
|
+
|
19
|
+
The input is RBS files. The gem ships with RBS type definitions of Ruby core library and some of the standard libraries. You write RBS files for your applications or gems.
|
20
|
+
|
21
|
+
Syntax tree is the next representation. `RBS::Parser` transforms the sequence of characters in RBS files into syntax trees.
|
22
|
+
|
23
|
+
Syntax tree objects are loaded to `RBS::Environment`. It collects loaded RBS objects, organizes the definitions, and provides some utilities, like resolving type names and finding the declarations.
|
24
|
+
|
25
|
+
`RBS::Definition` is the goal of the transformation steps. It is associated with a class singleton, a class object, or an interface. You can find the list of available methods and their types, instance variables, and class hierarchies.
|
26
|
+
|
27
|
+
## Core classes
|
28
|
+
|
29
|
+
### Types
|
30
|
+
|
31
|
+
Types are defined under `RBS::Types`, like `RBS::Types::ClassInstance` or `RBS::Types::Union`. You will find the definition of each type supported in RBS.
|
32
|
+
|
33
|
+
### Parsing RBS files
|
34
|
+
|
35
|
+
The RBS source code is loaded into `RBS::Buffer`, and `RBS::Parser` is the parser. The parser is implemented in C extension.
|
36
|
+
|
37
|
+
`RBS::Parser` provides three entrypoints.
|
38
|
+
|
39
|
+
- `RBS::Parser.parse_method_type` parsers a *method type*. (`[T] (String) { (IO) -> T } -> Array[T]`)
|
40
|
+
- `RBS::Parser.parse_type` parses a *type*. (`Hash[Symbol, untyped]`)
|
41
|
+
- `RBS::Parser.parse_signature` parses the whole RBS file.
|
42
|
+
|
43
|
+
### Environment
|
44
|
+
|
45
|
+
RBS AST is loaded to `RBS::Environment` by `RBS::EnvironmentLoader`. `Environment` gives *absolute names* to the declarations, and provides an index from the *absolute name* to their declarations.
|
46
|
+
|
47
|
+
Assume we have the following nested RBS declarations:
|
48
|
+
|
49
|
+
```rbs
|
50
|
+
module Hello
|
51
|
+
class World
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
class Hello::World
|
56
|
+
end
|
57
|
+
```
|
58
|
+
|
59
|
+
And the environment organizes the definitions as follows:
|
60
|
+
|
61
|
+
- There are two classes `::Hello` and `::Hello::World`
|
62
|
+
- It provides a mapping from `::Hello` to it's `module` declaration and `::Hello::World` to it's two `class` declarations
|
63
|
+
|
64
|
+
### Definition and DefinitionBuilder
|
65
|
+
|
66
|
+
`RBS::Definition` tells you:
|
67
|
+
|
68
|
+
- The set of available methods in a class/module/interface
|
69
|
+
- The set of instance variables in a class/module
|
70
|
+
- The ancestors in a class/module
|
71
|
+
|
72
|
+
Definition is constructed for:
|
73
|
+
|
74
|
+
- A singleton class of a class/module -- `singleton(String)`, `singleton(Array)`,
|
75
|
+
- An instance of a class -- `String`, `Array[T]`, or
|
76
|
+
- An interface -- `_ToS`
|
77
|
+
|
78
|
+
Note that generic class instances/interfaces are kept generic. We don't have a definition of `Array[String]` but of `Array[T]`.
|
79
|
+
|
80
|
+
`DefinitionBuilder` constructs `Definition` of given type names.
|
81
|
+
|
82
|
+
- `DefinitionBuilder#build_singleton` returns a definition of singleton classes of given class/module.
|
83
|
+
- `DefinitionBuilder#build_instance` returns a definition of instances of given class/module.
|
84
|
+
- `DefinitionBuilder#build_interface` returns a definition of interfaces.
|
85
|
+
|
86
|
+
It uses `AncestorBuilder` to construct ancestor chains of the type. `MethodBuilder` constructs sets of available methods based on the ancestor chains.
|
87
|
+
|
88
|
+
The `#build_singleton` calculates the type of `.new` methods based on the definition of `#initialize` method. This is different from Ruby's implementation -- it reused `Class#new` method but we need the custom implementation to give precise `.new` method type of each class.
|
89
|
+
|
90
|
+
#### Working with type aliases
|
91
|
+
|
92
|
+
`DefinitionBuilder#expand_alias` and its variants provide one step *unfold* operation of type aliases.
|
93
|
+
|
94
|
+
```ruby
|
95
|
+
builder.expand_alias2(RBS::TypeName.parse("::int"), []) # => returns `::Integer | ::_ToInt`
|
96
|
+
```
|
97
|
+
|
98
|
+
We don't have *normalize* operation for type aliases, because RBS allows recursive type alias definition, which cannot be *fully* unfolded.
|
99
|
+
|
100
|
+
### Other utilities
|
101
|
+
|
102
|
+
`RBS::Validator` provides validation of RBS type declaration. It validates that all of the type name references can be resolved, all type applications have correct arity, and so on.
|
103
|
+
|
104
|
+
`RBS::Test` provides runtime type checking, which confirms if a Ruby object can have an RBS type. It also provides an integration to existing Ruby code so that we run Ruby code, assuming unit tests, with runtime type checking.
|
105
|
+
|
106
|
+
`RBS::UnitTest` provides utilities to help write unit tests for RBS type definitions. Use the tool to make sure your RBS type definition is consistent with implementation.
|
107
|
+
|
108
|
+
`RBS::Prototype` is the core of `rbs prototype` feature. It scans Ruby source code or uses reflection features, and it generates the prototype of RBS files.
|
109
|
+
|
110
|
+
`RBS::Collection` includes `rbs collection` features.
|