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/core/enumerator.rbs
ADDED
@@ -0,0 +1,630 @@
|
|
1
|
+
# <!-- rdoc-file=enumerator.c -->
|
2
|
+
# A class which allows both internal and external iteration.
|
3
|
+
#
|
4
|
+
# An Enumerator can be created by the following methods.
|
5
|
+
# * Object#to_enum
|
6
|
+
# * Object#enum_for
|
7
|
+
# * Enumerator.new
|
8
|
+
#
|
9
|
+
# Most methods have two forms: a block form where the contents are evaluated for
|
10
|
+
# each item in the enumeration, and a non-block form which returns a new
|
11
|
+
# Enumerator wrapping the iteration.
|
12
|
+
#
|
13
|
+
# enumerator = %w(one two three).each
|
14
|
+
# puts enumerator.class # => Enumerator
|
15
|
+
#
|
16
|
+
# enumerator.each_with_object("foo") do |item, obj|
|
17
|
+
# puts "#{obj}: #{item}"
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# # foo: one
|
21
|
+
# # foo: two
|
22
|
+
# # foo: three
|
23
|
+
#
|
24
|
+
# enum_with_obj = enumerator.each_with_object("foo")
|
25
|
+
# puts enum_with_obj.class # => Enumerator
|
26
|
+
#
|
27
|
+
# enum_with_obj.each do |item, obj|
|
28
|
+
# puts "#{obj}: #{item}"
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
# # foo: one
|
32
|
+
# # foo: two
|
33
|
+
# # foo: three
|
34
|
+
#
|
35
|
+
# This allows you to chain Enumerators together. For example, you can map a
|
36
|
+
# list's elements to strings containing the index and the element as a string
|
37
|
+
# via:
|
38
|
+
#
|
39
|
+
# puts %w[foo bar baz].map.with_index { |w, i| "#{i}:#{w}" }
|
40
|
+
# # => ["0:foo", "1:bar", "2:baz"]
|
41
|
+
#
|
42
|
+
# ## External Iteration
|
43
|
+
#
|
44
|
+
# An Enumerator can also be used as an external iterator. For example,
|
45
|
+
# Enumerator#next returns the next value of the iterator or raises StopIteration
|
46
|
+
# if the Enumerator is at the end.
|
47
|
+
#
|
48
|
+
# e = [1,2,3].each # returns an enumerator object.
|
49
|
+
# puts e.next # => 1
|
50
|
+
# puts e.next # => 2
|
51
|
+
# puts e.next # => 3
|
52
|
+
# puts e.next # raises StopIteration
|
53
|
+
#
|
54
|
+
# `next`, `next_values`, `peek`, and `peek_values` are the only methods which
|
55
|
+
# use external iteration (and Array#zip(Enumerable-not-Array) which uses `next`
|
56
|
+
# internally).
|
57
|
+
#
|
58
|
+
# These methods do not affect other internal enumeration methods, unless the
|
59
|
+
# underlying iteration method itself has side-effect, e.g. IO#each_line.
|
60
|
+
#
|
61
|
+
# FrozenError will be raised if these methods are called against a frozen
|
62
|
+
# enumerator. Since `rewind` and `feed` also change state for external
|
63
|
+
# iteration, these methods may raise FrozenError too.
|
64
|
+
#
|
65
|
+
# External iteration differs **significantly** from internal iteration due to
|
66
|
+
# using a Fiber:
|
67
|
+
# * The Fiber adds some overhead compared to internal enumeration.
|
68
|
+
# * The stacktrace will only include the stack from the Enumerator, not above.
|
69
|
+
# * Fiber-local variables are **not** inherited inside the Enumerator Fiber,
|
70
|
+
# which instead starts with no Fiber-local variables.
|
71
|
+
# * Fiber storage variables **are** inherited and are designed to handle
|
72
|
+
# Enumerator Fibers. Assigning to a Fiber storage variable only affects the
|
73
|
+
# current Fiber, so if you want to change state in the caller Fiber of the
|
74
|
+
# Enumerator Fiber, you need to use an extra indirection (e.g., use some
|
75
|
+
# object in the Fiber storage variable and mutate some ivar of it).
|
76
|
+
#
|
77
|
+
# Concretely:
|
78
|
+
#
|
79
|
+
# Thread.current[:fiber_local] = 1
|
80
|
+
# Fiber[:storage_var] = 1
|
81
|
+
# e = Enumerator.new do |y|
|
82
|
+
# p Thread.current[:fiber_local] # for external iteration: nil, for internal iteration: 1
|
83
|
+
# p Fiber[:storage_var] # => 1, inherited
|
84
|
+
# Fiber[:storage_var] += 1
|
85
|
+
# y << 42
|
86
|
+
# end
|
87
|
+
#
|
88
|
+
# p e.next # => 42
|
89
|
+
# p Fiber[:storage_var] # => 1 (it ran in a different Fiber)
|
90
|
+
#
|
91
|
+
# e.each { p _1 }
|
92
|
+
# p Fiber[:storage_var] # => 2 (it ran in the same Fiber/"stack" as the current Fiber)
|
93
|
+
#
|
94
|
+
# ## Convert External Iteration to Internal Iteration
|
95
|
+
#
|
96
|
+
# You can use an external iterator to implement an internal iterator as follows:
|
97
|
+
#
|
98
|
+
# def ext_each(e)
|
99
|
+
# while true
|
100
|
+
# begin
|
101
|
+
# vs = e.next_values
|
102
|
+
# rescue StopIteration
|
103
|
+
# return $!.result
|
104
|
+
# end
|
105
|
+
# y = yield(*vs)
|
106
|
+
# e.feed y
|
107
|
+
# end
|
108
|
+
# end
|
109
|
+
#
|
110
|
+
# o = Object.new
|
111
|
+
#
|
112
|
+
# def o.each
|
113
|
+
# puts yield
|
114
|
+
# puts yield(1)
|
115
|
+
# puts yield(1, 2)
|
116
|
+
# 3
|
117
|
+
# end
|
118
|
+
#
|
119
|
+
# # use o.each as an internal iterator directly.
|
120
|
+
# puts o.each {|*x| puts x; [:b, *x] }
|
121
|
+
# # => [], [:b], [1], [:b, 1], [1, 2], [:b, 1, 2], 3
|
122
|
+
#
|
123
|
+
# # convert o.each to an external iterator for
|
124
|
+
# # implementing an internal iterator.
|
125
|
+
# puts ext_each(o.to_enum) {|*x| puts x; [:b, *x] }
|
126
|
+
# # => [], [:b], [1], [:b, 1], [1, 2], [:b, 1, 2], 3
|
127
|
+
#
|
128
|
+
class Enumerator[unchecked out Elem, out Return = void] < Object
|
129
|
+
include Enumerable[Elem]
|
130
|
+
|
131
|
+
# A convenience interface for `each` with optional block
|
132
|
+
#
|
133
|
+
interface _Each[out E, out R]
|
134
|
+
def each: () { (E) -> void } -> R
|
135
|
+
| () -> Enumerator[E, R]
|
136
|
+
end
|
137
|
+
|
138
|
+
# <!--
|
139
|
+
# rdoc-file=enumerator.c
|
140
|
+
# - Enumerator.produce(initial = nil) { |prev| block } -> enumerator
|
141
|
+
# -->
|
142
|
+
# Creates an infinite enumerator from any block, just called over and over. The
|
143
|
+
# result of the previous iteration is passed to the next one. If `initial` is
|
144
|
+
# provided, it is passed to the first iteration, and becomes the first element
|
145
|
+
# of the enumerator; if it is not provided, the first iteration receives `nil`,
|
146
|
+
# and its result becomes the first element of the iterator.
|
147
|
+
#
|
148
|
+
# Raising StopIteration from the block stops an iteration.
|
149
|
+
#
|
150
|
+
# Enumerator.produce(1, &:succ) # => enumerator of 1, 2, 3, 4, ....
|
151
|
+
#
|
152
|
+
# Enumerator.produce { rand(10) } # => infinite random number sequence
|
153
|
+
#
|
154
|
+
# ancestors = Enumerator.produce(node) { |prev| node = prev.parent or raise StopIteration }
|
155
|
+
# enclosing_section = ancestors.find { |n| n.type == :section }
|
156
|
+
#
|
157
|
+
# Using ::produce together with Enumerable methods like Enumerable#detect,
|
158
|
+
# Enumerable#slice_after, Enumerable#take_while can provide Enumerator-based
|
159
|
+
# alternatives for `while` and `until` cycles:
|
160
|
+
#
|
161
|
+
# # Find next Tuesday
|
162
|
+
# require "date"
|
163
|
+
# Enumerator.produce(Date.today, &:succ).detect(&:tuesday?)
|
164
|
+
#
|
165
|
+
# # Simple lexer:
|
166
|
+
# require "strscan"
|
167
|
+
# scanner = StringScanner.new("7+38/6")
|
168
|
+
# PATTERN = %r{\d+|[-/+*]}
|
169
|
+
# Enumerator.produce { scanner.scan(PATTERN) }.slice_after { scanner.eos? }.first
|
170
|
+
# # => ["7", "+", "38", "/", "6"]
|
171
|
+
#
|
172
|
+
def self.produce: [T] () { (T? prev) -> T } -> Enumerator[T, bot]
|
173
|
+
| [T] (T initial) { (T prev) -> T } -> Enumerator[T, bot]
|
174
|
+
|
175
|
+
# <!--
|
176
|
+
# rdoc-file=enumerator.c
|
177
|
+
# - Enumerator.product(*enums) -> enumerator
|
178
|
+
# - Enumerator.product(*enums) { |elts| ... } -> enumerator
|
179
|
+
# -->
|
180
|
+
# Generates a new enumerator object that generates a Cartesian product of given
|
181
|
+
# enumerable objects. This is equivalent to Enumerator::Product.new.
|
182
|
+
#
|
183
|
+
# e = Enumerator.product(1..3, [4, 5])
|
184
|
+
# e.to_a #=> [[1, 4], [1, 5], [2, 4], [2, 5], [3, 4], [3, 5]]
|
185
|
+
# e.size #=> 6
|
186
|
+
#
|
187
|
+
# When a block is given, calls the block with each N-element array generated and
|
188
|
+
# returns `nil`.
|
189
|
+
#
|
190
|
+
def self.product: [Elem] (*_EachEntry[Elem]) -> Product[Elem]
|
191
|
+
|
192
|
+
# <!--
|
193
|
+
# rdoc-file=enumerator.c
|
194
|
+
# - enum.each { |elm| block } -> obj
|
195
|
+
# - enum.each -> enum
|
196
|
+
# - enum.each(*appending_args) { |elm| block } -> obj
|
197
|
+
# - enum.each(*appending_args) -> an_enumerator
|
198
|
+
# -->
|
199
|
+
# Iterates over the block according to how this Enumerator was constructed. If
|
200
|
+
# no block and no arguments are given, returns self.
|
201
|
+
#
|
202
|
+
# ### Examples
|
203
|
+
#
|
204
|
+
# "Hello, world!".scan(/\w+/) #=> ["Hello", "world"]
|
205
|
+
# "Hello, world!".to_enum(:scan, /\w+/).to_a #=> ["Hello", "world"]
|
206
|
+
# "Hello, world!".to_enum(:scan).each(/\w+/).to_a #=> ["Hello", "world"]
|
207
|
+
#
|
208
|
+
# obj = Object.new
|
209
|
+
#
|
210
|
+
# def obj.each_arg(a, b=:b, *rest)
|
211
|
+
# yield a
|
212
|
+
# yield b
|
213
|
+
# yield rest
|
214
|
+
# :method_returned
|
215
|
+
# end
|
216
|
+
#
|
217
|
+
# enum = obj.to_enum :each_arg, :a, :x
|
218
|
+
#
|
219
|
+
# enum.each.to_a #=> [:a, :x, []]
|
220
|
+
# enum.each.equal?(enum) #=> true
|
221
|
+
# enum.each { |elm| elm } #=> :method_returned
|
222
|
+
#
|
223
|
+
# enum.each(:y, :z).to_a #=> [:a, :x, [:y, :z]]
|
224
|
+
# enum.each(:y, :z).equal?(enum) #=> false
|
225
|
+
# enum.each(:y, :z) { |elm| elm } #=> :method_returned
|
226
|
+
#
|
227
|
+
def each: () { (Elem arg0) -> untyped } -> Return
|
228
|
+
| () -> self
|
229
|
+
|
230
|
+
# <!--
|
231
|
+
# rdoc-file=enumerator.c
|
232
|
+
# - e.feed obj -> nil
|
233
|
+
# -->
|
234
|
+
# Sets the value to be returned by the next yield inside `e`.
|
235
|
+
#
|
236
|
+
# If the value is not set, the yield returns nil.
|
237
|
+
#
|
238
|
+
# This value is cleared after being yielded.
|
239
|
+
#
|
240
|
+
# # Array#map passes the array's elements to "yield" and collects the
|
241
|
+
# # results of "yield" as an array.
|
242
|
+
# # Following example shows that "next" returns the passed elements and
|
243
|
+
# # values passed to "feed" are collected as an array which can be
|
244
|
+
# # obtained by StopIteration#result.
|
245
|
+
# e = [1,2,3].map
|
246
|
+
# p e.next #=> 1
|
247
|
+
# e.feed "a"
|
248
|
+
# p e.next #=> 2
|
249
|
+
# e.feed "b"
|
250
|
+
# p e.next #=> 3
|
251
|
+
# e.feed "c"
|
252
|
+
# begin
|
253
|
+
# e.next
|
254
|
+
# rescue StopIteration
|
255
|
+
# p $!.result #=> ["a", "b", "c"]
|
256
|
+
# end
|
257
|
+
#
|
258
|
+
# o = Object.new
|
259
|
+
# def o.each
|
260
|
+
# x = yield # (2) blocks
|
261
|
+
# p x # (5) => "foo"
|
262
|
+
# x = yield # (6) blocks
|
263
|
+
# p x # (8) => nil
|
264
|
+
# x = yield # (9) blocks
|
265
|
+
# p x # not reached w/o another e.next
|
266
|
+
# end
|
267
|
+
#
|
268
|
+
# e = o.to_enum
|
269
|
+
# e.next # (1)
|
270
|
+
# e.feed "foo" # (3)
|
271
|
+
# e.next # (4)
|
272
|
+
# e.next # (7)
|
273
|
+
# # (10)
|
274
|
+
#
|
275
|
+
def feed: (Elem arg0) -> NilClass
|
276
|
+
|
277
|
+
# <!--
|
278
|
+
# rdoc-file=enumerator.c
|
279
|
+
# - Enumerator.new(size = nil) { |yielder| ... }
|
280
|
+
# -->
|
281
|
+
# Creates a new Enumerator object, which can be used as an Enumerable.
|
282
|
+
#
|
283
|
+
# Iteration is defined by the given block, in which a "yielder" object, given as
|
284
|
+
# block parameter, can be used to yield a value by calling the `yield` method
|
285
|
+
# (aliased as `<<`):
|
286
|
+
#
|
287
|
+
# fib = Enumerator.new do |y|
|
288
|
+
# a = b = 1
|
289
|
+
# loop do
|
290
|
+
# y << a
|
291
|
+
# a, b = b, a + b
|
292
|
+
# end
|
293
|
+
# end
|
294
|
+
#
|
295
|
+
# fib.take(10) # => [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
|
296
|
+
#
|
297
|
+
# The optional parameter can be used to specify how to calculate the size in a
|
298
|
+
# lazy fashion (see Enumerator#size). It can either be a value or a callable
|
299
|
+
# object.
|
300
|
+
#
|
301
|
+
def initialize: (?Integer arg0) { (Enumerator::Yielder arg0) -> Return } -> void
|
302
|
+
|
303
|
+
# <!--
|
304
|
+
# rdoc-file=enumerator.c
|
305
|
+
# - e.inspect -> string
|
306
|
+
# -->
|
307
|
+
# Creates a printable version of *e*.
|
308
|
+
#
|
309
|
+
def inspect: () -> String
|
310
|
+
|
311
|
+
# <!--
|
312
|
+
# rdoc-file=enumerator.c
|
313
|
+
# - e.next -> object
|
314
|
+
# -->
|
315
|
+
# Returns the next object in the enumerator, and move the internal position
|
316
|
+
# forward. When the position reached at the end, StopIteration is raised.
|
317
|
+
#
|
318
|
+
# ### Example
|
319
|
+
#
|
320
|
+
# a = [1,2,3]
|
321
|
+
# e = a.to_enum
|
322
|
+
# p e.next #=> 1
|
323
|
+
# p e.next #=> 2
|
324
|
+
# p e.next #=> 3
|
325
|
+
# p e.next #raises StopIteration
|
326
|
+
#
|
327
|
+
# See class-level notes about external iterators.
|
328
|
+
#
|
329
|
+
def next: () -> Elem
|
330
|
+
|
331
|
+
# <!--
|
332
|
+
# rdoc-file=enumerator.c
|
333
|
+
# - e.next_values -> array
|
334
|
+
# -->
|
335
|
+
# Returns the next object as an array in the enumerator, and move the internal
|
336
|
+
# position forward. When the position reached at the end, StopIteration is
|
337
|
+
# raised.
|
338
|
+
#
|
339
|
+
# See class-level notes about external iterators.
|
340
|
+
#
|
341
|
+
# This method can be used to distinguish `yield` and `yield nil`.
|
342
|
+
#
|
343
|
+
# ### Example
|
344
|
+
#
|
345
|
+
# o = Object.new
|
346
|
+
# def o.each
|
347
|
+
# yield
|
348
|
+
# yield 1
|
349
|
+
# yield 1, 2
|
350
|
+
# yield nil
|
351
|
+
# yield [1, 2]
|
352
|
+
# end
|
353
|
+
# e = o.to_enum
|
354
|
+
# p e.next_values
|
355
|
+
# p e.next_values
|
356
|
+
# p e.next_values
|
357
|
+
# p e.next_values
|
358
|
+
# p e.next_values
|
359
|
+
# e = o.to_enum
|
360
|
+
# p e.next
|
361
|
+
# p e.next
|
362
|
+
# p e.next
|
363
|
+
# p e.next
|
364
|
+
# p e.next
|
365
|
+
#
|
366
|
+
# ## yield args next_values next
|
367
|
+
# # yield [] nil
|
368
|
+
# # yield 1 [1] 1
|
369
|
+
# # yield 1, 2 [1, 2] [1, 2]
|
370
|
+
# # yield nil [nil] nil
|
371
|
+
# # yield [1, 2] [[1, 2]] [1, 2]
|
372
|
+
#
|
373
|
+
def next_values: () -> ::Array[Elem]
|
374
|
+
|
375
|
+
# <!--
|
376
|
+
# rdoc-file=enumerator.c
|
377
|
+
# - e.peek -> object
|
378
|
+
# -->
|
379
|
+
# Returns the next object in the enumerator, but doesn't move the internal
|
380
|
+
# position forward. If the position is already at the end, StopIteration is
|
381
|
+
# raised.
|
382
|
+
#
|
383
|
+
# See class-level notes about external iterators.
|
384
|
+
#
|
385
|
+
# ### Example
|
386
|
+
#
|
387
|
+
# a = [1,2,3]
|
388
|
+
# e = a.to_enum
|
389
|
+
# p e.next #=> 1
|
390
|
+
# p e.peek #=> 2
|
391
|
+
# p e.peek #=> 2
|
392
|
+
# p e.peek #=> 2
|
393
|
+
# p e.next #=> 2
|
394
|
+
# p e.next #=> 3
|
395
|
+
# p e.peek #raises StopIteration
|
396
|
+
#
|
397
|
+
def peek: () -> Elem
|
398
|
+
|
399
|
+
# <!--
|
400
|
+
# rdoc-file=enumerator.c
|
401
|
+
# - e.peek_values -> array
|
402
|
+
# -->
|
403
|
+
# Returns the next object as an array, similar to Enumerator#next_values, but
|
404
|
+
# doesn't move the internal position forward. If the position is already at the
|
405
|
+
# end, StopIteration is raised.
|
406
|
+
#
|
407
|
+
# See class-level notes about external iterators.
|
408
|
+
#
|
409
|
+
# ### Example
|
410
|
+
#
|
411
|
+
# o = Object.new
|
412
|
+
# def o.each
|
413
|
+
# yield
|
414
|
+
# yield 1
|
415
|
+
# yield 1, 2
|
416
|
+
# end
|
417
|
+
# e = o.to_enum
|
418
|
+
# p e.peek_values #=> []
|
419
|
+
# e.next
|
420
|
+
# p e.peek_values #=> [1]
|
421
|
+
# p e.peek_values #=> [1]
|
422
|
+
# e.next
|
423
|
+
# p e.peek_values #=> [1, 2]
|
424
|
+
# e.next
|
425
|
+
# p e.peek_values # raises StopIteration
|
426
|
+
#
|
427
|
+
def peek_values: () -> ::Array[Elem]
|
428
|
+
|
429
|
+
# <!--
|
430
|
+
# rdoc-file=enumerator.c
|
431
|
+
# - e.rewind -> e
|
432
|
+
# -->
|
433
|
+
# Rewinds the enumeration sequence to the beginning.
|
434
|
+
#
|
435
|
+
# If the enclosed object responds to a "rewind" method, it is called.
|
436
|
+
#
|
437
|
+
def rewind: () -> self
|
438
|
+
|
439
|
+
# <!--
|
440
|
+
# rdoc-file=enumerator.c
|
441
|
+
# - e.size -> int, Float::INFINITY or nil
|
442
|
+
# -->
|
443
|
+
# Returns the size of the enumerator, or `nil` if it can't be calculated lazily.
|
444
|
+
#
|
445
|
+
# (1..100).to_a.permutation(4).size # => 94109400
|
446
|
+
# loop.size # => Float::INFINITY
|
447
|
+
# (1..100).drop_while.size # => nil
|
448
|
+
#
|
449
|
+
def size: () -> (Integer | Float)?
|
450
|
+
|
451
|
+
# <!--
|
452
|
+
# rdoc-file=enumerator.c
|
453
|
+
# - e.with_index(offset = 0) {|(*args), idx| ... }
|
454
|
+
# - e.with_index(offset = 0)
|
455
|
+
# -->
|
456
|
+
# Iterates the given block for each element with an index, which starts from
|
457
|
+
# `offset`. If no block is given, returns a new Enumerator that includes the
|
458
|
+
# index, starting from `offset`
|
459
|
+
#
|
460
|
+
# `offset`
|
461
|
+
# : the starting index to use
|
462
|
+
#
|
463
|
+
def with_index: (?Integer offset) { (Elem arg0, Integer arg1) -> untyped } -> Return
|
464
|
+
| (?Integer offset) -> ::Enumerator[[ Elem, Integer ], Return]
|
465
|
+
|
466
|
+
# <!-- rdoc-file=enumerator.c -->
|
467
|
+
# Iterates the given block for each element with an arbitrary object, `obj`, and
|
468
|
+
# returns `obj`
|
469
|
+
#
|
470
|
+
# If no block is given, returns a new Enumerator.
|
471
|
+
#
|
472
|
+
# ### Example
|
473
|
+
#
|
474
|
+
# to_three = Enumerator.new do |y|
|
475
|
+
# 3.times do |x|
|
476
|
+
# y << x
|
477
|
+
# end
|
478
|
+
# end
|
479
|
+
#
|
480
|
+
# to_three_with_string = to_three.with_object("foo")
|
481
|
+
# to_three_with_string.each do |x,string|
|
482
|
+
# puts "#{string}: #{x}"
|
483
|
+
# end
|
484
|
+
#
|
485
|
+
# # => foo: 0
|
486
|
+
# # => foo: 1
|
487
|
+
# # => foo: 2
|
488
|
+
#
|
489
|
+
def with_object: [U] (U obj) { (Elem, U obj) -> untyped } -> U
|
490
|
+
| [U] (U obj) -> ::Enumerator[[ Elem, U ], U]
|
491
|
+
end
|
492
|
+
|
493
|
+
# <!-- rdoc-file=enumerator.c -->
|
494
|
+
# Generator
|
495
|
+
#
|
496
|
+
class Enumerator::Generator[out Elem] < Object
|
497
|
+
include Enumerable[Elem]
|
498
|
+
|
499
|
+
def each: () { (Elem) -> void } -> void
|
500
|
+
end
|
501
|
+
|
502
|
+
# <!-- rdoc-file=enumerator.c -->
|
503
|
+
# Enumerator::Lazy is a special type of Enumerator, that allows constructing
|
504
|
+
# chains of operations without evaluating them immediately, and evaluating
|
505
|
+
# values on as-needed basis. In order to do so it redefines most of Enumerable
|
506
|
+
# methods so that they just construct another lazy enumerator.
|
507
|
+
#
|
508
|
+
# Enumerator::Lazy can be constructed from any Enumerable with the
|
509
|
+
# Enumerable#lazy method.
|
510
|
+
#
|
511
|
+
# lazy = (1..Float::INFINITY).lazy.select(&:odd?).drop(10).take_while { |i| i < 30 }
|
512
|
+
# # => #<Enumerator::Lazy: #<Enumerator::Lazy: #<Enumerator::Lazy: #<Enumerator::Lazy: 1..Infinity>:select>:drop(10)>:take_while>
|
513
|
+
#
|
514
|
+
# The real enumeration is performed when any non-redefined Enumerable method is
|
515
|
+
# called, like Enumerable#first or Enumerable#to_a (the latter is aliased as
|
516
|
+
# #force for more semantic code):
|
517
|
+
#
|
518
|
+
# lazy.first(2)
|
519
|
+
# #=> [21, 23]
|
520
|
+
#
|
521
|
+
# lazy.force
|
522
|
+
# #=> [21, 23, 25, 27, 29]
|
523
|
+
#
|
524
|
+
# Note that most Enumerable methods that could be called with or without a
|
525
|
+
# block, on Enumerator::Lazy will always require a block:
|
526
|
+
#
|
527
|
+
# [1, 2, 3].map #=> #<Enumerator: [1, 2, 3]:map>
|
528
|
+
# [1, 2, 3].lazy.map # ArgumentError: tried to call lazy map without a block
|
529
|
+
#
|
530
|
+
# This class allows idiomatic calculations on long or infinite sequences, as
|
531
|
+
# well as chaining of calculations without constructing intermediate arrays.
|
532
|
+
#
|
533
|
+
# Example for working with a slowly calculated sequence:
|
534
|
+
#
|
535
|
+
# require 'open-uri'
|
536
|
+
#
|
537
|
+
# # This will fetch all URLs before selecting
|
538
|
+
# # necessary data
|
539
|
+
# URLS.map { |u| JSON.parse(URI.open(u).read) }
|
540
|
+
# .select { |data| data.key?('stats') }
|
541
|
+
# .first(5)
|
542
|
+
#
|
543
|
+
# # This will fetch URLs one-by-one, only till
|
544
|
+
# # there is enough data to satisfy the condition
|
545
|
+
# URLS.lazy.map { |u| JSON.parse(URI.open(u).read) }
|
546
|
+
# .select { |data| data.key?('stats') }
|
547
|
+
# .first(5)
|
548
|
+
#
|
549
|
+
# Ending a chain with ".eager" generates a non-lazy enumerator, which is
|
550
|
+
# suitable for returning or passing to another method that expects a normal
|
551
|
+
# enumerator.
|
552
|
+
#
|
553
|
+
# def active_items
|
554
|
+
# groups
|
555
|
+
# .lazy
|
556
|
+
# .flat_map(&:items)
|
557
|
+
# .reject(&:disabled)
|
558
|
+
# .eager
|
559
|
+
# end
|
560
|
+
#
|
561
|
+
# # This works lazily; if a checked item is found, it stops
|
562
|
+
# # iteration and does not look into remaining groups.
|
563
|
+
# first_checked = active_items.find(&:checked)
|
564
|
+
#
|
565
|
+
# # This returns an array of items like a normal enumerator does.
|
566
|
+
# all_checked = active_items.select(&:checked)
|
567
|
+
#
|
568
|
+
class Enumerator::Lazy[out Elem, out Return = void] < Enumerator[Elem, Return]
|
569
|
+
# <!-- rdoc-file=enumerator.c -->
|
570
|
+
# Expands `lazy` enumerator to an array. See Enumerable#to_a.
|
571
|
+
#
|
572
|
+
alias force to_a
|
573
|
+
|
574
|
+
# <!--
|
575
|
+
# rdoc-file=enumerator.c
|
576
|
+
# - lazy.compact -> lazy_enumerator
|
577
|
+
# -->
|
578
|
+
# Like Enumerable#compact, but chains operation to be lazy-evaluated.
|
579
|
+
#
|
580
|
+
def compact: () -> Enumerator::Lazy[Elem, Return]
|
581
|
+
end
|
582
|
+
|
583
|
+
# <!-- rdoc-file=enumerator.c -->
|
584
|
+
# Yielder
|
585
|
+
#
|
586
|
+
class Enumerator::Yielder < Object
|
587
|
+
def <<: (untyped arg0) -> void
|
588
|
+
|
589
|
+
def yield: (*untyped arg0) -> void
|
590
|
+
|
591
|
+
# <!--
|
592
|
+
# rdoc-file=enumerator.c
|
593
|
+
# - to_proc()
|
594
|
+
# -->
|
595
|
+
# Returns a Proc object that takes arguments and yields them.
|
596
|
+
#
|
597
|
+
# This method is implemented so that a Yielder object can be directly passed to
|
598
|
+
# another method as a block argument.
|
599
|
+
#
|
600
|
+
# enum = Enumerator.new { |y|
|
601
|
+
# Dir.glob("*.rb") { |file|
|
602
|
+
# File.open(file) { |f| f.each_line(&y) }
|
603
|
+
# }
|
604
|
+
# }
|
605
|
+
#
|
606
|
+
def to_proc: () -> Proc
|
607
|
+
end
|
608
|
+
|
609
|
+
# <!-- rdoc-file=enumerator.c -->
|
610
|
+
# Enumerator::Chain is a subclass of Enumerator, which represents a chain of
|
611
|
+
# enumerables that works as a single enumerator.
|
612
|
+
#
|
613
|
+
# This type of objects can be created by Enumerable#chain and Enumerator#+.
|
614
|
+
#
|
615
|
+
class Enumerator::Chain[out Elem] < Enumerator[Elem, void]
|
616
|
+
include Enumerable[Elem]
|
617
|
+
|
618
|
+
# <!--
|
619
|
+
# rdoc-file=enumerator.c
|
620
|
+
# - obj.each(*args) { |...| ... } -> obj
|
621
|
+
# - obj.each(*args) -> enumerator
|
622
|
+
# -->
|
623
|
+
# Iterates over the elements of the first enumerable by calling the "each"
|
624
|
+
# method on it with the given arguments, then proceeds to the following
|
625
|
+
# enumerables in sequence until all of the enumerables are exhausted.
|
626
|
+
#
|
627
|
+
# If no block is given, returns an enumerator.
|
628
|
+
#
|
629
|
+
def each: () { (Elem) -> void } -> void
|
630
|
+
end
|