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,487 @@
|
|
1
|
+
# <!-- rdoc-file=ext/objspace/objspace.c -->
|
2
|
+
# The objspace library extends the ObjectSpace module and adds several methods
|
3
|
+
# to get internal statistic information about object/memory management.
|
4
|
+
#
|
5
|
+
# You need to `require 'objspace'` to use this extension module.
|
6
|
+
#
|
7
|
+
# Generally, you **SHOULD** **NOT** use this library if you do not know about
|
8
|
+
# the MRI implementation. Mainly, this library is for (memory) profiler
|
9
|
+
# developers and MRI developers who need to know about MRI memory usage.
|
10
|
+
#
|
11
|
+
%a{annotate:rdoc:source:from=ext/objspace}
|
12
|
+
module ObjectSpace
|
13
|
+
# <!--
|
14
|
+
# rdoc-file=ext/objspace/object_tracing.c
|
15
|
+
# - allocation_class_path(object) -> string
|
16
|
+
# -->
|
17
|
+
# Returns the class for the given `object`.
|
18
|
+
#
|
19
|
+
# class A
|
20
|
+
# def foo
|
21
|
+
# ObjectSpace::trace_object_allocations do
|
22
|
+
# obj = Object.new
|
23
|
+
# p "#{ObjectSpace::allocation_class_path(obj)}"
|
24
|
+
# end
|
25
|
+
# end
|
26
|
+
# end
|
27
|
+
#
|
28
|
+
# A.new.foo #=> "Class"
|
29
|
+
#
|
30
|
+
# See ::trace_object_allocations for more information and examples.
|
31
|
+
#
|
32
|
+
def self?.allocation_class_path: (untyped) -> String
|
33
|
+
|
34
|
+
# <!--
|
35
|
+
# rdoc-file=ext/objspace/object_tracing.c
|
36
|
+
# - allocation_generation(object) -> integer or nil
|
37
|
+
# -->
|
38
|
+
# Returns garbage collector generation for the given `object`.
|
39
|
+
#
|
40
|
+
# class B
|
41
|
+
# include ObjectSpace
|
42
|
+
#
|
43
|
+
# def foo
|
44
|
+
# trace_object_allocations do
|
45
|
+
# obj = Object.new
|
46
|
+
# p "Generation is #{allocation_generation(obj)}"
|
47
|
+
# end
|
48
|
+
# end
|
49
|
+
# end
|
50
|
+
#
|
51
|
+
# B.new.foo #=> "Generation is 3"
|
52
|
+
#
|
53
|
+
# See ::trace_object_allocations for more information and examples.
|
54
|
+
#
|
55
|
+
def self?.allocation_generation: (untyped) -> (Integer | nil)
|
56
|
+
|
57
|
+
# <!--
|
58
|
+
# rdoc-file=ext/objspace/object_tracing.c
|
59
|
+
# - allocation_method_id(object) -> string
|
60
|
+
# -->
|
61
|
+
# Returns the method identifier for the given `object`.
|
62
|
+
#
|
63
|
+
# class A
|
64
|
+
# include ObjectSpace
|
65
|
+
#
|
66
|
+
# def foo
|
67
|
+
# trace_object_allocations do
|
68
|
+
# obj = Object.new
|
69
|
+
# p "#{allocation_class_path(obj)}##{allocation_method_id(obj)}"
|
70
|
+
# end
|
71
|
+
# end
|
72
|
+
# end
|
73
|
+
#
|
74
|
+
# A.new.foo #=> "Class#new"
|
75
|
+
#
|
76
|
+
# See ::trace_object_allocations for more information and examples.
|
77
|
+
#
|
78
|
+
def self?.allocation_method_id: (untyped) -> Symbol
|
79
|
+
|
80
|
+
# <!--
|
81
|
+
# rdoc-file=ext/objspace/object_tracing.c
|
82
|
+
# - allocation_sourcefile(object) -> string
|
83
|
+
# -->
|
84
|
+
# Returns the source file origin from the given `object`.
|
85
|
+
#
|
86
|
+
# See ::trace_object_allocations for more information and examples.
|
87
|
+
#
|
88
|
+
def self?.allocation_sourcefile: (untyped) -> String
|
89
|
+
|
90
|
+
# <!--
|
91
|
+
# rdoc-file=ext/objspace/object_tracing.c
|
92
|
+
# - allocation_sourceline(object) -> integer
|
93
|
+
# -->
|
94
|
+
# Returns the original line from source for from the given `object`.
|
95
|
+
#
|
96
|
+
# See ::trace_object_allocations for more information and examples.
|
97
|
+
#
|
98
|
+
def self?.allocation_sourceline: (untyped) -> Integer
|
99
|
+
|
100
|
+
# <!--
|
101
|
+
# rdoc-file=ext/objspace/objspace.c
|
102
|
+
# - ObjectSpace.count_imemo_objects([result_hash]) -> hash
|
103
|
+
# -->
|
104
|
+
# Counts objects for each `T_IMEMO` type.
|
105
|
+
#
|
106
|
+
# This method is only for MRI developers interested in performance and memory
|
107
|
+
# usage of Ruby programs.
|
108
|
+
#
|
109
|
+
# It returns a hash as:
|
110
|
+
#
|
111
|
+
# {:imemo_ifunc=>8,
|
112
|
+
# :imemo_svar=>7,
|
113
|
+
# :imemo_cref=>509,
|
114
|
+
# :imemo_memo=>1,
|
115
|
+
# :imemo_throw_data=>1}
|
116
|
+
#
|
117
|
+
# If the optional argument, result_hash, is given, it is overwritten and
|
118
|
+
# returned. This is intended to avoid probe effect.
|
119
|
+
#
|
120
|
+
# The contents of the returned hash is implementation specific and may change in
|
121
|
+
# the future.
|
122
|
+
#
|
123
|
+
# In this version, keys are symbol objects.
|
124
|
+
#
|
125
|
+
# This method is only expected to work with C Ruby.
|
126
|
+
#
|
127
|
+
def self?.count_imemo_objects: (?Hash[Symbol, Integer] result_hash) -> Hash[Symbol, Integer]
|
128
|
+
|
129
|
+
# <!--
|
130
|
+
# rdoc-file=ext/objspace/objspace.c
|
131
|
+
# - ObjectSpace.count_nodes([result_hash]) -> hash
|
132
|
+
# -->
|
133
|
+
# Counts nodes for each node type.
|
134
|
+
#
|
135
|
+
# This method is only for MRI developers interested in performance and memory
|
136
|
+
# usage of Ruby programs.
|
137
|
+
#
|
138
|
+
# It returns a hash as:
|
139
|
+
#
|
140
|
+
# {:NODE_METHOD=>2027, :NODE_FBODY=>1927, :NODE_CFUNC=>1798, ...}
|
141
|
+
#
|
142
|
+
# If the optional argument, result_hash, is given, it is overwritten and
|
143
|
+
# returned. This is intended to avoid probe effect.
|
144
|
+
#
|
145
|
+
# Note: The contents of the returned hash is implementation defined. It may be
|
146
|
+
# changed in future.
|
147
|
+
#
|
148
|
+
# This method is only expected to work with C Ruby.
|
149
|
+
#
|
150
|
+
def self?.count_nodes: (?Hash[Symbol, Integer] result_hash) -> Hash[Symbol, Integer]
|
151
|
+
|
152
|
+
# <!--
|
153
|
+
# rdoc-file=ext/objspace/objspace.c
|
154
|
+
# - ObjectSpace.count_objects_size([result_hash]) -> hash
|
155
|
+
# -->
|
156
|
+
# Counts objects size (in bytes) for each type.
|
157
|
+
#
|
158
|
+
# Note that this information is incomplete. You need to deal with this
|
159
|
+
# information as only a **HINT**. Especially, total size of T_DATA may be
|
160
|
+
# wrong.
|
161
|
+
#
|
162
|
+
# It returns a hash as:
|
163
|
+
# {:TOTAL=>1461154, :T_CLASS=>158280, :T_MODULE=>20672, :T_STRING=>527249, ...}
|
164
|
+
#
|
165
|
+
# If the optional argument, result_hash, is given, it is overwritten and
|
166
|
+
# returned. This is intended to avoid probe effect.
|
167
|
+
#
|
168
|
+
# The contents of the returned hash is implementation defined. It may be changed
|
169
|
+
# in future.
|
170
|
+
#
|
171
|
+
# This method is only expected to work with C Ruby.
|
172
|
+
#
|
173
|
+
def self?.count_objects_size: (?Hash[Symbol, Integer] result_hash) -> Hash[Symbol, Integer]
|
174
|
+
|
175
|
+
# <!--
|
176
|
+
# rdoc-file=ext/objspace/objspace.c
|
177
|
+
# - ObjectSpace.count_symbols([result_hash]) -> hash
|
178
|
+
# -->
|
179
|
+
# Counts symbols for each Symbol type.
|
180
|
+
#
|
181
|
+
# This method is only for MRI developers interested in performance and memory
|
182
|
+
# usage of Ruby programs.
|
183
|
+
#
|
184
|
+
# If the optional argument, result_hash, is given, it is overwritten and
|
185
|
+
# returned. This is intended to avoid probe effect.
|
186
|
+
#
|
187
|
+
# Note: The contents of the returned hash is implementation defined. It may be
|
188
|
+
# changed in future.
|
189
|
+
#
|
190
|
+
# This method is only expected to work with C Ruby.
|
191
|
+
#
|
192
|
+
# On this version of MRI, they have 3 types of Symbols (and 1 total counts).
|
193
|
+
#
|
194
|
+
# * mortal_dynamic_symbol: GC target symbols (collected by GC)
|
195
|
+
# * immortal_dynamic_symbol: Immortal symbols promoted from dynamic symbols (do not collected by GC)
|
196
|
+
# * immortal_static_symbol: Immortal symbols (do not collected by GC)
|
197
|
+
# * immortal_symbol: total immortal symbols (immortal_dynamic_symbol+immortal_static_symbol)
|
198
|
+
#
|
199
|
+
def self?.count_symbols: (?Hash[Symbol, Integer] result_hash) -> Hash[Symbol, Integer]
|
200
|
+
|
201
|
+
# <!--
|
202
|
+
# rdoc-file=ext/objspace/objspace.c
|
203
|
+
# - ObjectSpace.count_tdata_objects([result_hash]) -> hash
|
204
|
+
# -->
|
205
|
+
# Counts objects for each `T_DATA` type.
|
206
|
+
#
|
207
|
+
# This method is only for MRI developers interested in performance and memory
|
208
|
+
# usage of Ruby programs.
|
209
|
+
#
|
210
|
+
# It returns a hash as:
|
211
|
+
#
|
212
|
+
# {RubyVM::InstructionSequence=>504, :parser=>5, :barrier=>6,
|
213
|
+
# :mutex=>6, Proc=>60, RubyVM::Env=>57, Mutex=>1, Encoding=>99,
|
214
|
+
# ThreadGroup=>1, Binding=>1, Thread=>1, RubyVM=>1, :iseq=>1,
|
215
|
+
# Random=>1, ARGF.class=>1, Data=>1, :autoload=>3, Time=>2}
|
216
|
+
# # T_DATA objects existing at startup on r32276.
|
217
|
+
#
|
218
|
+
# If the optional argument, result_hash, is given, it is overwritten and
|
219
|
+
# returned. This is intended to avoid probe effect.
|
220
|
+
#
|
221
|
+
# The contents of the returned hash is implementation specific and may change in
|
222
|
+
# the future.
|
223
|
+
#
|
224
|
+
# In this version, keys are Class object or Symbol object.
|
225
|
+
#
|
226
|
+
# If object is kind of normal (accessible) object, the key is Class object. If
|
227
|
+
# object is not a kind of normal (internal) object, the key is symbol name,
|
228
|
+
# registered by rb_data_type_struct.
|
229
|
+
#
|
230
|
+
# This method is only expected to work with C Ruby.
|
231
|
+
#
|
232
|
+
def self?.count_tdata_objects: (?Hash[untyped, Integer] result_hash) -> Hash[untyped, Integer]
|
233
|
+
|
234
|
+
# <!--
|
235
|
+
# rdoc-file=ext/objspace/lib/objspace.rb
|
236
|
+
# - dump(obj, output: :string)
|
237
|
+
# -->
|
238
|
+
# Dump the contents of a ruby object as JSON.
|
239
|
+
#
|
240
|
+
# *output* can be one of: `:stdout`, `:file`, `:string`, or IO object.
|
241
|
+
#
|
242
|
+
# * `:file` means dumping to a tempfile and returning corresponding File
|
243
|
+
# object;
|
244
|
+
# * `:stdout` means printing the dump and returning `nil`;
|
245
|
+
# * `:string` means returning a string with the dump;
|
246
|
+
# * if an instance of IO object is provided, the output goes there, and the
|
247
|
+
# object is returned.
|
248
|
+
#
|
249
|
+
# This method is only expected to work with C Ruby. This is an experimental
|
250
|
+
# method and is subject to change. In particular, the function signature and
|
251
|
+
# output format are not guaranteed to be compatible in future versions of ruby.
|
252
|
+
#
|
253
|
+
def self?.dump: (untyped obj, ?output: Symbol) -> (String | File | nil)
|
254
|
+
|
255
|
+
# <!--
|
256
|
+
# rdoc-file=ext/objspace/lib/objspace.rb
|
257
|
+
# - dump_all(output: :file, full: false, since: nil, shapes: true)
|
258
|
+
# -->
|
259
|
+
# Dump the contents of the ruby heap as JSON.
|
260
|
+
#
|
261
|
+
# *output* argument is the same as for #dump.
|
262
|
+
#
|
263
|
+
# *full* must be a boolean. If true, all heap slots are dumped including the
|
264
|
+
# empty ones (`T_NONE`).
|
265
|
+
#
|
266
|
+
# *since* must be a non-negative integer or `nil`.
|
267
|
+
#
|
268
|
+
# If *since* is a positive integer, only objects of that generation and newer
|
269
|
+
# generations are dumped. The current generation can be accessed using
|
270
|
+
# GC::count. Objects that were allocated without object allocation tracing
|
271
|
+
# enabled are ignored. See ::trace_object_allocations for more information and
|
272
|
+
# examples.
|
273
|
+
#
|
274
|
+
# If *since* is omitted or is `nil`, all objects are dumped.
|
275
|
+
#
|
276
|
+
# *shapes* must be a boolean or a non-negative integer.
|
277
|
+
#
|
278
|
+
# If *shapes* is a positive integer, only shapes newer than the provided shape
|
279
|
+
# id are dumped. The current shape_id can be accessed using
|
280
|
+
# `RubyVM.stat(:next_shape_id)`.
|
281
|
+
#
|
282
|
+
# If *shapes* is `false`, no shapes are dumped.
|
283
|
+
#
|
284
|
+
# To only dump objects allocated past a certain point you can combine *since*
|
285
|
+
# and *shapes*:
|
286
|
+
# ObjectSpace.trace_object_allocations
|
287
|
+
# GC.start
|
288
|
+
# gc_generation = GC.count
|
289
|
+
# shape_generation = RubyVM.stat(:next_shape_id)
|
290
|
+
# call_method_to_instrument
|
291
|
+
# ObjectSpace.dump_all(since: gc_generation, shapes: shape_generation)
|
292
|
+
#
|
293
|
+
# This method is only expected to work with C Ruby. This is an experimental
|
294
|
+
# method and is subject to change. In particular, the function signature and
|
295
|
+
# output format are not guaranteed to be compatible in future versions of ruby.
|
296
|
+
#
|
297
|
+
def self?.dump_all: (?since: Integer | nil, ?full: boolish, ?output: Symbol) -> (String | File | nil)
|
298
|
+
|
299
|
+
# <!--
|
300
|
+
# rdoc-file=ext/objspace/objspace.c
|
301
|
+
# - ObjectSpace.internal_class_of(obj) -> Class or Module
|
302
|
+
# -->
|
303
|
+
# MRI specific feature
|
304
|
+
# : Return internal class of obj.
|
305
|
+
#
|
306
|
+
# obj can be an instance of InternalObjectWrapper.
|
307
|
+
#
|
308
|
+
# Note that you should not use this method in your application.
|
309
|
+
#
|
310
|
+
def self?.internal_class_of: (untyped) -> Class
|
311
|
+
|
312
|
+
# <!--
|
313
|
+
# rdoc-file=ext/objspace/objspace.c
|
314
|
+
# - ObjectSpace.internal_super_of(cls) -> Class or Module
|
315
|
+
# -->
|
316
|
+
# MRI specific feature
|
317
|
+
# : Return internal super class of cls (Class or Module).
|
318
|
+
#
|
319
|
+
# obj can be an instance of InternalObjectWrapper.
|
320
|
+
#
|
321
|
+
# Note that you should not use this method in your application.
|
322
|
+
#
|
323
|
+
def self?.internal_super_of: (untyped) -> untyped
|
324
|
+
|
325
|
+
# <!--
|
326
|
+
# rdoc-file=ext/objspace/objspace.c
|
327
|
+
# - ObjectSpace.memsize_of(obj) -> Integer
|
328
|
+
# -->
|
329
|
+
# Return consuming memory size of obj in bytes.
|
330
|
+
#
|
331
|
+
# Note that the return size is incomplete. You need to deal with this
|
332
|
+
# information as only a **HINT**. Especially, the size of `T_DATA` may not be
|
333
|
+
# correct.
|
334
|
+
#
|
335
|
+
# This method is only expected to work with C Ruby.
|
336
|
+
#
|
337
|
+
# From Ruby 2.2, memsize_of(obj) returns a memory size includes sizeof(RVALUE).
|
338
|
+
#
|
339
|
+
def self?.memsize_of: (untyped) -> Integer
|
340
|
+
|
341
|
+
# <!--
|
342
|
+
# rdoc-file=ext/objspace/objspace.c
|
343
|
+
# - ObjectSpace.memsize_of_all([klass]) -> Integer
|
344
|
+
# -->
|
345
|
+
# Return consuming memory size of all living objects in bytes.
|
346
|
+
#
|
347
|
+
# If `klass` (should be Class object) is given, return the total memory size of
|
348
|
+
# instances of the given class.
|
349
|
+
#
|
350
|
+
# Note that the returned size is incomplete. You need to deal with this
|
351
|
+
# information as only a **HINT**. Especially, the size of `T_DATA` may not be
|
352
|
+
# correct.
|
353
|
+
#
|
354
|
+
# Note that this method does **NOT** return total malloc'ed memory size.
|
355
|
+
#
|
356
|
+
# This method can be defined by the following Ruby code:
|
357
|
+
#
|
358
|
+
# def memsize_of_all klass = false
|
359
|
+
# total = 0
|
360
|
+
# ObjectSpace.each_object{|e|
|
361
|
+
# total += ObjectSpace.memsize_of(e) if klass == false || e.kind_of?(klass)
|
362
|
+
# }
|
363
|
+
# total
|
364
|
+
# end
|
365
|
+
#
|
366
|
+
# This method is only expected to work with C Ruby.
|
367
|
+
#
|
368
|
+
def self?.memsize_of_all: (?Class) -> Integer
|
369
|
+
|
370
|
+
# <!--
|
371
|
+
# rdoc-file=ext/objspace/objspace.c
|
372
|
+
# - ObjectSpace.reachable_objects_from(obj) -> array or nil
|
373
|
+
# -->
|
374
|
+
# MRI specific feature
|
375
|
+
# : Return all reachable objects from `obj'.
|
376
|
+
#
|
377
|
+
#
|
378
|
+
# This method returns all reachable objects from `obj'.
|
379
|
+
#
|
380
|
+
# If `obj' has two or more references to the same object `x', then returned
|
381
|
+
# array only includes one `x' object.
|
382
|
+
#
|
383
|
+
# If `obj' is a non-markable (non-heap management) object such as true, false,
|
384
|
+
# nil, symbols and Fixnums (and Flonum) then it simply returns nil.
|
385
|
+
#
|
386
|
+
# If `obj' has references to an internal object, then it returns instances of
|
387
|
+
# ObjectSpace::InternalObjectWrapper class. This object contains a reference to
|
388
|
+
# an internal object and you can check the type of internal object with `type'
|
389
|
+
# method.
|
390
|
+
#
|
391
|
+
# If `obj' is instance of ObjectSpace::InternalObjectWrapper class, then this
|
392
|
+
# method returns all reachable object from an internal object, which is pointed
|
393
|
+
# by `obj'.
|
394
|
+
#
|
395
|
+
# With this method, you can find memory leaks.
|
396
|
+
#
|
397
|
+
# This method is only expected to work with C Ruby.
|
398
|
+
#
|
399
|
+
# Example:
|
400
|
+
# ObjectSpace.reachable_objects_from(['a', 'b', 'c'])
|
401
|
+
# #=> [Array, 'a', 'b', 'c']
|
402
|
+
#
|
403
|
+
# ObjectSpace.reachable_objects_from(['a', 'a', 'a'])
|
404
|
+
# #=> [Array, 'a', 'a', 'a'] # all 'a' strings have different object id
|
405
|
+
#
|
406
|
+
# ObjectSpace.reachable_objects_from([v = 'a', v, v])
|
407
|
+
# #=> [Array, 'a']
|
408
|
+
#
|
409
|
+
# ObjectSpace.reachable_objects_from(1)
|
410
|
+
# #=> nil # 1 is not markable (heap managed) object
|
411
|
+
#
|
412
|
+
def self?.reachable_objects_from: (untyped) -> ([ untyped ] | nil)
|
413
|
+
|
414
|
+
# <!--
|
415
|
+
# rdoc-file=ext/objspace/objspace.c
|
416
|
+
# - ObjectSpace.reachable_objects_from_root -> hash
|
417
|
+
# -->
|
418
|
+
# MRI specific feature
|
419
|
+
# : Return all reachable objects from root.
|
420
|
+
#
|
421
|
+
def self?.reachable_objects_from_root: () -> Hash[String, untyped]
|
422
|
+
|
423
|
+
# <!--
|
424
|
+
# rdoc-file=ext/objspace/object_tracing.c
|
425
|
+
# - trace_object_allocations { block }
|
426
|
+
# -->
|
427
|
+
# Starts tracing object allocations from the ObjectSpace extension module.
|
428
|
+
#
|
429
|
+
# For example:
|
430
|
+
#
|
431
|
+
# require 'objspace'
|
432
|
+
#
|
433
|
+
# class C
|
434
|
+
# include ObjectSpace
|
435
|
+
#
|
436
|
+
# def foo
|
437
|
+
# trace_object_allocations do
|
438
|
+
# obj = Object.new
|
439
|
+
# p "#{allocation_sourcefile(obj)}:#{allocation_sourceline(obj)}"
|
440
|
+
# end
|
441
|
+
# end
|
442
|
+
# end
|
443
|
+
#
|
444
|
+
# C.new.foo #=> "objtrace.rb:8"
|
445
|
+
#
|
446
|
+
# This example has included the ObjectSpace module to make it easier to read,
|
447
|
+
# but you can also use the ::trace_object_allocations notation (recommended).
|
448
|
+
#
|
449
|
+
# Note that this feature introduces a huge performance decrease and huge memory
|
450
|
+
# consumption.
|
451
|
+
#
|
452
|
+
def self.trace_object_allocations: () { (untyped) -> untyped } -> untyped
|
453
|
+
|
454
|
+
# <!--
|
455
|
+
# rdoc-file=ext/objspace/object_tracing.c
|
456
|
+
# - trace_object_allocations_clear
|
457
|
+
# -->
|
458
|
+
# Clear recorded tracing information.
|
459
|
+
#
|
460
|
+
def self?.trace_object_allocations_clear: () -> void
|
461
|
+
|
462
|
+
# <!--
|
463
|
+
# rdoc-file=ext/objspace/object_tracing.c
|
464
|
+
# - trace_object_allocations_debug_start()
|
465
|
+
# -->
|
466
|
+
#
|
467
|
+
def self?.trace_object_allocations_debug_start: () -> void
|
468
|
+
|
469
|
+
# <!--
|
470
|
+
# rdoc-file=ext/objspace/object_tracing.c
|
471
|
+
# - trace_object_allocations_start
|
472
|
+
# -->
|
473
|
+
# Starts tracing object allocations.
|
474
|
+
#
|
475
|
+
def self?.trace_object_allocations_start: () -> void
|
476
|
+
|
477
|
+
# <!--
|
478
|
+
# rdoc-file=ext/objspace/object_tracing.c
|
479
|
+
# - trace_object_allocations_stop
|
480
|
+
# -->
|
481
|
+
# Stop tracing object allocations.
|
482
|
+
#
|
483
|
+
# Note that if ::trace_object_allocations_start is called n-times, then tracing
|
484
|
+
# will stop after calling ::trace_object_allocations_stop n-times.
|
485
|
+
#
|
486
|
+
def self?.trace_object_allocations_stop: () -> void
|
487
|
+
end
|
@@ -0,0 +1,217 @@
|
|
1
|
+
# <!-- rdoc-file=lib/observer.rb -->
|
2
|
+
# The Observer pattern (also known as publish/subscribe) provides a simple
|
3
|
+
# mechanism for one object to inform a set of interested third-party objects
|
4
|
+
# when its state changes.
|
5
|
+
#
|
6
|
+
# ## Mechanism
|
7
|
+
#
|
8
|
+
# The notifying class mixes in the `Observable` module, which provides the
|
9
|
+
# methods for managing the associated observer objects.
|
10
|
+
#
|
11
|
+
# The observable object must:
|
12
|
+
# * assert that it has `#changed`
|
13
|
+
# * call `#notify_observers`
|
14
|
+
#
|
15
|
+
# An observer subscribes to updates using Observable#add_observer, which also
|
16
|
+
# specifies the method called via #notify_observers. The default method for
|
17
|
+
# #notify_observers is #update.
|
18
|
+
#
|
19
|
+
# ### Example
|
20
|
+
#
|
21
|
+
# The following example demonstrates this nicely. A `Ticker`, when run,
|
22
|
+
# continually receives the stock `Price` for its `@symbol`. A `Warner` is a
|
23
|
+
# general observer of the price, and two warners are demonstrated, a `WarnLow`
|
24
|
+
# and a `WarnHigh`, which print a warning if the price is below or above their
|
25
|
+
# set limits, respectively.
|
26
|
+
#
|
27
|
+
# The `update` callback allows the warners to run without being explicitly
|
28
|
+
# called. The system is set up with the `Ticker` and several observers, and the
|
29
|
+
# observers do their duty without the top-level code having to interfere.
|
30
|
+
#
|
31
|
+
# Note that the contract between publisher and subscriber (observable and
|
32
|
+
# observer) is not declared or enforced. The `Ticker` publishes a time and a
|
33
|
+
# price, and the warners receive that. But if you don't ensure that your
|
34
|
+
# contracts are correct, nothing else can warn you.
|
35
|
+
#
|
36
|
+
# require "observer"
|
37
|
+
#
|
38
|
+
# class Ticker ### Periodically fetch a stock price.
|
39
|
+
# include Observable
|
40
|
+
#
|
41
|
+
# def initialize(symbol)
|
42
|
+
# @symbol = symbol
|
43
|
+
# end
|
44
|
+
#
|
45
|
+
# def run
|
46
|
+
# last_price = nil
|
47
|
+
# loop do
|
48
|
+
# price = Price.fetch(@symbol)
|
49
|
+
# print "Current price: #{price}\n"
|
50
|
+
# if price != last_price
|
51
|
+
# changed # notify observers
|
52
|
+
# last_price = price
|
53
|
+
# notify_observers(Time.now, price)
|
54
|
+
# end
|
55
|
+
# sleep 1
|
56
|
+
# end
|
57
|
+
# end
|
58
|
+
# end
|
59
|
+
#
|
60
|
+
# class Price ### A mock class to fetch a stock price (60 - 140).
|
61
|
+
# def self.fetch(symbol)
|
62
|
+
# 60 + rand(80)
|
63
|
+
# end
|
64
|
+
# end
|
65
|
+
#
|
66
|
+
# class Warner ### An abstract observer of Ticker objects.
|
67
|
+
# def initialize(ticker, limit)
|
68
|
+
# @limit = limit
|
69
|
+
# ticker.add_observer(self)
|
70
|
+
# end
|
71
|
+
# end
|
72
|
+
#
|
73
|
+
# class WarnLow < Warner
|
74
|
+
# def update(time, price) # callback for observer
|
75
|
+
# if price < @limit
|
76
|
+
# print "--- #{time.to_s}: Price below #@limit: #{price}\n"
|
77
|
+
# end
|
78
|
+
# end
|
79
|
+
# end
|
80
|
+
#
|
81
|
+
# class WarnHigh < Warner
|
82
|
+
# def update(time, price) # callback for observer
|
83
|
+
# if price > @limit
|
84
|
+
# print "+++ #{time.to_s}: Price above #@limit: #{price}\n"
|
85
|
+
# end
|
86
|
+
# end
|
87
|
+
# end
|
88
|
+
#
|
89
|
+
# ticker = Ticker.new("MSFT")
|
90
|
+
# WarnLow.new(ticker, 80)
|
91
|
+
# WarnHigh.new(ticker, 120)
|
92
|
+
# ticker.run
|
93
|
+
#
|
94
|
+
# Produces:
|
95
|
+
#
|
96
|
+
# Current price: 83
|
97
|
+
# Current price: 75
|
98
|
+
# --- Sun Jun 09 00:10:25 CDT 2002: Price below 80: 75
|
99
|
+
# Current price: 90
|
100
|
+
# Current price: 134
|
101
|
+
# +++ Sun Jun 09 00:10:25 CDT 2002: Price above 120: 134
|
102
|
+
# Current price: 134
|
103
|
+
# Current price: 112
|
104
|
+
# Current price: 79
|
105
|
+
# --- Sun Jun 09 00:10:25 CDT 2002: Price below 80: 79
|
106
|
+
#
|
107
|
+
# ### Usage with procs
|
108
|
+
#
|
109
|
+
# The `#notify_observers` method can also be used with +proc+s by using the
|
110
|
+
# `:call` as `func` parameter.
|
111
|
+
#
|
112
|
+
# The following example illustrates the use of a lambda:
|
113
|
+
#
|
114
|
+
# require 'observer'
|
115
|
+
#
|
116
|
+
# class Ticker
|
117
|
+
# include Observable
|
118
|
+
#
|
119
|
+
# def run
|
120
|
+
# # logic to retrieve the price (here 77.0)
|
121
|
+
# changed
|
122
|
+
# notify_observers(77.0)
|
123
|
+
# end
|
124
|
+
# end
|
125
|
+
#
|
126
|
+
# ticker = Ticker.new
|
127
|
+
# warner = ->(price) { puts "New price received: #{price}" }
|
128
|
+
# ticker.add_observer(warner, :call)
|
129
|
+
# ticker.run
|
130
|
+
#
|
131
|
+
module Observable
|
132
|
+
# <!--
|
133
|
+
# rdoc-file=lib/observer.rb
|
134
|
+
# - add_observer(observer, func=:update)
|
135
|
+
# -->
|
136
|
+
# Add `observer` as an observer on this object. So that it will receive
|
137
|
+
# notifications.
|
138
|
+
#
|
139
|
+
# `observer`
|
140
|
+
# : the object that will be notified of changes.
|
141
|
+
#
|
142
|
+
# `func`
|
143
|
+
# : Symbol naming the method that will be called when this Observable has
|
144
|
+
# changes.
|
145
|
+
#
|
146
|
+
# This method must return true for `observer.respond_to?` and will receive
|
147
|
+
# `*arg` when #notify_observers is called, where `*arg` is the value passed
|
148
|
+
# to #notify_observers by this Observable
|
149
|
+
#
|
150
|
+
def add_observer: (untyped observer, ?Symbol func) -> void
|
151
|
+
|
152
|
+
# <!--
|
153
|
+
# rdoc-file=lib/observer.rb
|
154
|
+
# - changed(state=true)
|
155
|
+
# -->
|
156
|
+
# Set the changed state of this object. Notifications will be sent only if the
|
157
|
+
# changed `state` is `true`.
|
158
|
+
#
|
159
|
+
# `state`
|
160
|
+
# : Boolean indicating the changed state of this Observable.
|
161
|
+
#
|
162
|
+
def changed: (?bool state) -> void
|
163
|
+
|
164
|
+
# <!--
|
165
|
+
# rdoc-file=lib/observer.rb
|
166
|
+
# - changed?()
|
167
|
+
# -->
|
168
|
+
# Returns true if this object's state has been changed since the last
|
169
|
+
# #notify_observers call.
|
170
|
+
#
|
171
|
+
def changed?: () -> bool
|
172
|
+
|
173
|
+
# <!--
|
174
|
+
# rdoc-file=lib/observer.rb
|
175
|
+
# - count_observers()
|
176
|
+
# -->
|
177
|
+
# Return the number of observers associated with this object.
|
178
|
+
#
|
179
|
+
def count_observers: () -> Integer
|
180
|
+
|
181
|
+
# <!--
|
182
|
+
# rdoc-file=lib/observer.rb
|
183
|
+
# - delete_observer(observer)
|
184
|
+
# -->
|
185
|
+
# Remove `observer` as an observer on this object so that it will no longer
|
186
|
+
# receive notifications.
|
187
|
+
#
|
188
|
+
# `observer`
|
189
|
+
# : An observer of this Observable
|
190
|
+
#
|
191
|
+
def delete_observer: (untyped observer) -> void
|
192
|
+
|
193
|
+
# <!--
|
194
|
+
# rdoc-file=lib/observer.rb
|
195
|
+
# - delete_observers()
|
196
|
+
# -->
|
197
|
+
# Remove all observers associated with this object.
|
198
|
+
#
|
199
|
+
def delete_observers: () -> void
|
200
|
+
|
201
|
+
# <!--
|
202
|
+
# rdoc-file=lib/observer.rb
|
203
|
+
# - notify_observers(*arg)
|
204
|
+
# -->
|
205
|
+
# Notify observers of a change in state **if** this object's changed state is
|
206
|
+
# `true`.
|
207
|
+
#
|
208
|
+
# This will invoke the method named in #add_observer, passing `*arg`. The
|
209
|
+
# changed state is then set to `false`.
|
210
|
+
#
|
211
|
+
# `*arg`
|
212
|
+
# : Any arguments to pass to the observers.
|
213
|
+
#
|
214
|
+
def notify_observers: (*untyped arg) -> void
|
215
|
+
|
216
|
+
VERSION: String
|
217
|
+
end
|