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/lib/rbs/errors.rb
ADDED
@@ -0,0 +1,645 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RBS
|
4
|
+
module MethodNameHelper
|
5
|
+
def method_name_string()
|
6
|
+
separator = case kind
|
7
|
+
when :instance
|
8
|
+
"#"
|
9
|
+
when :singleton
|
10
|
+
"."
|
11
|
+
else
|
12
|
+
raise
|
13
|
+
end
|
14
|
+
|
15
|
+
"#{type_name}#{separator}#{method_name}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class BaseError < StandardError; end
|
20
|
+
class LoadingError < BaseError; end
|
21
|
+
class DefinitionError < BaseError; end
|
22
|
+
|
23
|
+
module DetailedMessageable
|
24
|
+
def detailed_message(highlight: false, **)
|
25
|
+
msg = if Exception.method_defined?(:detailed_message)
|
26
|
+
super
|
27
|
+
else
|
28
|
+
# Failback to `#message` in Ruby 3.1 or earlier
|
29
|
+
"#{message} (#{self.class.name})"
|
30
|
+
end
|
31
|
+
|
32
|
+
return msg unless location
|
33
|
+
|
34
|
+
# Support only one line
|
35
|
+
return msg unless location.start_line == location.end_line
|
36
|
+
|
37
|
+
indent = " " * location.start_column
|
38
|
+
marker = "^" * ([location.end_column - location.start_column, 1].max or raise)
|
39
|
+
|
40
|
+
io = StringIO.new
|
41
|
+
io.puts msg
|
42
|
+
io.puts
|
43
|
+
io.print "\e[1m" if highlight
|
44
|
+
io.puts " #{location.buffer.lines[location.end_line - 1]}"
|
45
|
+
io.puts " #{indent}#{marker}"
|
46
|
+
io.print "\e[m" if highlight
|
47
|
+
io.string
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
class ParsingError < BaseError
|
52
|
+
include DetailedMessageable
|
53
|
+
|
54
|
+
attr_reader :location
|
55
|
+
attr_reader :error_message
|
56
|
+
attr_reader :token_type
|
57
|
+
|
58
|
+
def initialize(location, error_message, token_type)
|
59
|
+
@location = location
|
60
|
+
@error_message = error_message
|
61
|
+
@token_type = token_type
|
62
|
+
|
63
|
+
super "#{Location.to_string location}: Syntax error: #{error_message}, token=`#{location.source}` (#{token_type})"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
class InvalidTypeApplicationError < DefinitionError
|
68
|
+
attr_reader :type_name
|
69
|
+
attr_reader :args
|
70
|
+
attr_reader :params
|
71
|
+
attr_reader :type_params
|
72
|
+
attr_reader :location
|
73
|
+
|
74
|
+
def initialize(type_name:, args:, params:, location:)
|
75
|
+
@type_name = type_name
|
76
|
+
@args = args
|
77
|
+
@type_params = params
|
78
|
+
@params = params.map(&:name)
|
79
|
+
@location = location
|
80
|
+
super "#{Location.to_string location}: #{type_name} expects parameters [#{params.join(", ")}], but given args [#{args.join(", ")}]"
|
81
|
+
end
|
82
|
+
|
83
|
+
def self.check!(type_name:, args:, params:, location:)
|
84
|
+
min_arity = params.count { _1.default_type.nil? }
|
85
|
+
max_arity = params.size
|
86
|
+
|
87
|
+
unless min_arity <= args.size && args.size <= max_arity
|
88
|
+
raise new(type_name: type_name, args: args, params: params, location: location)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def self.check2!(env:, type_name:, args:, location:)
|
93
|
+
params =
|
94
|
+
case
|
95
|
+
when type_name.class?
|
96
|
+
decl = env.normalized_module_class_entry(type_name) or raise
|
97
|
+
decl.type_params
|
98
|
+
when type_name.interface?
|
99
|
+
env.interface_decls.fetch(type_name).decl.type_params
|
100
|
+
when type_name.alias?
|
101
|
+
env.type_alias_decls.fetch(type_name).decl.type_params
|
102
|
+
else
|
103
|
+
raise
|
104
|
+
end
|
105
|
+
|
106
|
+
check!(type_name: type_name, args: args, params: params, location: location)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
class RecursiveAncestorError < DefinitionError
|
111
|
+
attr_reader :ancestors
|
112
|
+
attr_reader :location
|
113
|
+
|
114
|
+
def initialize(ancestors:, location:)
|
115
|
+
@ancestors = ancestors
|
116
|
+
@location = location
|
117
|
+
|
118
|
+
names = ancestors.map do |ancestor|
|
119
|
+
case ancestor
|
120
|
+
when Definition::Ancestor::Singleton
|
121
|
+
"singleton(#{ancestor.name})"
|
122
|
+
when Definition::Ancestor::Instance
|
123
|
+
if ancestor.args.empty?
|
124
|
+
ancestor.name.to_s
|
125
|
+
else
|
126
|
+
"#{ancestor.name}[#{ancestor.args.join(", ")}]"
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
super "#{Location.to_string location}: Detected recursive ancestors: #{names.join(" < ")}"
|
132
|
+
end
|
133
|
+
|
134
|
+
def self.check!(self_ancestor, ancestors:, location:)
|
135
|
+
case self_ancestor
|
136
|
+
when Definition::Ancestor::Instance
|
137
|
+
if ancestors.any? {|a| a.is_a?(Definition::Ancestor::Instance) && a.name == self_ancestor.name }
|
138
|
+
raise new(ancestors: ancestors + [self_ancestor], location: location)
|
139
|
+
end
|
140
|
+
when Definition::Ancestor::Singleton
|
141
|
+
if ancestors.include?(self_ancestor)
|
142
|
+
raise new(ancestors: ancestors + [self_ancestor], location: location)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
class NoTypeFoundError < DefinitionError
|
149
|
+
include DetailedMessageable
|
150
|
+
|
151
|
+
attr_reader :type_name
|
152
|
+
attr_reader :location
|
153
|
+
|
154
|
+
def initialize(type_name:, location:)
|
155
|
+
@type_name = type_name
|
156
|
+
@location = location
|
157
|
+
|
158
|
+
super "#{Location.to_string location}: Could not find #{type_name}"
|
159
|
+
end
|
160
|
+
|
161
|
+
def self.check!(type_name, env:, location:)
|
162
|
+
env.type_name?(type_name) or raise new(type_name: type_name, location: location)
|
163
|
+
type_name
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
class NoSuperclassFoundError < DefinitionError
|
168
|
+
attr_reader :type_name
|
169
|
+
attr_reader :location
|
170
|
+
|
171
|
+
def initialize(type_name:, location:)
|
172
|
+
@type_name = type_name
|
173
|
+
@location = location
|
174
|
+
|
175
|
+
super "#{Location.to_string location}: Could not find super class: #{type_name}"
|
176
|
+
end
|
177
|
+
|
178
|
+
def self.check!(type_name, env:, location:)
|
179
|
+
if env.module_name?(type_name)
|
180
|
+
return
|
181
|
+
end
|
182
|
+
|
183
|
+
raise new(type_name: type_name, location: location)
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
class InheritModuleError < DefinitionError
|
188
|
+
include DetailedMessageable
|
189
|
+
|
190
|
+
attr_reader :super_decl
|
191
|
+
|
192
|
+
def initialize(super_decl)
|
193
|
+
@super_decl = super_decl
|
194
|
+
|
195
|
+
super "#{Location.to_string(super_decl.location)}: Cannot inherit a module: #{super_decl.name}"
|
196
|
+
end
|
197
|
+
|
198
|
+
def location
|
199
|
+
@super_decl.location
|
200
|
+
end
|
201
|
+
|
202
|
+
def self.check!(super_decl, env:)
|
203
|
+
super_name = env.normalize_type_name(super_decl.name)
|
204
|
+
return if env.class_decl?(super_name) || env.class_alias?(super_name)
|
205
|
+
|
206
|
+
raise new(super_decl)
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
class NoSelfTypeFoundError < DefinitionError
|
211
|
+
include DetailedMessageable
|
212
|
+
|
213
|
+
attr_reader :type_name
|
214
|
+
attr_reader :location
|
215
|
+
|
216
|
+
def initialize(type_name:, location:)
|
217
|
+
@type_name = type_name
|
218
|
+
@location = location
|
219
|
+
|
220
|
+
super "#{Location.to_string location}: Could not find self type: #{type_name}"
|
221
|
+
end
|
222
|
+
|
223
|
+
def self.check!(self_type, env:)
|
224
|
+
self_name = env.normalize_type_name(self_type.name)
|
225
|
+
(env.module_name?(self_name) || env.interface_name?(self_name)) or raise new(type_name: self_type.name, location: self_type.location)
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
class NoMixinFoundError < DefinitionError
|
230
|
+
include DetailedMessageable
|
231
|
+
|
232
|
+
attr_reader :type_name
|
233
|
+
attr_reader :member
|
234
|
+
|
235
|
+
def initialize(type_name:, member:)
|
236
|
+
@type_name = type_name
|
237
|
+
@member = member
|
238
|
+
|
239
|
+
super "#{Location.to_string location}: Could not find mixin: #{type_name}"
|
240
|
+
end
|
241
|
+
|
242
|
+
def location
|
243
|
+
member.location
|
244
|
+
end
|
245
|
+
|
246
|
+
def self.check!(type_name, env:, member:)
|
247
|
+
(env.module_name?(type_name) || env.interface_name?(type_name)) or raise new(type_name: type_name, member: member)
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
class DuplicatedMethodDefinitionError < DefinitionError
|
252
|
+
include DetailedMessageable
|
253
|
+
|
254
|
+
attr_reader :type
|
255
|
+
attr_reader :method_name
|
256
|
+
attr_reader :members
|
257
|
+
|
258
|
+
def initialize(type:, method_name:, members:)
|
259
|
+
@type = type
|
260
|
+
@method_name = method_name
|
261
|
+
@members = members
|
262
|
+
|
263
|
+
message = +"#{Location.to_string location}: #{qualified_method_name} has duplicated definitions"
|
264
|
+
if members.size > 1
|
265
|
+
message << " in #{other_locations.map { |loc| Location.to_string loc }.join(', ')}"
|
266
|
+
end
|
267
|
+
super message
|
268
|
+
end
|
269
|
+
|
270
|
+
def qualified_method_name
|
271
|
+
case type
|
272
|
+
when Types::ClassSingleton
|
273
|
+
"#{type.name}.#{method_name}"
|
274
|
+
else
|
275
|
+
"#{type.name}##{method_name}"
|
276
|
+
end
|
277
|
+
end
|
278
|
+
|
279
|
+
def type_name
|
280
|
+
type.name
|
281
|
+
end
|
282
|
+
|
283
|
+
def location
|
284
|
+
members[0].location
|
285
|
+
end
|
286
|
+
|
287
|
+
def other_locations
|
288
|
+
members.drop(1).map(&:location)
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
class DuplicatedInterfaceMethodDefinitionError < DefinitionError
|
293
|
+
include DetailedMessageable
|
294
|
+
|
295
|
+
attr_reader :type
|
296
|
+
attr_reader :method_name
|
297
|
+
attr_reader :member
|
298
|
+
|
299
|
+
def initialize(type:, method_name:, member:)
|
300
|
+
@type = type
|
301
|
+
@method_name = method_name
|
302
|
+
@member = member
|
303
|
+
|
304
|
+
super "#{member.location}: Duplicated method definition: #{qualified_method_name}"
|
305
|
+
end
|
306
|
+
|
307
|
+
def location
|
308
|
+
member.location
|
309
|
+
end
|
310
|
+
|
311
|
+
def qualified_method_name
|
312
|
+
case type
|
313
|
+
when Types::ClassSingleton
|
314
|
+
"#{type.name}.#{method_name}"
|
315
|
+
else
|
316
|
+
"#{type.name}##{method_name}"
|
317
|
+
end
|
318
|
+
end
|
319
|
+
|
320
|
+
def type_name
|
321
|
+
type.name
|
322
|
+
end
|
323
|
+
end
|
324
|
+
|
325
|
+
class VariableDuplicationError < DefinitionError
|
326
|
+
include DetailedMessageable
|
327
|
+
|
328
|
+
attr_reader :member
|
329
|
+
|
330
|
+
def initialize(member:)
|
331
|
+
@member = member
|
332
|
+
|
333
|
+
super "#{Location.to_string location}: Duplicated variable name #{member.name}"
|
334
|
+
end
|
335
|
+
|
336
|
+
def location
|
337
|
+
loc = @member.location or raise
|
338
|
+
loc[:name]
|
339
|
+
end
|
340
|
+
end
|
341
|
+
|
342
|
+
class InstanceVariableDuplicationError < VariableDuplicationError
|
343
|
+
def self.check!(variables:, member:, type_name:)
|
344
|
+
if old = variables[member.name]
|
345
|
+
if old.declared_in == type_name
|
346
|
+
raise new(member: member)
|
347
|
+
end
|
348
|
+
end
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
352
|
+
class ClassInstanceVariableDuplicationError < VariableDuplicationError
|
353
|
+
def self.check!(variables:, member:, type_name:)
|
354
|
+
if old = variables[member.name]
|
355
|
+
if old.declared_in == type_name
|
356
|
+
raise new(member: member)
|
357
|
+
end
|
358
|
+
end
|
359
|
+
end
|
360
|
+
end
|
361
|
+
|
362
|
+
class ClassVariableDuplicationError < VariableDuplicationError
|
363
|
+
def self.check!(variables:, member:, type_name:)
|
364
|
+
if old = variables[member.name]
|
365
|
+
raise new(member: member)
|
366
|
+
end
|
367
|
+
end
|
368
|
+
end
|
369
|
+
|
370
|
+
class UnknownMethodAliasError < DefinitionError
|
371
|
+
include DetailedMessageable
|
372
|
+
|
373
|
+
attr_reader :type_name
|
374
|
+
attr_reader :original_name
|
375
|
+
attr_reader :aliased_name
|
376
|
+
attr_reader :location
|
377
|
+
|
378
|
+
def initialize(type_name:, original_name:, aliased_name:, location:)
|
379
|
+
@type_name = type_name
|
380
|
+
@original_name = original_name
|
381
|
+
@aliased_name = aliased_name
|
382
|
+
@location = location
|
383
|
+
|
384
|
+
super "#{Location.to_string location}: Unknown method alias name: #{original_name} => #{aliased_name} (#{type_name})"
|
385
|
+
end
|
386
|
+
end
|
387
|
+
|
388
|
+
class SuperclassMismatchError < DefinitionError
|
389
|
+
attr_reader :name
|
390
|
+
attr_reader :entry
|
391
|
+
|
392
|
+
def initialize(name:, entry:)
|
393
|
+
@name = name
|
394
|
+
@entry = entry
|
395
|
+
super "#{Location.to_string entry.primary.decl.location}: Superclass mismatch: #{name}"
|
396
|
+
end
|
397
|
+
end
|
398
|
+
|
399
|
+
class InvalidOverloadMethodError < DefinitionError
|
400
|
+
include DetailedMessageable
|
401
|
+
|
402
|
+
attr_reader :type_name
|
403
|
+
attr_reader :method_name
|
404
|
+
attr_reader :kind
|
405
|
+
attr_reader :members
|
406
|
+
|
407
|
+
def initialize(type_name:, method_name:, kind:, members:)
|
408
|
+
@type_name = type_name
|
409
|
+
@method_name = method_name
|
410
|
+
@kind = kind
|
411
|
+
@members = members
|
412
|
+
|
413
|
+
delimiter = case kind
|
414
|
+
when :instance
|
415
|
+
"#"
|
416
|
+
when :singleton
|
417
|
+
"."
|
418
|
+
end
|
419
|
+
|
420
|
+
super "#{Location.to_string members[0].location}: Invalid method overloading: #{type_name}#{delimiter}#{method_name}"
|
421
|
+
end
|
422
|
+
|
423
|
+
def location
|
424
|
+
members[0].location
|
425
|
+
end
|
426
|
+
end
|
427
|
+
|
428
|
+
class GenericParameterMismatchError < LoadingError
|
429
|
+
attr_reader :name
|
430
|
+
attr_reader :decl
|
431
|
+
|
432
|
+
def initialize(name:, decl:)
|
433
|
+
@name = name
|
434
|
+
@decl = decl
|
435
|
+
super "#{Location.to_string decl.location}: Generic parameters mismatch: #{name}"
|
436
|
+
end
|
437
|
+
end
|
438
|
+
|
439
|
+
class DuplicatedDeclarationError < LoadingError
|
440
|
+
attr_reader :name
|
441
|
+
attr_reader :decls
|
442
|
+
|
443
|
+
def initialize(name, *decls)
|
444
|
+
@name = name
|
445
|
+
@decls = decls
|
446
|
+
|
447
|
+
last_decl = decls.last or raise
|
448
|
+
super "#{Location.to_string last_decl.location}: Duplicated declaration: #{name}"
|
449
|
+
end
|
450
|
+
end
|
451
|
+
|
452
|
+
class InvalidVarianceAnnotationError < DefinitionError
|
453
|
+
include DetailedMessageable
|
454
|
+
|
455
|
+
attr_reader :type_name
|
456
|
+
attr_reader :param
|
457
|
+
attr_reader :location
|
458
|
+
|
459
|
+
def initialize(type_name:, param:, location:)
|
460
|
+
@type_name = type_name
|
461
|
+
@param = param
|
462
|
+
@location = location
|
463
|
+
|
464
|
+
super "#{Location.to_string location}: Type parameter variance error: #{param.name} is #{param.variance} but used as incompatible variance"
|
465
|
+
end
|
466
|
+
end
|
467
|
+
|
468
|
+
class RecursiveAliasDefinitionError < DefinitionError
|
469
|
+
include DetailedMessageable
|
470
|
+
|
471
|
+
attr_reader :type
|
472
|
+
attr_reader :defs
|
473
|
+
|
474
|
+
def initialize(type:, defs:)
|
475
|
+
@type = type
|
476
|
+
@defs = defs
|
477
|
+
|
478
|
+
super "#{Location.to_string location}: Recursive aliases in #{type}: #{defs.map(&:name).join(", ")}"
|
479
|
+
end
|
480
|
+
|
481
|
+
def location
|
482
|
+
first_def = defs.first or raise
|
483
|
+
original = first_def.original or raise
|
484
|
+
original.location
|
485
|
+
end
|
486
|
+
end
|
487
|
+
|
488
|
+
class MixinClassError < DefinitionError
|
489
|
+
include DetailedMessageable
|
490
|
+
|
491
|
+
attr_reader :type_name
|
492
|
+
attr_reader :member
|
493
|
+
|
494
|
+
def initialize(type_name:, member:)
|
495
|
+
@type_name = type_name
|
496
|
+
@member = member
|
497
|
+
|
498
|
+
super "#{Location.to_string member.location}: Cannot #{mixin_name} a class `#{member.name}` in the definition of `#{type_name}`"
|
499
|
+
end
|
500
|
+
|
501
|
+
def location
|
502
|
+
member.location
|
503
|
+
end
|
504
|
+
|
505
|
+
def self.check!(type_name:, env:, member:)
|
506
|
+
if env.class_decl?(member.name)
|
507
|
+
raise new(type_name: type_name, member: member)
|
508
|
+
end
|
509
|
+
end
|
510
|
+
|
511
|
+
private
|
512
|
+
|
513
|
+
def mixin_name
|
514
|
+
case member
|
515
|
+
when AST::Members::Prepend
|
516
|
+
"prepend"
|
517
|
+
when AST::Members::Include
|
518
|
+
"include"
|
519
|
+
when AST::Members::Extend
|
520
|
+
"extend"
|
521
|
+
else
|
522
|
+
raise
|
523
|
+
end
|
524
|
+
end
|
525
|
+
end
|
526
|
+
|
527
|
+
class RecursiveTypeAliasError < BaseError
|
528
|
+
include DetailedMessageable
|
529
|
+
|
530
|
+
attr_reader :alias_names
|
531
|
+
attr_reader :location
|
532
|
+
|
533
|
+
def initialize(alias_names:, location:)
|
534
|
+
@alias_names = alias_names
|
535
|
+
@location = location
|
536
|
+
|
537
|
+
super "#{Location.to_string location}: Recursive type alias definition found for: #{name}"
|
538
|
+
end
|
539
|
+
|
540
|
+
def name
|
541
|
+
@alias_names.map(&:name).join(', ')
|
542
|
+
end
|
543
|
+
end
|
544
|
+
|
545
|
+
class NonregularTypeAliasError < BaseError
|
546
|
+
include DetailedMessageable
|
547
|
+
|
548
|
+
attr_reader :diagnostic
|
549
|
+
attr_reader :location
|
550
|
+
|
551
|
+
def initialize(diagnostic:, location:)
|
552
|
+
@diagnostic = diagnostic
|
553
|
+
@location = location
|
554
|
+
|
555
|
+
super "#{Location.to_string location}: Nonregular generic type alias is prohibited: #{diagnostic.type_name}, #{diagnostic.nonregular_type}"
|
556
|
+
end
|
557
|
+
end
|
558
|
+
|
559
|
+
class CyclicTypeParameterBound < BaseError
|
560
|
+
include DetailedMessageable
|
561
|
+
|
562
|
+
attr_reader :params, :type_name, :method_name, :location
|
563
|
+
|
564
|
+
def initialize(type_name:, method_name:, params:, location:)
|
565
|
+
@type_name = type_name
|
566
|
+
@method_name = method_name
|
567
|
+
@params = params
|
568
|
+
@location = location
|
569
|
+
|
570
|
+
super "#{Location.to_string(location)}: Cyclic type parameter bound is prohibited"
|
571
|
+
end
|
572
|
+
end
|
573
|
+
|
574
|
+
class InconsistentClassModuleAliasError < BaseError
|
575
|
+
include DetailedMessageable
|
576
|
+
|
577
|
+
attr_reader :alias_entry
|
578
|
+
|
579
|
+
def initialize(entry)
|
580
|
+
@alias_entry = entry
|
581
|
+
|
582
|
+
expected_kind, actual_kind =
|
583
|
+
case entry
|
584
|
+
when Environment::ModuleAliasEntry
|
585
|
+
["module", "class"]
|
586
|
+
when Environment::ClassAliasEntry
|
587
|
+
["class", "module"]
|
588
|
+
end
|
589
|
+
|
590
|
+
super "#{Location.to_string(entry.decl.location&.[](:old_name))}: A #{expected_kind} `#{entry.decl.new_name}` cannot be an alias of a #{actual_kind} `#{entry.decl.old_name}`"
|
591
|
+
end
|
592
|
+
|
593
|
+
def location
|
594
|
+
@alias_entry.decl.location
|
595
|
+
end
|
596
|
+
end
|
597
|
+
|
598
|
+
class CyclicClassAliasDefinitionError < BaseError
|
599
|
+
include DetailedMessageable
|
600
|
+
|
601
|
+
attr_reader :alias_entry
|
602
|
+
|
603
|
+
def initialize(entry)
|
604
|
+
@alias_entry = entry
|
605
|
+
|
606
|
+
super "#{Location.to_string(entry.decl.location&.[](:old_name))}: A #{alias_entry.decl.new_name} is a cyclic definition"
|
607
|
+
end
|
608
|
+
|
609
|
+
def location
|
610
|
+
@alias_entry.decl.location
|
611
|
+
end
|
612
|
+
end
|
613
|
+
|
614
|
+
class WillSyntaxError < DefinitionError
|
615
|
+
include DetailedMessageable
|
616
|
+
|
617
|
+
attr_reader :location
|
618
|
+
|
619
|
+
def initialize(message, location:)
|
620
|
+
super "#{Location.to_string(location)}: #{message}"
|
621
|
+
@location = location
|
622
|
+
end
|
623
|
+
end
|
624
|
+
|
625
|
+
class TypeParamDefaultReferenceError < DefinitionError
|
626
|
+
include DetailedMessageable
|
627
|
+
|
628
|
+
attr_reader :type_param
|
629
|
+
attr_reader :location
|
630
|
+
|
631
|
+
def initialize(type_param, location:)
|
632
|
+
super "#{Location.to_string(location)}: the default of #{type_param.name} cannot include optional type parameter"
|
633
|
+
@location = location
|
634
|
+
@type_param = type_param
|
635
|
+
end
|
636
|
+
|
637
|
+
def self.check!(type_params)
|
638
|
+
if errors = AST::TypeParam.validate(type_params)
|
639
|
+
error = errors[0] or raise
|
640
|
+
error.default_type or raise
|
641
|
+
raise new(error, location: error.default_type.location)
|
642
|
+
end
|
643
|
+
end
|
644
|
+
end
|
645
|
+
end
|
data/lib/rbs/factory.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RBS
|
4
|
+
class Factory
|
5
|
+
def type_name(string)
|
6
|
+
absolute = string.start_with?("::")
|
7
|
+
|
8
|
+
*path, name = string.delete_prefix("::").split("::").map(&:to_sym)
|
9
|
+
|
10
|
+
name or raise
|
11
|
+
|
12
|
+
TypeName.new(
|
13
|
+
name: name,
|
14
|
+
namespace: Namespace.new(path: path, absolute: absolute)
|
15
|
+
)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RBS
|
4
|
+
module FileFinder
|
5
|
+
module_function
|
6
|
+
|
7
|
+
def self.each_file(path, immediate: nil, skip_hidden:, &block)
|
8
|
+
return enum_for((__method__ or raise), path, immediate: immediate, skip_hidden: skip_hidden) unless block
|
9
|
+
|
10
|
+
case
|
11
|
+
when path.file?
|
12
|
+
yield path
|
13
|
+
|
14
|
+
when path.directory?
|
15
|
+
paths = Pathname.glob("#{path}/**/*.rbs")
|
16
|
+
|
17
|
+
if skip_hidden
|
18
|
+
paths.select! do |child|
|
19
|
+
child.relative_path_from(path).ascend.drop(1).none? { _1.basename.to_s.start_with?("_") }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
paths.sort_by!(&:to_s)
|
23
|
+
|
24
|
+
paths.each(&block)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|