rbs 2.8.4 → 3.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +12 -4
- data/.github/workflows/comments.yml +11 -11
- data/.github/workflows/dependabot.yml +30 -0
- data/.github/workflows/ruby.yml +40 -49
- data/.github/workflows/typecheck.yml +36 -0
- data/.github/workflows/windows.yml +28 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +42 -2
- data/CHANGELOG.md +845 -1
- data/README.md +64 -4
- data/Rakefile +198 -18
- data/Steepfile +11 -11
- data/config.yml +311 -0
- data/core/array.rbs +2189 -1914
- data/core/basic_object.rbs +59 -84
- data/core/binding.rbs +7 -69
- data/core/builtin.rbs +210 -11
- data/core/class.rbs +37 -0
- data/core/comparable.rbs +23 -25
- data/core/complex.rbs +449 -227
- data/core/constants.rbs +29 -21
- data/core/data.rbs +415 -0
- data/core/dir.rbs +698 -415
- data/core/encoding.rbs +468 -843
- data/core/enumerable.rbs +495 -455
- data/core/enumerator/product.rbs +92 -0
- data/core/enumerator.rbs +106 -9
- data/core/env.rbs +1 -1
- data/core/errno.rbs +506 -605
- data/core/errors.rbs +15 -17
- data/core/exception.rbs +361 -145
- data/core/false_class.rbs +39 -26
- data/core/fiber.rbs +121 -14
- data/core/file.rbs +1262 -320
- data/core/file_test.rbs +62 -45
- data/core/float.rbs +187 -208
- data/core/gc.rbs +446 -196
- data/core/global_variables.rbs +29 -29
- data/core/hash.rbs +242 -349
- data/core/integer.rbs +246 -308
- data/core/io/buffer.rbs +373 -122
- data/core/io/wait.rbs +29 -17
- data/core/io.rbs +1881 -1518
- data/core/kernel.rbs +2116 -1538
- data/core/marshal.rbs +24 -14
- data/core/match_data.rbs +413 -166
- data/core/math.rbs +531 -291
- data/core/method.rbs +101 -32
- data/core/module.rbs +228 -64
- data/core/nil_class.rbs +106 -47
- data/core/numeric.rbs +206 -292
- data/core/object.rbs +73 -1168
- data/core/object_space/weak_key_map.rbs +166 -0
- data/core/object_space.rbs +5 -3
- data/core/proc.rbs +280 -39
- data/core/process.rbs +1318 -658
- data/core/ractor.rbs +200 -134
- data/core/random.rbs +21 -4
- data/core/range.rbs +309 -153
- data/core/rational.rbs +4 -12
- data/core/rb_config.rbs +64 -43
- data/core/rbs/unnamed/argf.rbs +411 -147
- data/core/rbs/unnamed/env_class.rbs +137 -253
- data/core/rbs/unnamed/random.rbs +49 -26
- data/core/refinement.rbs +16 -1
- data/core/regexp.rbs +1568 -862
- data/core/ruby_vm.rbs +719 -7
- data/core/rubygems/config_file.rbs +3 -0
- data/core/rubygems/errors.rbs +69 -6
- data/core/rubygems/rubygems.rbs +71 -17
- data/core/rubygems/version.rbs +11 -7
- data/{stdlib/set/0 → core}/set.rbs +80 -91
- data/core/signal.rbs +14 -8
- data/core/string.rbs +1732 -1607
- data/core/struct.rbs +467 -95
- data/core/symbol.rbs +215 -245
- data/core/thread.rbs +133 -89
- data/core/thread_group.rbs +9 -9
- data/core/time.rbs +1141 -841
- data/core/trace_point.rbs +181 -121
- data/core/true_class.rbs +58 -32
- data/core/unbound_method.rbs +103 -30
- data/core/warning.rbs +50 -5
- data/docs/CONTRIBUTING.md +1 -1
- data/docs/architecture.md +110 -0
- data/docs/collection.md +59 -5
- data/docs/data_and_struct.md +86 -0
- data/docs/gem.md +57 -0
- data/docs/rbs_by_example.md +16 -35
- data/docs/repo.md +1 -1
- data/docs/sigs.md +7 -7
- data/docs/stdlib.md +63 -5
- data/docs/syntax.md +255 -61
- data/docs/tools.md +1 -0
- data/ext/rbs_extension/extconf.rb +10 -0
- data/ext/rbs_extension/lexer.c +1741 -1548
- data/ext/rbs_extension/lexer.h +11 -1
- data/ext/rbs_extension/lexer.re +12 -6
- data/ext/rbs_extension/lexstate.c +26 -3
- data/ext/rbs_extension/location.c +119 -111
- data/ext/rbs_extension/location.h +32 -7
- data/ext/rbs_extension/main.c +3 -0
- data/ext/rbs_extension/parser.c +883 -481
- data/ext/rbs_extension/parserstate.c +65 -25
- data/ext/rbs_extension/parserstate.h +13 -3
- data/ext/rbs_extension/rbs_extension.h +1 -10
- data/ext/rbs_extension/unescape.c +7 -47
- data/goodcheck.yml +2 -2
- data/{ext/rbs_extension → include/rbs}/constants.h +26 -15
- data/include/rbs/ruby_objs.h +72 -0
- data/include/rbs.h +7 -0
- data/lib/rbs/annotate/annotations.rb +3 -3
- data/lib/rbs/annotate/formatter.rb +13 -3
- data/lib/rbs/annotate/rdoc_annotator.rb +1 -1
- data/lib/rbs/annotate/rdoc_source.rb +12 -3
- data/lib/rbs/ast/declarations.rb +85 -2
- data/lib/rbs/ast/directives.rb +39 -0
- data/lib/rbs/ast/members.rb +49 -15
- data/lib/rbs/ast/type_param.rb +104 -15
- data/lib/rbs/ast/visitor.rb +137 -0
- data/lib/rbs/buffer.rb +5 -0
- data/lib/rbs/cli/colored_io.rb +48 -0
- data/lib/rbs/cli/diff.rb +83 -0
- data/lib/rbs/cli/validate.rb +356 -0
- data/lib/rbs/cli.rb +253 -143
- data/lib/rbs/collection/cleaner.rb +8 -1
- data/lib/rbs/collection/config/lockfile.rb +92 -0
- data/lib/rbs/collection/config/lockfile_generator.rb +154 -65
- data/lib/rbs/collection/config.rb +19 -46
- data/lib/rbs/collection/installer.rb +12 -13
- data/lib/rbs/collection/sources/base.rb +2 -2
- data/lib/rbs/collection/sources/git.rb +146 -69
- data/lib/rbs/collection/sources/local.rb +81 -0
- data/lib/rbs/collection/sources/rubygems.rb +10 -12
- data/lib/rbs/collection/sources/stdlib.rb +14 -13
- data/lib/rbs/collection/sources.rb +15 -2
- data/lib/rbs/collection.rb +2 -1
- data/lib/rbs/definition.rb +13 -16
- data/lib/rbs/definition_builder/ancestor_builder.rb +100 -24
- data/lib/rbs/definition_builder/method_builder.rb +4 -4
- data/lib/rbs/definition_builder.rb +489 -584
- data/lib/rbs/diff.rb +125 -0
- data/lib/rbs/environment/use_map.rb +77 -0
- data/lib/rbs/environment.rb +406 -105
- data/lib/rbs/environment_loader.rb +48 -44
- data/lib/rbs/environment_walker.rb +1 -1
- data/lib/rbs/errors.rb +175 -56
- data/lib/rbs/file_finder.rb +28 -0
- data/lib/rbs/location_aux.rb +8 -7
- data/lib/rbs/locator.rb +37 -15
- data/lib/rbs/method_type.rb +23 -0
- data/lib/rbs/namespace.rb +1 -0
- data/lib/rbs/parser/lex_result.rb +15 -0
- data/lib/rbs/parser/token.rb +23 -0
- data/lib/rbs/parser_aux.rb +22 -13
- data/lib/rbs/prototype/helpers.rb +48 -22
- data/lib/rbs/prototype/node_usage.rb +99 -0
- data/lib/rbs/prototype/rb.rb +125 -31
- data/lib/rbs/prototype/rbi.rb +49 -36
- data/lib/rbs/prototype/runtime/helpers.rb +59 -0
- data/lib/rbs/prototype/runtime/reflection.rb +19 -0
- data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
- data/lib/rbs/prototype/runtime.rb +273 -159
- data/lib/rbs/resolver/constant_resolver.rb +24 -8
- data/lib/rbs/resolver/type_name_resolver.rb +41 -7
- data/lib/rbs/sorter.rb +153 -123
- data/lib/rbs/substitution.rb +19 -0
- data/lib/rbs/subtractor.rb +201 -0
- data/lib/rbs/test/errors.rb +24 -11
- data/lib/rbs/test/guaranteed.rb +30 -0
- data/lib/rbs/test/hook.rb +45 -40
- data/lib/rbs/test/setup.rb +1 -1
- data/lib/rbs/test/tester.rb +1 -1
- data/lib/rbs/test/type_check.rb +120 -23
- data/lib/rbs/test.rb +6 -3
- data/lib/rbs/type_alias_dependency.rb +13 -3
- data/lib/rbs/type_alias_regularity.rb +21 -14
- data/lib/rbs/type_name.rb +18 -13
- data/lib/rbs/types.rb +352 -18
- data/lib/rbs/unit_test/convertibles.rb +176 -0
- data/lib/rbs/unit_test/spy.rb +136 -0
- data/lib/rbs/unit_test/type_assertions.rb +341 -0
- data/lib/rbs/unit_test/with_aliases.rb +143 -0
- data/lib/rbs/unit_test.rb +6 -0
- data/lib/rbs/validator.rb +55 -30
- data/lib/rbs/variance_calculator.rb +26 -23
- data/lib/rbs/vendorer.rb +3 -3
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs/writer.rb +69 -22
- data/lib/rbs.rb +7 -2
- data/lib/rdoc/discover.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +5 -5
- data/rbs.gemspec +12 -2
- data/schema/decls.json +1 -1
- data/schema/members.json +15 -10
- data/sig/ancestor_builder.rbs +4 -0
- data/sig/ancestor_graph.rbs +22 -2
- data/sig/annotate/formatter.rbs +2 -2
- data/sig/annotate/rdoc_annotater.rbs +1 -1
- data/sig/cli/colored_io.rbs +15 -0
- data/sig/cli/diff.rbs +21 -0
- data/sig/cli/validate.rbs +43 -0
- data/sig/cli.rbs +4 -0
- data/sig/collection/config/lockfile.rbs +74 -0
- data/sig/collection/config/lockfile_generator.rbs +66 -0
- data/sig/collection/config.rbs +5 -48
- data/sig/collection/installer.rbs +1 -1
- data/sig/collection/sources.rbs +105 -33
- data/sig/constant.rbs +1 -1
- data/sig/declarations.rbs +42 -3
- data/sig/definition.rbs +26 -10
- data/sig/definition_builder.rbs +103 -81
- data/sig/diff.rbs +28 -0
- data/sig/directives.rbs +61 -0
- data/sig/environment.rbs +175 -29
- data/sig/environment_loader.rbs +20 -18
- data/sig/errors.rbs +123 -2
- data/sig/file_finder.rbs +28 -0
- data/sig/location.rbs +0 -3
- data/sig/locator.rbs +14 -2
- data/sig/manifest.yaml +0 -1
- data/sig/members.rbs +32 -9
- data/sig/method_types.rbs +10 -4
- data/sig/namespace.rbs +2 -3
- data/sig/parser.rbs +55 -16
- data/sig/prototype/helpers.rbs +4 -0
- data/sig/prototype/node_usage.rbs +20 -0
- data/sig/prototype/rb.rbs +10 -2
- data/sig/prototype/rbi.rbs +2 -0
- data/sig/prototype/runtime.rbs +182 -0
- data/sig/rbs.rbs +1 -1
- data/sig/rdoc/rbs.rbs +4 -0
- data/sig/repository.rbs +7 -5
- data/sig/resolver/constant_resolver.rbs +3 -4
- data/sig/resolver/context.rbs +1 -1
- data/sig/resolver/type_name_resolver.rbs +5 -1
- data/sig/shims/bundler.rbs +38 -0
- data/sig/shims/rubygems.rbs +19 -0
- data/sig/sorter.rbs +23 -5
- data/sig/substitution.rbs +6 -0
- data/sig/subtractor.rbs +37 -0
- data/sig/test/errors.rbs +52 -0
- data/sig/test/guranteed.rbs +9 -0
- data/sig/test/type_check.rbs +19 -0
- data/sig/test.rbs +82 -0
- data/sig/type_alias_dependency.rbs +31 -0
- data/sig/type_alias_regularity.rbs +12 -6
- data/sig/type_param.rbs +45 -9
- data/sig/typename.rbs +8 -5
- data/sig/types.rbs +119 -12
- data/sig/unit_test/convertibles.rbs +154 -0
- data/sig/unit_test/spy.rbs +28 -0
- data/sig/unit_test/type_assertions.rbs +194 -0
- data/sig/unit_test/with_aliases.rbs +136 -0
- data/sig/use_map.rbs +35 -0
- data/sig/validator.rbs +12 -5
- data/sig/variance_calculator.rbs +3 -1
- data/sig/vendorer.rbs +1 -1
- data/sig/visitor.rbs +47 -0
- data/sig/writer.rbs +6 -2
- data/src/constants.c +153 -0
- data/src/ruby_objs.c +793 -0
- data/stdlib/base64/0/base64.rbs +298 -45
- data/stdlib/benchmark/0/benchmark.rbs +12 -3
- data/stdlib/bigdecimal/0/big_decimal.rbs +62 -198
- data/stdlib/cgi/0/core.rbs +68 -15
- data/stdlib/cgi/0/manifest.yaml +1 -0
- data/stdlib/coverage/0/coverage.rbs +50 -11
- data/stdlib/csv/0/csv.rbs +90 -119
- data/stdlib/csv/0/manifest.yaml +1 -0
- data/stdlib/date/0/date.rbs +806 -735
- data/stdlib/date/0/date_time.rbs +70 -211
- data/stdlib/dbm/0/dbm.rbs +0 -2
- data/stdlib/delegate/0/delegator.rbs +184 -0
- data/stdlib/delegate/0/kernel.rbs +47 -0
- data/stdlib/delegate/0/simple_delegator.rbs +96 -0
- data/stdlib/did_you_mean/0/did_you_mean.rbs +3 -8
- data/stdlib/digest/0/digest.rbs +48 -35
- data/stdlib/erb/0/erb.rbs +15 -39
- data/stdlib/etc/0/etc.rbs +174 -54
- data/stdlib/fileutils/0/fileutils.rbs +1234 -385
- data/stdlib/forwardable/0/forwardable.rbs +4 -4
- data/stdlib/io-console/0/io-console.rbs +82 -17
- data/stdlib/ipaddr/0/ipaddr.rbs +11 -6
- data/stdlib/json/0/json.rbs +434 -151
- data/stdlib/kconv/0/kconv.rbs +166 -0
- data/stdlib/logger/0/formatter.rbs +0 -2
- data/stdlib/logger/0/log_device.rbs +1 -3
- data/stdlib/logger/0/logger.rbs +465 -328
- data/stdlib/minitest/0/kernel.rbs +2 -2
- data/stdlib/minitest/0/minitest/abstract_reporter.rbs +4 -1
- data/stdlib/minitest/0/minitest/assertion.rbs +1 -0
- data/stdlib/minitest/0/minitest/assertions.rbs +58 -13
- data/stdlib/minitest/0/minitest/backtrace_filter.rbs +7 -0
- data/stdlib/minitest/0/minitest/bench_spec.rbs +8 -8
- data/stdlib/minitest/0/minitest/benchmark.rbs +17 -16
- data/stdlib/minitest/0/minitest/compress.rbs +13 -0
- data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
- data/stdlib/minitest/0/minitest/mock.rbs +9 -5
- data/stdlib/minitest/0/minitest/parallel/executor.rbs +4 -0
- data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +0 -1
- data/stdlib/minitest/0/minitest/pride_io.rbs +8 -0
- data/stdlib/minitest/0/minitest/pride_lol.rbs +2 -0
- data/stdlib/minitest/0/minitest/progress_reporter.rbs +1 -1
- data/stdlib/minitest/0/minitest/reportable.rbs +2 -0
- data/stdlib/minitest/0/minitest/runnable.rbs +33 -1
- data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +1 -1
- data/stdlib/minitest/0/minitest/spec/dsl.rbs +10 -6
- data/stdlib/minitest/0/minitest/spec.rbs +1 -1
- data/stdlib/minitest/0/minitest/statistics_reporter.rbs +5 -0
- data/stdlib/minitest/0/minitest/summary_reporter.rbs +0 -7
- data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +7 -7
- data/stdlib/minitest/0/minitest/test.rbs +7 -14
- data/stdlib/minitest/0/minitest/unexpected_error.rbs +2 -0
- data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
- data/stdlib/minitest/0/minitest/unit.rbs +1 -2
- data/stdlib/minitest/0/minitest.rbs +41 -892
- data/stdlib/monitor/0/monitor.rbs +91 -10
- data/stdlib/mutex_m/0/mutex_m.rbs +0 -2
- data/stdlib/net-http/0/manifest.yaml +1 -1
- data/stdlib/net-http/0/net-http.rbs +3858 -964
- data/stdlib/net-protocol/0/manifest.yaml +2 -0
- data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
- data/stdlib/net-smtp/0/manifest.yaml +2 -0
- data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
- data/stdlib/nkf/0/nkf.rbs +35 -5
- data/stdlib/objspace/0/objspace.rbs +40 -18
- data/stdlib/observable/0/observable.rbs +217 -0
- data/stdlib/open-uri/0/manifest.yaml +4 -0
- data/stdlib/open-uri/0/open-uri.rbs +393 -0
- data/stdlib/open3/0/open3.rbs +147 -0
- data/stdlib/openssl/0/manifest.yaml +1 -0
- data/stdlib/openssl/0/openssl.rbs +681 -316
- data/stdlib/optparse/0/optparse.rbs +100 -65
- data/stdlib/pathname/0/pathname.rbs +24 -15
- data/stdlib/pp/0/manifest.yaml +2 -0
- data/stdlib/pp/0/pp.rbs +300 -0
- data/stdlib/prettyprint/0/prettyprint.rbs +2 -6
- data/stdlib/pstore/0/pstore.rbs +370 -156
- data/stdlib/psych/0/core_ext.rbs +12 -0
- data/stdlib/{yaml → psych}/0/dbm.rbs +3 -3
- data/stdlib/psych/0/manifest.yaml +3 -0
- data/stdlib/psych/0/psych.rbs +402 -0
- data/stdlib/{yaml → psych}/0/store.rbs +2 -2
- data/stdlib/pty/0/pty.rbs +63 -11
- data/stdlib/rdoc/0/code_object.rbs +51 -0
- data/stdlib/rdoc/0/comment.rbs +59 -0
- data/stdlib/rdoc/0/context.rbs +153 -0
- data/stdlib/rdoc/0/markup.rbs +117 -0
- data/stdlib/rdoc/0/parser.rbs +56 -0
- data/stdlib/rdoc/0/rdoc.rbs +13 -380
- data/stdlib/rdoc/0/ri.rbs +17 -0
- data/stdlib/rdoc/0/store.rbs +48 -0
- data/stdlib/rdoc/0/top_level.rbs +97 -0
- data/stdlib/resolv/0/resolv.rbs +16 -79
- data/stdlib/ripper/0/ripper.rbs +1648 -0
- data/stdlib/securerandom/0/securerandom.rbs +7 -2
- data/stdlib/shellwords/0/shellwords.rbs +11 -12
- data/stdlib/singleton/0/singleton.rbs +0 -3
- data/stdlib/socket/0/addrinfo.rbs +13 -18
- data/stdlib/socket/0/basic_socket.rbs +5 -10
- data/stdlib/socket/0/ip_socket.rbs +0 -2
- data/stdlib/socket/0/socket.rbs +77 -46
- data/stdlib/socket/0/tcp_server.rbs +0 -5
- data/stdlib/socket/0/tcp_socket.rbs +36 -3
- data/stdlib/socket/0/udp_socket.rbs +4 -5
- data/stdlib/socket/0/unix_server.rbs +0 -5
- data/stdlib/socket/0/unix_socket.rbs +2 -4
- data/{core/string_io.rbs → stdlib/stringio/0/stringio.rbs} +188 -107
- data/stdlib/strscan/0/string_scanner.rbs +1269 -425
- data/stdlib/tempfile/0/tempfile.rbs +224 -61
- data/stdlib/time/0/time.rbs +48 -35
- data/stdlib/timeout/0/timeout.rbs +17 -8
- data/stdlib/tmpdir/0/tmpdir.rbs +10 -3
- data/stdlib/tsort/0/tsort.rbs +0 -4
- data/stdlib/uri/0/common.rbs +271 -144
- data/stdlib/uri/0/file.rbs +5 -0
- data/stdlib/uri/0/ftp.rbs +1 -1
- data/stdlib/uri/0/generic.rbs +26 -22
- data/stdlib/uri/0/http.rbs +4 -4
- data/stdlib/uri/0/ldap.rbs +1 -1
- data/stdlib/uri/0/mailto.rbs +84 -0
- data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
- data/stdlib/yaml/0/manifest.yaml +1 -2
- data/stdlib/yaml/0/yaml.rbs +1 -199
- data/stdlib/zlib/0/buf_error.rbs +10 -0
- data/stdlib/zlib/0/data_error.rbs +10 -0
- data/stdlib/zlib/0/deflate.rbs +210 -0
- data/stdlib/zlib/0/error.rbs +20 -0
- data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
- data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
- data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
- data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
- data/stdlib/zlib/0/gzip_file.rbs +156 -0
- data/stdlib/zlib/0/gzip_reader.rbs +293 -0
- data/stdlib/zlib/0/gzip_writer.rbs +166 -0
- data/stdlib/zlib/0/inflate.rbs +180 -0
- data/stdlib/zlib/0/mem_error.rbs +10 -0
- data/stdlib/zlib/0/need_dict.rbs +13 -0
- data/stdlib/zlib/0/stream_end.rbs +11 -0
- data/stdlib/zlib/0/stream_error.rbs +11 -0
- data/stdlib/zlib/0/version_error.rbs +11 -0
- data/stdlib/zlib/0/zlib.rbs +1 -3
- data/stdlib/zlib/0/zstream.rbs +200 -0
- data/templates/include/rbs/constants.h.erb +20 -0
- data/templates/include/rbs/ruby_objs.h.erb +10 -0
- data/templates/src/constants.c.erb +36 -0
- data/templates/src/ruby_objs.c.erb +27 -0
- data/templates/template.rb +122 -0
- metadata +136 -36
- data/Gemfile +0 -33
- data/Gemfile.lock +0 -118
- data/core/deprecated.rbs +0 -9
- data/ext/rbs_extension/constants.c +0 -135
- data/ext/rbs_extension/ruby_objs.c +0 -525
- data/ext/rbs_extension/ruby_objs.h +0 -43
- data/lib/rbs/constant_table.rb +0 -167
- data/lib/rbs/parser_compat/lexer_error.rb +0 -6
- data/lib/rbs/parser_compat/located_value.rb +0 -7
- data/lib/rbs/parser_compat/semantics_error.rb +0 -6
- data/lib/rbs/parser_compat/syntax_error.rb +0 -6
- data/lib/rbs/test/spy.rb +0 -6
- data/lib/rbs/type_name_resolver.rb +0 -67
- data/sig/constant_table.rbs +0 -30
- data/sig/shims/abstract_syntax_tree.rbs +0 -25
- data/sig/shims/pp.rbs +0 -3
- data/sig/shims/ripper.rbs +0 -8
- data/sig/shims.rbs +0 -69
- data/sig/type_name_resolver.rbs +0 -26
- data/stdlib/minitest/0/manifest.yaml +0 -2
- data/stdlib/prime/0/integer-extension.rbs +0 -41
- data/stdlib/prime/0/manifest.yaml +0 -2
- data/stdlib/prime/0/prime.rbs +0 -372
data/core/dir.rbs
CHANGED
@@ -1,698 +1,981 @@
|
|
1
1
|
# <!-- rdoc-file=dir.rb -->
|
2
|
-
#
|
3
|
-
# underlying file system. They provide a variety of ways to list directories and
|
4
|
-
# their contents. See also File.
|
2
|
+
# An object of class Dir represents a directory in the underlying file system.
|
5
3
|
#
|
6
|
-
#
|
7
|
-
# (`config.h` and `main.rb`), the parent directory (`..`), and the directory
|
8
|
-
# itself (`.`).
|
4
|
+
# It consists mainly of:
|
9
5
|
#
|
10
|
-
#
|
6
|
+
# * A string *path*, given when the object is created, that specifies a
|
7
|
+
# directory in the underlying file system; method #path returns the path.
|
8
|
+
# * A collection of string *entry names*, each of which is the name of a
|
9
|
+
# directory or file in the underlying file system; the entry names may be
|
10
|
+
# retrieved in an [array-like fashion](rdoc-ref:Dir@Dir+As+Array-Like) or in
|
11
|
+
# a [stream-like fashion](rdoc-ref:Dir@Dir+As+Stream-Like).
|
11
12
|
#
|
12
|
-
#
|
13
|
+
# ## About the Examples
|
13
14
|
#
|
14
|
-
#
|
15
|
-
# Object](Object.html#class-Object-label-What-27s+Here).
|
16
|
-
# * Includes [module
|
17
|
-
# Enumerable](Enumerable.html#module-Enumerable-label-What-27s+Here), which
|
18
|
-
# provides dozens of additional methods.
|
15
|
+
# Some examples on this page use this simple file tree:
|
19
16
|
#
|
17
|
+
# example/
|
18
|
+
# ├── config.h
|
19
|
+
# ├── lib/
|
20
|
+
# │ ├── song/
|
21
|
+
# │ │ └── karaoke.rb
|
22
|
+
# │ └── song.rb
|
23
|
+
# └── main.rb
|
20
24
|
#
|
21
|
-
#
|
25
|
+
# Others use the file tree for the [Ruby project
|
26
|
+
# itself](https://github.com/ruby/ruby).
|
22
27
|
#
|
23
|
-
#
|
24
|
-
# * [Setting](#class-Dir-label-Setting)
|
25
|
-
# * [Querying](#class-Dir-label-Querying)
|
26
|
-
# * [Iterating](#class-Dir-label-Iterating)
|
27
|
-
# * [Other](#class-Dir-label-Other)
|
28
|
+
# ## Dir As Array-Like
|
28
29
|
#
|
30
|
+
# A Dir object is in some ways array-like:
|
29
31
|
#
|
30
|
-
#
|
32
|
+
# * It has instance methods #children, #each, and #each_child.
|
33
|
+
# * It includes [module Enumerable](rdoc-ref:Enumerable@What-27s+Here).
|
31
34
|
#
|
32
|
-
#
|
33
|
-
# : Closes the directory stream for `self`.
|
35
|
+
# ## Dir As Stream-Like
|
34
36
|
#
|
35
|
-
#
|
36
|
-
# : Sets the position in the directory stream for `self`.
|
37
|
+
# A Dir object is in some ways stream-like.
|
37
38
|
#
|
38
|
-
#
|
39
|
-
#
|
39
|
+
# The stream is initially open for reading, but may be closed manually (using
|
40
|
+
# method #close), and will be closed on block exit if created by Dir.open called
|
41
|
+
# with a block. The closed stream may not be further manipulated, and may not be
|
42
|
+
# reopened.
|
40
43
|
#
|
41
|
-
#
|
42
|
-
# : Sets the position in the directory stream for `self` to the first
|
43
|
-
# entry.
|
44
|
+
# The stream has a *position*, which is the index of an entry in the directory:
|
44
45
|
#
|
45
|
-
#
|
46
|
-
#
|
47
|
-
#
|
46
|
+
# * The initial position is zero (before the first entry).
|
47
|
+
# * Method #tell (aliased as #pos) returns the position.
|
48
|
+
# * Method #pos= sets the position (but ignores a value outside the stream),
|
49
|
+
# and returns the position.
|
50
|
+
# * Method #seek is like #pos=, but returns `self` (convenient for chaining).
|
51
|
+
# * Method #read, if not at end-of-stream, reads the next entry and increments
|
52
|
+
# the position; if at end-of-stream, does not increment the position.
|
53
|
+
# * Method #rewind sets the position to zero.
|
48
54
|
#
|
55
|
+
# Examples (using the [simple file tree](rdoc-ref:Dir@About+the+Examples)):
|
49
56
|
#
|
57
|
+
# dir = Dir.new('example') # => #<Dir:example>
|
58
|
+
# dir.pos # => 0
|
50
59
|
#
|
51
|
-
#
|
52
|
-
#
|
53
|
-
#
|
54
|
-
#
|
55
|
-
#
|
60
|
+
# dir.read # => "."
|
61
|
+
# dir.read # => ".."
|
62
|
+
# dir.read # => "config.h"
|
63
|
+
# dir.read # => "lib"
|
64
|
+
# dir.read # => "main.rb"
|
65
|
+
# dir.pos # => 5
|
66
|
+
# dir.read # => nil
|
67
|
+
# dir.pos # => 5
|
56
68
|
#
|
57
|
-
#
|
58
|
-
#
|
59
|
-
# directory.
|
69
|
+
# dir.rewind # => #<Dir:example>
|
70
|
+
# dir.pos # => 0
|
60
71
|
#
|
72
|
+
# dir.pos = 3 # => 3
|
73
|
+
# dir.pos # => 3
|
61
74
|
#
|
75
|
+
# dir.seek(4) # => #<Dir:example>
|
76
|
+
# dir.pos # => 4
|
62
77
|
#
|
63
|
-
#
|
64
|
-
#
|
65
|
-
# ::[]
|
66
|
-
# : Same as ::glob without the ability to pass flags.
|
78
|
+
# dir.close # => nil
|
79
|
+
# dir.read # Raises IOError.
|
67
80
|
#
|
68
|
-
#
|
69
|
-
# : Returns an array of names of the children (both files and directories)
|
70
|
-
# of the given directory, but not including `.` or `..`.
|
71
|
-
#
|
72
|
-
# ::empty?
|
73
|
-
# : Returns whether the given path is an empty directory.
|
74
|
-
#
|
75
|
-
# ::entries
|
76
|
-
# : Returns an array of names of the children (both files and directories)
|
77
|
-
# of the given directory, including `.` and `..`.
|
81
|
+
# ## What's Here
|
78
82
|
#
|
79
|
-
#
|
80
|
-
# : Returns whether the given path is a directory.
|
83
|
+
# First, what's elsewhere. Class Dir:
|
81
84
|
#
|
82
|
-
#
|
83
|
-
#
|
85
|
+
# * Inherits from [class Object](rdoc-ref:Object@What-27s+Here).
|
86
|
+
# * Includes [module Enumerable](rdoc-ref:Enumerable@What-27s+Here), which
|
87
|
+
# provides dozens of additional methods.
|
84
88
|
#
|
85
|
-
#
|
86
|
-
# : Returns an array of file paths matching the given pattern and flags.
|
89
|
+
# Here, class Dir provides methods that are useful for:
|
87
90
|
#
|
88
|
-
#
|
89
|
-
# :
|
91
|
+
# * [Reading](rdoc-ref:Dir@Reading)
|
92
|
+
# * [Setting](rdoc-ref:Dir@Setting)
|
93
|
+
# * [Querying](rdoc-ref:Dir@Querying)
|
94
|
+
# * [Iterating](rdoc-ref:Dir@Iterating)
|
95
|
+
# * [Other](rdoc-ref:Dir@Other)
|
90
96
|
#
|
91
|
-
#
|
92
|
-
# : Returns an array of names of the children (both files and directories)
|
93
|
-
# of `self`, but not including `.` or `..`.
|
97
|
+
# ### Reading
|
94
98
|
#
|
95
|
-
#
|
96
|
-
#
|
99
|
+
# * #close: Closes the directory stream for `self`.
|
100
|
+
# * #pos=: Sets the position in the directory stream for `self`.
|
101
|
+
# * #read: Reads and returns the next entry in the directory stream for
|
102
|
+
# `self`.
|
103
|
+
# * #rewind: Sets the position in the directory stream for `self` to the first
|
104
|
+
# entry.
|
105
|
+
# * #seek: Sets the position in the directory stream for `self` the entry at
|
106
|
+
# the given offset.
|
97
107
|
#
|
98
|
-
#
|
99
|
-
# : Returns the path used to create `self`.
|
108
|
+
# ### Setting
|
100
109
|
#
|
101
|
-
#
|
102
|
-
#
|
110
|
+
# * ::chdir: Changes the working directory of the current process to the given
|
111
|
+
# directory.
|
112
|
+
# * ::chroot: Changes the file-system root for the current process to the
|
113
|
+
# given directory.
|
103
114
|
#
|
115
|
+
# ### Querying
|
104
116
|
#
|
117
|
+
# * ::[]: Same as ::glob without the ability to pass flags.
|
118
|
+
# * ::children: Returns an array of names of the children (both files and
|
119
|
+
# directories) of the given directory, but not including `.` or `..`.
|
120
|
+
# * ::empty?: Returns whether the given path is an empty directory.
|
121
|
+
# * ::entries: Returns an array of names of the children (both files and
|
122
|
+
# directories) of the given directory, including `.` and `..`.
|
123
|
+
# * ::exist?: Returns whether the given path is a directory.
|
124
|
+
# * ::getwd (aliased as #pwd): Returns the path to the current working
|
125
|
+
# directory.
|
126
|
+
# * ::glob: Returns an array of file paths matching the given pattern and
|
127
|
+
# flags.
|
128
|
+
# * ::home: Returns the home directory path for a given user or the current
|
129
|
+
# user.
|
130
|
+
# * #children: Returns an array of names of the children (both files and
|
131
|
+
# directories) of `self`, but not including `.` or `..`.
|
132
|
+
# * #fileno: Returns the integer file descriptor for `self`.
|
133
|
+
# * #path (aliased as #to_path): Returns the path used to create `self`.
|
134
|
+
# * #tell (aliased as #pos): Returns the integer position in the directory
|
135
|
+
# stream for `self`.
|
105
136
|
#
|
106
137
|
# ### Iterating
|
107
138
|
#
|
108
|
-
#
|
109
|
-
#
|
110
|
-
#
|
111
|
-
#
|
112
|
-
#
|
113
|
-
#
|
114
|
-
#
|
115
|
-
#
|
116
|
-
# #each
|
117
|
-
# : Calls the given block with each entry in `self`, including `.` and
|
118
|
-
# `..`.
|
119
|
-
#
|
120
|
-
# #each_child
|
121
|
-
# : Calls the given block with each entry in `self`, but not including `.`
|
122
|
-
# or `..`.
|
123
|
-
#
|
124
|
-
#
|
139
|
+
# * ::each_child: Calls the given block with each entry in the given
|
140
|
+
# directory, but not including `.` or `..`.
|
141
|
+
# * ::foreach: Calls the given block with each entry in the given directory,
|
142
|
+
# including `.` and `..`.
|
143
|
+
# * #each: Calls the given block with each entry in `self`, including `.` and
|
144
|
+
# `..`.
|
145
|
+
# * #each_child: Calls the given block with each entry in `self`, but not
|
146
|
+
# including `.` or `..`.
|
125
147
|
#
|
126
148
|
# ### Other
|
127
149
|
#
|
128
|
-
#
|
129
|
-
# :
|
130
|
-
#
|
131
|
-
#
|
132
|
-
#
|
133
|
-
#
|
134
|
-
# ::open
|
135
|
-
# : Same as ::new, but if a block is given, yields the Dir to the block,
|
136
|
-
# closing it upon block exit.
|
137
|
-
#
|
138
|
-
# ::unlink (aliased as ::delete and ::rmdir)
|
139
|
-
# : Removes the given directory.
|
140
|
-
#
|
141
|
-
# #inspect
|
142
|
-
# : Returns a string description of `self`.
|
150
|
+
# * ::mkdir: Creates a directory at the given path, with optional permissions.
|
151
|
+
# * ::new: Returns a new Dir for the given path, with optional encoding.
|
152
|
+
# * ::open: Same as ::new, but if a block is given, yields the Dir to the
|
153
|
+
# block, closing it upon block exit.
|
154
|
+
# * ::unlink (aliased as ::delete and ::rmdir): Removes the given directory.
|
155
|
+
# * #inspect: Returns a string description of `self`.
|
143
156
|
#
|
144
157
|
class Dir
|
145
158
|
include Enumerable[String]
|
146
159
|
|
147
160
|
# <!--
|
148
161
|
# rdoc-file=dir.rb
|
149
|
-
# - Dir.new(
|
150
|
-
# - Dir.new(
|
162
|
+
# - Dir.new(dirpath) -> dir
|
163
|
+
# - Dir.new(dirpath, encoding: nil) -> dir
|
151
164
|
# -->
|
152
|
-
# Returns a new
|
165
|
+
# Returns a new Dir object for the directory at `dirpath`:
|
166
|
+
#
|
167
|
+
# Dir.new('.') # => #<Dir:.>
|
153
168
|
#
|
154
|
-
# The optional
|
155
|
-
# directory
|
169
|
+
# The value given with optional keyword argument `encoding` specifies the
|
170
|
+
# encoding for the directory entry names; if `nil` (the default), the file
|
171
|
+
# system's encoding is used:
|
156
172
|
#
|
157
|
-
|
173
|
+
# Dir.new('.').read.encoding # => #<Encoding:UTF-8>
|
174
|
+
# Dir.new('.', encoding: 'US-ASCII').read.encoding # => #<Encoding:US-ASCII>
|
175
|
+
#
|
176
|
+
def initialize: (path dir, ?encoding: encoding?) -> void
|
158
177
|
|
159
178
|
# <!--
|
160
179
|
# rdoc-file=dir.rb
|
161
|
-
# - Dir[
|
180
|
+
# - Dir[*patterns, base: nil, sort: true] -> array
|
162
181
|
# -->
|
163
|
-
#
|
182
|
+
# Calls Dir.glob with argument `patterns` and the values of keyword arguments
|
183
|
+
# `base` and `sort`; returns the array of selected entry names.
|
164
184
|
#
|
165
|
-
def self.[]: (*
|
185
|
+
def self.[]: (*path patterns, ?base: path?, ?sort: bool) -> Array[String]
|
166
186
|
|
167
187
|
# <!--
|
168
188
|
# rdoc-file=dir.c
|
169
|
-
# - Dir.chdir(
|
170
|
-
# - Dir.chdir
|
171
|
-
#
|
172
|
-
#
|
173
|
-
#
|
174
|
-
#
|
175
|
-
#
|
176
|
-
#
|
177
|
-
#
|
178
|
-
#
|
179
|
-
#
|
180
|
-
#
|
181
|
-
#
|
182
|
-
#
|
183
|
-
#
|
184
|
-
#
|
185
|
-
#
|
186
|
-
#
|
187
|
-
#
|
188
|
-
#
|
189
|
-
#
|
190
|
-
#
|
189
|
+
# - Dir.chdir(new_dirpath) -> 0
|
190
|
+
# - Dir.chdir -> 0
|
191
|
+
# - Dir.chdir(new_dirpath) {|new_dirpath| ... } -> object
|
192
|
+
# - Dir.chdir {|cur_dirpath| ... } -> object
|
193
|
+
# -->
|
194
|
+
# Changes the current working directory.
|
195
|
+
#
|
196
|
+
# With argument `new_dirpath` and no block, changes to the given `dirpath`:
|
197
|
+
#
|
198
|
+
# Dir.pwd # => "/example"
|
199
|
+
# Dir.chdir('..') # => 0
|
200
|
+
# Dir.pwd # => "/"
|
201
|
+
#
|
202
|
+
# With no argument and no block:
|
203
|
+
#
|
204
|
+
# * Changes to the value of environment variable `HOME` if defined.
|
205
|
+
# * Otherwise changes to the value of environment variable `LOGDIR` if
|
206
|
+
# defined.
|
207
|
+
# * Otherwise makes no change.
|
208
|
+
#
|
209
|
+
# With argument `new_dirpath` and a block, temporarily changes the working
|
210
|
+
# directory:
|
211
|
+
#
|
212
|
+
# * Calls the block with the argument.
|
213
|
+
# * Changes to the given directory.
|
214
|
+
# * Executes the block (yielding the new path).
|
215
|
+
# * Restores the previous working directory.
|
216
|
+
# * Returns the block's return value.
|
217
|
+
#
|
218
|
+
# Example:
|
219
|
+
#
|
220
|
+
# Dir.chdir('/var/spool/mail')
|
221
|
+
# Dir.pwd # => "/var/spool/mail"
|
222
|
+
# Dir.chdir('/tmp') do
|
223
|
+
# Dir.pwd # => "/tmp"
|
224
|
+
# end
|
225
|
+
# Dir.pwd # => "/var/spool/mail"
|
226
|
+
#
|
227
|
+
# With no argument and a block, calls the block with the current working
|
228
|
+
# directory (string) and returns the block's return value.
|
229
|
+
#
|
230
|
+
# Calls to Dir.chdir with blocks may be nested:
|
231
|
+
#
|
232
|
+
# Dir.chdir('/var/spool/mail')
|
233
|
+
# Dir.pwd # => "/var/spool/mail"
|
234
|
+
# Dir.chdir('/tmp') do
|
235
|
+
# Dir.pwd # => "/tmp"
|
236
|
+
# Dir.chdir('/usr') do
|
237
|
+
# Dir.pwd # => "/usr"
|
191
238
|
# end
|
192
|
-
#
|
239
|
+
# Dir.pwd # => "/tmp"
|
193
240
|
# end
|
194
|
-
#
|
241
|
+
# Dir.pwd # => "/var/spool/mail"
|
195
242
|
#
|
196
|
-
#
|
243
|
+
# In a multi-threaded program an error is raised if a thread attempts to open a
|
244
|
+
# `chdir` block while another thread has one open, or a call to `chdir` without
|
245
|
+
# a block occurs inside a block passed to `chdir` (even in the same thread).
|
197
246
|
#
|
198
|
-
#
|
199
|
-
# /tmp
|
200
|
-
# /usr
|
201
|
-
# /tmp
|
202
|
-
# /var/spool/mail
|
247
|
+
# Raises an exception if the target directory does not exist.
|
203
248
|
#
|
204
|
-
def self.chdir: (?
|
205
|
-
| [U] (?
|
249
|
+
def self.chdir: (?path dir) -> 0
|
250
|
+
| [U] (?path dir) { (String dir) -> U } -> U
|
206
251
|
|
207
252
|
# <!--
|
208
253
|
# rdoc-file=dir.c
|
209
|
-
# - Dir.children(
|
210
|
-
# - Dir.children(
|
254
|
+
# - Dir.children(dirpath) -> array
|
255
|
+
# - Dir.children(dirpath, encoding: 'UTF-8') -> array
|
211
256
|
# -->
|
212
|
-
# Returns an array
|
213
|
-
#
|
214
|
-
#
|
257
|
+
# Returns an array of the entry names in the directory at `dirpath` except for
|
258
|
+
# `'.'` and `'..'`; sets the given encoding onto each returned entry name:
|
259
|
+
#
|
260
|
+
# Dir.children('/example') # => ["config.h", "lib", "main.rb"]
|
261
|
+
# Dir.children('/example').first.encoding
|
262
|
+
# # => #<Encoding:UTF-8>
|
263
|
+
# Dir.children('/example', encoding: 'US-ASCII').first.encoding
|
264
|
+
# # => #<Encoding:US-ASCII>
|
215
265
|
#
|
216
|
-
#
|
217
|
-
# directory. If not specified, the filesystem encoding is used.
|
266
|
+
# See [String Encoding](rdoc-ref:encodings.rdoc@String+Encoding).
|
218
267
|
#
|
219
|
-
#
|
268
|
+
# Raises an exception if the directory does not exist.
|
220
269
|
#
|
221
|
-
def self.children: (
|
270
|
+
def self.children: (path dirname, ?encoding: encoding?) -> Array[String]
|
222
271
|
|
223
272
|
# <!--
|
224
273
|
# rdoc-file=dir.c
|
225
|
-
# - Dir.chroot(
|
274
|
+
# - Dir.chroot(dirpath) -> 0
|
226
275
|
# -->
|
227
|
-
# Changes
|
228
|
-
#
|
229
|
-
#
|
276
|
+
# Changes the root directory of the calling process to that specified in
|
277
|
+
# `dirpath`. The new root directory is used for pathnames beginning with `'/'`.
|
278
|
+
# The root directory is inherited by all children of the calling process.
|
230
279
|
#
|
231
|
-
|
280
|
+
# Only a privileged process may call `chroot`.
|
281
|
+
#
|
282
|
+
# See [Linux chroot](https://man7.org/linux/man-pages/man2/chroot.2.html).
|
283
|
+
#
|
284
|
+
def self.chroot: (path root) -> 0
|
232
285
|
|
233
286
|
# <!--
|
234
287
|
# rdoc-file=dir.c
|
235
|
-
# - Dir.
|
236
|
-
# - Dir.rmdir( string ) -> 0
|
237
|
-
# - Dir.unlink( string ) -> 0
|
288
|
+
# - Dir.rmdir(dirpath) -> 0
|
238
289
|
# -->
|
239
|
-
#
|
240
|
-
#
|
290
|
+
# Removes the directory at `dirpath` from the underlying file system:
|
291
|
+
#
|
292
|
+
# Dir.rmdir('foo') # => 0
|
293
|
+
#
|
294
|
+
# Raises an exception if the directory is not empty.
|
241
295
|
#
|
242
|
-
def self.delete: (
|
296
|
+
def self.delete: (path dirname) -> 0
|
243
297
|
|
244
298
|
# <!--
|
245
299
|
# rdoc-file=dir.c
|
246
|
-
# - Dir.each_child(
|
247
|
-
# - Dir.each_child(
|
248
|
-
# - Dir.each_child( dirname ) -> an_enumerator
|
249
|
-
# - Dir.each_child( dirname, encoding: enc ) -> an_enumerator
|
300
|
+
# - Dir.each_child(dirpath) {|entry_name| ... } -> nil
|
301
|
+
# - Dir.each_child(dirpath, encoding: 'UTF-8') {|entry_name| ... } -> nil
|
250
302
|
# -->
|
251
|
-
#
|
252
|
-
# directory, passing the filename of each entry as a parameter to the block.
|
303
|
+
# Like Dir.foreach, except that entries `'.'` and `'..'` are not included.
|
253
304
|
#
|
254
|
-
|
255
|
-
|
256
|
-
|
305
|
+
def self.each_child: (path dirname, ?encoding: encoding?) -> Enumerator[String, nil]
|
306
|
+
| (path dirname, ?encoding: encoding?) { (String filename) -> void } -> nil
|
307
|
+
|
308
|
+
# <!--
|
309
|
+
# rdoc-file=dir.c
|
310
|
+
# - Dir.empty?(dirpath) -> true or false
|
311
|
+
# -->
|
312
|
+
# Returns whether `dirpath` specifies an empty directory:
|
257
313
|
#
|
258
|
-
#
|
314
|
+
# dirpath = '/tmp/foo'
|
315
|
+
# Dir.mkdir(dirpath)
|
316
|
+
# Dir.empty?(dirpath) # => true
|
317
|
+
# Dir.empty?('/example') # => false
|
318
|
+
# Dir.empty?('/example/main.rb') # => false
|
259
319
|
#
|
260
|
-
#
|
261
|
-
#
|
320
|
+
# Raises an exception if `dirpath` does not specify a directory or file in the
|
321
|
+
# underlying file system.
|
262
322
|
#
|
263
|
-
def self.
|
264
|
-
| (string dirname, ?encoding: string | Encoding | nil enc) { (String filename) -> void } -> void
|
323
|
+
def self.empty?: (path path_name) -> bool
|
265
324
|
|
266
325
|
# <!--
|
267
326
|
# rdoc-file=dir.c
|
268
|
-
# - Dir.
|
327
|
+
# - Dir.entries(dirname, encoding: 'UTF-8') -> array
|
269
328
|
# -->
|
270
|
-
# Returns
|
271
|
-
#
|
329
|
+
# Returns an array of the entry names in the directory at `dirpath`; sets the
|
330
|
+
# given encoding onto each returned entry name:
|
331
|
+
#
|
332
|
+
# Dir.entries('/example') # => ["config.h", "lib", "main.rb", "..", "."]
|
333
|
+
# Dir.entries('/example').first.encoding
|
334
|
+
# # => #<Encoding:UTF-8>
|
335
|
+
# Dir.entries('/example', encoding: 'US-ASCII').first.encoding
|
336
|
+
# # => #<Encoding:US-ASCII>
|
337
|
+
#
|
338
|
+
# See [String Encoding](rdoc-ref:encodings.rdoc@String+Encoding).
|
272
339
|
#
|
273
|
-
|
340
|
+
# Raises an exception if the directory does not exist.
|
341
|
+
#
|
342
|
+
def self.entries: (path dirname, ?encoding: encoding?) -> Array[String]
|
274
343
|
|
275
344
|
# <!--
|
276
345
|
# rdoc-file=dir.c
|
277
|
-
# - Dir.
|
278
|
-
# - Dir.entries( dirname, encoding: enc ) -> array
|
346
|
+
# - Dir.exist?(dirpath) -> true or false
|
279
347
|
# -->
|
280
|
-
# Returns
|
281
|
-
# raise a SystemCallError if the named directory doesn't exist.
|
348
|
+
# Returns whether `dirpath` is a directory in the underlying file system:
|
282
349
|
#
|
283
|
-
#
|
284
|
-
#
|
350
|
+
# Dir.exist?('/example') # => true
|
351
|
+
# Dir.exist?('/nosuch') # => false
|
352
|
+
# Dir.exist?('/example/main.rb') # => false
|
285
353
|
#
|
286
|
-
#
|
354
|
+
# Same as File.directory?.
|
287
355
|
#
|
288
|
-
def self.
|
356
|
+
def self.exist?: (path | io file_name) -> bool
|
289
357
|
|
290
358
|
# <!--
|
291
359
|
# rdoc-file=dir.c
|
292
|
-
# - Dir.
|
360
|
+
# - Dir.fchdir(fd) -> 0
|
361
|
+
# - Dir.fchdir(fd) { ... } -> object
|
293
362
|
# -->
|
294
|
-
#
|
363
|
+
# Changes the current working directory to the directory specified by the
|
364
|
+
# integer file descriptor `fd`.
|
365
|
+
#
|
366
|
+
# When passing a file descriptor over a UNIX socket or to a child process, using
|
367
|
+
# `fchdir` instead of `chdir` avoids the [time-of-check to time-of-use
|
368
|
+
# vulnerability](https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use)
|
369
|
+
#
|
370
|
+
# With no block, changes to the directory given by `fd`:
|
371
|
+
#
|
372
|
+
# Dir.chdir('/var/spool/mail')
|
373
|
+
# Dir.pwd # => "/var/spool/mail"
|
374
|
+
# dir = Dir.new('/usr')
|
375
|
+
# fd = dir.fileno
|
376
|
+
# Dir.fchdir(fd)
|
377
|
+
# Dir.pwd # => "/usr"
|
378
|
+
#
|
379
|
+
# With a block, temporarily changes the working directory:
|
380
|
+
#
|
381
|
+
# * Calls the block with the argument.
|
382
|
+
# * Changes to the given directory.
|
383
|
+
# * Executes the block (yields no args).
|
384
|
+
# * Restores the previous working directory.
|
385
|
+
# * Returns the block's return value.
|
386
|
+
#
|
387
|
+
# Example:
|
388
|
+
#
|
389
|
+
# Dir.chdir('/var/spool/mail')
|
390
|
+
# Dir.pwd # => "/var/spool/mail"
|
391
|
+
# dir = Dir.new('/tmp')
|
392
|
+
# fd = dir.fileno
|
393
|
+
# Dir.fchdir(fd) do
|
394
|
+
# Dir.pwd # => "/tmp"
|
395
|
+
# end
|
396
|
+
# Dir.pwd # => "/var/spool/mail"
|
295
397
|
#
|
296
|
-
|
398
|
+
# This method uses the
|
399
|
+
# [fchdir()](https://www.man7.org/linux/man-pages/man3/fchdir.3p.html) function
|
400
|
+
# defined by POSIX 2008; the method is not implemented on non-POSIX platforms
|
401
|
+
# (raises NotImplementedError).
|
402
|
+
#
|
403
|
+
# Raises an exception if the file descriptor is not valid.
|
404
|
+
#
|
405
|
+
# In a multi-threaded program an error is raised if a thread attempts to open a
|
406
|
+
# `chdir` block while another thread has one open, or a call to `chdir` without
|
407
|
+
# a block occurs inside a block passed to `chdir` (even in the same thread).
|
408
|
+
#
|
409
|
+
def self.fchdir: (int) -> Integer
|
410
|
+
| [T] (int) { () -> T } -> T
|
297
411
|
|
298
412
|
# <!--
|
299
413
|
# rdoc-file=dir.c
|
300
|
-
# - Dir.foreach(
|
301
|
-
# - Dir.foreach( dirname, encoding: enc ) {| filename | block } -> nil
|
302
|
-
# - Dir.foreach( dirname ) -> an_enumerator
|
303
|
-
# - Dir.foreach( dirname, encoding: enc ) -> an_enumerator
|
414
|
+
# - Dir.foreach(dirpath, encoding: 'UTF-8') {|entry_name| ... } -> nil
|
304
415
|
# -->
|
305
|
-
# Calls the block
|
306
|
-
#
|
416
|
+
# Calls the block with each entry name in the directory at `dirpath`; sets the
|
417
|
+
# given encoding onto each passed `entry_name`:
|
418
|
+
#
|
419
|
+
# Dir.foreach('/example') {|entry_name| p entry_name }
|
307
420
|
#
|
308
|
-
#
|
421
|
+
# Output:
|
309
422
|
#
|
310
|
-
#
|
423
|
+
# "config.h"
|
424
|
+
# "lib"
|
425
|
+
# "main.rb"
|
426
|
+
# ".."
|
427
|
+
# "."
|
311
428
|
#
|
312
|
-
#
|
429
|
+
# Encoding:
|
313
430
|
#
|
314
|
-
#
|
315
|
-
#
|
316
|
-
#
|
317
|
-
#
|
431
|
+
# Dir.foreach('/example') {|entry_name| p entry_name.encoding; break }
|
432
|
+
# Dir.foreach('/example', encoding: 'US-ASCII') {|entry_name| p entry_name.encoding; break }
|
433
|
+
#
|
434
|
+
# Output:
|
435
|
+
#
|
436
|
+
# #<Encoding:UTF-8>
|
437
|
+
# #<Encoding:US-ASCII>
|
438
|
+
#
|
439
|
+
# See [String Encoding](rdoc-ref:encodings.rdoc@String+Encoding).
|
440
|
+
#
|
441
|
+
# Returns an enumerator if no block is given.
|
318
442
|
#
|
319
443
|
alias self.foreach self.each_child
|
320
444
|
|
321
445
|
# <!--
|
322
446
|
# rdoc-file=dir.c
|
323
|
-
# - Dir.
|
447
|
+
# - Dir.for_fd(fd) -> dir
|
448
|
+
# -->
|
449
|
+
# Returns a new Dir object representing the directory specified by the given
|
450
|
+
# integer directory file descriptor `fd`:
|
451
|
+
#
|
452
|
+
# d0 = Dir.new('..')
|
453
|
+
# d1 = Dir.for_fd(d0.fileno)
|
454
|
+
#
|
455
|
+
# Note that the returned `d1` does not have an associated path:
|
456
|
+
#
|
457
|
+
# d0.path # => '..'
|
458
|
+
# d1.path # => nil
|
459
|
+
#
|
460
|
+
# This method uses the
|
461
|
+
# [fdopendir()](https://www.man7.org/linux/man-pages/man3/fdopendir.3p.html)
|
462
|
+
# function defined by POSIX 2008; the method is not implemented on non-POSIX
|
463
|
+
# platforms (raises NotImplementedError).
|
464
|
+
#
|
465
|
+
def self.for_fd: (int) -> Dir
|
466
|
+
|
467
|
+
# <!--
|
468
|
+
# rdoc-file=dir.c
|
324
469
|
# - Dir.pwd -> string
|
325
470
|
# -->
|
326
|
-
# Returns the path to the current working directory
|
471
|
+
# Returns the path to the current working directory:
|
327
472
|
#
|
328
|
-
# Dir.chdir("/tmp")
|
329
|
-
# Dir.
|
330
|
-
# Dir.pwd #=> "/tmp"
|
473
|
+
# Dir.chdir("/tmp") # => 0
|
474
|
+
# Dir.pwd # => "/tmp"
|
331
475
|
#
|
332
476
|
def self.getwd: () -> String
|
333
477
|
|
334
478
|
# <!--
|
335
479
|
# rdoc-file=dir.rb
|
336
|
-
# - Dir.glob(
|
337
|
-
# - Dir.glob(
|
480
|
+
# - Dir.glob(*patterns, flags: 0, base: nil, sort: true) -> array
|
481
|
+
# - Dir.glob(*patterns, flags: 0, base: nil, sort: true) {|entry_name| ... } -> nil
|
338
482
|
# -->
|
339
|
-
#
|
340
|
-
# and returns an array containing the matching filenames. If a block is given,
|
341
|
-
# calls the block once for each matching filename, passing the filename as a
|
342
|
-
# parameter to the block.
|
483
|
+
# Forms an array *entry_names* of the entry names selected by the arguments.
|
343
484
|
#
|
344
|
-
#
|
345
|
-
#
|
346
|
-
# the results are not prefixed with the base directory name in this case, you
|
347
|
-
# will need to prepend the base directory name if you want real paths.
|
485
|
+
# Argument `patterns` is a string pattern or an array of string patterns; note
|
486
|
+
# that these are not regexps; see below.
|
348
487
|
#
|
349
|
-
#
|
350
|
-
# binary ascending order, unless `false` is given as the optional `sort` keyword
|
351
|
-
# argument. The order of an Array of pattern strings and braces are preserved.
|
488
|
+
# Notes for the following examples:
|
352
489
|
#
|
353
|
-
#
|
354
|
-
#
|
355
|
-
#
|
490
|
+
# * `'*'` is the pattern that matches any entry name except those that begin
|
491
|
+
# with `'.'`.
|
492
|
+
# * We use method Array#take to shorten returned arrays that otherwise would
|
493
|
+
# be very large.
|
356
494
|
#
|
357
|
-
#
|
358
|
-
# :
|
359
|
-
# Equivalent to `/.*/mx` in regexp.
|
495
|
+
# With no block, returns array *entry_names*; example (using the [simple file
|
496
|
+
# tree](rdoc-ref:Dir@About+the+Examples)):
|
360
497
|
#
|
361
|
-
#
|
362
|
-
# : Matches all files
|
363
|
-
# `c*`
|
364
|
-
# : Matches all files beginning with `c`
|
365
|
-
# `*c`
|
366
|
-
# : Matches all files ending with `c`
|
367
|
-
# `*c*`
|
368
|
-
# : Match all files that have `c` in them (including at the beginning or
|
369
|
-
# end).
|
498
|
+
# Dir.glob('*') # => ["config.h", "lib", "main.rb"]
|
370
499
|
#
|
500
|
+
# With a block, calls the block with each of the *entry_names* and returns
|
501
|
+
# `nil`:
|
371
502
|
#
|
372
|
-
#
|
373
|
-
# include those in the match results, you must use the File::FNM_DOTMATCH
|
374
|
-
# flag or something like `"{*,.*}"`.
|
503
|
+
# Dir.glob('*') {|entry_name| puts entry_name } # => nil
|
375
504
|
#
|
376
|
-
#
|
377
|
-
# : Matches directories recursively if followed by `/`. If this path segment
|
378
|
-
# contains any other characters, it is the same as the usual `*`.
|
505
|
+
# Output:
|
379
506
|
#
|
380
|
-
#
|
381
|
-
#
|
507
|
+
# config.h
|
508
|
+
# lib
|
509
|
+
# main.rb
|
382
510
|
#
|
383
|
-
# `
|
384
|
-
#
|
385
|
-
# in Regexp, including set negation (`[^a-z]`).
|
511
|
+
# If optional keyword argument `flags` is given, the value modifies the
|
512
|
+
# matching; see below.
|
386
513
|
#
|
387
|
-
# `
|
388
|
-
#
|
389
|
-
#
|
514
|
+
# If optional keyword argument `base` is given, its value specifies the base
|
515
|
+
# directory. Each pattern string specifies entries relative to the base
|
516
|
+
# directory; the default is `'.'`. The base directory is not prepended to the
|
517
|
+
# entry names in the result:
|
390
518
|
#
|
391
|
-
#
|
392
|
-
#
|
519
|
+
# Dir.glob(pattern, base: 'lib').take(5)
|
520
|
+
# # => ["abbrev.gemspec", "abbrev.rb", "base64.gemspec", "base64.rb", "benchmark.gemspec"]
|
521
|
+
# Dir.glob(pattern, base: 'lib/irb').take(5)
|
522
|
+
# # => ["cmd", "color.rb", "color_printer.rb", "completion.rb", "context.rb"]
|
393
523
|
#
|
394
|
-
#
|
395
|
-
#
|
524
|
+
# If optional keyword `sort` is given, its value specifies whether the array is
|
525
|
+
# to be sorted; the default is `true`. Passing value `false` with that keyword
|
526
|
+
# disables sorting (though the underlying file system may already have sorted
|
527
|
+
# the array).
|
396
528
|
#
|
397
|
-
#
|
398
|
-
# glob, i.e. `Dir["c:\\foo*"]` will not work, use `Dir["c:/foo*"]` instead.
|
529
|
+
# **Patterns**
|
399
530
|
#
|
531
|
+
# Each pattern string is expanded according to certain metacharacters; examples
|
532
|
+
# below use the [Ruby file tree](rdoc-ref:Dir@About+the+Examples):
|
400
533
|
#
|
401
|
-
#
|
534
|
+
# * `'*'`: Matches any substring in an entry name, similar in meaning to
|
535
|
+
# regexp `/.*/mx`; may be restricted by other values in the pattern strings:
|
536
|
+
#
|
537
|
+
# * `'*'` matches all entry names:
|
538
|
+
#
|
539
|
+
# Dir.glob('*').take(3) # => ["BSDL", "CONTRIBUTING.md", "COPYING"]
|
540
|
+
#
|
541
|
+
# * `'c*'` matches entry names beginning with `'c'`:
|
542
|
+
#
|
543
|
+
# Dir.glob('c*').take(3) # => ["CONTRIBUTING.md", "COPYING", "COPYING.ja"]
|
544
|
+
#
|
545
|
+
# * `'*c'` matches entry names ending with `'c'`:
|
546
|
+
#
|
547
|
+
# Dir.glob('*c').take(3) # => ["addr2line.c", "array.c", "ast.c"]
|
548
|
+
#
|
549
|
+
# * `'*c*'` matches entry names that contain `'c'`, even at the beginning
|
550
|
+
# or end:
|
551
|
+
#
|
552
|
+
# Dir.glob('*c*').take(3) # => ["CONTRIBUTING.md", "COPYING", "COPYING.ja"]
|
553
|
+
#
|
554
|
+
# Does not match Unix-like hidden entry names ("dot files"). To include
|
555
|
+
# those in the matched entry names, use flag IO::FNM_DOTMATCH or something
|
556
|
+
# like `'{*,.*}'`.
|
557
|
+
#
|
558
|
+
# * `'**'`: Matches entry names recursively if followed by the slash
|
559
|
+
# character `'/'`:
|
560
|
+
#
|
561
|
+
# Dir.glob('**/').take(3) # => ["basictest/", "benchmark/", "benchmark/gc/"]
|
562
|
+
#
|
563
|
+
# If the string pattern contains other characters or is not followed by a
|
564
|
+
# slash character, it is equivalent to `'*'`.
|
565
|
+
#
|
566
|
+
# * `'?'` Matches any single character; similar in meaning to regexp `/./`:
|
567
|
+
#
|
568
|
+
# Dir.glob('io.?') # => ["io.c"]
|
569
|
+
#
|
570
|
+
# * `'[*set*]'`: Matches any one character in the string *set*; behaves like a
|
571
|
+
# [Regexp character class](rdoc-ref:Regexp@Character+Classes), including set
|
572
|
+
# negation (`'[^a-z]'`):
|
573
|
+
#
|
574
|
+
# Dir.glob('*.[a-z][a-z]').take(3)
|
575
|
+
# # => ["CONTRIBUTING.md", "COPYING.ja", "KNOWNBUGS.rb"]
|
576
|
+
#
|
577
|
+
# * `'{*abc*,*xyz*}'`: Matches either string *abc* or string *xyz*; behaves
|
578
|
+
# like [Regexp alternation](rdoc-ref:Regexp@Alternation):
|
579
|
+
#
|
580
|
+
# Dir.glob('{LEGAL,BSDL}') # => ["LEGAL", "BSDL"]
|
581
|
+
#
|
582
|
+
# More than two alternatives may be given.
|
583
|
+
#
|
584
|
+
# * `\`: Escapes the following metacharacter.
|
585
|
+
#
|
586
|
+
# Note that on Windows, the backslash character may not be used in a string
|
587
|
+
# pattern: `Dir['c:\\foo*']` will not work, use `Dir['c:/foo*']` instead.
|
588
|
+
#
|
589
|
+
# More examples (using the [simple file tree](rdoc-ref:Dir@About+the+Examples)):
|
590
|
+
#
|
591
|
+
# # We're in the example directory.
|
592
|
+
# File.basename(Dir.pwd) # => "example"
|
593
|
+
# Dir.glob('config.?') # => ["config.h"]
|
594
|
+
# Dir.glob('*.[a-z][a-z]') # => ["main.rb"]
|
595
|
+
# Dir.glob('*.[^r]*') # => ["config.h"]
|
596
|
+
# Dir.glob('*.{rb,h}') # => ["main.rb", "config.h"]
|
597
|
+
# Dir.glob('*') # => ["config.h", "lib", "main.rb"]
|
598
|
+
# Dir.glob('*', File::FNM_DOTMATCH) # => [".", "config.h", "lib", "main.rb"]
|
599
|
+
# Dir.glob(["*.rb", "*.h"]) # => ["main.rb", "config.h"]
|
600
|
+
#
|
601
|
+
# Dir.glob('**/*.rb')
|
602
|
+
# => ["lib/song/karaoke.rb", "lib/song.rb", "main.rb"]
|
603
|
+
#
|
604
|
+
# Dir.glob('**/*.rb', base: 'lib') # => ["song/karaoke.rb", "song.rb"]
|
605
|
+
#
|
606
|
+
# Dir.glob('**/lib') # => ["lib"]
|
607
|
+
#
|
608
|
+
# Dir.glob('**/lib/**/*.rb') # => ["lib/song/karaoke.rb", "lib/song.rb"]
|
609
|
+
#
|
610
|
+
# Dir.glob('**/lib/*.rb') # => ["lib/song.rb"]
|
402
611
|
#
|
403
|
-
#
|
404
|
-
# Dir.glob("config.?") #=> ["config.h"]
|
405
|
-
# Dir.glob("*.[a-z][a-z]") #=> ["main.rb"]
|
406
|
-
# Dir.glob("*.[^r]*") #=> ["config.h"]
|
407
|
-
# Dir.glob("*.{rb,h}") #=> ["main.rb", "config.h"]
|
408
|
-
# Dir.glob("*") #=> ["config.h", "main.rb"]
|
409
|
-
# Dir.glob("*", File::FNM_DOTMATCH) #=> [".", "config.h", "main.rb"]
|
410
|
-
# Dir.glob(["*.rb", "*.h"]) #=> ["main.rb", "config.h"]
|
612
|
+
# **Flags**
|
411
613
|
#
|
412
|
-
#
|
413
|
-
#
|
414
|
-
#
|
614
|
+
# If optional keyword argument `flags` is given (the default is zero -- no
|
615
|
+
# flags), its value should be the bitwise OR of one or more of the constants
|
616
|
+
# defined in module File::Constants.
|
415
617
|
#
|
416
|
-
#
|
417
|
-
# # "song/karaoke.rb"]
|
618
|
+
# Example:
|
418
619
|
#
|
419
|
-
#
|
620
|
+
# flags = File::FNM_EXTGLOB | File::FNM_DOTMATCH
|
420
621
|
#
|
421
|
-
#
|
422
|
-
# # "lib/song/karaoke.rb"]
|
622
|
+
# Specifying flags can extend, restrict, or otherwise modify the matching.
|
423
623
|
#
|
424
|
-
#
|
624
|
+
# The flags for this method (other constants in File::Constants do not apply):
|
425
625
|
#
|
426
|
-
|
427
|
-
|
626
|
+
# * File::FNM_DOTMATCH: specifies that entry names beginning with `'.'` should
|
627
|
+
# be considered for matching:
|
628
|
+
#
|
629
|
+
# Dir.glob('*').take(5)
|
630
|
+
# # => ["BSDL", "CONTRIBUTING.md", "COPYING", "COPYING.ja", "GPL"]
|
631
|
+
# Dir.glob('*', flags: File::FNM_DOTMATCH).take(5)
|
632
|
+
# # => [".", ".appveyor.yml", ".cirrus.yml", ".dir-locals.el", ".document"]
|
633
|
+
#
|
634
|
+
# * File::FNM_EXTGLOB: enables the pattern extension `'{*a*,*b*}'`, which
|
635
|
+
# matches pattern *a* and pattern *b*; behaves like a [regexp
|
636
|
+
# union](rdoc-ref:Regexp.union) (e.g., `'(?:*a*|*b*)'`):
|
637
|
+
#
|
638
|
+
# pattern = '{LEGAL,BSDL}'
|
639
|
+
# Dir.glob(pattern) # => ["LEGAL", "BSDL"]
|
640
|
+
#
|
641
|
+
# * File::FNM_NOESCAPE: specifies that escaping with the backslash character
|
642
|
+
# `'\'` is disabled; the character is not an escape character.
|
643
|
+
#
|
644
|
+
# * File::FNM_PATHNAME: specifies that metacharacters `'*'` and `'?'` do not
|
645
|
+
# match directory separators.
|
646
|
+
#
|
647
|
+
# * File::FNM_SHORTNAME: specifies that patterns may match short names if they
|
648
|
+
# exist; Windows only.
|
649
|
+
#
|
650
|
+
def self.glob: (array[path] | path pattern, ?int flags, ?base: path?, ?sort: bool) -> Array[String]
|
651
|
+
| (array[path] | path pattern, ?int flags, ?base: path?, ?sort: bool) { (String pathname) -> void } -> nil
|
428
652
|
|
429
653
|
# <!--
|
430
654
|
# rdoc-file=dir.c
|
431
|
-
# - Dir.home()
|
432
|
-
# - Dir.home("root") -> "/root"
|
655
|
+
# - Dir.home(user_name = nil) -> dirpath
|
433
656
|
# -->
|
434
|
-
# Returns the home directory of the
|
657
|
+
# Returns the home directory path of the user specified with `user_name` if it
|
658
|
+
# is not `nil`, or the current login user:
|
659
|
+
#
|
660
|
+
# Dir.home # => "/home/me"
|
661
|
+
# Dir.home('root') # => "/root"
|
662
|
+
#
|
663
|
+
# Raises ArgumentError if `user_name` is not a user name.
|
435
664
|
#
|
436
|
-
def self.home: (?string user) -> String
|
665
|
+
def self.home: (?string? user) -> String
|
437
666
|
|
438
667
|
# <!--
|
439
668
|
# rdoc-file=dir.c
|
440
|
-
# - Dir.mkdir(
|
669
|
+
# - Dir.mkdir(dirpath, permissions = 0775) -> 0
|
441
670
|
# -->
|
442
|
-
#
|
443
|
-
#
|
444
|
-
# of File::umask, and are ignored on NT. Raises a SystemCallError if the
|
445
|
-
# directory cannot be created. See also the discussion of permissions in the
|
446
|
-
# class documentation for File.
|
671
|
+
# Creates a directory in the underlying file system at `dirpath` with the given
|
672
|
+
# `permissions`; returns zero:
|
447
673
|
#
|
448
|
-
# Dir.mkdir(
|
674
|
+
# Dir.mkdir('foo')
|
675
|
+
# File.stat(Dir.new('foo')).mode.to_s(8)[1..4] # => "0755"
|
676
|
+
# Dir.mkdir('bar', 0644)
|
677
|
+
# File.stat(Dir.new('bar')).mode.to_s(8)[1..4] # => "0644"
|
449
678
|
#
|
450
|
-
|
679
|
+
# See [File Permissions](rdoc-ref:File@File+Permissions). Note that argument
|
680
|
+
# `permissions` is ignored on Windows.
|
681
|
+
#
|
682
|
+
def self.mkdir: (path dirname, ?int permissions) -> 0
|
451
683
|
|
452
684
|
# <!--
|
453
685
|
# rdoc-file=dir.rb
|
454
|
-
# - Dir.open(
|
455
|
-
# - Dir.open(
|
456
|
-
# - Dir.open(
|
457
|
-
# - Dir.open(
|
686
|
+
# - Dir.open(dirpath) -> dir
|
687
|
+
# - Dir.open(dirpath, encoding: nil) -> dir
|
688
|
+
# - Dir.open(dirpath) {|dir| ... } -> object
|
689
|
+
# - Dir.open(dirpath, encoding: nil) {|dir| ... } -> object
|
458
690
|
# -->
|
459
|
-
#
|
460
|
-
#
|
691
|
+
# Creates a new Dir object *dir* for the directory at `dirpath`.
|
692
|
+
#
|
693
|
+
# With no block, the method equivalent to Dir.new(dirpath, encoding):
|
694
|
+
#
|
695
|
+
# Dir.open('.') # => #<Dir:.>
|
696
|
+
#
|
697
|
+
# With a block given, the block is called with the created *dir*; on block exit
|
698
|
+
# *dir* is closed and the block's value is returned:
|
461
699
|
#
|
462
|
-
#
|
463
|
-
# passed *aDir* as a parameter. The directory is closed at the end of the block,
|
464
|
-
# and Dir::open returns the value of the block.
|
700
|
+
# Dir.open('.') {|dir| dir.inspect } # => "#<Dir:.>"
|
465
701
|
#
|
466
|
-
|
467
|
-
|
702
|
+
# The value given with optional keyword argument `encoding` specifies the
|
703
|
+
# encoding for the directory entry names; if `nil` (the default), the file
|
704
|
+
# system's encoding is used:
|
705
|
+
#
|
706
|
+
# Dir.open('.').read.encoding # => #<Encoding:UTF-8>
|
707
|
+
# Dir.open('.', encoding: 'US-ASCII').read.encoding # => #<Encoding:US-ASCII>
|
708
|
+
#
|
709
|
+
def self.open: (path dirname, ?encoding: encoding?) -> instance
|
710
|
+
| [U] (path dirname, ?encoding: encoding?) { (instance) -> U } -> U
|
468
711
|
|
469
712
|
# <!--
|
470
713
|
# rdoc-file=dir.c
|
471
|
-
# - Dir.getwd -> string
|
472
714
|
# - Dir.pwd -> string
|
473
715
|
# -->
|
474
|
-
# Returns the path to the current working directory
|
716
|
+
# Returns the path to the current working directory:
|
475
717
|
#
|
476
|
-
# Dir.chdir("/tmp")
|
477
|
-
# Dir.
|
478
|
-
# Dir.pwd #=> "/tmp"
|
718
|
+
# Dir.chdir("/tmp") # => 0
|
719
|
+
# Dir.pwd # => "/tmp"
|
479
720
|
#
|
480
|
-
|
721
|
+
alias self.pwd self.getwd
|
481
722
|
|
482
723
|
# <!--
|
483
724
|
# rdoc-file=dir.c
|
484
|
-
# - Dir.
|
485
|
-
# - Dir.rmdir( string ) -> 0
|
486
|
-
# - Dir.unlink( string ) -> 0
|
725
|
+
# - Dir.rmdir(dirpath) -> 0
|
487
726
|
# -->
|
488
|
-
#
|
489
|
-
#
|
727
|
+
# Removes the directory at `dirpath` from the underlying file system:
|
728
|
+
#
|
729
|
+
# Dir.rmdir('foo') # => 0
|
730
|
+
#
|
731
|
+
# Raises an exception if the directory is not empty.
|
490
732
|
#
|
491
733
|
alias self.rmdir self.delete
|
492
734
|
|
493
735
|
# <!--
|
494
736
|
# rdoc-file=dir.c
|
495
|
-
# - Dir.
|
496
|
-
# - Dir.rmdir( string ) -> 0
|
497
|
-
# - Dir.unlink( string ) -> 0
|
737
|
+
# - Dir.rmdir(dirpath) -> 0
|
498
738
|
# -->
|
499
|
-
#
|
500
|
-
#
|
739
|
+
# Removes the directory at `dirpath` from the underlying file system:
|
740
|
+
#
|
741
|
+
# Dir.rmdir('foo') # => 0
|
742
|
+
#
|
743
|
+
# Raises an exception if the directory is not empty.
|
501
744
|
#
|
502
745
|
alias self.unlink self.delete
|
503
746
|
|
504
|
-
|
747
|
+
# <!--
|
748
|
+
# rdoc-file=dir.c
|
749
|
+
# - chdir -> 0
|
750
|
+
# - chdir { ... } -> object
|
751
|
+
# -->
|
752
|
+
# Changes the current working directory to `self`:
|
753
|
+
#
|
754
|
+
# Dir.pwd # => "/"
|
755
|
+
# dir = Dir.new('example')
|
756
|
+
# dir.chdir
|
757
|
+
# Dir.pwd # => "/example"
|
758
|
+
#
|
759
|
+
# With a block, temporarily changes the working directory:
|
760
|
+
#
|
761
|
+
# * Calls the block.
|
762
|
+
# * Changes to the given directory.
|
763
|
+
# * Executes the block (yields no args).
|
764
|
+
# * Restores the previous working directory.
|
765
|
+
# * Returns the block's return value.
|
766
|
+
#
|
767
|
+
# Uses Dir.fchdir if available, and Dir.chdir if not, see those methods for
|
768
|
+
# caveats.
|
769
|
+
#
|
770
|
+
def chdir: () -> Integer
|
771
|
+
| [T] () { () -> T } -> T
|
505
772
|
|
506
773
|
# <!--
|
507
774
|
# rdoc-file=dir.c
|
508
|
-
# -
|
775
|
+
# - children -> array
|
509
776
|
# -->
|
510
|
-
# Returns an array
|
511
|
-
# this directory.
|
777
|
+
# Returns an array of the entry names in `self` except for `'.'` and `'..'`:
|
512
778
|
#
|
513
|
-
#
|
514
|
-
#
|
779
|
+
# dir = Dir.new('/example')
|
780
|
+
# dir.children # => ["config.h", "lib", "main.rb"]
|
515
781
|
#
|
516
782
|
def children: () -> Array[String]
|
517
783
|
|
518
784
|
# <!--
|
519
785
|
# rdoc-file=dir.c
|
520
|
-
# -
|
786
|
+
# - close -> nil
|
521
787
|
# -->
|
522
|
-
# Closes the
|
523
|
-
#
|
788
|
+
# Closes the stream in `self`, if it is open, and returns `nil`; ignored if
|
789
|
+
# `self` is already closed:
|
524
790
|
#
|
525
|
-
#
|
526
|
-
#
|
791
|
+
# dir = Dir.new('example')
|
792
|
+
# dir.read # => "."
|
793
|
+
# dir.close # => nil
|
794
|
+
# dir.close # => nil
|
795
|
+
# dir.read # Raises IOError.
|
527
796
|
#
|
528
|
-
def close: () ->
|
797
|
+
def close: () -> nil
|
529
798
|
|
530
799
|
# <!--
|
531
800
|
# rdoc-file=dir.c
|
532
|
-
# -
|
533
|
-
# - dir.each -> an_enumerator
|
801
|
+
# - each {|entry_name| ... } -> self
|
534
802
|
# -->
|
535
|
-
# Calls the block
|
536
|
-
# each entry as a parameter to the block.
|
803
|
+
# Calls the block with each entry name in `self`:
|
537
804
|
#
|
538
|
-
#
|
805
|
+
# Dir.new('example').each {|entry_name| p entry_name }
|
539
806
|
#
|
540
|
-
#
|
541
|
-
# d.each {|x| puts "Got #{x}" }
|
807
|
+
# Output:
|
542
808
|
#
|
543
|
-
#
|
809
|
+
# "."
|
810
|
+
# ".."
|
811
|
+
# "config.h"
|
812
|
+
# "lib"
|
813
|
+
# "main.rb"
|
544
814
|
#
|
545
|
-
#
|
546
|
-
# Got ..
|
547
|
-
# Got config.h
|
548
|
-
# Got main.rb
|
815
|
+
# With no block given, returns an Enumerator.
|
549
816
|
#
|
550
817
|
def each: () { (String) -> void } -> self
|
551
|
-
| () ->
|
818
|
+
| () -> Enumerator[String, self]
|
552
819
|
|
553
820
|
# <!--
|
554
821
|
# rdoc-file=dir.c
|
555
|
-
# -
|
556
|
-
# - dir.each_child -> an_enumerator
|
822
|
+
# - each_child {|entry_name| ... } -> self
|
557
823
|
# -->
|
558
|
-
# Calls the block
|
559
|
-
# passing the filename of each entry as a parameter to the block.
|
824
|
+
# Calls the block with each entry name in `self` except `'.'` and `'..'`:
|
560
825
|
#
|
561
|
-
#
|
826
|
+
# dir = Dir.new('/example')
|
827
|
+
# dir.each_child {|entry_name| p entry_name }
|
562
828
|
#
|
563
|
-
#
|
564
|
-
# d.each_child {|x| puts "Got #{x}" }
|
829
|
+
# Output:
|
565
830
|
#
|
566
|
-
#
|
831
|
+
# "config.h"
|
832
|
+
# "lib"
|
833
|
+
# "main.rb"
|
567
834
|
#
|
568
|
-
#
|
569
|
-
# Got main.rb
|
835
|
+
# If no block is given, returns an enumerator.
|
570
836
|
#
|
571
837
|
def each_child: () { (String) -> void } -> self
|
572
|
-
| () ->
|
838
|
+
| () -> Enumerator[String, self]
|
573
839
|
|
574
840
|
# <!--
|
575
841
|
# rdoc-file=dir.c
|
576
|
-
# -
|
842
|
+
# - fileno -> integer
|
577
843
|
# -->
|
578
844
|
# Returns the file descriptor used in *dir*.
|
579
845
|
#
|
580
|
-
# d = Dir.new(
|
581
|
-
# d.fileno
|
846
|
+
# d = Dir.new('..')
|
847
|
+
# d.fileno # => 8
|
582
848
|
#
|
583
|
-
# This method uses
|
584
|
-
#
|
585
|
-
#
|
849
|
+
# This method uses the
|
850
|
+
# [dirfd()](https://www.man7.org/linux/man-pages/man3/dirfd.3.html) function
|
851
|
+
# defined by POSIX 2008; the method is not implemented on non-POSIX platforms
|
852
|
+
# (raises NotImplementedError).
|
586
853
|
#
|
587
854
|
def fileno: () -> Integer
|
588
855
|
|
589
856
|
# <!--
|
590
857
|
# rdoc-file=dir.c
|
591
|
-
# -
|
858
|
+
# - inspect -> string
|
592
859
|
# -->
|
593
|
-
#
|
860
|
+
# Returns a string description of `self`:
|
861
|
+
#
|
862
|
+
# Dir.new('example').inspect # => "#<Dir:example>"
|
594
863
|
#
|
595
864
|
def inspect: () -> String
|
596
865
|
|
597
866
|
# <!--
|
598
867
|
# rdoc-file=dir.c
|
599
|
-
# -
|
600
|
-
# - dir.to_path -> string or nil
|
868
|
+
# - path -> string or nil
|
601
869
|
# -->
|
602
|
-
# Returns the
|
870
|
+
# Returns the `dirpath` string that was used to create `self` (or `nil` if
|
871
|
+
# created by method Dir.for_fd):
|
603
872
|
#
|
604
|
-
#
|
605
|
-
# d.path #=> ".."
|
873
|
+
# Dir.new('example').path # => "example"
|
606
874
|
#
|
607
875
|
def path: () -> String?
|
608
876
|
|
609
877
|
# <!-- rdoc-file=dir.c -->
|
610
|
-
# Returns the current position
|
878
|
+
# Returns the current position of `self`; see [Dir As
|
879
|
+
# Stream-Like](rdoc-ref:Dir@Dir+As+Stream-Like):
|
611
880
|
#
|
612
|
-
#
|
613
|
-
#
|
614
|
-
#
|
615
|
-
#
|
881
|
+
# dir = Dir.new('example')
|
882
|
+
# dir.tell # => 0
|
883
|
+
# dir.read # => "."
|
884
|
+
# dir.tell # => 1
|
616
885
|
#
|
617
886
|
def pos: () -> Integer
|
618
887
|
|
619
888
|
# <!--
|
620
889
|
# rdoc-file=dir.c
|
621
|
-
# -
|
890
|
+
# - pos = position -> integer
|
622
891
|
# -->
|
623
|
-
#
|
892
|
+
# Sets the position in `self` and returns `position`. The value of `position`
|
893
|
+
# should have been returned from an earlier call to #tell; if not, the return
|
894
|
+
# values from subsequent calls to #read are unspecified.
|
895
|
+
#
|
896
|
+
# See [Dir As Stream-Like](rdoc-ref:Dir@Dir+As+Stream-Like).
|
897
|
+
#
|
898
|
+
# Examples:
|
624
899
|
#
|
625
|
-
#
|
626
|
-
#
|
627
|
-
#
|
628
|
-
#
|
629
|
-
#
|
630
|
-
#
|
900
|
+
# dir = Dir.new('example')
|
901
|
+
# dir.pos # => 0
|
902
|
+
# dir.pos = 3 # => 3
|
903
|
+
# dir.pos # => 3
|
904
|
+
# dir.pos = 30 # => 30
|
905
|
+
# dir.pos # => 5
|
631
906
|
#
|
632
|
-
def pos=: (
|
907
|
+
def pos=: [U < _ToInt] (U pos) -> U
|
633
908
|
|
634
909
|
# <!--
|
635
910
|
# rdoc-file=dir.c
|
636
|
-
# -
|
911
|
+
# - read -> string or nil
|
637
912
|
# -->
|
638
|
-
# Reads the next entry from
|
639
|
-
#
|
913
|
+
# Reads and returns the next entry name from `self`; returns `nil` if at
|
914
|
+
# end-of-stream; see [Dir As Stream-Like](rdoc-ref:Dir@Dir+As+Stream-Like):
|
640
915
|
#
|
641
|
-
#
|
642
|
-
#
|
643
|
-
#
|
644
|
-
#
|
916
|
+
# dir = Dir.new('example')
|
917
|
+
# dir.read # => "."
|
918
|
+
# dir.read # => ".."
|
919
|
+
# dir.read # => "config.h"
|
645
920
|
#
|
646
921
|
def read: () -> String?
|
647
922
|
|
648
923
|
# <!--
|
649
924
|
# rdoc-file=dir.c
|
650
|
-
# -
|
925
|
+
# - rewind -> self
|
651
926
|
# -->
|
652
|
-
#
|
927
|
+
# Sets the position in `self` to zero; see [Dir As
|
928
|
+
# Stream-Like](rdoc-ref:Dir@Dir+As+Stream-Like):
|
653
929
|
#
|
654
|
-
#
|
655
|
-
#
|
656
|
-
#
|
657
|
-
#
|
930
|
+
# dir = Dir.new('example')
|
931
|
+
# dir.read # => "."
|
932
|
+
# dir.read # => ".."
|
933
|
+
# dir.pos # => 2
|
934
|
+
# dir.rewind # => #<Dir:example>
|
935
|
+
# dir.pos # => 0
|
658
936
|
#
|
659
937
|
def rewind: () -> self
|
660
938
|
|
661
939
|
# <!--
|
662
940
|
# rdoc-file=dir.c
|
663
|
-
# -
|
941
|
+
# - seek(position) -> self
|
664
942
|
# -->
|
665
|
-
#
|
666
|
-
#
|
943
|
+
# Sets the position in `self` and returns `self`. The value of `position` should
|
944
|
+
# have been returned from an earlier call to #tell; if not, the return values
|
945
|
+
# from subsequent calls to #read are unspecified.
|
946
|
+
#
|
947
|
+
# See [Dir As Stream-Like](rdoc-ref:Dir@Dir+As+Stream-Like).
|
948
|
+
#
|
949
|
+
# Examples:
|
667
950
|
#
|
668
|
-
#
|
669
|
-
#
|
670
|
-
#
|
671
|
-
#
|
672
|
-
#
|
673
|
-
#
|
951
|
+
# dir = Dir.new('example')
|
952
|
+
# dir.pos # => 0
|
953
|
+
# dir.seek(3) # => #<Dir:example>
|
954
|
+
# dir.pos # => 3
|
955
|
+
# dir.seek(30) # => #<Dir:example>
|
956
|
+
# dir.pos # => 5
|
674
957
|
#
|
675
|
-
def seek: (
|
958
|
+
def seek: (int pos) -> self
|
676
959
|
|
677
960
|
# <!--
|
678
961
|
# rdoc-file=dir.c
|
679
|
-
# -
|
680
|
-
# - dir.tell -> integer
|
962
|
+
# - tell -> integer
|
681
963
|
# -->
|
682
|
-
# Returns the current position
|
964
|
+
# Returns the current position of `self`; see [Dir As
|
965
|
+
# Stream-Like](rdoc-ref:Dir@Dir+As+Stream-Like):
|
683
966
|
#
|
684
|
-
#
|
685
|
-
#
|
686
|
-
#
|
687
|
-
#
|
967
|
+
# dir = Dir.new('example')
|
968
|
+
# dir.tell # => 0
|
969
|
+
# dir.read # => "."
|
970
|
+
# dir.tell # => 1
|
688
971
|
#
|
689
|
-
|
972
|
+
alias tell pos
|
690
973
|
|
691
974
|
# <!-- rdoc-file=dir.c -->
|
692
|
-
# Returns the
|
975
|
+
# Returns the `dirpath` string that was used to create `self` (or `nil` if
|
976
|
+
# created by method Dir.for_fd):
|
693
977
|
#
|
694
|
-
#
|
695
|
-
# d.path #=> ".."
|
978
|
+
# Dir.new('example').path # => "example"
|
696
979
|
#
|
697
980
|
alias to_path path
|
698
981
|
end
|