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
data/COPYING
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
rbs is copyrighted free software by Soutaro Matsumoto <matsumoto@soutaro.com>.
|
2
|
+
You can redistribute it and/or modify it under either the terms of the
|
3
|
+
2-clause BSDL (see the file BSDL), or the conditions below:
|
4
|
+
|
5
|
+
1. You may make and give away verbatim copies of the source form of the
|
6
|
+
software without restriction, provided that you duplicate all of the
|
7
|
+
original copyright notices and associated disclaimers.
|
8
|
+
|
9
|
+
2. You may modify your copy of the software in any way, provided that
|
10
|
+
you do at least ONE of the following:
|
11
|
+
|
12
|
+
a. place your modifications in the Public Domain or otherwise
|
13
|
+
make them Freely Available, such as by posting said
|
14
|
+
modifications to Usenet or an equivalent medium, or by allowing
|
15
|
+
the author to include your modifications in the software.
|
16
|
+
|
17
|
+
b. use the modified software only within your corporation or
|
18
|
+
organization.
|
19
|
+
|
20
|
+
c. give non-standard binaries non-standard names, with
|
21
|
+
instructions on where to get the original software distribution.
|
22
|
+
|
23
|
+
d. make other distribution arrangements with the author.
|
24
|
+
|
25
|
+
3. You may distribute the software in object code or binary form,
|
26
|
+
provided that you do at least ONE of the following:
|
27
|
+
|
28
|
+
a. distribute the binaries and library files of the software,
|
29
|
+
together with instructions (in the manual page or equivalent)
|
30
|
+
on where to get the original distribution.
|
31
|
+
|
32
|
+
b. accompany the distribution with the machine-readable source of
|
33
|
+
the software.
|
34
|
+
|
35
|
+
c. give non-standard binaries non-standard names, with
|
36
|
+
instructions on where to get the original software distribution.
|
37
|
+
|
38
|
+
d. make other distribution arrangements with the author.
|
39
|
+
|
40
|
+
4. You may modify and include the part of the software into any other
|
41
|
+
software (possibly commercial). But some files in the distribution
|
42
|
+
are not written by the author, so that they are not under these terms.
|
43
|
+
|
44
|
+
For the list of those files and their copying conditions, see the
|
45
|
+
file LEGAL.
|
46
|
+
|
47
|
+
5. The scripts and library files supplied as input to or produced as
|
48
|
+
output from the software do not automatically fall under the
|
49
|
+
copyright of the software, but belong to whomever generated them,
|
50
|
+
and may be sold commercially, and may be aggregated with this
|
51
|
+
software.
|
52
|
+
|
53
|
+
6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
|
54
|
+
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
55
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
56
|
+
PURPOSE.
|
data/README.md
ADDED
@@ -0,0 +1,203 @@
|
|
1
|
+
# RBS
|
2
|
+
|
3
|
+
RBS is a language to describe the structure of Ruby programs.
|
4
|
+
You can write down the definition of a class or module: methods defined in the class, instance variables and their types, and inheritance/mix-in relations.
|
5
|
+
It also allows declaring constants and global variables.
|
6
|
+
|
7
|
+
The following is a small example of RBS for a chat app.
|
8
|
+
|
9
|
+
<!-- run-start:a.rbs:bundle exec rbs -I a.rbs validate -->
|
10
|
+
```rbs
|
11
|
+
module ChatApp
|
12
|
+
VERSION: String
|
13
|
+
|
14
|
+
class User
|
15
|
+
attr_reader login: String
|
16
|
+
attr_reader email: String
|
17
|
+
|
18
|
+
def initialize: (login: String, email: String) -> void
|
19
|
+
end
|
20
|
+
|
21
|
+
class Bot
|
22
|
+
attr_reader name: String
|
23
|
+
attr_reader email: String
|
24
|
+
attr_reader owner: User
|
25
|
+
|
26
|
+
def initialize: (name: String, owner: User) -> void
|
27
|
+
end
|
28
|
+
|
29
|
+
class Message
|
30
|
+
attr_reader id: String
|
31
|
+
attr_reader string: String
|
32
|
+
attr_reader from: User | Bot # `|` means union types: `#from` can be `User` or `Bot`
|
33
|
+
attr_reader reply_to: Message? # `?` means optional type: `#reply_to` can be `nil`
|
34
|
+
|
35
|
+
def initialize: (from: User | Bot, string: String) -> void
|
36
|
+
|
37
|
+
def reply: (from: User | Bot, string: String) -> Message
|
38
|
+
end
|
39
|
+
|
40
|
+
class Channel
|
41
|
+
attr_reader name: String
|
42
|
+
attr_reader messages: Array[Message]
|
43
|
+
attr_reader users: Array[User]
|
44
|
+
attr_reader bots: Array[Bot]
|
45
|
+
|
46
|
+
def initialize: (name: String) -> void
|
47
|
+
|
48
|
+
def each_member: () { (User | Bot) -> void } -> void # `{` and `}` means block.
|
49
|
+
| () -> Enumerator[User | Bot, void] # Method can be overloaded.
|
50
|
+
end
|
51
|
+
end
|
52
|
+
```
|
53
|
+
<!-- run-end -->
|
54
|
+
|
55
|
+
## The Target Version
|
56
|
+
|
57
|
+
* The standard library signatures targets the latest release of Ruby. (`3.2` as of 2023.)
|
58
|
+
* The library code targets non-EOL versions of Ruby. (`>= 3.0` as of 2023.)
|
59
|
+
|
60
|
+
## Installation
|
61
|
+
|
62
|
+
Install the `rbs` gem. `$ gem install rbs` from the command line, or add a line in your `Gemfile`.
|
63
|
+
|
64
|
+
```rb
|
65
|
+
gem "rbs"
|
66
|
+
```
|
67
|
+
|
68
|
+
## CLI
|
69
|
+
|
70
|
+
The gem ships with the `rbs` command line tool to demonstrate what it can do and help develop RBS.
|
71
|
+
|
72
|
+
```console
|
73
|
+
$ rbs version
|
74
|
+
$ rbs list
|
75
|
+
$ rbs ancestors ::Object
|
76
|
+
$ rbs methods ::Object
|
77
|
+
$ rbs method Object then
|
78
|
+
```
|
79
|
+
|
80
|
+
An end user of `rbs` will probably find `rbs prototype` the most useful. This command generates boilerplate signature declarations for ruby files. For example, say you have written the below ruby script.
|
81
|
+
|
82
|
+
```ruby
|
83
|
+
# person.rb
|
84
|
+
class Person
|
85
|
+
attr_reader :name
|
86
|
+
attr_reader :contacts
|
87
|
+
|
88
|
+
def initialize(name:)
|
89
|
+
@name = name
|
90
|
+
@contacts = []
|
91
|
+
end
|
92
|
+
|
93
|
+
def speak
|
94
|
+
"I'm #{@name} and I love Ruby!"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
```
|
98
|
+
|
99
|
+
Running prototype on the above will automatically generate
|
100
|
+
|
101
|
+
```console
|
102
|
+
$ rbs prototype rb person.rb
|
103
|
+
class Person
|
104
|
+
@name: untyped
|
105
|
+
|
106
|
+
@contacts: untyped
|
107
|
+
|
108
|
+
attr_reader name: untyped
|
109
|
+
|
110
|
+
attr_reader contacts: untyped
|
111
|
+
|
112
|
+
def initialize: (name: untyped) -> void
|
113
|
+
|
114
|
+
def speak: () -> ::String
|
115
|
+
end
|
116
|
+
```
|
117
|
+
|
118
|
+
It prints signatures for all methods, classes, instance variables, and constants.
|
119
|
+
This is only a starting point, and you should edit the output to match your signature more accurately.
|
120
|
+
|
121
|
+
`rbs prototype` offers three options.
|
122
|
+
|
123
|
+
- `rb` generates from just the available Ruby code
|
124
|
+
- `rbi` generates from Sorbet RBI
|
125
|
+
- `runtime` generates from runtime API
|
126
|
+
|
127
|
+
## Library
|
128
|
+
|
129
|
+
There are two important concepts, _environment_ and _definition_.
|
130
|
+
|
131
|
+
An _environment_ is a dictionary that keeps track of all declarations. What is the declaration associated with `String` class? An _environment_ will give you the answer.
|
132
|
+
|
133
|
+
A _definition_ gives you the detail of the class. What is the type of the return value of `gsub` method of the `String` class? The _definition_ for `String` class knows the list of methods it provides and their types.
|
134
|
+
|
135
|
+
The following is a small code to retrieve the definition of the `String#gsub` method.
|
136
|
+
|
137
|
+
<!-- run-start:a.rb:bundle exec ruby a.rb -->
|
138
|
+
```rb
|
139
|
+
require "rbs"
|
140
|
+
|
141
|
+
loader = RBS::EnvironmentLoader.new()
|
142
|
+
|
143
|
+
# loader.add(path: Pathname("sig")) # Load .rbs files from `sig` directory
|
144
|
+
# loader.add(library: "pathname") # Load pathname library
|
145
|
+
|
146
|
+
environment = RBS::Environment.from_loader(loader).resolve_type_names
|
147
|
+
|
148
|
+
# ::String
|
149
|
+
string = RBS::TypeName.new(name: :String, namespace: RBS::Namespace.root)
|
150
|
+
|
151
|
+
# Class declaration for ::String
|
152
|
+
decl = environment.class_decls[string]
|
153
|
+
|
154
|
+
# Builder provides the translation from `declaration` to `definition`
|
155
|
+
builder = RBS::DefinitionBuilder.new(env: environment)
|
156
|
+
|
157
|
+
# Definition of instance of String
|
158
|
+
instance = builder.build_instance(string)
|
159
|
+
|
160
|
+
# Print the types of `gsub` method:
|
161
|
+
puts instance.methods[:gsub].method_types.join("\n")
|
162
|
+
# Outputs =>
|
163
|
+
# (::Regexp | ::string pattern, ::string replacement) -> ::String
|
164
|
+
# (::Regexp | ::string pattern, ::Hash[::String, ::String] hash) -> ::String
|
165
|
+
# (::Regexp | ::string pattern) { (::String match) -> ::_ToS } -> ::String
|
166
|
+
# (::Regexp | ::string pattern) -> ::Enumerator[::String, self]
|
167
|
+
|
168
|
+
# Definition of singleton of String
|
169
|
+
singleton = builder.build_singleton(string)
|
170
|
+
# No `gsub` method for String singleton
|
171
|
+
puts singleton.methods[:gsub]
|
172
|
+
```
|
173
|
+
<!-- run-end -->
|
174
|
+
|
175
|
+
## Guides
|
176
|
+
|
177
|
+
- [Architecture](docs/architecture.md)
|
178
|
+
- [Core and standard library signature contribution guide](docs/CONTRIBUTING.md)
|
179
|
+
- [Writing signatures guide](docs/sigs.md)
|
180
|
+
- [Stdlib signatures guide](docs/stdlib.md)
|
181
|
+
- [Syntax](docs/syntax.md)
|
182
|
+
- [RBS by Example](docs/rbs_by_example.md)
|
183
|
+
- [RBS collection](docs/collection.md)
|
184
|
+
- [Using `Data` and `Struct`](docs/data_and_struct.md)
|
185
|
+
- [Releasing a gem with RBS](docs/gem.md)
|
186
|
+
|
187
|
+
## Community
|
188
|
+
|
189
|
+
Here is a list of some places you can talk with active maintainers.
|
190
|
+
|
191
|
+
- [Ruby Discord Server (invite link)](https://discord.gg/ad2acQFtkh) -- We have `rbs` channel in Ruby Discord server.
|
192
|
+
- [ruby-jp Slack Workspace (in Japanese)](https://ruby-jp.github.io/) -- We have `types` channel in ruby-jp slack workspace.
|
193
|
+
- [gem_rbs_collection](https://github.com/ruby/gem_rbs_collection) -- We have a repository of third-party RBS type definitions, for the case your dependency doesn't ship with RBS files.
|
194
|
+
|
195
|
+
## Development
|
196
|
+
|
197
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bundle exec rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
198
|
+
|
199
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
200
|
+
|
201
|
+
## Contributing
|
202
|
+
|
203
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/ruby/rbs.
|
data/Rakefile
ADDED
@@ -0,0 +1,417 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require "rake/testtask"
|
3
|
+
require "rbconfig"
|
4
|
+
require 'rake/extensiontask'
|
5
|
+
|
6
|
+
$LOAD_PATH << File.join(__dir__, "test")
|
7
|
+
|
8
|
+
ruby = ENV["RUBY"] || RbConfig.ruby
|
9
|
+
rbs = File.join(__dir__, "exe/rbs")
|
10
|
+
bin = File.join(__dir__, "bin")
|
11
|
+
|
12
|
+
Rake::ExtensionTask.new("rbs_extension")
|
13
|
+
|
14
|
+
Rake::TestTask.new(:test => :compile) do |t|
|
15
|
+
t.libs << "test"
|
16
|
+
t.libs << "lib"
|
17
|
+
t.test_files = FileList["test/**/*_test.rb"].reject do |path|
|
18
|
+
path =~ %r{test/stdlib/}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
multitask :default => [:test, :stdlib_test, :typecheck_test, :rubocop, :validate, :test_doc]
|
23
|
+
|
24
|
+
task :lexer do
|
25
|
+
sh "re2c -W --no-generation-date -o ext/rbs_extension/lexer.c ext/rbs_extension/lexer.re"
|
26
|
+
end
|
27
|
+
|
28
|
+
task :confirm_lexer => :lexer do
|
29
|
+
puts "Testing if lexer.c is updated with respect to lexer.re"
|
30
|
+
sh "git diff --exit-code ext/rbs_extension/lexer.c"
|
31
|
+
end
|
32
|
+
|
33
|
+
task :confirm_templates => :templates do
|
34
|
+
puts "Testing if generated code under include and src is updated with respect to templates"
|
35
|
+
sh "git diff --exit-code -- include src"
|
36
|
+
end
|
37
|
+
|
38
|
+
rule ".c" => ".re" do |t|
|
39
|
+
puts "⚠️⚠️⚠️ #{t.name} is older than #{t.source}. You may need to run `rake lexer` ⚠️⚠️⚠️"
|
40
|
+
end
|
41
|
+
|
42
|
+
rule %r{^src/(.*)\.c} => 'templates/%X.c.erb' do |t|
|
43
|
+
puts "⚠️⚠️⚠️ #{t.name} is older than #{t.source}. You may need to run `rake templates` ⚠️⚠️⚠️"
|
44
|
+
end
|
45
|
+
rule %r{^include/(.*)\.c} => 'templates/%X.c.erb' do |t|
|
46
|
+
puts "⚠️⚠️⚠️ #{t.name} is older than #{t.source}. You may need to run `rake templates` ⚠️⚠️⚠️"
|
47
|
+
end
|
48
|
+
|
49
|
+
task :annotate do
|
50
|
+
sh "bin/generate_docs.sh"
|
51
|
+
end
|
52
|
+
|
53
|
+
task :confirm_annotation do
|
54
|
+
puts "Testing if RBS docs are updated with respect to RDoc"
|
55
|
+
sh "git diff --exit-code core stdlib"
|
56
|
+
end
|
57
|
+
|
58
|
+
task :templates do
|
59
|
+
sh "#{ruby} templates/template.rb include/rbs/constants.h"
|
60
|
+
sh "#{ruby} templates/template.rb include/rbs/ruby_objs.h"
|
61
|
+
sh "#{ruby} templates/template.rb src/constants.c"
|
62
|
+
sh "#{ruby} templates/template.rb src/ruby_objs.c"
|
63
|
+
end
|
64
|
+
|
65
|
+
task :compile => "ext/rbs_extension/lexer.c"
|
66
|
+
task :compile => "include/rbs/constants.h"
|
67
|
+
task :compile => "include/rbs/ruby_objs.h"
|
68
|
+
task :compile => "src/constants.c"
|
69
|
+
task :compile => "src/ruby_objs.c"
|
70
|
+
|
71
|
+
task :test_doc do
|
72
|
+
files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
73
|
+
`git ls-files -z`.split("\x0").select do |file| Pathname(file).extname == ".md" end
|
74
|
+
end
|
75
|
+
|
76
|
+
sh "#{ruby} #{__dir__}/bin/run_in_md.rb #{files.join(" ")}"
|
77
|
+
end
|
78
|
+
|
79
|
+
task :validate => :compile do
|
80
|
+
require 'yaml'
|
81
|
+
|
82
|
+
sh "#{ruby} #{rbs} validate --exit-error-on-syntax-error"
|
83
|
+
|
84
|
+
libs = FileList["stdlib/*"].map {|path| File.basename(path).to_s }
|
85
|
+
|
86
|
+
# Skip RBS validation because Ruby CI runs without rubygems
|
87
|
+
case skip_rbs_validation = ENV["SKIP_RBS_VALIDATION"]
|
88
|
+
when nil
|
89
|
+
begin
|
90
|
+
Gem::Specification.find_by_name("rbs")
|
91
|
+
libs << "rbs"
|
92
|
+
rescue Gem::MissingSpecError
|
93
|
+
STDERR.puts "🚨🚨🚨🚨 Skipping `rbs` gem because it's not found"
|
94
|
+
end
|
95
|
+
when "true"
|
96
|
+
# Skip
|
97
|
+
else
|
98
|
+
STDERR.puts "🚨🚨🚨🚨 SKIP_RBS_VALIDATION is expected to be `true` or unset, given `#{skip_rbs_validation}` 🚨🚨🚨🚨"
|
99
|
+
libs << "rbs"
|
100
|
+
end
|
101
|
+
|
102
|
+
libs.each do |lib|
|
103
|
+
sh "#{ruby} #{rbs} -r #{lib} validate --exit-error-on-syntax-error"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
FileList["test/stdlib/**/*_test.rb"].each do |test|
|
108
|
+
task test => :compile do
|
109
|
+
sh "#{ruby} -Ilib #{bin}/test_runner.rb #{test}"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
task :stdlib_test => :compile do
|
114
|
+
test_files = FileList["test/stdlib/**/*_test.rb"].reject do |path|
|
115
|
+
path =~ %r{Ractor} || path =~ %r{Encoding}
|
116
|
+
end
|
117
|
+
|
118
|
+
if ENV["RANDOMIZE_STDLIB_TEST_ORDER"] == "true"
|
119
|
+
test_files.shuffle!
|
120
|
+
end
|
121
|
+
|
122
|
+
sh "#{ruby} -Ilib #{bin}/test_runner.rb #{test_files.join(' ')}"
|
123
|
+
# TODO: Ractor tests need to be run in a separate process
|
124
|
+
sh "#{ruby} -Ilib #{bin}/test_runner.rb test/stdlib/Ractor_test.rb"
|
125
|
+
sh "#{ruby} -Ilib #{bin}/test_runner.rb test/stdlib/Encoding_test.rb"
|
126
|
+
end
|
127
|
+
|
128
|
+
task :typecheck_test => :compile do
|
129
|
+
FileList["test/typecheck/*"].each do |test|
|
130
|
+
Dir.chdir(test) do
|
131
|
+
expectations = File.join(test, "steep_expectations.yml")
|
132
|
+
if File.exist?(expectations)
|
133
|
+
sh "steep check --with_expectations"
|
134
|
+
else
|
135
|
+
sh "steep check"
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
task :raap => :compile do
|
142
|
+
sh "ruby test/raap/core.rb"
|
143
|
+
sh "ruby test/raap/digest.rb"
|
144
|
+
sh "ruby test/raap/openssl.rb"
|
145
|
+
end
|
146
|
+
|
147
|
+
task :rubocop do
|
148
|
+
format = if ENV["CI"]
|
149
|
+
"github"
|
150
|
+
else
|
151
|
+
"progress"
|
152
|
+
end
|
153
|
+
|
154
|
+
sh "rubocop --parallel --format #{format}"
|
155
|
+
end
|
156
|
+
|
157
|
+
namespace :generate do
|
158
|
+
desc "Generate a test file for a stdlib class signatures"
|
159
|
+
task :stdlib_test, [:class] do |_task, args|
|
160
|
+
klass = args.fetch(:class) do
|
161
|
+
raise "Class name is necessary. e.g. rake 'generate:stdlib_test[String]'"
|
162
|
+
end
|
163
|
+
|
164
|
+
require "erb"
|
165
|
+
require "rbs"
|
166
|
+
|
167
|
+
class TestTarget
|
168
|
+
def initialize(klass)
|
169
|
+
@type_name = RBS::Namespace.parse(klass).to_type_name
|
170
|
+
end
|
171
|
+
|
172
|
+
def path
|
173
|
+
Pathname(ENV['RBS_GENERATE_TEST_PATH'] || "test/stdlib/#{file_name}_test.rb")
|
174
|
+
end
|
175
|
+
|
176
|
+
def file_name
|
177
|
+
@type_name.to_s.gsub(/\A::/, '').gsub(/::/, '_')
|
178
|
+
end
|
179
|
+
|
180
|
+
def to_s
|
181
|
+
@type_name.to_s
|
182
|
+
end
|
183
|
+
|
184
|
+
def absolute_type_name
|
185
|
+
@absolute_type_name ||= @type_name.absolute!
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
target = TestTarget.new(klass)
|
190
|
+
path = target.path
|
191
|
+
raise "#{path} already exists!" if path.exist?
|
192
|
+
|
193
|
+
class TestTemplateBuilder
|
194
|
+
attr_reader :target, :env
|
195
|
+
|
196
|
+
def initialize(target)
|
197
|
+
@target = target
|
198
|
+
|
199
|
+
loader = RBS::EnvironmentLoader.new
|
200
|
+
Dir['stdlib/*'].each do |lib|
|
201
|
+
next if lib.end_with?('builtin')
|
202
|
+
|
203
|
+
loader.add(library: File.basename(lib))
|
204
|
+
end
|
205
|
+
@env = RBS::Environment.from_loader(loader).resolve_type_names
|
206
|
+
end
|
207
|
+
|
208
|
+
def call
|
209
|
+
ERB.new(<<~ERB, trim_mode: "-").result(binding)
|
210
|
+
require_relative "test_helper"
|
211
|
+
|
212
|
+
<%- unless class_methods.empty? -%>
|
213
|
+
class <%= target %>SingletonTest < Test::Unit::TestCase
|
214
|
+
include TestHelper
|
215
|
+
|
216
|
+
# library "pathname", "securerandom" # Declare library signatures to load
|
217
|
+
testing "singleton(::<%= target %>)"
|
218
|
+
|
219
|
+
<%- class_methods.each do |method_name, definition| -%>
|
220
|
+
def test_<%= test_name_for(method_name) %>
|
221
|
+
<%- definition.method_types.each do |method_type| -%>
|
222
|
+
assert_send_type "<%= method_type %>",
|
223
|
+
<%= target %>, :<%= method_name %>
|
224
|
+
<%- end -%>
|
225
|
+
end
|
226
|
+
|
227
|
+
<%- end -%>
|
228
|
+
end
|
229
|
+
<%- end -%>
|
230
|
+
|
231
|
+
<%- unless instance_methods.empty? -%>
|
232
|
+
class <%= target %>Test < Test::Unit::TestCase
|
233
|
+
include TestHelper
|
234
|
+
|
235
|
+
# library "pathname", "securerandom" # Declare library signatures to load
|
236
|
+
testing "::<%= target %>"
|
237
|
+
|
238
|
+
<%- instance_methods.each do |method_name, definition| -%>
|
239
|
+
def test_<%= test_name_for(method_name) %>
|
240
|
+
<%- definition.method_types.each do |method_type| -%>
|
241
|
+
assert_send_type "<%= method_type %>",
|
242
|
+
<%= target %>.new, :<%= method_name %>
|
243
|
+
<%- end -%>
|
244
|
+
end
|
245
|
+
|
246
|
+
<%- end -%>
|
247
|
+
end
|
248
|
+
<%- end -%>
|
249
|
+
ERB
|
250
|
+
end
|
251
|
+
|
252
|
+
private
|
253
|
+
|
254
|
+
def test_name_for(method_name)
|
255
|
+
{
|
256
|
+
:== => 'double_equal',
|
257
|
+
:!= => 'not_equal',
|
258
|
+
:=== => 'triple_equal',
|
259
|
+
:[] => 'square_bracket',
|
260
|
+
:[]= => 'square_bracket_assign',
|
261
|
+
:> => 'greater_than',
|
262
|
+
:< => 'less_than',
|
263
|
+
:>= => 'greater_than_equal_to',
|
264
|
+
:<= => 'less_than_equal_to',
|
265
|
+
:<=> => 'spaceship',
|
266
|
+
:+ => 'plus',
|
267
|
+
:- => 'minus',
|
268
|
+
:* => 'multiply',
|
269
|
+
:/ => 'divide',
|
270
|
+
:** => 'power',
|
271
|
+
:% => 'modulus',
|
272
|
+
:& => 'and',
|
273
|
+
:| => 'or',
|
274
|
+
:^ => 'xor',
|
275
|
+
:>> => 'right_shift',
|
276
|
+
:<< => 'left_shift',
|
277
|
+
:=~ => 'pattern_match',
|
278
|
+
:!~ => 'does_not_match',
|
279
|
+
:~ => 'tilde'
|
280
|
+
}.fetch(method_name, method_name)
|
281
|
+
end
|
282
|
+
|
283
|
+
def class_methods
|
284
|
+
@class_methods ||= RBS::DefinitionBuilder.new(env: env).build_singleton(target.absolute_type_name).methods.select {|_, definition|
|
285
|
+
definition.implemented_in == target.absolute_type_name
|
286
|
+
}
|
287
|
+
end
|
288
|
+
|
289
|
+
def instance_methods
|
290
|
+
@instance_methods ||= RBS::DefinitionBuilder.new(env: env).build_instance(target.absolute_type_name).methods.select {|_, definition|
|
291
|
+
definition.implemented_in == target.absolute_type_name
|
292
|
+
}
|
293
|
+
end
|
294
|
+
end
|
295
|
+
|
296
|
+
path.write TestTemplateBuilder.new(target).call
|
297
|
+
|
298
|
+
puts "Created: #{path}"
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
task :test_generate_stdlib do
|
303
|
+
sh "RBS_GENERATE_TEST_PATH=/tmp/Array_test.rb rake 'generate:stdlib_test[Array]'"
|
304
|
+
sh "ruby -c /tmp/Array_test.rb"
|
305
|
+
sh "RBS_GENERATE_TEST_PATH=/tmp/Thread_Mutex_test.rb rake 'generate:stdlib_test[Thread::Mutex]'"
|
306
|
+
sh "ruby -c /tmp/Thread_Mutex_test.rb"
|
307
|
+
end
|
308
|
+
|
309
|
+
# Rake::Task[:release].enhance do
|
310
|
+
# Rake::Task[:"release:note"].invoke
|
311
|
+
# end
|
312
|
+
|
313
|
+
namespace :release do
|
314
|
+
desc "Explain the post-release steps automatically"
|
315
|
+
task :note do
|
316
|
+
version = Gem::Version.new(RBS::VERSION)
|
317
|
+
major, minor, patch, *_ = RBS::VERSION.split(".")
|
318
|
+
major = major.to_i
|
319
|
+
minor = minor.to_i
|
320
|
+
patch = patch.to_i
|
321
|
+
|
322
|
+
puts "🎉🎉🎉🎉 Congratulations for **#{version}** release! 🎉🎉🎉🎉"
|
323
|
+
puts
|
324
|
+
puts "There are a few things left to complete the release. 💪"
|
325
|
+
puts
|
326
|
+
|
327
|
+
if patch == 0 || version.prerelease?
|
328
|
+
puts "* [ ] Update release note: https://github.com/ruby/rbs/wiki/Release-Note-#{major}.#{minor}"
|
329
|
+
end
|
330
|
+
|
331
|
+
if patch == 0 && !version.prerelease?
|
332
|
+
puts "* [ ] Delete `RBS XYZ is the latest version of...` from release note: https://github.com/ruby/rbs/wiki/Release-Note-#{major}.#{minor}"
|
333
|
+
end
|
334
|
+
|
335
|
+
puts "* [ ] Publish a release at GitHub"
|
336
|
+
puts "* [ ] Make some announcements on Twitter/Mustdon/Slack/???"
|
337
|
+
|
338
|
+
puts
|
339
|
+
puts
|
340
|
+
|
341
|
+
puts "✏️ Making a draft release on GitHub..."
|
342
|
+
|
343
|
+
content = File.read(File.join(__dir__, "CHANGELOG.md"))
|
344
|
+
changelog = content.scan(/^## \d.*?(?=^## \d)/m)[0]
|
345
|
+
changelog = changelog.sub(/^.*\n^.*\n/, "").rstrip
|
346
|
+
|
347
|
+
notes = <<NOTES
|
348
|
+
[Release note](https://github.com/ruby/rbs/wiki/Release-Note-#{major}.#{minor})
|
349
|
+
|
350
|
+
#{changelog}
|
351
|
+
NOTES
|
352
|
+
|
353
|
+
command = [
|
354
|
+
"gh",
|
355
|
+
"release",
|
356
|
+
"create",
|
357
|
+
"--draft",
|
358
|
+
"v#{RBS::VERSION}",
|
359
|
+
"--title=#{RBS::VERSION}",
|
360
|
+
"--notes=#{notes}"
|
361
|
+
]
|
362
|
+
|
363
|
+
if version.prerelease?
|
364
|
+
command << "--prerelease"
|
365
|
+
end
|
366
|
+
|
367
|
+
require "open3"
|
368
|
+
output, status = Open3.capture2(*command)
|
369
|
+
if status.success?
|
370
|
+
puts " >> Done! Open #{output.chomp} and publish the release!"
|
371
|
+
end
|
372
|
+
end
|
373
|
+
end
|
374
|
+
|
375
|
+
|
376
|
+
desc "Generate changelog template from GH pull requests"
|
377
|
+
task :changelog do
|
378
|
+
major, minor, patch, _pre = RBS::VERSION.split(".", 4)
|
379
|
+
major = major.to_i
|
380
|
+
minor = minor.to_i
|
381
|
+
patch = patch.to_i
|
382
|
+
|
383
|
+
if patch == 0
|
384
|
+
milestone = "RBS #{major}.#{minor}"
|
385
|
+
else
|
386
|
+
milestone = "RBS #{major}.#{minor}.x"
|
387
|
+
end
|
388
|
+
|
389
|
+
puts "🔍 Finding pull requests that is associated to milestone `#{milestone}`..."
|
390
|
+
|
391
|
+
command = [
|
392
|
+
"gh",
|
393
|
+
"pr",
|
394
|
+
"list",
|
395
|
+
"--limit=10000",
|
396
|
+
"--json",
|
397
|
+
"url,title,number",
|
398
|
+
"--search" ,
|
399
|
+
"milestone:\"#{milestone}\" is:merged sort:updated-desc -label:Released"
|
400
|
+
]
|
401
|
+
|
402
|
+
require "open3"
|
403
|
+
output, status = Open3.capture2(*command)
|
404
|
+
raise status.inspect unless status.success?
|
405
|
+
|
406
|
+
require "json"
|
407
|
+
json = JSON.parse(output, symbolize_names: true)
|
408
|
+
|
409
|
+
unless json.empty?
|
410
|
+
puts
|
411
|
+
json.each do |line|
|
412
|
+
puts "* #{line[:title]} ([##{line[:number]}](#{line[:url]}))"
|
413
|
+
end
|
414
|
+
else
|
415
|
+
puts " (🤑 There is no *unreleased* pull request associated to the milestone.)"
|
416
|
+
end
|
417
|
+
end
|