rbs 2.8.4 → 3.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +12 -4
- data/.github/workflows/comments.yml +11 -11
- data/.github/workflows/dependabot.yml +30 -0
- data/.github/workflows/ruby.yml +40 -49
- data/.github/workflows/typecheck.yml +36 -0
- data/.github/workflows/windows.yml +28 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +42 -2
- data/CHANGELOG.md +845 -1
- data/README.md +64 -4
- data/Rakefile +198 -18
- data/Steepfile +11 -11
- data/config.yml +311 -0
- data/core/array.rbs +2189 -1914
- data/core/basic_object.rbs +59 -84
- data/core/binding.rbs +7 -69
- data/core/builtin.rbs +210 -11
- data/core/class.rbs +37 -0
- data/core/comparable.rbs +23 -25
- data/core/complex.rbs +449 -227
- data/core/constants.rbs +29 -21
- data/core/data.rbs +415 -0
- data/core/dir.rbs +698 -415
- data/core/encoding.rbs +468 -843
- data/core/enumerable.rbs +495 -455
- data/core/enumerator/product.rbs +92 -0
- data/core/enumerator.rbs +106 -9
- data/core/env.rbs +1 -1
- data/core/errno.rbs +506 -605
- data/core/errors.rbs +15 -17
- data/core/exception.rbs +361 -145
- data/core/false_class.rbs +39 -26
- data/core/fiber.rbs +121 -14
- data/core/file.rbs +1262 -320
- data/core/file_test.rbs +62 -45
- data/core/float.rbs +187 -208
- data/core/gc.rbs +446 -196
- data/core/global_variables.rbs +29 -29
- data/core/hash.rbs +242 -349
- data/core/integer.rbs +246 -308
- data/core/io/buffer.rbs +373 -122
- data/core/io/wait.rbs +29 -17
- data/core/io.rbs +1881 -1518
- data/core/kernel.rbs +2116 -1538
- data/core/marshal.rbs +24 -14
- data/core/match_data.rbs +413 -166
- data/core/math.rbs +531 -291
- data/core/method.rbs +101 -32
- data/core/module.rbs +228 -64
- data/core/nil_class.rbs +106 -47
- data/core/numeric.rbs +206 -292
- data/core/object.rbs +73 -1168
- data/core/object_space/weak_key_map.rbs +166 -0
- data/core/object_space.rbs +5 -3
- data/core/proc.rbs +280 -39
- data/core/process.rbs +1318 -658
- data/core/ractor.rbs +200 -134
- data/core/random.rbs +21 -4
- data/core/range.rbs +309 -153
- data/core/rational.rbs +4 -12
- data/core/rb_config.rbs +64 -43
- data/core/rbs/unnamed/argf.rbs +411 -147
- data/core/rbs/unnamed/env_class.rbs +137 -253
- data/core/rbs/unnamed/random.rbs +49 -26
- data/core/refinement.rbs +16 -1
- data/core/regexp.rbs +1568 -862
- data/core/ruby_vm.rbs +719 -7
- data/core/rubygems/config_file.rbs +3 -0
- data/core/rubygems/errors.rbs +69 -6
- data/core/rubygems/rubygems.rbs +71 -17
- data/core/rubygems/version.rbs +11 -7
- data/{stdlib/set/0 → core}/set.rbs +80 -91
- data/core/signal.rbs +14 -8
- data/core/string.rbs +1732 -1607
- data/core/struct.rbs +467 -95
- data/core/symbol.rbs +215 -245
- data/core/thread.rbs +133 -89
- data/core/thread_group.rbs +9 -9
- data/core/time.rbs +1141 -841
- data/core/trace_point.rbs +181 -121
- data/core/true_class.rbs +58 -32
- data/core/unbound_method.rbs +103 -30
- data/core/warning.rbs +50 -5
- data/docs/CONTRIBUTING.md +1 -1
- data/docs/architecture.md +110 -0
- data/docs/collection.md +59 -5
- data/docs/data_and_struct.md +86 -0
- data/docs/gem.md +57 -0
- data/docs/rbs_by_example.md +16 -35
- data/docs/repo.md +1 -1
- data/docs/sigs.md +7 -7
- data/docs/stdlib.md +63 -5
- data/docs/syntax.md +255 -61
- data/docs/tools.md +1 -0
- data/ext/rbs_extension/extconf.rb +10 -0
- data/ext/rbs_extension/lexer.c +1741 -1548
- data/ext/rbs_extension/lexer.h +11 -1
- data/ext/rbs_extension/lexer.re +12 -6
- data/ext/rbs_extension/lexstate.c +26 -3
- data/ext/rbs_extension/location.c +119 -111
- data/ext/rbs_extension/location.h +32 -7
- data/ext/rbs_extension/main.c +3 -0
- data/ext/rbs_extension/parser.c +883 -481
- data/ext/rbs_extension/parserstate.c +65 -25
- data/ext/rbs_extension/parserstate.h +13 -3
- data/ext/rbs_extension/rbs_extension.h +1 -10
- data/ext/rbs_extension/unescape.c +7 -47
- data/goodcheck.yml +2 -2
- data/{ext/rbs_extension → include/rbs}/constants.h +26 -15
- data/include/rbs/ruby_objs.h +72 -0
- data/include/rbs.h +7 -0
- data/lib/rbs/annotate/annotations.rb +3 -3
- data/lib/rbs/annotate/formatter.rb +13 -3
- data/lib/rbs/annotate/rdoc_annotator.rb +1 -1
- data/lib/rbs/annotate/rdoc_source.rb +12 -3
- data/lib/rbs/ast/declarations.rb +85 -2
- data/lib/rbs/ast/directives.rb +39 -0
- data/lib/rbs/ast/members.rb +49 -15
- data/lib/rbs/ast/type_param.rb +104 -15
- data/lib/rbs/ast/visitor.rb +137 -0
- data/lib/rbs/buffer.rb +5 -0
- data/lib/rbs/cli/colored_io.rb +48 -0
- data/lib/rbs/cli/diff.rb +83 -0
- data/lib/rbs/cli/validate.rb +356 -0
- data/lib/rbs/cli.rb +253 -143
- data/lib/rbs/collection/cleaner.rb +8 -1
- data/lib/rbs/collection/config/lockfile.rb +92 -0
- data/lib/rbs/collection/config/lockfile_generator.rb +154 -65
- data/lib/rbs/collection/config.rb +19 -46
- data/lib/rbs/collection/installer.rb +12 -13
- data/lib/rbs/collection/sources/base.rb +2 -2
- data/lib/rbs/collection/sources/git.rb +146 -69
- data/lib/rbs/collection/sources/local.rb +81 -0
- data/lib/rbs/collection/sources/rubygems.rb +10 -12
- data/lib/rbs/collection/sources/stdlib.rb +14 -13
- data/lib/rbs/collection/sources.rb +15 -2
- data/lib/rbs/collection.rb +2 -1
- data/lib/rbs/definition.rb +13 -16
- data/lib/rbs/definition_builder/ancestor_builder.rb +100 -24
- data/lib/rbs/definition_builder/method_builder.rb +4 -4
- data/lib/rbs/definition_builder.rb +489 -584
- data/lib/rbs/diff.rb +125 -0
- data/lib/rbs/environment/use_map.rb +77 -0
- data/lib/rbs/environment.rb +406 -105
- data/lib/rbs/environment_loader.rb +48 -44
- data/lib/rbs/environment_walker.rb +1 -1
- data/lib/rbs/errors.rb +175 -56
- data/lib/rbs/file_finder.rb +28 -0
- data/lib/rbs/location_aux.rb +8 -7
- data/lib/rbs/locator.rb +37 -15
- data/lib/rbs/method_type.rb +23 -0
- data/lib/rbs/namespace.rb +1 -0
- data/lib/rbs/parser/lex_result.rb +15 -0
- data/lib/rbs/parser/token.rb +23 -0
- data/lib/rbs/parser_aux.rb +22 -13
- data/lib/rbs/prototype/helpers.rb +48 -22
- data/lib/rbs/prototype/node_usage.rb +99 -0
- data/lib/rbs/prototype/rb.rb +125 -31
- data/lib/rbs/prototype/rbi.rb +49 -36
- 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 +273 -159
- data/lib/rbs/resolver/constant_resolver.rb +24 -8
- data/lib/rbs/resolver/type_name_resolver.rb +41 -7
- data/lib/rbs/sorter.rb +153 -123
- data/lib/rbs/substitution.rb +19 -0
- data/lib/rbs/subtractor.rb +201 -0
- data/lib/rbs/test/errors.rb +24 -11
- data/lib/rbs/test/guaranteed.rb +30 -0
- data/lib/rbs/test/hook.rb +45 -40
- data/lib/rbs/test/setup.rb +1 -1
- data/lib/rbs/test/tester.rb +1 -1
- data/lib/rbs/test/type_check.rb +120 -23
- data/lib/rbs/test.rb +6 -3
- data/lib/rbs/type_alias_dependency.rb +13 -3
- data/lib/rbs/type_alias_regularity.rb +21 -14
- data/lib/rbs/type_name.rb +18 -13
- data/lib/rbs/types.rb +352 -18
- data/lib/rbs/unit_test/convertibles.rb +176 -0
- data/lib/rbs/unit_test/spy.rb +136 -0
- data/lib/rbs/unit_test/type_assertions.rb +341 -0
- data/lib/rbs/unit_test/with_aliases.rb +143 -0
- data/lib/rbs/unit_test.rb +6 -0
- data/lib/rbs/validator.rb +55 -30
- data/lib/rbs/variance_calculator.rb +26 -23
- data/lib/rbs/vendorer.rb +3 -3
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs/writer.rb +69 -22
- data/lib/rbs.rb +7 -2
- data/lib/rdoc/discover.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +5 -5
- data/rbs.gemspec +12 -2
- data/schema/decls.json +1 -1
- data/schema/members.json +15 -10
- data/sig/ancestor_builder.rbs +4 -0
- data/sig/ancestor_graph.rbs +22 -2
- data/sig/annotate/formatter.rbs +2 -2
- data/sig/annotate/rdoc_annotater.rbs +1 -1
- 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 +4 -0
- data/sig/collection/config/lockfile.rbs +74 -0
- data/sig/collection/config/lockfile_generator.rbs +66 -0
- data/sig/collection/config.rbs +5 -48
- data/sig/collection/installer.rbs +1 -1
- data/sig/collection/sources.rbs +105 -33
- data/sig/constant.rbs +1 -1
- data/sig/declarations.rbs +42 -3
- data/sig/definition.rbs +26 -10
- data/sig/definition_builder.rbs +103 -81
- data/sig/diff.rbs +28 -0
- data/sig/directives.rbs +61 -0
- data/sig/environment.rbs +175 -29
- data/sig/environment_loader.rbs +20 -18
- data/sig/errors.rbs +123 -2
- data/sig/file_finder.rbs +28 -0
- data/sig/location.rbs +0 -3
- data/sig/locator.rbs +14 -2
- data/sig/manifest.yaml +0 -1
- data/sig/members.rbs +32 -9
- data/sig/method_types.rbs +10 -4
- data/sig/namespace.rbs +2 -3
- data/sig/parser.rbs +55 -16
- data/sig/prototype/helpers.rbs +4 -0
- data/sig/prototype/node_usage.rbs +20 -0
- data/sig/prototype/rb.rbs +10 -2
- data/sig/prototype/rbi.rbs +2 -0
- data/sig/prototype/runtime.rbs +182 -0
- data/sig/rbs.rbs +1 -1
- data/sig/rdoc/rbs.rbs +4 -0
- data/sig/repository.rbs +7 -5
- data/sig/resolver/constant_resolver.rbs +3 -4
- data/sig/resolver/context.rbs +1 -1
- data/sig/resolver/type_name_resolver.rbs +5 -1
- data/sig/shims/bundler.rbs +38 -0
- data/sig/shims/rubygems.rbs +19 -0
- data/sig/sorter.rbs +23 -5
- data/sig/substitution.rbs +6 -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 +31 -0
- data/sig/type_alias_regularity.rbs +12 -6
- data/sig/type_param.rbs +45 -9
- data/sig/typename.rbs +8 -5
- data/sig/types.rbs +119 -12
- data/sig/unit_test/convertibles.rbs +154 -0
- data/sig/unit_test/spy.rbs +28 -0
- data/sig/unit_test/type_assertions.rbs +194 -0
- data/sig/unit_test/with_aliases.rbs +136 -0
- data/sig/use_map.rbs +35 -0
- data/sig/validator.rbs +12 -5
- data/sig/variance_calculator.rbs +3 -1
- data/sig/vendorer.rbs +1 -1
- data/sig/visitor.rbs +47 -0
- data/sig/writer.rbs +6 -2
- data/src/constants.c +153 -0
- data/src/ruby_objs.c +793 -0
- data/stdlib/base64/0/base64.rbs +298 -45
- data/stdlib/benchmark/0/benchmark.rbs +12 -3
- data/stdlib/bigdecimal/0/big_decimal.rbs +62 -198
- data/stdlib/cgi/0/core.rbs +68 -15
- data/stdlib/cgi/0/manifest.yaml +1 -0
- data/stdlib/coverage/0/coverage.rbs +50 -11
- data/stdlib/csv/0/csv.rbs +90 -119
- data/stdlib/csv/0/manifest.yaml +1 -0
- data/stdlib/date/0/date.rbs +806 -735
- data/stdlib/date/0/date_time.rbs +70 -211
- data/stdlib/dbm/0/dbm.rbs +0 -2
- 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 +3 -8
- data/stdlib/digest/0/digest.rbs +48 -35
- data/stdlib/erb/0/erb.rbs +15 -39
- data/stdlib/etc/0/etc.rbs +174 -54
- data/stdlib/fileutils/0/fileutils.rbs +1234 -385
- data/stdlib/forwardable/0/forwardable.rbs +4 -4
- data/stdlib/io-console/0/io-console.rbs +82 -17
- data/stdlib/ipaddr/0/ipaddr.rbs +11 -6
- data/stdlib/json/0/json.rbs +434 -151
- data/stdlib/kconv/0/kconv.rbs +166 -0
- data/stdlib/logger/0/formatter.rbs +0 -2
- data/stdlib/logger/0/log_device.rbs +1 -3
- data/stdlib/logger/0/logger.rbs +465 -328
- data/stdlib/minitest/0/kernel.rbs +2 -2
- data/stdlib/minitest/0/minitest/abstract_reporter.rbs +4 -1
- data/stdlib/minitest/0/minitest/assertion.rbs +1 -0
- data/stdlib/minitest/0/minitest/assertions.rbs +58 -13
- data/stdlib/minitest/0/minitest/backtrace_filter.rbs +7 -0
- data/stdlib/minitest/0/minitest/bench_spec.rbs +8 -8
- data/stdlib/minitest/0/minitest/benchmark.rbs +17 -16
- 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/mock.rbs +9 -5
- data/stdlib/minitest/0/minitest/parallel/executor.rbs +4 -0
- data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +0 -1
- data/stdlib/minitest/0/minitest/pride_io.rbs +8 -0
- data/stdlib/minitest/0/minitest/pride_lol.rbs +2 -0
- data/stdlib/minitest/0/minitest/progress_reporter.rbs +1 -1
- data/stdlib/minitest/0/minitest/reportable.rbs +2 -0
- data/stdlib/minitest/0/minitest/runnable.rbs +33 -1
- data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +1 -1
- data/stdlib/minitest/0/minitest/spec/dsl.rbs +10 -6
- data/stdlib/minitest/0/minitest/spec.rbs +1 -1
- data/stdlib/minitest/0/minitest/statistics_reporter.rbs +5 -0
- data/stdlib/minitest/0/minitest/summary_reporter.rbs +0 -7
- data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +7 -7
- data/stdlib/minitest/0/minitest/test.rbs +7 -14
- data/stdlib/minitest/0/minitest/unexpected_error.rbs +2 -0
- data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
- data/stdlib/minitest/0/minitest/unit.rbs +1 -2
- data/stdlib/minitest/0/minitest.rbs +41 -892
- data/stdlib/monitor/0/monitor.rbs +91 -10
- data/stdlib/mutex_m/0/mutex_m.rbs +0 -2
- data/stdlib/net-http/0/manifest.yaml +1 -1
- data/stdlib/net-http/0/net-http.rbs +3858 -964
- 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 +35 -5
- data/stdlib/objspace/0/objspace.rbs +40 -18
- 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 +1 -0
- data/stdlib/openssl/0/openssl.rbs +681 -316
- data/stdlib/optparse/0/optparse.rbs +100 -65
- data/stdlib/pathname/0/pathname.rbs +24 -15
- data/stdlib/pp/0/manifest.yaml +2 -0
- data/stdlib/pp/0/pp.rbs +300 -0
- data/stdlib/prettyprint/0/prettyprint.rbs +2 -6
- data/stdlib/pstore/0/pstore.rbs +370 -156
- data/stdlib/psych/0/core_ext.rbs +12 -0
- data/stdlib/{yaml → psych}/0/dbm.rbs +3 -3
- data/stdlib/psych/0/manifest.yaml +3 -0
- data/stdlib/psych/0/psych.rbs +402 -0
- data/stdlib/{yaml → psych}/0/store.rbs +2 -2
- data/stdlib/pty/0/pty.rbs +63 -11
- 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 +13 -380
- 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/resolv.rbs +16 -79
- data/stdlib/ripper/0/ripper.rbs +1648 -0
- data/stdlib/securerandom/0/securerandom.rbs +7 -2
- data/stdlib/shellwords/0/shellwords.rbs +11 -12
- data/stdlib/singleton/0/singleton.rbs +0 -3
- data/stdlib/socket/0/addrinfo.rbs +13 -18
- data/stdlib/socket/0/basic_socket.rbs +5 -10
- data/stdlib/socket/0/ip_socket.rbs +0 -2
- data/stdlib/socket/0/socket.rbs +77 -46
- data/stdlib/socket/0/tcp_server.rbs +0 -5
- data/stdlib/socket/0/tcp_socket.rbs +36 -3
- data/stdlib/socket/0/udp_socket.rbs +4 -5
- data/stdlib/socket/0/unix_server.rbs +0 -5
- data/stdlib/socket/0/unix_socket.rbs +2 -4
- data/{core/string_io.rbs → stdlib/stringio/0/stringio.rbs} +188 -107
- data/stdlib/strscan/0/string_scanner.rbs +1269 -425
- data/stdlib/tempfile/0/tempfile.rbs +224 -61
- data/stdlib/time/0/time.rbs +48 -35
- data/stdlib/timeout/0/timeout.rbs +17 -8
- data/stdlib/tmpdir/0/tmpdir.rbs +10 -3
- data/stdlib/tsort/0/tsort.rbs +0 -4
- data/stdlib/uri/0/common.rbs +271 -144
- data/stdlib/uri/0/file.rbs +5 -0
- data/stdlib/uri/0/ftp.rbs +1 -1
- data/stdlib/uri/0/generic.rbs +26 -22
- data/stdlib/uri/0/http.rbs +4 -4
- data/stdlib/uri/0/ldap.rbs +1 -1
- data/stdlib/uri/0/mailto.rbs +84 -0
- data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
- data/stdlib/yaml/0/manifest.yaml +1 -2
- data/stdlib/yaml/0/yaml.rbs +1 -199
- 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 +1 -3
- data/stdlib/zlib/0/zstream.rbs +200 -0
- data/templates/include/rbs/constants.h.erb +20 -0
- data/templates/include/rbs/ruby_objs.h.erb +10 -0
- data/templates/src/constants.c.erb +36 -0
- data/templates/src/ruby_objs.c.erb +27 -0
- data/templates/template.rb +122 -0
- metadata +136 -36
- data/Gemfile +0 -33
- data/Gemfile.lock +0 -118
- data/core/deprecated.rbs +0 -9
- data/ext/rbs_extension/constants.c +0 -135
- data/ext/rbs_extension/ruby_objs.c +0 -525
- data/ext/rbs_extension/ruby_objs.h +0 -43
- data/lib/rbs/constant_table.rb +0 -167
- data/lib/rbs/parser_compat/lexer_error.rb +0 -6
- data/lib/rbs/parser_compat/located_value.rb +0 -7
- data/lib/rbs/parser_compat/semantics_error.rb +0 -6
- data/lib/rbs/parser_compat/syntax_error.rb +0 -6
- data/lib/rbs/test/spy.rb +0 -6
- data/lib/rbs/type_name_resolver.rb +0 -67
- data/sig/constant_table.rbs +0 -30
- data/sig/shims/abstract_syntax_tree.rbs +0 -25
- data/sig/shims/pp.rbs +0 -3
- data/sig/shims/ripper.rbs +0 -8
- data/sig/shims.rbs +0 -69
- data/sig/type_name_resolver.rbs +0 -26
- data/stdlib/minitest/0/manifest.yaml +0 -2
- data/stdlib/prime/0/integer-extension.rbs +0 -41
- data/stdlib/prime/0/manifest.yaml +0 -2
- data/stdlib/prime/0/prime.rbs +0 -372
data/core/constants.rbs
CHANGED
@@ -4,85 +4,93 @@
|
|
4
4
|
#
|
5
5
|
# See ARGF (the class) for more details.
|
6
6
|
#
|
7
|
-
|
7
|
+
ARGF: RBS::Unnamed::ARGFClass
|
8
8
|
|
9
9
|
# <!-- rdoc-file=ruby.c -->
|
10
10
|
# ARGV contains the command line arguments used to run ruby.
|
11
11
|
#
|
12
12
|
# A library like OptionParser can be used to process command-line arguments.
|
13
13
|
#
|
14
|
-
|
14
|
+
ARGV: Array[String]
|
15
15
|
|
16
|
-
|
16
|
+
CROSS_COMPILING: true?
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
# <!-- rdoc-file=ruby.c -->
|
19
|
+
# DATA is a File that contains the data section of the executed file. To create
|
20
|
+
# a data section use `__END__`:
|
21
|
+
#
|
22
|
+
# $ cat t.rb
|
23
|
+
# puts DATA.gets
|
24
|
+
# __END__
|
25
|
+
# hello world!
|
26
|
+
#
|
27
|
+
# $ ruby t.rb
|
28
|
+
# hello world!
|
29
|
+
#
|
30
|
+
DATA: File
|
21
31
|
|
22
32
|
# <!-- rdoc-file=version.c -->
|
23
33
|
# The copyright string for ruby
|
24
34
|
#
|
25
|
-
|
35
|
+
RUBY_COPYRIGHT: String
|
26
36
|
|
27
37
|
# <!-- rdoc-file=version.c -->
|
28
38
|
# The full ruby version string, like `ruby -v` prints
|
29
39
|
#
|
30
|
-
|
40
|
+
RUBY_DESCRIPTION: String
|
31
41
|
|
32
42
|
# <!-- rdoc-file=version.c -->
|
33
43
|
# The engine or interpreter this ruby uses.
|
34
44
|
#
|
35
|
-
|
45
|
+
RUBY_ENGINE: String
|
36
46
|
|
37
47
|
# <!-- rdoc-file=version.c -->
|
38
48
|
# The version of the engine or interpreter this ruby uses.
|
39
49
|
#
|
40
|
-
|
50
|
+
RUBY_ENGINE_VERSION: String
|
41
51
|
|
42
52
|
# <!-- rdoc-file=version.c -->
|
43
53
|
# The patchlevel for this ruby. If this is a development build of ruby the
|
44
54
|
# patchlevel will be -1
|
45
55
|
#
|
46
|
-
|
56
|
+
RUBY_PATCHLEVEL: Integer
|
47
57
|
|
48
58
|
# <!-- rdoc-file=version.c -->
|
49
59
|
# The platform for this ruby
|
50
60
|
#
|
51
|
-
|
61
|
+
RUBY_PLATFORM: String
|
52
62
|
|
53
63
|
# <!-- rdoc-file=version.c -->
|
54
64
|
# The date this ruby was released
|
55
65
|
#
|
56
|
-
|
66
|
+
RUBY_RELEASE_DATE: String
|
57
67
|
|
58
68
|
# <!-- rdoc-file=version.c -->
|
59
69
|
# The GIT commit hash for this ruby.
|
60
70
|
#
|
61
|
-
|
71
|
+
RUBY_REVISION: String
|
62
72
|
|
63
73
|
# <!-- rdoc-file=version.c -->
|
64
74
|
# The running version of ruby
|
65
75
|
#
|
66
|
-
|
76
|
+
RUBY_VERSION: String
|
67
77
|
|
68
78
|
# <!-- rdoc-file=io.c -->
|
69
79
|
# Holds the original stderr
|
70
80
|
#
|
71
|
-
|
81
|
+
STDERR: IO
|
72
82
|
|
73
83
|
# <!-- rdoc-file=io.c -->
|
74
84
|
# Holds the original stdin
|
75
85
|
#
|
76
|
-
|
86
|
+
STDIN: IO
|
77
87
|
|
78
88
|
# <!-- rdoc-file=io.c -->
|
79
89
|
# Holds the original stdout
|
80
90
|
#
|
81
|
-
|
91
|
+
STDOUT: IO
|
82
92
|
|
83
93
|
# <!-- rdoc-file=vm.c -->
|
84
94
|
# The Binding of the top level scope
|
85
95
|
#
|
86
|
-
|
87
|
-
|
88
|
-
::TRUE: TrueClass
|
96
|
+
TOPLEVEL_BINDING: Binding
|
data/core/data.rbs
ADDED
@@ -0,0 +1,415 @@
|
|
1
|
+
# <!-- rdoc-file=struct.c -->
|
2
|
+
# Class Data provides a convenient way to define simple classes for value-alike
|
3
|
+
# objects.
|
4
|
+
#
|
5
|
+
# The simplest example of usage:
|
6
|
+
#
|
7
|
+
# Measure = Data.define(:amount, :unit)
|
8
|
+
#
|
9
|
+
# # Positional arguments constructor is provided
|
10
|
+
# distance = Measure.new(100, 'km')
|
11
|
+
# #=> #<data Measure amount=100, unit="km">
|
12
|
+
#
|
13
|
+
# # Keyword arguments constructor is provided
|
14
|
+
# weight = Measure.new(amount: 50, unit: 'kg')
|
15
|
+
# #=> #<data Measure amount=50, unit="kg">
|
16
|
+
#
|
17
|
+
# # Alternative form to construct an object:
|
18
|
+
# speed = Measure[10, 'mPh']
|
19
|
+
# #=> #<data Measure amount=10, unit="mPh">
|
20
|
+
#
|
21
|
+
# # Works with keyword arguments, too:
|
22
|
+
# area = Measure[amount: 1.5, unit: 'm^2']
|
23
|
+
# #=> #<data Measure amount=1.5, unit="m^2">
|
24
|
+
#
|
25
|
+
# # Argument accessors are provided:
|
26
|
+
# distance.amount #=> 100
|
27
|
+
# distance.unit #=> "km"
|
28
|
+
#
|
29
|
+
# Constructed object also has a reasonable definitions of #== operator, #to_h
|
30
|
+
# hash conversion, and #deconstruct / #deconstruct_keys to be used in pattern
|
31
|
+
# matching.
|
32
|
+
#
|
33
|
+
# ::define method accepts an optional block and evaluates it in the context of
|
34
|
+
# the newly defined class. That allows to define additional methods:
|
35
|
+
#
|
36
|
+
# Measure = Data.define(:amount, :unit) do
|
37
|
+
# def <=>(other)
|
38
|
+
# return unless other.is_a?(self.class) && other.unit == unit
|
39
|
+
# amount <=> other.amount
|
40
|
+
# end
|
41
|
+
#
|
42
|
+
# include Comparable
|
43
|
+
# end
|
44
|
+
#
|
45
|
+
# Measure[3, 'm'] < Measure[5, 'm'] #=> true
|
46
|
+
# Measure[3, 'm'] < Measure[5, 'kg']
|
47
|
+
# # comparison of Measure with Measure failed (ArgumentError)
|
48
|
+
#
|
49
|
+
# Data provides no member writers, or enumerators: it is meant to be a storage
|
50
|
+
# for immutable atomic values. But note that if some of data members is of a
|
51
|
+
# mutable class, Data does no additional immutability enforcement:
|
52
|
+
#
|
53
|
+
# Event = Data.define(:time, :weekdays)
|
54
|
+
# event = Event.new('18:00', %w[Tue Wed Fri])
|
55
|
+
# #=> #<data Event time="18:00", weekdays=["Tue", "Wed", "Fri"]>
|
56
|
+
#
|
57
|
+
# # There is no #time= or #weekdays= accessors, but changes are
|
58
|
+
# # still possible:
|
59
|
+
# event.weekdays << 'Sat'
|
60
|
+
# event
|
61
|
+
# #=> #<data Event time="18:00", weekdays=["Tue", "Wed", "Fri", "Sat"]>
|
62
|
+
#
|
63
|
+
# See also Struct, which is a similar concept, but has more container-alike API,
|
64
|
+
# allowing to change contents of the object and enumerate it.
|
65
|
+
#
|
66
|
+
class Data
|
67
|
+
# <!--
|
68
|
+
# rdoc-file=struct.c
|
69
|
+
# - define(*symbols) -> class
|
70
|
+
# -->
|
71
|
+
# Defines a new Data class.
|
72
|
+
#
|
73
|
+
# measure = Data.define(:amount, :unit)
|
74
|
+
# #=> #<Class:0x00007f70c6868498>
|
75
|
+
# measure.new(1, 'km')
|
76
|
+
# #=> #<data amount=1, unit="km">
|
77
|
+
#
|
78
|
+
# # It you store the new class in the constant, it will
|
79
|
+
# # affect #inspect and will be more natural to use:
|
80
|
+
# Measure = Data.define(:amount, :unit)
|
81
|
+
# #=> Measure
|
82
|
+
# Measure.new(1, 'km')
|
83
|
+
# #=> #<data Measure amount=1, unit="km">
|
84
|
+
#
|
85
|
+
# Note that member-less Data is acceptable and might be a useful technique for
|
86
|
+
# defining several homogeneous data classes, like
|
87
|
+
#
|
88
|
+
# class HTTPFetcher
|
89
|
+
# Response = Data.define(:body)
|
90
|
+
# NotFound = Data.define
|
91
|
+
# # ... implementation
|
92
|
+
# end
|
93
|
+
#
|
94
|
+
# Now, different kinds of responses from `HTTPFetcher` would have consistent
|
95
|
+
# representation:
|
96
|
+
#
|
97
|
+
# #<data HTTPFetcher::Response body="<html...">
|
98
|
+
# #<data HTTPFetcher::NotFound>
|
99
|
+
#
|
100
|
+
# And are convenient to use in pattern matching:
|
101
|
+
#
|
102
|
+
# case fetcher.get(url)
|
103
|
+
# in HTTPFetcher::Response(body)
|
104
|
+
# # process body variable
|
105
|
+
# in HTTPFetcher::NotFound
|
106
|
+
# # handle not found case
|
107
|
+
# end
|
108
|
+
#
|
109
|
+
def self.define: [KLASS < _DataClass] (*Symbol) ?{ (KLASS) [self: KLASS] -> void } -> KLASS
|
110
|
+
|
111
|
+
interface _DataClass
|
112
|
+
# <!--
|
113
|
+
# rdoc-file=struct.c
|
114
|
+
# - new(*args) -> instance
|
115
|
+
# - new(**kwargs) -> instance
|
116
|
+
# - ::[](*args) -> instance
|
117
|
+
# - ::[](**kwargs) -> instance
|
118
|
+
# -->
|
119
|
+
# Constructors for classes defined with ::define accept both positional and
|
120
|
+
# keyword arguments.
|
121
|
+
#
|
122
|
+
# Measure = Data.define(:amount, :unit)
|
123
|
+
#
|
124
|
+
# Measure.new(1, 'km')
|
125
|
+
# #=> #<data Measure amount=1, unit="km">
|
126
|
+
# Measure.new(amount: 1, unit: 'km')
|
127
|
+
# #=> #<data Measure amount=1, unit="km">
|
128
|
+
#
|
129
|
+
# # Alternative shorter intialization with []
|
130
|
+
# Measure[1, 'km']
|
131
|
+
# #=> #<data Measure amount=1, unit="km">
|
132
|
+
# Measure[amount: 1, unit: 'km']
|
133
|
+
# #=> #<data Measure amount=1, unit="km">
|
134
|
+
#
|
135
|
+
# All arguments are mandatory (unlike Struct), and converted to keyword
|
136
|
+
# arguments:
|
137
|
+
#
|
138
|
+
# Measure.new(amount: 1)
|
139
|
+
# # in `initialize': missing keyword: :unit (ArgumentError)
|
140
|
+
#
|
141
|
+
# Measure.new(1)
|
142
|
+
# # in `initialize': missing keyword: :unit (ArgumentError)
|
143
|
+
#
|
144
|
+
# Note that `Measure#initialize` always receives keyword arguments, and that
|
145
|
+
# mandatory arguments are checked in `initialize`, not in `new`. This can be
|
146
|
+
# important for redefining initialize in order to convert arguments or provide
|
147
|
+
# defaults:
|
148
|
+
#
|
149
|
+
# Measure = Data.define(:amount, :unit) do
|
150
|
+
# NONE = Data.define
|
151
|
+
#
|
152
|
+
# def initialize(amount:, unit: NONE.new)
|
153
|
+
# super(amount: Float(amount), unit:)
|
154
|
+
# end
|
155
|
+
# end
|
156
|
+
#
|
157
|
+
# Measure.new('10', 'km') # => #<data Measure amount=10.0, unit="km">
|
158
|
+
# Measure.new(10_000) # => #<data Measure amount=10000.0, unit=#<data NONE>>
|
159
|
+
#
|
160
|
+
%a{annotate:rdoc:copy:Data.new}
|
161
|
+
def new: (*untyped) -> Data
|
162
|
+
| (**untyped) -> Data
|
163
|
+
|
164
|
+
%a{annotate:rdoc:copy:Data.[]}
|
165
|
+
def []: (*untyped) -> Data
|
166
|
+
| (**untyped) -> Data
|
167
|
+
|
168
|
+
# <!--
|
169
|
+
# rdoc-file=struct.c
|
170
|
+
# - DataClass::members -> array_of_symbols
|
171
|
+
# -->
|
172
|
+
# Returns an array of member names of the data class:
|
173
|
+
#
|
174
|
+
# Measure = Data.define(:amount, :unit)
|
175
|
+
# Measure.members # => [:amount, :unit]
|
176
|
+
#
|
177
|
+
%a{annotate:rdoc:copy:Data.members}
|
178
|
+
def members: () -> Array[Symbol]
|
179
|
+
end
|
180
|
+
|
181
|
+
%a{annotate:rdoc:skip}
|
182
|
+
def self.new: () -> bot
|
183
|
+
|
184
|
+
def self.allocate: () -> bot
|
185
|
+
|
186
|
+
# <!--
|
187
|
+
# rdoc-file=struct.c
|
188
|
+
# - self == other -> true or false
|
189
|
+
# -->
|
190
|
+
# Returns `true` if `other` is the same class as `self`, and all members are
|
191
|
+
# equal.
|
192
|
+
#
|
193
|
+
# Examples:
|
194
|
+
#
|
195
|
+
# Measure = Data.define(:amount, :unit)
|
196
|
+
#
|
197
|
+
# Measure[1, 'km'] == Measure[1, 'km'] #=> true
|
198
|
+
# Measure[1, 'km'] == Measure[2, 'km'] #=> false
|
199
|
+
# Measure[1, 'km'] == Measure[1, 'm'] #=> false
|
200
|
+
#
|
201
|
+
# Measurement = Data.define(:amount, :unit)
|
202
|
+
# # Even though Measurement and Measure have the same "shape"
|
203
|
+
# # their instances are never equal
|
204
|
+
# Measure[1, 'km'] == Measurement[1, 'km'] #=> false
|
205
|
+
#
|
206
|
+
def ==: (untyped) -> bool
|
207
|
+
|
208
|
+
# <!--
|
209
|
+
# rdoc-file=struct.c
|
210
|
+
# - deconstruct -> array
|
211
|
+
# -->
|
212
|
+
# Returns the values in `self` as an array, to use in pattern matching:
|
213
|
+
#
|
214
|
+
# Measure = Data.define(:amount, :unit)
|
215
|
+
#
|
216
|
+
# distance = Measure[10, 'km']
|
217
|
+
# distance.deconstruct #=> [10, "km"]
|
218
|
+
#
|
219
|
+
# # usage
|
220
|
+
# case distance
|
221
|
+
# in n, 'km' # calls #deconstruct underneath
|
222
|
+
# puts "It is #{n} kilometers away"
|
223
|
+
# else
|
224
|
+
# puts "Don't know how to handle it"
|
225
|
+
# end
|
226
|
+
# # prints "It is 10 kilometers away"
|
227
|
+
#
|
228
|
+
# Or, with checking the class, too:
|
229
|
+
#
|
230
|
+
# case distance
|
231
|
+
# in Measure(n, 'km')
|
232
|
+
# puts "It is #{n} kilometers away"
|
233
|
+
# # ...
|
234
|
+
# end
|
235
|
+
#
|
236
|
+
def deconstruct: () -> Array[untyped]
|
237
|
+
|
238
|
+
# <!--
|
239
|
+
# rdoc-file=struct.c
|
240
|
+
# - deconstruct_keys(array_of_names_or_nil) -> hash
|
241
|
+
# -->
|
242
|
+
# Returns a hash of the name/value pairs, to use in pattern matching.
|
243
|
+
#
|
244
|
+
# Measure = Data.define(:amount, :unit)
|
245
|
+
#
|
246
|
+
# distance = Measure[10, 'km']
|
247
|
+
# distance.deconstruct_keys(nil) #=> {:amount=>10, :unit=>"km"}
|
248
|
+
# distance.deconstruct_keys([:amount]) #=> {:amount=>10}
|
249
|
+
#
|
250
|
+
# # usage
|
251
|
+
# case distance
|
252
|
+
# in amount:, unit: 'km' # calls #deconstruct_keys underneath
|
253
|
+
# puts "It is #{amount} kilometers away"
|
254
|
+
# else
|
255
|
+
# puts "Don't know how to handle it"
|
256
|
+
# end
|
257
|
+
# # prints "It is 10 kilometers away"
|
258
|
+
#
|
259
|
+
# Or, with checking the class, too:
|
260
|
+
#
|
261
|
+
# case distance
|
262
|
+
# in Measure(amount:, unit: 'km')
|
263
|
+
# puts "It is #{amount} kilometers away"
|
264
|
+
# # ...
|
265
|
+
# end
|
266
|
+
#
|
267
|
+
def deconstruct_keys: (?Array[Symbol]?) -> Hash[Symbol, untyped]
|
268
|
+
|
269
|
+
# <!--
|
270
|
+
# rdoc-file=struct.c
|
271
|
+
# - self.eql?(other) -> true or false
|
272
|
+
# -->
|
273
|
+
# Equality check that is used when two items of data are keys of a Hash.
|
274
|
+
#
|
275
|
+
# The subtle difference with #== is that members are also compared with their
|
276
|
+
# #eql? method, which might be important in some cases:
|
277
|
+
#
|
278
|
+
# Measure = Data.define(:amount, :unit)
|
279
|
+
#
|
280
|
+
# Measure[1, 'km'] == Measure[1.0, 'km'] #=> true, they are equal as values
|
281
|
+
# # ...but...
|
282
|
+
# Measure[1, 'km'].eql? Measure[1.0, 'km'] #=> false, they represent different hash keys
|
283
|
+
#
|
284
|
+
# See also Object#eql? for further explanations of the method usage.
|
285
|
+
#
|
286
|
+
def eql?: (untyped) -> bool
|
287
|
+
|
288
|
+
# <!--
|
289
|
+
# rdoc-file=struct.c
|
290
|
+
# - hash -> integer
|
291
|
+
# -->
|
292
|
+
# Redefines Object#hash (used to distinguish objects as Hash keys) so that data
|
293
|
+
# objects of the same class with same content would have the same `hash` value,
|
294
|
+
# and represented the same Hash key.
|
295
|
+
#
|
296
|
+
# Measure = Data.define(:amount, :unit)
|
297
|
+
#
|
298
|
+
# Measure[1, 'km'].hash == Measure[1, 'km'].hash #=> true
|
299
|
+
# Measure[1, 'km'].hash == Measure[10, 'km'].hash #=> false
|
300
|
+
# Measure[1, 'km'].hash == Measure[1, 'm'].hash #=> false
|
301
|
+
# Measure[1, 'km'].hash == Measure[1.0, 'km'].hash #=> false
|
302
|
+
#
|
303
|
+
# # Structurally similar data class, but shouldn't be considered
|
304
|
+
# # the same hash key
|
305
|
+
# Measurement = Data.define(:amount, :unit)
|
306
|
+
#
|
307
|
+
# Measure[1, 'km'].hash == Measurement[1, 'km'].hash #=> false
|
308
|
+
#
|
309
|
+
def hash: () -> Integer
|
310
|
+
|
311
|
+
# <!--
|
312
|
+
# rdoc-file=struct.c
|
313
|
+
# - inspect -> string
|
314
|
+
# - to_s -> string
|
315
|
+
# -->
|
316
|
+
# Returns a string representation of `self`:
|
317
|
+
#
|
318
|
+
# Measure = Data.define(:amount, :unit)
|
319
|
+
#
|
320
|
+
# distance = Measure[10, 'km']
|
321
|
+
#
|
322
|
+
# p distance # uses #inspect underneath
|
323
|
+
# #<data Measure amount=10, unit="km">
|
324
|
+
#
|
325
|
+
# puts distance # uses #to_s underneath, same representation
|
326
|
+
# #<data Measure amount=10, unit="km">
|
327
|
+
#
|
328
|
+
def inspect: () -> String
|
329
|
+
|
330
|
+
# <!--
|
331
|
+
# rdoc-file=struct.c
|
332
|
+
# - members -> array_of_symbols
|
333
|
+
# -->
|
334
|
+
# Returns the member names from `self` as an array:
|
335
|
+
#
|
336
|
+
# Measure = Data.define(:amount, :unit)
|
337
|
+
# distance = Measure[10, 'km']
|
338
|
+
#
|
339
|
+
# distance.members #=> [:amount, :unit]
|
340
|
+
#
|
341
|
+
def members: () -> Array[Symbol]
|
342
|
+
|
343
|
+
# <!--
|
344
|
+
# rdoc-file=struct.c
|
345
|
+
# - to_h -> hash
|
346
|
+
# - to_h {|name, value| ... } -> hash
|
347
|
+
# -->
|
348
|
+
# Returns Hash representation of the data object.
|
349
|
+
#
|
350
|
+
# Measure = Data.define(:amount, :unit)
|
351
|
+
# distance = Measure[10, 'km']
|
352
|
+
#
|
353
|
+
# distance.to_h
|
354
|
+
# #=> {:amount=>10, :unit=>"km"}
|
355
|
+
#
|
356
|
+
# Like Enumerable#to_h, if the block is provided, it is expected to produce
|
357
|
+
# key-value pairs to construct a hash:
|
358
|
+
#
|
359
|
+
# distance.to_h { |name, val| [name.to_s, val.to_s] }
|
360
|
+
# #=> {"amount"=>"10", "unit"=>"km"}
|
361
|
+
#
|
362
|
+
# Note that there is a useful symmetry between #to_h and #initialize:
|
363
|
+
#
|
364
|
+
# distance2 = Measure.new(**distance.to_h)
|
365
|
+
# #=> #<data Measure amount=10, unit="km">
|
366
|
+
# distance2 == distance
|
367
|
+
# #=> true
|
368
|
+
#
|
369
|
+
def to_h: () -> Hash[Symbol, untyped]
|
370
|
+
|
371
|
+
# <!-- rdoc-file=struct.c -->
|
372
|
+
# Returns a string representation of `self`:
|
373
|
+
#
|
374
|
+
# Measure = Data.define(:amount, :unit)
|
375
|
+
#
|
376
|
+
# distance = Measure[10, 'km']
|
377
|
+
#
|
378
|
+
# p distance # uses #inspect underneath
|
379
|
+
# #<data Measure amount=10, unit="km">
|
380
|
+
#
|
381
|
+
# puts distance # uses #to_s underneath, same representation
|
382
|
+
# #<data Measure amount=10, unit="km">
|
383
|
+
#
|
384
|
+
alias to_s inspect
|
385
|
+
|
386
|
+
# <!--
|
387
|
+
# rdoc-file=struct.c
|
388
|
+
# - with(**kwargs) -> instance
|
389
|
+
# -->
|
390
|
+
# Returns a shallow copy of `self` --- the instance variables of `self` are
|
391
|
+
# copied, but not the objects they reference.
|
392
|
+
#
|
393
|
+
# If the method is supplied any keyword arguments, the copy will be created with
|
394
|
+
# the respective field values updated to use the supplied keyword argument
|
395
|
+
# values. Note that it is an error to supply a keyword that the Data class does
|
396
|
+
# not have as a member.
|
397
|
+
#
|
398
|
+
# Point = Data.define(:x, :y)
|
399
|
+
#
|
400
|
+
# origin = Point.new(x: 0, y: 0)
|
401
|
+
#
|
402
|
+
# up = origin.with(x: 1)
|
403
|
+
# right = origin.with(y: 1)
|
404
|
+
# up_and_right = up.with(y: 1)
|
405
|
+
#
|
406
|
+
# p origin # #<data Point x=0, y=0>
|
407
|
+
# p up # #<data Point x=1, y=0>
|
408
|
+
# p right # #<data Point x=0, y=1>
|
409
|
+
# p up_and_right # #<data Point x=1, y=1>
|
410
|
+
#
|
411
|
+
# out = origin.with(z: 1) # ArgumentError: unknown keyword: :z
|
412
|
+
# some_point = origin.with(1, 2) # ArgumentError: expected keyword arguments, got positional arguments
|
413
|
+
#
|
414
|
+
def with: (**untyped) -> instance
|
415
|
+
end
|