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/lib/rbs/test/errors.rb
CHANGED
@@ -29,35 +29,48 @@ module RBS
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
RESPOND_TO = ::Kernel.instance_method :respond_to?
|
33
|
+
private_constant :RESPOND_TO
|
34
|
+
|
32
35
|
def self.inspect_(obj)
|
33
|
-
if
|
36
|
+
if RESPOND_TO.bind_call(obj, :inspect)
|
34
37
|
obj.inspect
|
35
38
|
else
|
36
39
|
Test::INSPECT.bind(obj).call # For the case inspect is not defined (like BasicObject)
|
37
40
|
end
|
38
41
|
end
|
39
42
|
|
43
|
+
def self.method_tag(error)
|
44
|
+
if error.klass.singleton_class?
|
45
|
+
name = inspect_(error.klass).sub(/\A#<Class:(.*)>\z/, '\1')
|
46
|
+
method_name = ".#{error.method_name}"
|
47
|
+
else
|
48
|
+
name = error.klass.name
|
49
|
+
method_name = "##{error.method_name}"
|
50
|
+
end
|
51
|
+
"[#{name}#{method_name}]"
|
52
|
+
end
|
53
|
+
|
40
54
|
def self.to_string(error)
|
41
|
-
method = "#{error.klass.name}#{error.method_name}"
|
42
55
|
case error
|
43
56
|
when ArgumentTypeError
|
44
|
-
"
|
57
|
+
"#{method_tag(error)} ArgumentTypeError: expected #{format_param error.param} but given `#{inspect_(error.value)}`"
|
45
58
|
when BlockArgumentTypeError
|
46
|
-
"
|
59
|
+
"#{method_tag(error)} BlockArgumentTypeError: expected #{format_param error.param} but given `#{inspect_(error.value)}`"
|
47
60
|
when ArgumentError
|
48
|
-
"
|
61
|
+
"#{method_tag(error)} ArgumentError: expected method type #{error.method_type}"
|
49
62
|
when BlockArgumentError
|
50
|
-
"
|
63
|
+
"#{method_tag(error)} BlockArgumentError: expected method type #{error.method_type}"
|
51
64
|
when ReturnTypeError
|
52
|
-
"
|
65
|
+
"#{method_tag(error)} ReturnTypeError: expected `#{error.type}` but returns `#{inspect_(error.value)}`"
|
53
66
|
when BlockReturnTypeError
|
54
|
-
"
|
67
|
+
"#{method_tag(error)} BlockReturnTypeError: expected `#{error.type}` but returns `#{inspect_(error.value)}`"
|
55
68
|
when UnexpectedBlockError
|
56
|
-
"
|
69
|
+
"#{method_tag(error)} UnexpectedBlockError: unexpected block is given for `#{error.method_type}`"
|
57
70
|
when MissingBlockError
|
58
|
-
"
|
71
|
+
"#{method_tag(error)} MissingBlockError: required block is missing for `#{error.method_type}`"
|
59
72
|
when UnresolvedOverloadingError
|
60
|
-
"
|
73
|
+
"#{method_tag(error)} UnresolvedOverloadingError: couldn't find a suitable overloading"
|
61
74
|
else
|
62
75
|
raise "Unexpected error: #{inspect_(error)}"
|
63
76
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RBS
|
4
|
+
module Test
|
5
|
+
module Guaranteed
|
6
|
+
module Inspect
|
7
|
+
EQUAL = ::BasicObject.instance_method(:equal?)
|
8
|
+
INSPECT = ::Kernel.instance_method(:inspect)
|
9
|
+
private_constant :EQUAL, :INSPECT
|
10
|
+
|
11
|
+
module_function def guaranteed_inspect(obj)
|
12
|
+
obj.inspect
|
13
|
+
rescue NoMethodError
|
14
|
+
INSPECT.bind_call(obj)
|
15
|
+
end
|
16
|
+
|
17
|
+
def inspect
|
18
|
+
string = "<#{self.class.name}:"
|
19
|
+
|
20
|
+
instance_variables.each_with_index do |variable, index|
|
21
|
+
string.concat ', ' unless index.zero?
|
22
|
+
string.concat "#{variable}: #{guaranteed_inspect(instance_variable_get(variable))}"
|
23
|
+
end
|
24
|
+
|
25
|
+
string.concat '>'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/rbs/test/hook.rb
CHANGED
@@ -96,50 +96,55 @@ def #{with_name}(#{param_source.join(", ")}, &#{block_param})
|
|
96
96
|
block_calls = []
|
97
97
|
|
98
98
|
if block_given?
|
99
|
-
receiver = self
|
100
99
|
block_receives_block = #{block_param}.parameters.last&.yield_self {|type, _| type == :block }
|
101
100
|
|
102
|
-
wrapped_block =
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
101
|
+
wrapped_block = Object.new.instance_exec do
|
102
|
+
new_object = self
|
103
|
+
|
104
|
+
proc do |*block_args, &block2|
|
105
|
+
return_from_block = false
|
106
|
+
|
107
|
+
begin
|
108
|
+
block_result = if self.equal?(new_object)
|
109
|
+
if block_receives_block
|
110
|
+
#{block_param}.call(*block_args, &block2)
|
111
|
+
else
|
112
|
+
yield(*block_args)
|
113
|
+
end
|
114
|
+
else
|
115
|
+
# Detected that `self` inside `proc` is not equal to the `self` outside block (which is saved to `new_object`).
|
116
|
+
# This means that the block is called with `instance_exec` or `instance_eval`.
|
117
|
+
self.instance_exec(*block_args, &#{block_param})
|
118
|
+
end
|
119
|
+
|
120
|
+
return_from_block = true
|
121
|
+
ensure
|
122
|
+
exn = $!
|
123
|
+
|
124
|
+
case
|
125
|
+
when return_from_block
|
126
|
+
# Returned from yield
|
127
|
+
block_calls << ::RBS::Test::ArgumentsReturn.return(
|
128
|
+
arguments: block_args,
|
129
|
+
value: block_result
|
130
|
+
)
|
131
|
+
when exn
|
132
|
+
# Exception
|
133
|
+
block_calls << ::RBS::Test::ArgumentsReturn.exception(
|
134
|
+
arguments: block_args,
|
135
|
+
exception: exn
|
136
|
+
)
|
137
|
+
else
|
138
|
+
# break?
|
139
|
+
block_calls << ::RBS::Test::ArgumentsReturn.break(
|
140
|
+
arguments: block_args
|
141
|
+
)
|
142
|
+
end
|
138
143
|
end
|
139
|
-
end
|
140
144
|
|
141
|
-
|
142
|
-
|
145
|
+
block_result
|
146
|
+
end.ruby2_keywords
|
147
|
+
end
|
143
148
|
|
144
149
|
result = __send__(:"#{without_name}", *args, &wrapped_block)
|
145
150
|
else
|
data/lib/rbs/test/setup.rb
CHANGED
@@ -67,7 +67,7 @@ TracePoint.trace :end do |tp|
|
|
67
67
|
|
68
68
|
if class_name
|
69
69
|
if filter.any? {|f| match(to_absolute_typename(f).to_s, class_name.to_s) } && skips.none? {|f| match(f, class_name.to_s) }
|
70
|
-
if env.
|
70
|
+
if env.module_name?(class_name)
|
71
71
|
logger.info "Setting up hooks for #{class_name}"
|
72
72
|
tester.install!(tp.self, sample_size: sample_size, unchecked_classes: unchecked_classes)
|
73
73
|
end
|
data/lib/rbs/test/tester.rb
CHANGED
@@ -149,7 +149,7 @@ module RBS
|
|
149
149
|
method = definition.methods[method_name]
|
150
150
|
if method
|
151
151
|
RBS.logger.debug { "Type checking `#{self_class}#{format_method_name(method_name)}`..."}
|
152
|
-
errors = check.overloaded_call(method,
|
152
|
+
errors = check.overloaded_call(method, method_name, trace, errors: [])
|
153
153
|
|
154
154
|
if errors.empty?
|
155
155
|
RBS.logger.debug { "No type error detected 👏" }
|
data/lib/rbs/test/type_check.rb
CHANGED
@@ -10,8 +10,6 @@ module RBS
|
|
10
10
|
attr_reader :instance_class
|
11
11
|
attr_reader :class_class
|
12
12
|
|
13
|
-
attr_reader :const_cache
|
14
|
-
|
15
13
|
DEFAULT_SAMPLE_SIZE = 100
|
16
14
|
|
17
15
|
def initialize(self_class:, builder:, sample_size:, unchecked_classes:, instance_class: Object, class_class: Module)
|
@@ -21,7 +19,6 @@ module RBS
|
|
21
19
|
@builder = builder
|
22
20
|
@sample_size = sample_size
|
23
21
|
@unchecked_classes = unchecked_classes.uniq
|
24
|
-
@const_cache = {}
|
25
22
|
end
|
26
23
|
|
27
24
|
def overloaded_call(method, method_name, call, errors:)
|
@@ -38,17 +35,32 @@ module RBS
|
|
38
35
|
if es.size == 1
|
39
36
|
errors.push(*es[0])
|
40
37
|
else
|
41
|
-
|
38
|
+
error = Errors::UnresolvedOverloadingError.new(
|
42
39
|
klass: self_class,
|
43
40
|
method_name: method_name,
|
44
41
|
method_types: method.method_types
|
45
42
|
)
|
43
|
+
RBS.logger.warn do
|
44
|
+
tag = Errors.method_tag(error)
|
45
|
+
message = +"#{tag} UnresolvedOverloadingError "
|
46
|
+
message << method.method_types.zip(es).map do |method_type, es|
|
47
|
+
msg = +"method_type=`#{method_type}`"
|
48
|
+
details = es.map do |e|
|
49
|
+
"\"#{Errors.to_string(e).sub("#{tag} ", "") }\""
|
50
|
+
end.join(', ')
|
51
|
+
msg << " details=[#{details}]"
|
52
|
+
end.join(', ')
|
53
|
+
message
|
54
|
+
end
|
55
|
+
errors << error
|
46
56
|
end
|
47
57
|
|
48
58
|
errors
|
49
59
|
end
|
50
60
|
|
51
61
|
def method_call(method_name, method_type, call, errors:)
|
62
|
+
return errors if method_type.type.is_a?(Types::UntypedFunction)
|
63
|
+
|
52
64
|
args(method_name, method_type, method_type.type, call.method_call, errors, type_error: Errors::ArgumentTypeError, argument_error: Errors::ArgumentError)
|
53
65
|
self.return(method_name, method_type, method_type.type, call.method_call, errors, return_error: Errors::ReturnTypeError)
|
54
66
|
|
@@ -136,10 +148,12 @@ module RBS
|
|
136
148
|
end
|
137
149
|
|
138
150
|
def keyword?(value)
|
139
|
-
|
151
|
+
Hash === value && value.each_key.all?(Symbol)
|
140
152
|
end
|
141
153
|
|
142
154
|
def zip_args(args, fun, &block)
|
155
|
+
return true if fun.is_a?(Types::UntypedFunction)
|
156
|
+
|
143
157
|
case
|
144
158
|
when args.empty?
|
145
159
|
if fun.required_positionals.empty? && fun.trailing_positionals.empty? && fun.required_keywords.empty?
|
@@ -208,11 +222,9 @@ module RBS
|
|
208
222
|
end
|
209
223
|
|
210
224
|
def get_class(type_name)
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
nil
|
215
|
-
end
|
225
|
+
Object.const_get(type_name.to_s)
|
226
|
+
rescue NameError
|
227
|
+
nil
|
216
228
|
end
|
217
229
|
|
218
230
|
def is_double?(value)
|
@@ -248,6 +260,13 @@ module RBS
|
|
248
260
|
Test.call(val, IS_AP, instance_class)
|
249
261
|
when Types::ClassInstance
|
250
262
|
klass = get_class(type.name) or return false
|
263
|
+
if params = builder.env.normalized_module_class_entry(type.name.absolute!)&.type_params
|
264
|
+
args = AST::TypeParam.normalize_args(params, type.args)
|
265
|
+
unless args == type.args
|
266
|
+
type = Types::ClassInstance.new(name: type.name, args: args, location: type.location)
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
251
270
|
case
|
252
271
|
when klass == ::Array
|
253
272
|
Test.call(val, IS_AP, klass) && each_sample(val).all? {|v| value(v, type.args[0]) }
|
@@ -275,19 +294,22 @@ module RBS
|
|
275
294
|
end
|
276
295
|
end
|
277
296
|
|
278
|
-
each_sample(values).all? do |v|
|
297
|
+
value_check = values.empty? || each_sample(values).all? do |v|
|
279
298
|
if v.size == 1
|
280
299
|
# Only one block argument.
|
281
300
|
value(v[0], type.args[0]) || value(v, type.args[0])
|
282
301
|
else
|
283
302
|
value(v, type.args[0])
|
284
303
|
end
|
285
|
-
end
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
304
|
+
end
|
305
|
+
|
306
|
+
return_check = if ret.equal?(self)
|
307
|
+
type.args[1].is_a?(Types::Bases::Bottom)
|
308
|
+
else
|
309
|
+
value(ret, type.args[1])
|
310
|
+
end
|
311
|
+
|
312
|
+
value_check && return_check
|
291
313
|
end
|
292
314
|
else
|
293
315
|
Test.call(val, IS_AP, klass)
|
@@ -301,16 +323,22 @@ module RBS
|
|
301
323
|
end
|
302
324
|
val.is_a?(singleton_class)
|
303
325
|
when Types::Interface
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
326
|
+
if (definition = builder.build_interface(type.name.absolute!))
|
327
|
+
definition.methods.each.all? do |method_name, method|
|
328
|
+
next false unless Test.call(val, RESPOND_TOP, method_name)
|
329
|
+
|
330
|
+
meth = Test.call(val, METHOD, method_name)
|
331
|
+
method.defs.all? do |type_def|
|
332
|
+
type_def.member.overloads.all? do |overload|
|
333
|
+
callable_argument?(meth.parameters, overload.method_type)
|
334
|
+
end
|
335
|
+
end
|
308
336
|
end
|
309
337
|
end
|
310
338
|
when Types::Variable
|
311
339
|
true
|
312
340
|
when Types::Literal
|
313
|
-
|
341
|
+
type.literal == val
|
314
342
|
when Types::Union
|
315
343
|
type.types.any? {|type| value(val, type) }
|
316
344
|
when Types::Intersection
|
@@ -318,7 +346,7 @@ module RBS
|
|
318
346
|
when Types::Optional
|
319
347
|
Test.call(val, IS_AP, ::NilClass) || value(val, type.type)
|
320
348
|
when Types::Alias
|
321
|
-
value(val, builder.
|
349
|
+
value(val, builder.expand_alias2(type.name.absolute!, type.args))
|
322
350
|
when Types::Tuple
|
323
351
|
Test.call(val, IS_AP, ::Array) &&
|
324
352
|
type.types.map.with_index {|ty, index| value(val[index], ty) }.all?
|
@@ -331,6 +359,75 @@ module RBS
|
|
331
359
|
false
|
332
360
|
end
|
333
361
|
end
|
362
|
+
|
363
|
+
private
|
364
|
+
|
365
|
+
def callable_argument?(parameters, method_type)
|
366
|
+
fun = method_type.type
|
367
|
+
take_has_rest = !!parameters.find { |(op, _)| op == :rest }
|
368
|
+
|
369
|
+
return true if fun.is_a?(Types::UntypedFunction)
|
370
|
+
|
371
|
+
fun.required_positionals.each do
|
372
|
+
op, _ = parameters.first
|
373
|
+
return false if op.nil? || op == :keyreq || op == :key || op == :keyrest
|
374
|
+
parameters.shift if op == :req || op == :opt
|
375
|
+
end
|
376
|
+
|
377
|
+
fun.optional_positionals.each do
|
378
|
+
op, _ = parameters.first
|
379
|
+
return false if op.nil? || op == :req || op == :keyreq || op == :key || op == :keyrest
|
380
|
+
parameters.shift if op == :opt
|
381
|
+
end
|
382
|
+
|
383
|
+
if fun.rest_positionals
|
384
|
+
op, _ = parameters.shift
|
385
|
+
return false if op.nil? || op != :rest
|
386
|
+
end
|
387
|
+
|
388
|
+
fun.trailing_positionals.each do
|
389
|
+
op, _ = parameters.first
|
390
|
+
return false if !take_has_rest && (op.nil? || op == :keyreq || op == :key || op == :keyrest)
|
391
|
+
index = parameters.find_index { |(op, _)| op == :req }
|
392
|
+
parameters.delete_at(index) if index
|
393
|
+
end
|
394
|
+
|
395
|
+
if fun.has_keyword?
|
396
|
+
return false if !take_has_rest && parameters.empty?
|
397
|
+
|
398
|
+
fun.required_keywords.each do |name, _|
|
399
|
+
return false if !take_has_rest && parameters.empty?
|
400
|
+
index = parameters.find_index { |(op, n)| (op == :keyreq || op == :key) && n == name }
|
401
|
+
parameters.delete_at(index) if index
|
402
|
+
end
|
403
|
+
|
404
|
+
if !fun.optional_keywords.empty?
|
405
|
+
fun.optional_keywords.each do |name, _|
|
406
|
+
return false if !take_has_rest && parameters.empty?
|
407
|
+
index = parameters.find_index { |(op, n)| op == :key && n == name }
|
408
|
+
parameters.delete_at(index) if index
|
409
|
+
end
|
410
|
+
op, _ = parameters.first
|
411
|
+
return false if op == :req
|
412
|
+
end
|
413
|
+
|
414
|
+
if fun.rest_keywords
|
415
|
+
op, _ = parameters.first
|
416
|
+
return false if (!take_has_rest && op.nil?)
|
417
|
+
# f(a) allows (Integer, a: Integer)
|
418
|
+
return false if op == :req && fun.required_keywords.empty?
|
419
|
+
end
|
420
|
+
|
421
|
+
op, _ = parameters.first
|
422
|
+
return true if (op == :req || op == :opt) && parameters.length == 1
|
423
|
+
end
|
424
|
+
|
425
|
+
# rest required arguments
|
426
|
+
op, _ = parameters.first
|
427
|
+
return false if op == :req || op == :keyreq
|
428
|
+
|
429
|
+
true
|
430
|
+
end
|
334
431
|
end
|
335
432
|
end
|
336
433
|
end
|
data/lib/rbs/test.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "securerandom"
|
4
|
+
require "rbs/test/guaranteed"
|
4
5
|
require "rbs/test/observer"
|
5
|
-
require "rbs/test/spy"
|
6
6
|
require "rbs/test/errors"
|
7
7
|
require "rbs/test/type_check"
|
8
8
|
require "rbs/test/tester"
|
@@ -21,8 +21,11 @@ module RBS
|
|
21
21
|
PP = Kernel.instance_method(:pp)
|
22
22
|
INSPECT = Kernel.instance_method(:inspect)
|
23
23
|
METHODS = Kernel.instance_method(:methods)
|
24
|
+
RESPOND_TOP = Kernel.instance_method(:respond_to?)
|
24
25
|
|
25
26
|
class ArgumentsReturn
|
27
|
+
include Guaranteed::Inspect
|
28
|
+
|
26
29
|
attr_reader :arguments
|
27
30
|
attr_reader :exit_value
|
28
31
|
attr_reader :exit_type
|
@@ -82,11 +85,11 @@ module RBS
|
|
82
85
|
|
83
86
|
if ::UnboundMethod.instance_methods.include?(:bind_call)
|
84
87
|
def self.call(receiver, method, *args, &block)
|
85
|
-
method.bind_call(receiver, *args, &block)
|
88
|
+
__skip__ = method.bind_call(receiver, *args, &block)
|
86
89
|
end
|
87
90
|
else
|
88
91
|
def self.call(receiver, method, *args, &block)
|
89
|
-
method.bind(receiver).call(*args, &block)
|
92
|
+
__skip__ = method.bind(receiver).call(*args, &block)
|
90
93
|
end
|
91
94
|
end
|
92
95
|
end
|
@@ -20,7 +20,7 @@ module RBS
|
|
20
20
|
# Construct transitive closure, if not constructed already
|
21
21
|
transitive_closure() unless @dependencies
|
22
22
|
|
23
|
-
|
23
|
+
alias_name = env.normalize_type_name!(alias_name)
|
24
24
|
@dependencies[alias_name][alias_name]
|
25
25
|
end
|
26
26
|
|
@@ -32,7 +32,7 @@ module RBS
|
|
32
32
|
# Initialize dependencies as an empty hash
|
33
33
|
@dependencies = {}
|
34
34
|
# Iterate over alias declarations inserted into environment
|
35
|
-
env.
|
35
|
+
env.type_alias_decls.each do |name, entry|
|
36
36
|
# Construct a directed graph by recursively extracting type aliases
|
37
37
|
@direct_dependencies[name] = direct_dependency(entry.decl.type)
|
38
38
|
# Initialize dependencies with an empty hash
|
@@ -49,6 +49,16 @@ module RBS
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
+
def direct_dependencies_of(name)
|
53
|
+
name = env.normalize_type_name!(name)
|
54
|
+
@direct_dependencies[name]
|
55
|
+
end
|
56
|
+
|
57
|
+
def dependencies_of(name)
|
58
|
+
name = env.normalize_type_name!(name)
|
59
|
+
@dependencies[name].each_key.to_set
|
60
|
+
end
|
61
|
+
|
52
62
|
private
|
53
63
|
|
54
64
|
# Constructs directed graph recursively
|
@@ -61,7 +71,7 @@ module RBS
|
|
61
71
|
end
|
62
72
|
when RBS::Types::Alias
|
63
73
|
# Append type name if the type is an alias
|
64
|
-
result << type.name
|
74
|
+
result << env.normalize_type_name(type.name)
|
65
75
|
end
|
66
76
|
|
67
77
|
result
|
@@ -37,10 +37,12 @@ module RBS
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def validate_alias_type(alias_type, names, types)
|
40
|
-
|
41
|
-
|
40
|
+
alias_name = env.normalize_type_name?(alias_type.name) or return
|
41
|
+
|
42
|
+
if names.include?(alias_name)
|
43
|
+
if ex_type = types[alias_name]
|
42
44
|
unless compatible_args?(ex_type.args, alias_type.args)
|
43
|
-
diagnostics[
|
45
|
+
diagnostics[alias_name] ||=
|
44
46
|
Diagnostic.new(type_name: alias_type.name, nonregular_type: alias_type)
|
45
47
|
end
|
46
48
|
|
@@ -49,7 +51,7 @@ module RBS
|
|
49
51
|
types[alias_type.name] = alias_type
|
50
52
|
end
|
51
53
|
|
52
|
-
expanded = builder.expand_alias2(
|
54
|
+
expanded = builder.expand_alias2(alias_name, alias_type.args)
|
53
55
|
each_alias_type(expanded) do |at|
|
54
56
|
validate_alias_type(at, names, types)
|
55
57
|
end
|
@@ -57,7 +59,7 @@ module RBS
|
|
57
59
|
end
|
58
60
|
|
59
61
|
def build_alias_type(name)
|
60
|
-
entry = env.
|
62
|
+
entry = env.type_alias_decls[name] or return
|
61
63
|
unless entry.decl.type_params.empty?
|
62
64
|
as = entry.decl.type_params.each.map {|param| Types::Variable.new(name: param.name, location: nil) }
|
63
65
|
Types::Alias.new(name: name, args: as, location: nil)
|
@@ -75,22 +77,27 @@ module RBS
|
|
75
77
|
end
|
76
78
|
|
77
79
|
def nonregular?(type_name)
|
78
|
-
diagnostics[type_name]
|
80
|
+
diagnostics[env.normalize_type_name!(type_name)]
|
79
81
|
end
|
80
82
|
|
81
83
|
def each_mutual_alias_defs(&block)
|
82
|
-
# @type var each_node:
|
83
|
-
each_node =
|
84
|
-
env.
|
85
|
-
|
84
|
+
# @type var each_node: ^() { (TypeName) -> void } -> void
|
85
|
+
each_node = -> (&block) do
|
86
|
+
env.type_alias_decls.each_value do |decl|
|
87
|
+
if normalized = env.normalize_type_name?(decl.name)
|
88
|
+
block[normalized]
|
89
|
+
end
|
86
90
|
end
|
87
91
|
end
|
88
|
-
|
89
|
-
each_child
|
90
|
-
|
92
|
+
|
93
|
+
# @type var each_child: ^(TypeName) { (TypeName) -> void } -> void
|
94
|
+
each_child = -> (name, &block) do
|
95
|
+
if env.type_alias_decls.key?(name)
|
91
96
|
type = builder.expand_alias1(name)
|
92
97
|
each_alias_type(type) do |ty|
|
93
|
-
|
98
|
+
if normalized = env.normalize_type_name?(ty.name)
|
99
|
+
block[normalized]
|
100
|
+
end
|
94
101
|
end
|
95
102
|
end
|
96
103
|
end
|
data/lib/rbs/type_name.rb
CHANGED
@@ -9,12 +9,12 @@ module RBS
|
|
9
9
|
def initialize(namespace:, name:)
|
10
10
|
@namespace = namespace
|
11
11
|
@name = name
|
12
|
-
@kind = case
|
13
|
-
when
|
12
|
+
@kind = case
|
13
|
+
when name.match?(/\A[A-Z]/)
|
14
14
|
:class
|
15
|
-
when
|
15
|
+
when name.match?(/\A[a-z]/)
|
16
16
|
:alias
|
17
|
-
when "_"
|
17
|
+
when name.start_with?("_")
|
18
18
|
:interface
|
19
19
|
else
|
20
20
|
# Defaults to :class
|
@@ -86,19 +86,24 @@ module RBS
|
|
86
86
|
)
|
87
87
|
end
|
88
88
|
end
|
89
|
+
|
90
|
+
def self.parse(string)
|
91
|
+
absolute = string.start_with?("::")
|
92
|
+
|
93
|
+
*path, name = string.delete_prefix("::").split("::").map(&:to_sym)
|
94
|
+
raise unless name
|
95
|
+
|
96
|
+
TypeName.new(
|
97
|
+
name: name,
|
98
|
+
namespace: RBS::Namespace.new(path: path, absolute: absolute)
|
99
|
+
)
|
100
|
+
end
|
89
101
|
end
|
90
102
|
end
|
91
103
|
|
92
104
|
module Kernel
|
93
105
|
def TypeName(string)
|
94
|
-
|
95
|
-
|
96
|
-
*path, name = string.delete_prefix("::").split("::").map(&:to_sym)
|
97
|
-
raise unless name
|
98
|
-
|
99
|
-
RBS::TypeName.new(
|
100
|
-
name: name,
|
101
|
-
namespace: RBS::Namespace.new(path: path, absolute: absolute)
|
102
|
-
)
|
106
|
+
warn "Kernel#TypeName() is deprecated. Use RBS::TypeName.parse instead.", category: :deprecated
|
107
|
+
RBS::TypeName.parse(string)
|
103
108
|
end
|
104
109
|
end
|