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/writer.rb
ADDED
@@ -0,0 +1,424 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RBS
|
4
|
+
class Writer
|
5
|
+
attr_reader :out
|
6
|
+
attr_reader :indentation
|
7
|
+
|
8
|
+
def initialize(out:)
|
9
|
+
@out = out
|
10
|
+
@indentation = []
|
11
|
+
@preserve = false
|
12
|
+
end
|
13
|
+
|
14
|
+
def preserve?
|
15
|
+
@preserve
|
16
|
+
end
|
17
|
+
|
18
|
+
def preserve!(preserve: true)
|
19
|
+
@preserve = preserve
|
20
|
+
self
|
21
|
+
end
|
22
|
+
|
23
|
+
def indent(size = 2)
|
24
|
+
indentation.push(" " * size)
|
25
|
+
yield
|
26
|
+
ensure
|
27
|
+
indentation.pop
|
28
|
+
end
|
29
|
+
|
30
|
+
def prefix
|
31
|
+
indentation.join()
|
32
|
+
end
|
33
|
+
|
34
|
+
def puts(string = "")
|
35
|
+
if string.size > 0
|
36
|
+
@out.puts("#{prefix}#{string}")
|
37
|
+
else
|
38
|
+
@out.puts
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def format_annotation(annotation)
|
43
|
+
string = annotation.string
|
44
|
+
case
|
45
|
+
when string !~ /\}/
|
46
|
+
"%a{#{string}}"
|
47
|
+
when string !~ /\)/
|
48
|
+
"%a(#{string})"
|
49
|
+
when string !~ /\]/
|
50
|
+
"%a[#{string}]"
|
51
|
+
when string !~ /\>/
|
52
|
+
"%a<#{string}>"
|
53
|
+
when string !~ /\|/
|
54
|
+
"%a|#{string}|"
|
55
|
+
else
|
56
|
+
raise
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def write_annotation(annotations)
|
61
|
+
annotations.each do |annotation|
|
62
|
+
puts format_annotation(annotation)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def write_comment(comment)
|
67
|
+
if comment
|
68
|
+
comment.string.lines.each do |line|
|
69
|
+
line = line.chomp
|
70
|
+
unless line.empty?
|
71
|
+
puts "# #{line}"
|
72
|
+
else
|
73
|
+
puts "#"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def write(contents)
|
80
|
+
resolves = contents.select { _1.is_a?(AST::Directives::ResolveTypeNames) } #: Array[AST::Directives::ResolveTypeNames]
|
81
|
+
uses = contents.select {|c| c.is_a?(AST::Directives::Use) } #: Array[AST::Directives::Use]
|
82
|
+
decls = contents.select {|c| c.is_a?(AST::Declarations::Base) } #: Array[AST::Declarations::t]
|
83
|
+
|
84
|
+
if first_resolves = resolves.first
|
85
|
+
puts "# resolve-type-names: #{first_resolves.value}"
|
86
|
+
puts
|
87
|
+
end
|
88
|
+
|
89
|
+
uses.each do |dir|
|
90
|
+
write_use_directive(dir)
|
91
|
+
end
|
92
|
+
puts unless uses.empty?
|
93
|
+
|
94
|
+
[nil, *decls].each_cons(2) do |prev, decl|
|
95
|
+
raise unless decl
|
96
|
+
|
97
|
+
preserve_empty_line(prev, decl)
|
98
|
+
write_decl decl
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def write_use_directive(dir)
|
103
|
+
clauses = dir.clauses.map do |clause|
|
104
|
+
case clause
|
105
|
+
when AST::Directives::Use::SingleClause
|
106
|
+
if clause.new_name
|
107
|
+
"#{clause.type_name} as #{clause.new_name}"
|
108
|
+
else
|
109
|
+
"#{clause.type_name}"
|
110
|
+
end
|
111
|
+
when AST::Directives::Use::WildcardClause
|
112
|
+
"#{clause.namespace}*"
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
puts "use #{clauses.join(", ")}"
|
117
|
+
end
|
118
|
+
|
119
|
+
def write_decl(decl)
|
120
|
+
case decl
|
121
|
+
when AST::Declarations::Class
|
122
|
+
super_class = if super_class = decl.super_class
|
123
|
+
" < #{name_and_args(super_class.name, super_class.args)}"
|
124
|
+
end
|
125
|
+
write_comment decl.comment
|
126
|
+
write_annotation decl.annotations
|
127
|
+
puts "class #{name_and_params(decl.name, decl.type_params)}#{super_class}"
|
128
|
+
|
129
|
+
indent do
|
130
|
+
[nil, *decl.members].each_cons(2) do |prev, member|
|
131
|
+
raise unless member
|
132
|
+
|
133
|
+
preserve_empty_line prev, member
|
134
|
+
write_member member
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
puts "end"
|
139
|
+
|
140
|
+
when AST::Declarations::Module
|
141
|
+
self_type = unless decl.self_types.empty?
|
142
|
+
" : #{decl.self_types.join(", ")}"
|
143
|
+
end
|
144
|
+
|
145
|
+
write_comment decl.comment
|
146
|
+
write_annotation decl.annotations
|
147
|
+
|
148
|
+
puts "module #{name_and_params(decl.name, decl.type_params)}#{self_type}"
|
149
|
+
|
150
|
+
indent do
|
151
|
+
decl.members.each.with_index do |member, index|
|
152
|
+
if index > 0
|
153
|
+
puts
|
154
|
+
end
|
155
|
+
write_member member
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
puts "end"
|
160
|
+
when AST::Declarations::Constant
|
161
|
+
write_comment decl.comment
|
162
|
+
puts "#{decl.name}: #{decl.type}"
|
163
|
+
|
164
|
+
when AST::Declarations::Global
|
165
|
+
write_comment decl.comment
|
166
|
+
puts "#{decl.name}: #{decl.type}"
|
167
|
+
|
168
|
+
when AST::Declarations::TypeAlias
|
169
|
+
write_comment decl.comment
|
170
|
+
write_annotation decl.annotations
|
171
|
+
write_loc_source(decl) {
|
172
|
+
puts "type #{name_and_params(decl.name, decl.type_params)} = #{decl.type}"
|
173
|
+
}
|
174
|
+
|
175
|
+
when AST::Declarations::ClassAlias
|
176
|
+
write_comment decl.comment
|
177
|
+
write_loc_source(decl) {
|
178
|
+
puts "class #{decl.new_name} = #{decl.old_name}"
|
179
|
+
}
|
180
|
+
|
181
|
+
when AST::Declarations::ModuleAlias
|
182
|
+
write_comment decl.comment
|
183
|
+
write_loc_source(decl) {
|
184
|
+
puts "module #{decl.new_name} = #{decl.old_name}"
|
185
|
+
}
|
186
|
+
|
187
|
+
when AST::Declarations::Interface
|
188
|
+
write_comment decl.comment
|
189
|
+
write_annotation decl.annotations
|
190
|
+
|
191
|
+
puts "interface #{name_and_params(decl.name, decl.type_params)}"
|
192
|
+
|
193
|
+
indent do
|
194
|
+
decl.members.each.with_index do |member, index|
|
195
|
+
if index > 0
|
196
|
+
puts
|
197
|
+
end
|
198
|
+
write_member member
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
puts "end"
|
203
|
+
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
def name_and_params(name, params)
|
208
|
+
if params.empty?
|
209
|
+
"#{name}"
|
210
|
+
else
|
211
|
+
ps = params.each.map do |param|
|
212
|
+
param.to_s
|
213
|
+
end
|
214
|
+
|
215
|
+
"#{name}[#{ps.join(", ")}]"
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
def name_and_args(name, args)
|
220
|
+
if name && args
|
221
|
+
if args.empty?
|
222
|
+
"#{name}"
|
223
|
+
else
|
224
|
+
"#{name}[#{args.join(", ")}]"
|
225
|
+
end
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
def put_lines(lines, leading_spaces:)
|
230
|
+
lines.each_line.with_index do |line, index|
|
231
|
+
line.chomp!
|
232
|
+
line.rstrip!
|
233
|
+
line.sub!(/\A( {,#{leading_spaces}})/, '') if index > 0
|
234
|
+
|
235
|
+
puts line
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
def write_member(member)
|
240
|
+
case member
|
241
|
+
when AST::Members::Include
|
242
|
+
write_comment member.comment
|
243
|
+
write_annotation member.annotations
|
244
|
+
puts "include #{name_and_args(member.name, member.args)}"
|
245
|
+
when AST::Members::Extend
|
246
|
+
write_comment member.comment
|
247
|
+
write_annotation member.annotations
|
248
|
+
puts "extend #{name_and_args(member.name, member.args)}"
|
249
|
+
when AST::Members::Prepend
|
250
|
+
write_comment member.comment
|
251
|
+
write_annotation member.annotations
|
252
|
+
puts "prepend #{name_and_args(member.name, member.args)}"
|
253
|
+
when AST::Members::AttrAccessor
|
254
|
+
write_comment member.comment
|
255
|
+
write_annotation member.annotations
|
256
|
+
puts "#{attribute(:accessor, member)}"
|
257
|
+
when AST::Members::AttrReader
|
258
|
+
write_comment member.comment
|
259
|
+
write_annotation member.annotations
|
260
|
+
puts "#{attribute(:reader, member)}"
|
261
|
+
when AST::Members::AttrWriter
|
262
|
+
write_comment member.comment
|
263
|
+
write_annotation member.annotations
|
264
|
+
puts "#{attribute(:writer, member)}"
|
265
|
+
when AST::Members::Public
|
266
|
+
puts "public"
|
267
|
+
when AST::Members::Private
|
268
|
+
puts "private"
|
269
|
+
when AST::Members::Alias
|
270
|
+
write_comment member.comment
|
271
|
+
write_annotation member.annotations
|
272
|
+
new_name = member.singleton? ? "self.#{method_name(member.new_name)}" : method_name(member.new_name)
|
273
|
+
old_name = member.singleton? ? "self.#{method_name(member.old_name)}" : method_name(member.old_name)
|
274
|
+
puts "alias #{new_name} #{old_name}"
|
275
|
+
when AST::Members::InstanceVariable
|
276
|
+
write_comment member.comment
|
277
|
+
puts "#{member.name}: #{member.type}"
|
278
|
+
when AST::Members::ClassInstanceVariable
|
279
|
+
write_comment member.comment
|
280
|
+
puts "self.#{member.name}: #{member.type}"
|
281
|
+
when AST::Members::ClassVariable
|
282
|
+
write_comment member.comment
|
283
|
+
puts "#{member.name}: #{member.type}"
|
284
|
+
when AST::Members::MethodDefinition
|
285
|
+
write_comment member.comment
|
286
|
+
write_annotation member.annotations
|
287
|
+
write_loc_source(member) { write_def member }
|
288
|
+
else
|
289
|
+
write_decl member
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
293
|
+
def method_name(name)
|
294
|
+
s = name.to_s
|
295
|
+
|
296
|
+
case s
|
297
|
+
when /\A(_?)[A-Za-z_]\w*(\?|!|=)?\Z/
|
298
|
+
s
|
299
|
+
when *%w(| ^ & <=> == === =~ > >= < <= << >> + - * / % ** ~ +@ -@ [] []= ` ! != !~)
|
300
|
+
s
|
301
|
+
else
|
302
|
+
"`#{s}`"
|
303
|
+
end
|
304
|
+
end
|
305
|
+
|
306
|
+
def write_loc_source(located)
|
307
|
+
if preserve? && loc = located.location
|
308
|
+
put_lines(loc.source, leading_spaces: loc.start_column)
|
309
|
+
else
|
310
|
+
yield
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
def write_def(member)
|
315
|
+
visibility =
|
316
|
+
case member.visibility
|
317
|
+
when :public
|
318
|
+
"public "
|
319
|
+
when :private
|
320
|
+
"private "
|
321
|
+
else
|
322
|
+
""
|
323
|
+
end
|
324
|
+
|
325
|
+
name = case member.kind
|
326
|
+
when :instance
|
327
|
+
"#{method_name(member.name)}"
|
328
|
+
when :singleton_instance
|
329
|
+
"self?.#{method_name(member.name)}"
|
330
|
+
when :singleton
|
331
|
+
"self.#{method_name(member.name)}"
|
332
|
+
end
|
333
|
+
|
334
|
+
string = +""
|
335
|
+
|
336
|
+
prefix = "#{visibility}def #{name}:"
|
337
|
+
padding = " " * (prefix.size-1)
|
338
|
+
|
339
|
+
string << prefix
|
340
|
+
|
341
|
+
member.overloads.each.with_index do |overload, index|
|
342
|
+
if index > 0
|
343
|
+
string << padding
|
344
|
+
string << "|"
|
345
|
+
end
|
346
|
+
|
347
|
+
overload.annotations.each do |annotation|
|
348
|
+
string << " #{format_annotation(annotation)}"
|
349
|
+
end
|
350
|
+
string << " #{overload.method_type}\n"
|
351
|
+
end
|
352
|
+
|
353
|
+
if member.overloading?
|
354
|
+
if member.overloads.size > 0
|
355
|
+
string << padding
|
356
|
+
string << "|"
|
357
|
+
end
|
358
|
+
string << " ...\n"
|
359
|
+
end
|
360
|
+
|
361
|
+
string.each_line do |line|
|
362
|
+
puts line.chomp
|
363
|
+
end
|
364
|
+
end
|
365
|
+
|
366
|
+
def attribute(kind, attr)
|
367
|
+
visibility =
|
368
|
+
case attr.visibility
|
369
|
+
when :public
|
370
|
+
"public "
|
371
|
+
when :private
|
372
|
+
"private "
|
373
|
+
else
|
374
|
+
""
|
375
|
+
end
|
376
|
+
|
377
|
+
var = case attr.ivar_name
|
378
|
+
when nil
|
379
|
+
""
|
380
|
+
when false
|
381
|
+
"()"
|
382
|
+
else
|
383
|
+
"(#{attr.ivar_name})"
|
384
|
+
end
|
385
|
+
|
386
|
+
receiver = case attr.kind
|
387
|
+
when :singleton
|
388
|
+
"self."
|
389
|
+
when :instance
|
390
|
+
""
|
391
|
+
end
|
392
|
+
|
393
|
+
"#{visibility}attr_#{kind} #{receiver}#{method_name(attr.name)}#{var}: #{attr.type}"
|
394
|
+
end
|
395
|
+
|
396
|
+
def preserve_empty_line(prev, decl)
|
397
|
+
# @type var decl: _Located
|
398
|
+
|
399
|
+
return unless prev
|
400
|
+
|
401
|
+
if (_ = decl).respond_to?(:comment)
|
402
|
+
if comment = (_ = decl).comment
|
403
|
+
decl = comment
|
404
|
+
end
|
405
|
+
end
|
406
|
+
|
407
|
+
prev_loc = prev.location
|
408
|
+
decl_loc = decl.location
|
409
|
+
|
410
|
+
if prev_loc && decl_loc
|
411
|
+
prev_end_line = prev_loc.end_line
|
412
|
+
start_line = decl_loc.start_line
|
413
|
+
|
414
|
+
if start_line - prev_end_line > 1
|
415
|
+
puts
|
416
|
+
end
|
417
|
+
else
|
418
|
+
# When the signature is not constructed by the parser,
|
419
|
+
# it always inserts an empty line.
|
420
|
+
puts
|
421
|
+
end
|
422
|
+
end
|
423
|
+
end
|
424
|
+
end
|
data/lib/rbs.rb
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rbs/version"
|
4
|
+
|
5
|
+
require "set"
|
6
|
+
require "json"
|
7
|
+
require "pathname"
|
8
|
+
require "pp"
|
9
|
+
require "ripper"
|
10
|
+
require "logger"
|
11
|
+
require "tsort"
|
12
|
+
require "strscan"
|
13
|
+
|
14
|
+
require "rbs/errors"
|
15
|
+
require "rbs/buffer"
|
16
|
+
require "rbs/namespace"
|
17
|
+
require "rbs/type_name"
|
18
|
+
require "rbs/types"
|
19
|
+
require "rbs/method_type"
|
20
|
+
require "rbs/file_finder"
|
21
|
+
require "rbs/ast/type_param"
|
22
|
+
require "rbs/ast/directives"
|
23
|
+
require "rbs/ast/declarations"
|
24
|
+
require "rbs/ast/members"
|
25
|
+
require "rbs/ast/annotation"
|
26
|
+
require "rbs/ast/visitor"
|
27
|
+
require "rbs/environment"
|
28
|
+
require "rbs/environment/use_map"
|
29
|
+
require "rbs/environment_loader"
|
30
|
+
require "rbs/builtin_names"
|
31
|
+
require "rbs/definition"
|
32
|
+
require "rbs/definition_builder"
|
33
|
+
require "rbs/definition_builder/ancestor_builder"
|
34
|
+
require "rbs/definition_builder/method_builder"
|
35
|
+
require "rbs/diff"
|
36
|
+
require "rbs/variance_calculator"
|
37
|
+
require "rbs/substitution"
|
38
|
+
require "rbs/constant"
|
39
|
+
require "rbs/resolver/constant_resolver"
|
40
|
+
require "rbs/resolver/type_name_resolver"
|
41
|
+
require "rbs/ast/comment"
|
42
|
+
require "rbs/writer"
|
43
|
+
require "rbs/prototype/helpers"
|
44
|
+
require "rbs/prototype/rbi"
|
45
|
+
require "rbs/prototype/rb"
|
46
|
+
require "rbs/prototype/runtime"
|
47
|
+
require "rbs/prototype/node_usage"
|
48
|
+
require "rbs/environment_walker"
|
49
|
+
require "rbs/vendorer"
|
50
|
+
require "rbs/validator"
|
51
|
+
require "rbs/factory"
|
52
|
+
require "rbs/repository"
|
53
|
+
require "rbs/subtractor"
|
54
|
+
require "rbs/ancestor_graph"
|
55
|
+
require "rbs/locator"
|
56
|
+
require "rbs/type_alias_dependency"
|
57
|
+
require "rbs/type_alias_regularity"
|
58
|
+
require "rbs/collection"
|
59
|
+
|
60
|
+
require "rbs_extension"
|
61
|
+
require "rbs/parser_aux"
|
62
|
+
require "rbs/location_aux"
|
63
|
+
|
64
|
+
module RBS
|
65
|
+
class <<self
|
66
|
+
attr_reader :logger_level
|
67
|
+
attr_reader :logger_output
|
68
|
+
|
69
|
+
def logger
|
70
|
+
@logger ||= Logger.new(logger_output || STDERR, level: logger_level || Logger::WARN, progname: "rbs")
|
71
|
+
end
|
72
|
+
|
73
|
+
def logger_output=(val)
|
74
|
+
@logger = nil
|
75
|
+
@logger_output = val
|
76
|
+
end
|
77
|
+
|
78
|
+
def logger_level=(level)
|
79
|
+
@logger_level = level
|
80
|
+
@logger = nil
|
81
|
+
end
|
82
|
+
|
83
|
+
def print_warning()
|
84
|
+
@warnings ||= Set[]
|
85
|
+
|
86
|
+
message = yield()
|
87
|
+
|
88
|
+
unless @warnings.include?(message)
|
89
|
+
@warnings << message
|
90
|
+
logger.warn { message }
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
begin
|
4
|
+
gem 'rdoc', '~> 6.4'
|
5
|
+
require 'rdoc_plugin/parser'
|
6
|
+
module RDoc
|
7
|
+
class Parser
|
8
|
+
class RBS < Parser
|
9
|
+
parse_files_matching(/\.rbs$/)
|
10
|
+
def scan
|
11
|
+
::RBS::RDocPlugin::Parser.new(@top_level, @content).scan
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
rescue Gem::LoadError
|
17
|
+
# Error :sad:
|
18
|
+
rescue Exception
|
19
|
+
# Exception :sad:
|
20
|
+
end
|
@@ -0,0 +1,163 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rbs'
|
4
|
+
|
5
|
+
module RBS
|
6
|
+
module RDocPlugin
|
7
|
+
class Parser
|
8
|
+
|
9
|
+
attr_accessor :top_level, :content
|
10
|
+
|
11
|
+
def initialize(top_level, content)
|
12
|
+
@top_level = top_level
|
13
|
+
@content = content
|
14
|
+
end
|
15
|
+
|
16
|
+
def scan
|
17
|
+
_, _, decls = ::RBS::Parser.parse_signature(@content)
|
18
|
+
decls.each do |decl|
|
19
|
+
parse_member(decl: decl, context: @top_level)
|
20
|
+
end
|
21
|
+
@top_level
|
22
|
+
end
|
23
|
+
|
24
|
+
def parse_member(decl:, context:, outer_name: nil)
|
25
|
+
case decl
|
26
|
+
when ::RBS::AST::Declarations::Class
|
27
|
+
parse_class_decl(decl: decl, context: context, outer_name: outer_name)
|
28
|
+
when ::RBS::AST::Declarations::Module
|
29
|
+
parse_module_decl(decl: decl, context: context, outer_name: outer_name)
|
30
|
+
when ::RBS::AST::Declarations::Constant
|
31
|
+
context = @top_level.find_class_or_module outer_name.to_s if outer_name
|
32
|
+
parse_constant_decl(decl: decl, context: context, outer_name: outer_name)
|
33
|
+
when ::RBS::AST::Declarations::Interface
|
34
|
+
parse_module_decl(decl: decl, context: context, outer_name: outer_name)
|
35
|
+
when ::RBS::AST::Members::MethodDefinition
|
36
|
+
context = @top_level.find_class_or_module outer_name.to_s if outer_name
|
37
|
+
parse_method_decl(decl: decl, context: context, outer_name: outer_name)
|
38
|
+
when ::RBS::AST::Members::Alias
|
39
|
+
context = @top_level.find_class_or_module outer_name.to_s if outer_name
|
40
|
+
parse_method_alias_decl(decl: decl, context: context, outer_name: outer_name)
|
41
|
+
when ::RBS::AST::Members::AttrReader, ::RBS::AST::Members::AttrWriter, ::RBS::AST::Members::AttrAccessor
|
42
|
+
context = @top_level.find_class_or_module outer_name.to_s if outer_name
|
43
|
+
parse_attr_decl(decl: decl, context: context, outer_name: outer_name)
|
44
|
+
when ::RBS::AST::Members::Include
|
45
|
+
context = @top_level.find_class_or_module outer_name.to_s if outer_name
|
46
|
+
parse_include_decl(decl: decl, context: context, outer_name: outer_name)
|
47
|
+
when ::RBS::AST::Members::Extend
|
48
|
+
context = @top_level.find_class_or_module outer_name.to_s if outer_name
|
49
|
+
parse_extend_decl(decl: decl, context: context, outer_name: outer_name)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def parse_class_decl(decl:, context:, outer_name: nil)
|
54
|
+
full_name = fully_qualified_name(outer_name: outer_name, decl: decl)
|
55
|
+
klass = context.add_class(RDoc::NormalClass, full_name.to_s, decl.super_class&.name&.to_s || "::Object")
|
56
|
+
klass.add_comment(construct_comment(context: context, comment: comment_string(decl)), context) if decl.comment
|
57
|
+
decl.members.each { |member| parse_member(decl: member, context: context, outer_name: full_name) }
|
58
|
+
end
|
59
|
+
|
60
|
+
def parse_module_decl(decl:, context:, outer_name: nil)
|
61
|
+
full_name = fully_qualified_name(outer_name: outer_name, decl: _ = decl)
|
62
|
+
kmodule = context.add_module(RDoc::NormalModule, full_name.to_s)
|
63
|
+
kmodule.add_comment(construct_comment(context: context, comment: comment_string(decl)), context) if decl.comment
|
64
|
+
decl.members.each { |member| parse_member(decl: member, context: context, outer_name: full_name) }
|
65
|
+
end
|
66
|
+
|
67
|
+
def parse_constant_decl(decl:, context:, outer_name: nil)
|
68
|
+
comment = decl.comment ? construct_comment(context: context, comment: comment_string(decl)) : nil
|
69
|
+
constant = RDoc::Constant.new(decl.name.to_s, decl.type.to_s, comment)
|
70
|
+
context.add_constant(constant)
|
71
|
+
end
|
72
|
+
|
73
|
+
def parse_method_decl(decl:, context:, outer_name: nil)
|
74
|
+
method = RDoc::AnyMethod.new(nil, decl.name.to_s)
|
75
|
+
method.singleton = decl.singleton?
|
76
|
+
method.visibility = decl.visibility
|
77
|
+
method.call_seq = decl.overloads.map {|overload| "#{decl.name.to_s}#{overload.method_type.to_s}" }.join("\n")
|
78
|
+
if loc = decl.location
|
79
|
+
method.start_collecting_tokens
|
80
|
+
method.add_token({ line_no: 1, char_no: 1, kind: :on_comment, text: "# File #{@top_level.relative_name}, line(s) #{loc.start_line}:#{loc.end_line}\n" })
|
81
|
+
method.add_token({ line_no: 1, char_no: 1, text: loc.source })
|
82
|
+
method.line = loc.start_line
|
83
|
+
end
|
84
|
+
method.comment = construct_comment(context: context, comment: comment_string(decl)) if decl.comment
|
85
|
+
context.add_method(method)
|
86
|
+
end
|
87
|
+
|
88
|
+
def parse_method_alias_decl(decl:, context:, outer_name: nil)
|
89
|
+
alias_def = RDoc::Alias.new(nil, decl.old_name.to_s, decl.new_name.to_s, nil, decl.kind == :singleton)
|
90
|
+
alias_def.comment = construct_comment(context: context, comment: comment_string(decl)) if decl.comment
|
91
|
+
context.add_alias(alias_def)
|
92
|
+
end
|
93
|
+
|
94
|
+
def parse_attr_decl(decl:, context:, outer_name: nil)
|
95
|
+
rw = case decl
|
96
|
+
when ::RBS::AST::Members::AttrReader
|
97
|
+
'R'
|
98
|
+
when ::RBS::AST::Members::AttrWriter
|
99
|
+
'W'
|
100
|
+
when ::RBS::AST::Members::AttrAccessor
|
101
|
+
'RW'
|
102
|
+
end
|
103
|
+
attribute = RDoc::Attr.new(nil, decl.name.to_s, rw, nil, decl.kind == :singleton)
|
104
|
+
attribute.visibility = decl.visibility
|
105
|
+
attribute.comment = construct_comment(context: context, comment: comment_string(decl)) if decl.comment
|
106
|
+
context.add_attribute(attribute)
|
107
|
+
end
|
108
|
+
|
109
|
+
def parse_include_decl(decl:, context:, outer_name: nil)
|
110
|
+
name = decl.name.to_s
|
111
|
+
outer_names = outer_name ? outer_name.to_s.split("::") : [] #: Array[String]
|
112
|
+
qualified_name = ''
|
113
|
+
outer_names.each do |namespace|
|
114
|
+
qualified_name += namespace
|
115
|
+
if (module_name = @top_level.find_module_named((qualified_name += "::") + name))
|
116
|
+
name = module_name.full_name
|
117
|
+
break
|
118
|
+
end
|
119
|
+
end
|
120
|
+
include_decl = RDoc::Include.new(name, nil)
|
121
|
+
include_decl.comment = construct_comment(context: context, comment: comment_string(decl)) if decl.comment
|
122
|
+
context.add_include(include_decl)
|
123
|
+
end
|
124
|
+
|
125
|
+
def parse_extend_decl(decl:, context:, outer_name: nil)
|
126
|
+
name = decl.name.to_s
|
127
|
+
outer_names = outer_name ? outer_name.to_s.split("::") : [] #: Array[String]
|
128
|
+
qualified_name = ''
|
129
|
+
outer_names.each do |namespace|
|
130
|
+
qualified_name += namespace
|
131
|
+
if (module_name = @top_level.find_module_named((qualified_name += "::") + name))
|
132
|
+
name = module_name.full_name
|
133
|
+
break
|
134
|
+
end
|
135
|
+
end
|
136
|
+
extend_decl = RDoc::Extend.new(name, nil)
|
137
|
+
extend_decl.comment = construct_comment(context: context, comment: comment_string(decl)) if decl.comment
|
138
|
+
context.add_extend(extend_decl)
|
139
|
+
end
|
140
|
+
|
141
|
+
private
|
142
|
+
|
143
|
+
def construct_comment(context:, comment:)
|
144
|
+
comment = RDoc::Comment.new(comment, context)
|
145
|
+
comment.format = "markdown"
|
146
|
+
comment
|
147
|
+
end
|
148
|
+
|
149
|
+
def comment_string(with_comment)
|
150
|
+
comment = with_comment.comment or raise "Object with `#comment` returning a object is expected"
|
151
|
+
comment.string
|
152
|
+
end
|
153
|
+
|
154
|
+
def fully_qualified_name(outer_name:, decl:)
|
155
|
+
if outer_name
|
156
|
+
(outer_name + decl.name)
|
157
|
+
else
|
158
|
+
decl.name
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|