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/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/sigs.md
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
# Writing Signatures Guide
|
2
|
+
|
3
|
+
You can write the signature of your applications and libraries.
|
4
|
+
Signature of your Ruby program would help:
|
5
|
+
|
6
|
+
1. Understanding the code structure
|
7
|
+
2. Finding APIs
|
8
|
+
|
9
|
+
And if you ship your gem with signature, the gem users can type check their applications!
|
10
|
+
|
11
|
+
## Writing signatures
|
12
|
+
|
13
|
+
You first need to write your program's signature.
|
14
|
+
See [syntax guide](syntax.md).
|
15
|
+
|
16
|
+
## Testing signatures
|
17
|
+
|
18
|
+
When you finish writing signature, you may want to test the signature.
|
19
|
+
rbs provides a feature to test your signature.
|
20
|
+
|
21
|
+
```console
|
22
|
+
$ RBS_TEST_TARGET='Foo::*' bundle exec ruby -r rbs/test/setup test/foo_test.rb
|
23
|
+
```
|
24
|
+
|
25
|
+
The test installs instrumentations to spy the method calls and check if arguments/return values are correct with respect to the type of the method in signature.
|
26
|
+
If errors are reported by the test, you will fix the signature.
|
27
|
+
You will be sure that you ship a correct signature finally.
|
28
|
+
|
29
|
+
The instrumentations are implemented using `Module#prepend`.
|
30
|
+
It defines a module with same name of methods, which asserts the type of arguments/return values and calls `super`.
|
31
|
+
|
32
|
+
## Type errors
|
33
|
+
|
34
|
+
If the test detects type errors, it will print error messages.
|
35
|
+
|
36
|
+
### ArgumentTypeError, BlockArgumentTypeError
|
37
|
+
|
38
|
+
The message means there is an unexpected type of argument or block argument.
|
39
|
+
|
40
|
+
```
|
41
|
+
ERROR -- : [Kaigi::Speaker.new] ArgumentTypeError: expected `::String` (email) but given `:"matsumoto@soutaro.com"`
|
42
|
+
```
|
43
|
+
|
44
|
+
### ArgumentError, BlockArgumentError
|
45
|
+
|
46
|
+
The message means there is an unexpected argument or missing argument.
|
47
|
+
|
48
|
+
```
|
49
|
+
[Kaigi::Speaker.new] ArgumentError: expected method type (size: ::Symbol, email: ::String, name: ::String) -> ::Kaigi::Speaker
|
50
|
+
```
|
51
|
+
|
52
|
+
### ReturnTypeError, BlockReturnTypeError
|
53
|
+
|
54
|
+
The message means the return value from method or block is incorrect.
|
55
|
+
|
56
|
+
```
|
57
|
+
ERROR -- : [Kaigi::Conference#each_speaker] ReturnTypeError: expected `self` but returns `[#<Kaigi::Speaker:0x00007fb2b249e5a0 @name="Soutaro Matsumoto", @email=:"matsumoto@soutaro.com">]`
|
58
|
+
```
|
59
|
+
|
60
|
+
### UnexpectedBlockError, MissingBlockError
|
61
|
+
|
62
|
+
The errors are reported when required block is not given or unused block is given.
|
63
|
+
|
64
|
+
```
|
65
|
+
ERROR -- : [Kaigi::Conference#speakers] UnexpectedBlockError: unexpected block is given for `() -> ::Array[::Kaigi::Speaker]`
|
66
|
+
```
|
67
|
+
|
68
|
+
### UnresolvedOverloadingError
|
69
|
+
|
70
|
+
The error means there is a type error on overloaded methods.
|
71
|
+
The `rbs` test framework tries to the best error message for overloaded methods too, but it reports the `UnresolvedOverloadingError` when it fails.
|
72
|
+
|
73
|
+
### DuplicatedMethodDefinitionError
|
74
|
+
|
75
|
+
The error is reported when a method is defined multiple times, as RBS does not allow duplicate method definitions. When you need to overload a method, use the `...` syntax:
|
76
|
+
|
77
|
+
```rbs
|
78
|
+
# First definition
|
79
|
+
class C
|
80
|
+
def foo: () -> untyped
|
81
|
+
end
|
82
|
+
|
83
|
+
# Second definition, use `...` syntax to tell RBS that we're overloading the method
|
84
|
+
class C
|
85
|
+
def foo: () -> untyped
|
86
|
+
| ...
|
87
|
+
end
|
88
|
+
```
|
89
|
+
|
90
|
+
## Setting up the test
|
91
|
+
|
92
|
+
The design of the signature testing aims to be non-intrusive. The setup is done in two steps:
|
93
|
+
|
94
|
+
1. Loading the testing library
|
95
|
+
2. Setting up the test through environment variables
|
96
|
+
|
97
|
+
### Loading the library
|
98
|
+
|
99
|
+
You need to require `rbs/test/setup` for signature testing.
|
100
|
+
You can do it using `-r` option through command line argument or the `RUBYOPT` environment variable.
|
101
|
+
|
102
|
+
```console
|
103
|
+
$ ruby -r rbs/test/setup run_tests.rb
|
104
|
+
$ RUBYOPT='-rrbs/test/setup' rake test
|
105
|
+
```
|
106
|
+
|
107
|
+
When you are using Bundler, you may need to require `bundler/setup` explicitly.
|
108
|
+
|
109
|
+
```console
|
110
|
+
$ RUBYOPT='-rbundler/setup -rrbs/test/setup' bundle exec rake test
|
111
|
+
```
|
112
|
+
|
113
|
+
### Environment variables
|
114
|
+
|
115
|
+
You need to specify `RBS_TEST_TARGET` to run the test, and you can customize the test with the following environment variables.
|
116
|
+
|
117
|
+
- `RBS_TEST_SKIP` (optional)
|
118
|
+
- `RBS_TEST_OPT` (optional)
|
119
|
+
- `RBS_TEST_LOGLEVEL` (optional)
|
120
|
+
- `RBS_TEST_RAISE` (optional)
|
121
|
+
|
122
|
+
`RBS_TEST_TARGET` is to specify the classes you want to test. `RBS_TEST_TARGET` can contain comma-separated class name pattern, which is one of an exact class name or with wildcard `*`.
|
123
|
+
|
124
|
+
- `RBS_TEST_TARGET=Foo::Bar,Foo::Baz` comma separated exact class names
|
125
|
+
- `RBS_TEST_TARGET=Foo::*` using wildcard
|
126
|
+
|
127
|
+
`RBS_TEST_SKIP` is to skip some of the classes which matches with `RBS_TEST_TARGET`.
|
128
|
+
|
129
|
+
`RBS_TEST_OPT` is to pass the options for rbs handling.
|
130
|
+
You may need to specify `-r` or `-I` to load signatures.
|
131
|
+
The default is `-I sig`.
|
132
|
+
|
133
|
+
```shell
|
134
|
+
RBS_TEST_OPT='-r pathname -I sig'
|
135
|
+
```
|
136
|
+
|
137
|
+
Replacing `pathname` with the `stdlib` you want to include. For example, if you need to load `Set` and `BigDecimal` in `stdlib`, you would need to have `RBS_TEST_OPT='-r set -r bigdecimal -I sig'`
|
138
|
+
|
139
|
+
`RBS_TEST_LOGLEVEL` can be used to configure log level. Defaults to `info`.
|
140
|
+
|
141
|
+
`RBS_TEST_RAISE` may help to debug the type signatures.
|
142
|
+
If the environment variable is set, it raises an exception when a type error is detected.
|
143
|
+
You can see the backtrace how the type error is caused and debug your program or signature.
|
144
|
+
|
145
|
+
So, a typical command line to start the test would look like the following:
|
146
|
+
|
147
|
+
```console
|
148
|
+
$ RBS_TEST_LOGLEVEL=error \
|
149
|
+
RBS_TEST_TARGET='Kaigi::*' \
|
150
|
+
RBS_TEST_SKIP='Kaigi::MonkeyPatch' \
|
151
|
+
RBS_TEST_OPT='-rset -rpathname -Isig -Iprivate' \
|
152
|
+
RBS_TEST_RAISE=true \
|
153
|
+
RUBYOPT='-rbundler/setup -rrbs/test/setup' \
|
154
|
+
bundle exec rake test
|
155
|
+
```
|
156
|
+
|
157
|
+
## Testing tips
|
158
|
+
|
159
|
+
### Skipping a method
|
160
|
+
|
161
|
+
You can skip installing the instrumentation per-method basis using `rbs:test:skip` annotation.
|
162
|
+
|
163
|
+
```rbs
|
164
|
+
class String
|
165
|
+
%a{rbs:test:skip} def =~: (Regexp) -> Integer?
|
166
|
+
end
|
167
|
+
```
|
data/docs/stdlib.md
ADDED
@@ -0,0 +1,147 @@
|
|
1
|
+
# Testing Core API and Standard Library Types
|
2
|
+
|
3
|
+
This is a guide for testing core/stdlib types.
|
4
|
+
|
5
|
+
## Add Tests
|
6
|
+
|
7
|
+
We support writing tests for core/stdlib signatures.
|
8
|
+
|
9
|
+
### Writing tests
|
10
|
+
|
11
|
+
First, execute `generate:stdlib_test` rake task with a class name that you want to test.
|
12
|
+
|
13
|
+
```console
|
14
|
+
$ bundle exec rake 'generate:stdlib_test[String]'
|
15
|
+
Created: test/stdlib/String_test.rb
|
16
|
+
```
|
17
|
+
|
18
|
+
It generates `test/stdlib/[class_name]_test.rb`.
|
19
|
+
The test scripts would look like the following:
|
20
|
+
|
21
|
+
```rb
|
22
|
+
class StringSingletonTest < Test::Unit::TestCase
|
23
|
+
include TypeAssertions
|
24
|
+
|
25
|
+
testing "singleton(::String)"
|
26
|
+
|
27
|
+
def test_initialize
|
28
|
+
assert_send_type "() -> String",
|
29
|
+
String, :new
|
30
|
+
assert_send_type "(String) -> String",
|
31
|
+
String, :new, ""
|
32
|
+
assert_send_type "(String, encoding: Encoding) -> String",
|
33
|
+
String, :new, "", encoding: Encoding::ASCII_8BIT
|
34
|
+
assert_send_type "(String, encoding: Encoding, capacity: Integer) -> String",
|
35
|
+
String, :new, "", encoding: Encoding::ASCII_8BIT, capacity: 123
|
36
|
+
assert_send_type "(encoding: Encoding, capacity: Integer) -> String",
|
37
|
+
String, :new, encoding: Encoding::ASCII_8BIT, capacity: 123
|
38
|
+
assert_send_type "(ToStr) -> String",
|
39
|
+
String, :new, ToStr.new("")
|
40
|
+
assert_send_type "(encoding: ToStr) -> String",
|
41
|
+
String, :new, encoding: ToStr.new('Shift_JIS')
|
42
|
+
assert_send_type "(capacity: ToInt) -> String",
|
43
|
+
String, :new, capacity: ToInt.new(123)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class StringTest < Test::Unit::TestCase
|
48
|
+
include TypeAssertions
|
49
|
+
|
50
|
+
testing "::String"
|
51
|
+
|
52
|
+
def test_gsub
|
53
|
+
assert_send_type "(Regexp, String) -> String",
|
54
|
+
"string", :gsub, /./, ""
|
55
|
+
assert_send_type "(String, String) -> String",
|
56
|
+
"string", :gsub, "a", "b"
|
57
|
+
assert_send_type "(Regexp) { (String) -> String } -> String",
|
58
|
+
"string", :gsub, /./ do |x| "" end
|
59
|
+
assert_send_type "(Regexp) { (String) -> ToS } -> String",
|
60
|
+
"string", :gsub, /./ do |x| ToS.new("") end
|
61
|
+
assert_send_type "(Regexp, Hash[String, String]) -> String",
|
62
|
+
"string", :gsub, /./, {"foo" => "bar"}
|
63
|
+
assert_send_type "(Regexp) -> Enumerator[String, self]",
|
64
|
+
"string", :gsub, /./
|
65
|
+
assert_send_type "(String) -> Enumerator[String, self]",
|
66
|
+
"string", :gsub, ""
|
67
|
+
assert_send_type "(ToStr, ToStr) -> String",
|
68
|
+
"string", :gsub, ToStr.new("a"), ToStr.new("b")
|
69
|
+
end
|
70
|
+
end
|
71
|
+
```
|
72
|
+
|
73
|
+
You need include `TypeAssertions` which provide useful methods for you.
|
74
|
+
`testing` method call tells which class is the subject of the class.
|
75
|
+
You may need `library` call to test a library if the type definition is provided as a library (under `stdlib` dir).
|
76
|
+
|
77
|
+
Note that the instrumentation is based on refinements and you need to write all method calls in the unit class definitions.
|
78
|
+
If the execution of the program escape from the class definition, the instrumentation is disabled and no check will be done.
|
79
|
+
|
80
|
+
#### 📣 Method type assertions
|
81
|
+
|
82
|
+
`assert_send_type` method call asserts to be valid types and confirms to be able to execute without exceptions.
|
83
|
+
And you write the sample programs which calls all of the patterns of overloads.
|
84
|
+
|
85
|
+
We recommend write method types as _simple_ as possible inside the assertion.
|
86
|
+
It's not very easy to define _simple_, but we try to explain it with a few examples.
|
87
|
+
|
88
|
+
* Instead of `(String | Integer) -> Symbol?`, use `(String) -> Symbol` or `(Integer) -> nil`, because we know the exact argument type we are passing in the test
|
89
|
+
* Instead of `self`, `instance`, or `class`, use concrete types like `String`, `singleton(IO)`, because we know the exact type of the receiver
|
90
|
+
* Sometimes, you need union types if the method is nondeterministic -- `() -> (Integer | String)` for `[1, ""].sample` (But you can rewrite the test code as `[1].sample` instead)
|
91
|
+
* Sometimes, you need union types for heterogeneous collections -- `() { (Integer | String) -> String } -> Array[String | Integer]` for `[1, "2"].each {|i| i.to_s }` (But you can rewrite the test code as `[1, 2].each {|i| i.to_s }`)
|
92
|
+
* Using `void` is allowed if the RBS definition is `void`
|
93
|
+
|
94
|
+
Generally _simple_ means:
|
95
|
+
|
96
|
+
* The type doesn't contain `self`, `instance`, `class`, `top`, `bot`, and `untyped`
|
97
|
+
* The type doesn't contain unions and optionals
|
98
|
+
|
99
|
+
Use them if you cannot write the test without them.
|
100
|
+
|
101
|
+
One clear exception to using _simple_ types is when you use `with_int` or family helpers, that yield values with each case of the given union:
|
102
|
+
|
103
|
+
```ruby
|
104
|
+
def test_something
|
105
|
+
with_int(3) do |int|
|
106
|
+
# Yields twice with `Integer` and `ToInt`
|
107
|
+
assert_send_type(
|
108
|
+
"(int) -> Integer",
|
109
|
+
some, :test, int
|
110
|
+
)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
```
|
114
|
+
|
115
|
+
It's clear having type aliases makes sense.
|
116
|
+
|
117
|
+
#### 📣 Constant type assertions
|
118
|
+
|
119
|
+
We also have `assert_const_type` method, to test the type of constant is correct with respect to RBS type definition.
|
120
|
+
|
121
|
+
```ruby
|
122
|
+
class FloatConstantTest < Test::Unit::TestCase
|
123
|
+
include TypeAssertions
|
124
|
+
|
125
|
+
def test_infinity
|
126
|
+
assert_const_type "Float", "Float::INFINITY"
|
127
|
+
end
|
128
|
+
end
|
129
|
+
```
|
130
|
+
|
131
|
+
It confirms:
|
132
|
+
|
133
|
+
1. The type of constant `Float::INFINITY` is `Float`
|
134
|
+
2. The type of constant `Float::INFINITY` is correct with respect to RBS definition
|
135
|
+
|
136
|
+
We don't have any strong recommendation about where the constants test should be written in.
|
137
|
+
The `FloatConstantTest` example defines a test case only for the constant tests.
|
138
|
+
You may write the tests inside `FloatInstanceTest` or `FloatSingletonTest`.
|
139
|
+
|
140
|
+
### Running tests
|
141
|
+
|
142
|
+
You can run the test with:
|
143
|
+
|
144
|
+
```console
|
145
|
+
$ bundle exec rake stdlib_test # Run all tests
|
146
|
+
$ bundle exec ruby test/stdlib/String_test.rb # Run specific tests
|
147
|
+
```
|