rbs 3.6.1 → 3.9.5

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.
Files changed (268) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/comments.yml +2 -2
  3. data/.github/workflows/dependabot.yml +1 -1
  4. data/.github/workflows/ruby.yml +34 -10
  5. data/.github/workflows/windows.yml +20 -3
  6. data/.gitignore +1 -0
  7. data/.rubocop.yml +26 -1
  8. data/CHANGELOG.md +241 -0
  9. data/Rakefile +54 -4
  10. data/config.yml +317 -0
  11. data/core/array.rbs +1756 -1591
  12. data/core/basic_object.rbs +38 -35
  13. data/core/comparable.rbs +1 -1
  14. data/core/complex.rbs +166 -94
  15. data/core/data.rbs +2 -2
  16. data/core/dir.rbs +2 -18
  17. data/core/encoding.rbs +12 -32
  18. data/core/enumerable.rbs +270 -266
  19. data/core/enumerator.rbs +14 -4
  20. data/core/env.rbs +1 -1
  21. data/core/errno.rbs +33 -16
  22. data/core/errors.rbs +6 -2
  23. data/core/exception.rbs +342 -167
  24. data/core/fiber.rbs +3 -2
  25. data/core/file.rbs +26 -75
  26. data/core/float.rbs +125 -72
  27. data/core/gc.rbs +158 -42
  28. data/core/hash.rbs +122 -143
  29. data/core/integer.rbs +79 -50
  30. data/core/io/buffer.rbs +49 -43
  31. data/core/io.rbs +108 -151
  32. data/core/kernel.rbs +341 -209
  33. data/core/match_data.rbs +76 -2
  34. data/core/math.rbs +0 -36
  35. data/core/method.rbs +2 -2
  36. data/core/module.rbs +32 -27
  37. data/core/nil_class.rbs +2 -2
  38. data/core/numeric.rbs +101 -104
  39. data/core/object.rbs +1 -5
  40. data/core/object_space/weak_key_map.rbs +3 -4
  41. data/core/object_space.rbs +3 -3
  42. data/core/proc.rbs +82 -14
  43. data/core/process.rbs +110 -58
  44. data/core/ractor.rbs +57 -4
  45. data/core/range.rbs +114 -87
  46. data/core/rational.rbs +0 -2
  47. data/core/rbs/unnamed/argf.rbs +237 -36
  48. data/core/rbs/unnamed/env_class.rbs +35 -53
  49. data/core/rbs/unnamed/random.rbs +1 -2
  50. data/core/regexp.rbs +10 -56
  51. data/core/ruby_vm.rbs +88 -9
  52. data/core/rubygems/config_file.rbs +3 -0
  53. data/core/rubygems/errors.rbs +3 -6
  54. data/core/rubygems/platform.rbs +0 -9
  55. data/core/rubygems/rubygems.rbs +3 -6
  56. data/core/rubygems/version.rbs +8 -8
  57. data/core/set.rbs +4 -16
  58. data/core/string.rbs +271 -264
  59. data/core/struct.rbs +6 -18
  60. data/core/symbol.rbs +14 -21
  61. data/core/thread.rbs +32 -35
  62. data/core/time.rbs +131 -50
  63. data/core/trace_point.rbs +124 -113
  64. data/core/true_class.rbs +0 -1
  65. data/core/unbound_method.rbs +1 -1
  66. data/core/warning.rbs +9 -2
  67. data/docs/architecture.md +1 -1
  68. data/docs/syntax.md +17 -10
  69. data/ext/rbs_extension/extconf.rb +11 -0
  70. data/ext/rbs_extension/location.c +61 -29
  71. data/ext/rbs_extension/location.h +4 -3
  72. data/ext/rbs_extension/main.c +23 -1
  73. data/ext/rbs_extension/parser.c +506 -517
  74. data/ext/rbs_extension/parserstate.c +109 -30
  75. data/ext/rbs_extension/parserstate.h +6 -4
  76. data/ext/rbs_extension/rbs_extension.h +1 -10
  77. data/{ext/rbs_extension → include/rbs}/constants.h +21 -19
  78. data/include/rbs/ruby_objs.h +72 -0
  79. data/include/rbs/util/rbs_constant_pool.h +219 -0
  80. data/include/rbs.h +7 -0
  81. data/lib/rbs/annotate/annotations.rb +3 -3
  82. data/lib/rbs/annotate/rdoc_source.rb +2 -2
  83. data/lib/rbs/ast/declarations.rb +9 -4
  84. data/lib/rbs/ast/directives.rb +10 -0
  85. data/lib/rbs/ast/members.rb +2 -0
  86. data/lib/rbs/ast/type_param.rb +2 -12
  87. data/lib/rbs/cli/diff.rb +3 -3
  88. data/lib/rbs/cli/validate.rb +2 -1
  89. data/lib/rbs/cli.rb +16 -16
  90. data/lib/rbs/collection/config/lockfile_generator.rb +58 -8
  91. data/lib/rbs/collection/config.rb +5 -3
  92. data/lib/rbs/collection/sources/rubygems.rb +1 -1
  93. data/lib/rbs/collection.rb +1 -0
  94. data/lib/rbs/definition.rb +51 -34
  95. data/lib/rbs/definition_builder/ancestor_builder.rb +5 -3
  96. data/lib/rbs/definition_builder.rb +83 -24
  97. data/lib/rbs/environment.rb +33 -18
  98. data/lib/rbs/environment_loader.rb +6 -1
  99. data/lib/rbs/errors.rb +24 -0
  100. data/lib/rbs/locator.rb +2 -0
  101. data/lib/rbs/method_type.rb +2 -0
  102. data/lib/rbs/namespace.rb +1 -0
  103. data/lib/rbs/parser_aux.rb +40 -3
  104. data/lib/rbs/prototype/rb.rb +20 -12
  105. data/lib/rbs/prototype/rbi.rb +11 -6
  106. data/lib/rbs/prototype/runtime/value_object_generator.rb +7 -5
  107. data/lib/rbs/prototype/runtime.rb +7 -5
  108. data/lib/rbs/subtractor.rb +3 -3
  109. data/lib/rbs/test/hook.rb +47 -42
  110. data/lib/rbs/test/type_check.rb +7 -5
  111. data/lib/rbs/type_name.rb +14 -9
  112. data/lib/rbs/types.rb +63 -14
  113. data/lib/rbs/unit_test/spy.rb +4 -2
  114. data/lib/rbs/unit_test/type_assertions.rb +19 -13
  115. data/lib/rbs/unit_test/with_aliases.rb +3 -1
  116. data/lib/rbs/validator.rb +7 -1
  117. data/lib/rbs/version.rb +1 -1
  118. data/lib/rbs/writer.rb +10 -5
  119. data/lib/rbs.rb +1 -0
  120. data/lib/rdoc_plugin/parser.rb +2 -2
  121. data/rbs.gemspec +6 -2
  122. data/sig/ancestor_graph.rbs +5 -5
  123. data/sig/annotate/rdoc_source.rbs +2 -0
  124. data/sig/cli.rbs +2 -0
  125. data/sig/collection/config/lockfile_generator.rbs +9 -1
  126. data/sig/declarations.rbs +10 -3
  127. data/sig/definition.rbs +80 -12
  128. data/sig/definition_builder.rbs +18 -4
  129. data/sig/directives.rbs +17 -1
  130. data/sig/environment.rbs +3 -1
  131. data/sig/errors.rbs +19 -0
  132. data/sig/namespace.rbs +2 -3
  133. data/sig/parser.rbs +5 -1
  134. data/sig/prototype/rb.rbs +1 -1
  135. data/sig/resolver/constant_resolver.rbs +2 -2
  136. data/sig/resolver/context.rbs +1 -1
  137. data/sig/subtractor.rbs +1 -1
  138. data/sig/test/type_check.rbs +2 -2
  139. data/sig/type_alias_dependency.rbs +2 -2
  140. data/sig/type_alias_regularity.rbs +6 -6
  141. data/sig/type_param.rbs +4 -4
  142. data/sig/typename.rbs +8 -5
  143. data/sig/types.rbs +1 -1
  144. data/sig/unit_test/spy.rbs +2 -0
  145. data/sig/unit_test/type_assertions.rbs +2 -0
  146. data/sig/use_map.rbs +1 -1
  147. data/sig/validator.rbs +6 -2
  148. data/sig/vendorer.rbs +1 -1
  149. data/sig/writer.rbs +1 -1
  150. data/{ext/rbs_extension → src}/constants.c +35 -36
  151. data/src/ruby_objs.c +799 -0
  152. data/src/util/rbs_constant_pool.c +342 -0
  153. data/stdlib/base64/0/base64.rbs +0 -9
  154. data/stdlib/benchmark/0/benchmark.rbs +11 -2
  155. data/stdlib/bigdecimal/0/big_decimal.rbs +26 -182
  156. data/stdlib/cgi/0/core.rbs +60 -3
  157. data/stdlib/cgi/0/manifest.yaml +1 -0
  158. data/stdlib/coverage/0/coverage.rbs +0 -3
  159. data/stdlib/csv/0/csv.rbs +18 -58
  160. data/stdlib/csv/0/manifest.yaml +1 -0
  161. data/stdlib/date/0/date.rbs +27 -42
  162. data/stdlib/did_you_mean/0/did_you_mean.rbs +1 -6
  163. data/stdlib/digest/0/digest.rbs +25 -2
  164. data/stdlib/erb/0/erb.rbs +0 -1
  165. data/stdlib/etc/0/etc.rbs +51 -34
  166. data/stdlib/fileutils/0/fileutils.rbs +3 -44
  167. data/stdlib/io-console/0/io-console.rbs +69 -15
  168. data/stdlib/ipaddr/0/ipaddr.rbs +16 -4
  169. data/stdlib/json/0/json.rbs +107 -120
  170. data/stdlib/logger/0/log_device.rbs +1 -1
  171. data/stdlib/logger/0/logger.rbs +3 -18
  172. data/stdlib/minitest/0/kernel.rbs +2 -2
  173. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +4 -1
  174. data/stdlib/minitest/0/minitest/assertion.rbs +1 -0
  175. data/stdlib/minitest/0/minitest/assertions.rbs +58 -13
  176. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +7 -0
  177. data/stdlib/minitest/0/minitest/bench_spec.rbs +8 -8
  178. data/stdlib/minitest/0/minitest/benchmark.rbs +17 -16
  179. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  180. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  181. data/stdlib/minitest/0/minitest/mock.rbs +9 -5
  182. data/stdlib/minitest/0/minitest/parallel/executor.rbs +4 -0
  183. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +0 -1
  184. data/stdlib/minitest/0/minitest/pride_io.rbs +8 -0
  185. data/stdlib/minitest/0/minitest/pride_lol.rbs +2 -0
  186. data/stdlib/minitest/0/minitest/progress_reporter.rbs +1 -1
  187. data/stdlib/minitest/0/minitest/reportable.rbs +2 -0
  188. data/stdlib/minitest/0/minitest/runnable.rbs +33 -1
  189. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +1 -1
  190. data/stdlib/minitest/0/minitest/spec/dsl.rbs +10 -6
  191. data/stdlib/minitest/0/minitest/spec.rbs +1 -1
  192. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +5 -0
  193. data/stdlib/minitest/0/minitest/summary_reporter.rbs +0 -7
  194. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +1 -1
  195. data/stdlib/minitest/0/minitest/test.rbs +7 -14
  196. data/stdlib/minitest/0/minitest/unexpected_error.rbs +2 -0
  197. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  198. data/stdlib/minitest/0/minitest/unit.rbs +1 -2
  199. data/stdlib/minitest/0/minitest.rbs +41 -892
  200. data/stdlib/monitor/0/monitor.rbs +13 -4
  201. data/stdlib/net-http/0/net-http.rbs +42 -109
  202. data/stdlib/nkf/0/nkf.rbs +30 -0
  203. data/stdlib/objspace/0/objspace.rbs +1 -2
  204. data/stdlib/observable/0/observable.rbs +1 -1
  205. data/stdlib/open-uri/0/manifest.yaml +1 -0
  206. data/stdlib/open-uri/0/open-uri.rbs +52 -0
  207. data/stdlib/open3/0/open3.rbs +0 -8
  208. data/stdlib/openssl/0/manifest.yaml +1 -0
  209. data/stdlib/openssl/0/openssl.rbs +235 -143
  210. data/stdlib/optparse/0/optparse.rbs +58 -18
  211. data/stdlib/pathname/0/pathname.rbs +2 -8
  212. data/stdlib/pp/0/pp.rbs +3 -1
  213. data/stdlib/prettyprint/0/prettyprint.rbs +0 -4
  214. data/stdlib/pstore/0/pstore.rbs +0 -6
  215. data/stdlib/psych/0/core_ext.rbs +12 -0
  216. data/stdlib/psych/0/psych.rbs +15 -4
  217. data/stdlib/pty/0/pty.rbs +46 -4
  218. data/stdlib/rdoc/0/code_object.rbs +0 -4
  219. data/stdlib/rdoc/0/markup.rbs +10 -12
  220. data/stdlib/rdoc/0/rdoc.rbs +13 -8
  221. data/stdlib/resolv/0/resolv.rbs +21 -12
  222. data/stdlib/ripper/0/ripper.rbs +0 -2
  223. data/stdlib/securerandom/0/securerandom.rbs +7 -2
  224. data/stdlib/shellwords/0/shellwords.rbs +11 -12
  225. data/stdlib/singleton/0/singleton.rbs +0 -1
  226. data/stdlib/socket/0/addrinfo.rbs +1 -2
  227. data/stdlib/socket/0/basic_socket.rbs +0 -5
  228. data/stdlib/socket/0/socket.rbs +32 -27
  229. data/stdlib/socket/0/tcp_server.rbs +0 -3
  230. data/stdlib/socket/0/tcp_socket.rbs +36 -3
  231. data/stdlib/socket/0/udp_socket.rbs +0 -1
  232. data/stdlib/socket/0/unix_server.rbs +0 -3
  233. data/stdlib/socket/0/unix_socket.rbs +4 -2
  234. data/{core/string_io.rbs → stdlib/stringio/0/stringio.rbs} +1 -1
  235. data/stdlib/strscan/0/string_scanner.rbs +1265 -422
  236. data/stdlib/tempfile/0/tempfile.rbs +135 -28
  237. data/stdlib/time/0/time.rbs +48 -35
  238. data/stdlib/timeout/0/timeout.rbs +11 -8
  239. data/stdlib/tmpdir/0/tmpdir.rbs +10 -3
  240. data/stdlib/tsort/0/tsort.rbs +0 -4
  241. data/stdlib/uri/0/common.rbs +28 -30
  242. data/stdlib/uri/0/ftp.rbs +1 -1
  243. data/stdlib/uri/0/generic.rbs +22 -18
  244. data/stdlib/uri/0/http.rbs +2 -2
  245. data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
  246. data/stdlib/zlib/0/buf_error.rbs +1 -70
  247. data/stdlib/zlib/0/data_error.rbs +1 -70
  248. data/stdlib/zlib/0/deflate.rbs +8 -72
  249. data/stdlib/zlib/0/error.rbs +1 -70
  250. data/stdlib/zlib/0/gzip_file/crc_error.rbs +2 -105
  251. data/stdlib/zlib/0/gzip_file/error.rbs +2 -105
  252. data/stdlib/zlib/0/gzip_file/length_error.rbs +2 -105
  253. data/stdlib/zlib/0/gzip_file/no_footer.rbs +2 -105
  254. data/stdlib/zlib/0/gzip_file.rbs +1 -71
  255. data/stdlib/zlib/0/gzip_reader.rbs +3 -74
  256. data/stdlib/zlib/0/gzip_writer.rbs +1 -70
  257. data/stdlib/zlib/0/inflate.rbs +4 -71
  258. data/stdlib/zlib/0/mem_error.rbs +1 -70
  259. data/stdlib/zlib/0/need_dict.rbs +1 -70
  260. data/stdlib/zlib/0/stream_end.rbs +1 -70
  261. data/stdlib/zlib/0/stream_error.rbs +1 -70
  262. data/stdlib/zlib/0/version_error.rbs +1 -70
  263. data/stdlib/zlib/0/zlib.rbs +0 -2
  264. data/stdlib/zlib/0/zstream.rbs +4 -72
  265. metadata +17 -13
  266. data/ext/rbs_extension/ruby_objs.c +0 -602
  267. data/ext/rbs_extension/ruby_objs.h +0 -51
  268. data/stdlib/minitest/0/manifest.yaml +0 -2
@@ -1,16 +1,58 @@
1
1
  # <!-- rdoc-file=lib/tempfile.rb -->
2
- # A utility class for managing temporary files. When you create a Tempfile
3
- # object, it will create a temporary file with a unique filename. A Tempfile
4
- # objects behaves just like a File object, and you can perform all the usual
5
- # file operations on it: reading data, writing data, changing its permissions,
6
- # etc. So although this class does not explicitly document all instance methods
7
- # supported by File, you can in fact call any File instance method on a Tempfile
8
- # object.
2
+ # A utility class for managing temporary files.
3
+ #
4
+ # There are two kind of methods of creating a temporary file:
5
+ #
6
+ # * Tempfile.create (recommended)
7
+ # * Tempfile.new and Tempfile.open (mostly for backward compatibility, not
8
+ # recommended)
9
+ #
10
+ # Tempfile.create creates a usual File object. The timing of file deletion is
11
+ # predictable. Also, it supports open-and-unlink technique which removes the
12
+ # temporary file immediately after creation.
13
+ #
14
+ # Tempfile.new and Tempfile.open creates a Tempfile object. The created file is
15
+ # removed by the GC (finalizer). The timing of file deletion is not predictable.
9
16
  #
10
17
  # ## Synopsis
11
18
  #
12
19
  # require 'tempfile'
13
20
  #
21
+ # # Tempfile.create with a block
22
+ # # The filename are choosen automatically.
23
+ # # (You can specify the prefix and suffix of the filename by an optional argument.)
24
+ # Tempfile.create {|f|
25
+ # f.puts "foo"
26
+ # f.rewind
27
+ # f.read # => "foo\n"
28
+ # } # The file is removed at block exit.
29
+ #
30
+ # # Tempfile.create without a block
31
+ # # You need to unlink the file in non-block form.
32
+ # f = Tempfile.create
33
+ # f.puts "foo"
34
+ # f.close
35
+ # File.unlink(f.path) # You need to unlink the file.
36
+ #
37
+ # # Tempfile.create(anonymous: true) without a block
38
+ # f = Tempfile.create(anonymous: true)
39
+ # # The file is already removed because anonymous.
40
+ # f.path # => "/tmp/" (no filename since no file)
41
+ # f.puts "foo"
42
+ # f.rewind
43
+ # f.read # => "foo\n"
44
+ # f.close
45
+ #
46
+ # # Tempfile.create(anonymous: true) with a block
47
+ # Tempfile.create(anonymous: true) {|f|
48
+ # # The file is already removed because anonymous.
49
+ # f.path # => "/tmp/" (no filename since no file)
50
+ # f.puts "foo"
51
+ # f.rewind
52
+ # f.read # => "foo\n"
53
+ # }
54
+ #
55
+ # # Not recommended: Tempfile.new without a block
14
56
  # file = Tempfile.new('foo')
15
57
  # file.path # => A unique filename in the OS's temp directory,
16
58
  # # e.g.: "/tmp/foo.24722.0"
@@ -21,7 +63,27 @@
21
63
  # file.close
22
64
  # file.unlink # deletes the temp file
23
65
  #
24
- # ## Good practices
66
+ # ## About Tempfile.new and Tempfile.open
67
+ #
68
+ # This section does not apply to Tempfile.create because it returns a File
69
+ # object (not a Tempfile object).
70
+ #
71
+ # When you create a Tempfile object, it will create a temporary file with a
72
+ # unique filename. A Tempfile objects behaves just like a File object, and you
73
+ # can perform all the usual file operations on it: reading data, writing data,
74
+ # changing its permissions, etc. So although this class does not explicitly
75
+ # document all instance methods supported by File, you can in fact call any File
76
+ # instance method on a Tempfile object.
77
+ #
78
+ # A Tempfile object has a finalizer to remove the temporary file. This means
79
+ # that the temporary file is removed via GC. This can cause several problems:
80
+ #
81
+ # * Long GC intervals and conservative GC can accumulate temporary files that
82
+ # are not removed.
83
+ # * Temporary files are not removed if Ruby exits abnormally (such as SIGKILL,
84
+ # SEGV).
85
+ #
86
+ # There are legacy good practices for Tempfile.new and Tempfile.open as follows.
25
87
  #
26
88
  # ### Explicit close
27
89
  #
@@ -61,12 +123,17 @@
61
123
  # this if you do not want any other processes to be able to read from or write
62
124
  # to the Tempfile, and you do not need to know the Tempfile's filename either.
63
125
  #
126
+ # Also, this guarantees the temporary file is removed even if Ruby exits
127
+ # abnormally. The OS reclaims the storage for the temporary file when the file
128
+ # is closed or the Ruby process exits (normally or abnormally).
129
+ #
64
130
  # For example, a practical use case for unlink-after-creation would be this: you
65
131
  # need a large byte buffer that's too large to comfortably fit in RAM, e.g. when
66
132
  # you're writing a web server and you want to buffer the client's file upload
67
133
  # data.
68
134
  #
69
- # Please refer to #unlink for more information and a code example.
135
+ # `Tempfile.create(anonymous: true)` supports this behavior. It also works on
136
+ # Windows.
70
137
  #
71
138
  # ## Minor notes
72
139
  #
@@ -80,7 +147,7 @@
80
147
  class Tempfile < File
81
148
  # <!--
82
149
  # rdoc-file=lib/tempfile.rb
83
- # - create(basename="", tmpdir=nil, mode: 0, **options) { |tmpfile| ... }
150
+ # - create(basename="", tmpdir=nil, mode: 0, anonymous: false, **options, &block)
84
151
  # -->
85
152
  # Creates a file in the underlying file system; returns a new File object based
86
153
  # on that file.
@@ -94,9 +161,9 @@ class Tempfile < File
94
161
  # Permissions](rdoc-ref:File@File+Permissions).
95
162
  # * Mode is `'w+'` (read/write mode, positioned at the end).
96
163
  #
97
- #
98
- # With no block, the file is not removed automatically, and so should be
99
- # explicitly removed.
164
+ # The temporary file removal depends on the keyword argument `anonymous` and
165
+ # whether a block is given or not. See the description about the `anonymous`
166
+ # keyword argument later.
100
167
  #
101
168
  # Example:
102
169
  #
@@ -104,11 +171,36 @@ class Tempfile < File
104
171
  # f.class # => File
105
172
  # f.path # => "/tmp/20220505-9795-17ky6f6"
106
173
  # f.stat.mode.to_s(8) # => "100600"
174
+ # f.close
107
175
  # File.exist?(f.path) # => true
108
176
  # File.unlink(f.path)
109
177
  # File.exist?(f.path) # => false
110
178
  #
111
- # Argument `basename`, if given, may be one of:
179
+ # Tempfile.create {|f|
180
+ # f.puts "foo"
181
+ # f.rewind
182
+ # f.read # => "foo\n"
183
+ # f.path # => "/tmp/20240524-380207-oma0ny"
184
+ # File.exist?(f.path) # => true
185
+ # } # The file is removed at block exit.
186
+ #
187
+ # f = Tempfile.create(anonymous: true)
188
+ # # The file is already removed because anonymous
189
+ # f.path # => "/tmp/" (no filename since no file)
190
+ # f.puts "foo"
191
+ # f.rewind
192
+ # f.read # => "foo\n"
193
+ # f.close
194
+ #
195
+ # Tempfile.create(anonymous: true) {|f|
196
+ # # The file is already removed because anonymous
197
+ # f.path # => "/tmp/" (no filename since no file)
198
+ # f.puts "foo"
199
+ # f.rewind
200
+ # f.read # => "foo\n"
201
+ # }
202
+ #
203
+ # The argument `basename`, if given, may be one of the following:
112
204
  #
113
205
  # * A string: the generated filename begins with `basename`:
114
206
  #
@@ -119,31 +211,50 @@ class Tempfile < File
119
211
  #
120
212
  # Tempfile.create(%w/foo .jpg/) # => #<File:/tmp/foo20220505-17839-tnjchh.jpg>
121
213
  #
122
- #
123
- # With arguments `basename` and `tmpdir`, the file is created in directory
214
+ # With arguments `basename` and `tmpdir`, the file is created in the directory
124
215
  # `tmpdir`:
125
216
  #
126
217
  # Tempfile.create('foo', '.') # => #<File:./foo20220505-9795-1emu6g8>
127
218
  #
128
- # Keyword arguments `mode` and `options` are passed directly to method
219
+ # Keyword arguments `mode` and `options` are passed directly to the method
129
220
  # [File.open](rdoc-ref:File.open):
130
221
  #
131
- # * The value given with `mode` must be an integer, and may be expressed as
132
- # the logical OR of constants defined in
222
+ # * The value given for `mode` must be an integer and may be expressed as the
223
+ # logical OR of constants defined in
133
224
  # [File::Constants](rdoc-ref:File::Constants).
134
225
  # * For `options`, see [Open Options](rdoc-ref:IO@Open+Options).
135
226
  #
227
+ # The keyword argument `anonymous` specifies when the file is removed.
228
+ #
229
+ # * `anonymous=false` (default) without a block: the file is not removed.
230
+ # * `anonymous=false` (default) with a block: the file is removed after the
231
+ # block exits.
232
+ # * `anonymous=true` without a block: the file is removed before returning.
233
+ # * `anonymous=true` with a block: the file is removed before the block is
234
+ # called.
235
+ #
236
+ # In the first case (`anonymous=false` without a block), the file is not removed
237
+ # automatically. It should be explicitly closed. It can be used to rename to the
238
+ # desired filename. If the file is not needed, it should be explicitly removed.
136
239
  #
137
- # With a block given, creates the file as above, passes it to the block, and
138
- # returns the block's value; before the return, the file object is closed and
139
- # the underlying file is removed:
240
+ # The File#path method of the created file object returns the temporary
241
+ # directory with a trailing slash when `anonymous` is true.
242
+ #
243
+ # When a block is given, it creates the file as described above, passes it to
244
+ # the block, and returns the block's value. Before the returning, the file
245
+ # object is closed and the underlying file is removed:
140
246
  #
141
247
  # Tempfile.create {|file| file.path } # => "/tmp/20220505-9795-rkists"
142
248
  #
249
+ # Implementation note:
250
+ #
251
+ # The keyword argument +anonymous=true+ is implemented using FILE_SHARE_DELETE
252
+ # on Windows. O_TMPFILE is used on Linux.
253
+ #
143
254
  # Related: Tempfile.new.
144
255
  #
145
- def self.create: (?String | [ String, String ] basename, ?String? tmpdir, ?mode: Integer, **untyped) -> File
146
- | [A] (?String | [ String, String ] basename, ?String? tmpdir, ?mode: Integer, **untyped) { (File) -> A } -> A
256
+ def self.create: (?String | [ String, String ] basename, ?String? tmpdir, ?mode: Integer, ?anonymous: bool, **untyped) -> File
257
+ | [A] (?String | [ String, String ] basename, ?String? tmpdir, ?mode: Integer, ?anonymous: bool, **untyped) { (File) -> A } -> A
147
258
 
148
259
  # <!--
149
260
  # rdoc-file=lib/tempfile.rb
@@ -315,7 +426,6 @@ class Tempfile < File
315
426
  # * Does not rely on a finalizer to close and unlink the file, which can be
316
427
  # unreliable.
317
428
  #
318
- #
319
429
  # Creates and returns file whose:
320
430
  #
321
431
  # * Class is Tempfile (not File, as in Tempfile.create).
@@ -325,7 +435,6 @@ class Tempfile < File
325
435
  # Permissions](rdoc-ref:File@File+Permissions).
326
436
  # * Mode is `'w+'` (read/write mode, positioned at the end).
327
437
  #
328
- #
329
438
  # The underlying file is removed when the Tempfile object dies and is reclaimed
330
439
  # by the garbage collector.
331
440
  #
@@ -350,7 +459,6 @@ class Tempfile < File
350
459
  #
351
460
  # Tempfile.new(%w/foo .jpg/) # => #<Tempfile:/tmp/foo20220505-17839-58xtfi.jpg>
352
461
  #
353
- #
354
462
  # With arguments `basename` and `tmpdir`, the file is created in directory
355
463
  # `tmpdir`:
356
464
  #
@@ -364,7 +472,6 @@ class Tempfile < File
364
472
  # [File::Constants](rdoc-ref:File::Constants).
365
473
  # * For `options`, see [Open Options](rdoc-ref:IO@Open+Options).
366
474
  #
367
- #
368
475
  # Related: Tempfile.create.
369
476
  #
370
477
  def self.new: (?String | [ String, String ] basename, ?String? tmpdir, ?mode: Integer, **untyped) -> instance
@@ -43,7 +43,7 @@ class Time
43
43
  #
44
44
  # This method **does not** function as a validator. If the input string does
45
45
  # not match valid formats strictly, you may get a cryptic result. Should
46
- # consider to use `Time.strptime` instead of this method as possible.
46
+ # consider to use Time.strptime instead of this method as possible.
47
47
  #
48
48
  # require 'time'
49
49
  #
@@ -147,6 +147,8 @@ class Time
147
147
  # the format of the input string, you provide a second argument that describes
148
148
  # the format of the string.
149
149
  #
150
+ # Raises ArgumentError if the date or format is invalid.
151
+ #
150
152
  # If a block is given, the year described in `date` is converted by the block.
151
153
  # For example:
152
154
  #
@@ -156,95 +158,139 @@ class Time
156
158
  #
157
159
  # %a
158
160
  # : The abbreviated weekday name ("Sun")
161
+ #
159
162
  # %A
160
163
  # : The full weekday name ("Sunday")
164
+ #
161
165
  # %b
162
166
  # : The abbreviated month name ("Jan")
167
+ #
163
168
  # %B
164
169
  # : The full month name ("January")
170
+ #
165
171
  # %c
166
172
  # : The preferred local date and time representation
173
+ #
167
174
  # %C
168
175
  # : Century (20 in 2009)
176
+ #
169
177
  # %d
170
178
  # : Day of the month (01..31)
179
+ #
171
180
  # %D
172
181
  # : Date (%m/%d/%y)
182
+ #
173
183
  # %e
174
184
  # : Day of the month, blank-padded ( 1..31)
185
+ #
175
186
  # %F
176
187
  # : Equivalent to %Y-%m-%d (the ISO 8601 date format)
188
+ #
177
189
  # %g
178
190
  # : The last two digits of the commercial year
191
+ #
179
192
  # %G
180
193
  # : The week-based year according to ISO-8601 (week 1 starts on Monday and
181
194
  # includes January 4)
195
+ #
182
196
  # %h
183
197
  # : Equivalent to %b
198
+ #
184
199
  # %H
185
200
  # : Hour of the day, 24-hour clock (00..23)
201
+ #
186
202
  # %I
187
203
  # : Hour of the day, 12-hour clock (01..12)
204
+ #
188
205
  # %j
189
206
  # : Day of the year (001..366)
207
+ #
190
208
  # %k
191
209
  # : hour, 24-hour clock, blank-padded ( 0..23)
210
+ #
192
211
  # %l
193
212
  # : hour, 12-hour clock, blank-padded ( 0..12)
213
+ #
194
214
  # %L
195
215
  # : Millisecond of the second (000..999)
216
+ #
196
217
  # %m
197
218
  # : Month of the year (01..12)
219
+ #
198
220
  # %M
199
221
  # : Minute of the hour (00..59)
222
+ #
200
223
  # %n
201
224
  # : Newline (n)
225
+ #
202
226
  # %N
203
227
  # : Fractional seconds digits
228
+ #
204
229
  # %p
205
230
  # : Meridian indicator ("AM" or "PM")
231
+ #
206
232
  # %P
207
233
  # : Meridian indicator ("am" or "pm")
234
+ #
208
235
  # %r
209
236
  # : time, 12-hour (same as %I:%M:%S %p)
237
+ #
210
238
  # %R
211
239
  # : time, 24-hour (%H:%M)
240
+ #
212
241
  # %s
213
242
  # : Number of seconds since 1970-01-01 00:00:00 UTC.
243
+ #
214
244
  # %S
215
245
  # : Second of the minute (00..60)
246
+ #
216
247
  # %t
217
248
  # : Tab character (t)
249
+ #
218
250
  # %T
219
251
  # : time, 24-hour (%H:%M:%S)
252
+ #
220
253
  # %u
221
254
  # : Day of the week as a decimal, Monday being 1. (1..7)
255
+ #
222
256
  # %U
223
257
  # : Week number of the current year, starting with the first Sunday as the
224
258
  # first day of the first week (00..53)
259
+ #
225
260
  # %v
226
261
  # : VMS date (%e-%b-%Y)
262
+ #
227
263
  # %V
228
264
  # : Week number of year according to ISO 8601 (01..53)
265
+ #
229
266
  # %W
230
267
  # : Week number of the current year, starting with the first Monday as the
231
268
  # first day of the first week (00..53)
269
+ #
232
270
  # %w
233
271
  # : Day of the week (Sunday is 0, 0..6)
272
+ #
234
273
  # %x
235
274
  # : Preferred representation for the date alone, no time
275
+ #
236
276
  # %X
237
277
  # : Preferred representation for the time alone, no date
278
+ #
238
279
  # %y
239
280
  # : Year without a century (00..99)
281
+ #
240
282
  # %Y
241
283
  # : Year which may include century, if provided
284
+ #
242
285
  # %z
243
- # : Time zone as hour offset from UTC (e.g. +0900)
286
+ # : Time zone as hour offset from UTC (e.g. +0900)
287
+ #
244
288
  # %Z
245
289
  # : Time zone name
290
+ #
246
291
  # %%
247
292
  # : Literal "%" character
293
+ #
248
294
  # %+
249
295
  # : date(1) (%a %b %e %H:%M:%S %Z %Y)
250
296
  #
@@ -383,37 +429,4 @@ class Time
383
429
  # You must require 'time' to use this method.
384
430
  #
385
431
  def httpdate: () -> String
386
-
387
- # <!--
388
- # rdoc-file=lib/time.rb
389
- # - xmlschema(fraction_digits=0)
390
- # -->
391
- # Returns a string which represents the time as a dateTime defined by XML
392
- # Schema:
393
- #
394
- # CCYY-MM-DDThh:mm:ssTZD
395
- # CCYY-MM-DDThh:mm:ss.sssTZD
396
- #
397
- # where TZD is Z or [+-]hh:mm.
398
- #
399
- # If self is a UTC time, Z is used as TZD. [+-]hh:mm is used otherwise.
400
- #
401
- # `fraction_digits` specifies a number of digits to use for fractional seconds.
402
- # Its default value is 0.
403
- #
404
- # require 'time'
405
- #
406
- # t = Time.now
407
- # t.iso8601 # => "2011-10-05T22:26:12-04:00"
408
- #
409
- # You must require 'time' to use this method.
410
- #
411
- def xmlschema: (?Integer fraction_digits) -> String
412
-
413
- # <!--
414
- # rdoc-file=lib/time.rb
415
- # - iso8601(fraction_digits=0)
416
- # -->
417
- #
418
- alias iso8601 xmlschema
419
432
  end
@@ -4,7 +4,7 @@
4
4
  # ## Synopsis
5
5
  #
6
6
  # require 'timeout'
7
- # status = Timeout::timeout(5) {
7
+ # status = Timeout.timeout(5) {
8
8
  # # Something that should be interrupted if it takes more than 5 seconds...
9
9
  # }
10
10
  #
@@ -13,14 +13,11 @@
13
13
  # Timeout provides a way to auto-terminate a potentially long-running operation
14
14
  # if it hasn't finished in a fixed amount of time.
15
15
  #
16
- # Previous versions didn't use a module for namespacing, however #timeout is
17
- # provided for backwards compatibility. You should prefer Timeout.timeout
18
- # instead.
19
- #
20
16
  # ## Copyright
21
17
  #
22
18
  # Copyright
23
19
  # : (C) 2000 Network Applied Communication Laboratory, Inc.
20
+ #
24
21
  # Copyright
25
22
  # : (C) 2000 Information-technology Promotion Agency, Japan
26
23
  #
@@ -33,12 +30,15 @@ module Timeout
33
30
  # `sec` seconds to complete.
34
31
  #
35
32
  # `sec`
36
- # : Number of seconds to wait for the block to terminate. Any number may be
37
- # used, including Floats to specify fractional seconds. A value of 0 or
38
- # `nil` will execute the block without any timeout.
33
+ # : Number of seconds to wait for the block to terminate. Any non-negative
34
+ # number or nil may be used, including Floats to specify fractional seconds.
35
+ # A value of 0 or `nil` will execute the block without any timeout. Any
36
+ # negative number will raise an ArgumentError.
37
+ #
39
38
  # `klass`
40
39
  # : Exception Class to raise if the block fails to terminate in `sec` seconds.
41
40
  # Omitting will use the default, Timeout::Error
41
+ #
42
42
  # `message`
43
43
  # : Error message to raise with Exception Class. Omitting will use the
44
44
  # default, "execution expired"
@@ -75,4 +75,7 @@ class Timeout::Error < RuntimeError
75
75
  attr_reader thread: Thread?
76
76
  end
77
77
 
78
+ # <!-- rdoc-file=lib/timeout.rb -->
79
+ # The version
80
+ #
78
81
  Timeout::VERSION: String
@@ -6,6 +6,9 @@ class Dir
6
6
  # -->
7
7
  # Returns the operating system's temporary file path.
8
8
  #
9
+ # require 'tmpdir'
10
+ # Dir.tmpdir # => "/tmp"
11
+ #
9
12
  def self.tmpdir: () -> String
10
13
 
11
14
  # <!--
@@ -14,6 +17,11 @@ class Dir
14
17
  # -->
15
18
  # Dir.mktmpdir creates a temporary directory.
16
19
  #
20
+ # require 'tmpdir'
21
+ # Dir.mktmpdir {|dir|
22
+ # # use the directory
23
+ # }
24
+ #
17
25
  # The directory is created with 0700 permission. Application should not change
18
26
  # the permission to make the temporary directory accessible from other users.
19
27
  #
@@ -25,7 +33,6 @@ class Dir
25
33
  # * If it is an array, first element is used as the prefix and second element
26
34
  # is used as a suffix.
27
35
  #
28
- #
29
36
  # Dir.mktmpdir {|dir| dir is ".../d..." }
30
37
  # Dir.mktmpdir("foo") {|dir| dir is ".../foo..." }
31
38
  # Dir.mktmpdir(["foo", "bar"]) {|dir| dir is ".../foo...bar" }
@@ -57,6 +64,6 @@ class Dir
57
64
  # FileUtils.remove_entry dir
58
65
  # end
59
66
  #
60
- def self.mktmpdir: (?String | [ String, String ] | nil, ?String?, ?max_try: Integer?) -> String
61
- | [X] (?String | [ String, String ] | nil, ?String?, ?max_try: Integer?) { (String) -> X } -> X
67
+ def self.mktmpdir: (?string | [ string, string ] | nil, ?path?, ?max_try: Integer?) -> String
68
+ | [X] (?string | [string, string ] | nil, ?path?, ?max_try: Integer?) { (String) -> X } -> X
62
69
  end
@@ -11,7 +11,6 @@
11
11
  # * tsort_each_node is used to iterate for all nodes over a graph.
12
12
  # * tsort_each_child is used to iterate for child nodes of a given node.
13
13
  #
14
- #
15
14
  # The equality of nodes are defined by eql? and hash since TSort uses Hash
16
15
  # internally.
17
16
  #
@@ -109,12 +108,9 @@
109
108
  # strongly connected components. Although 'strongly_connected_components.rb'
110
109
  # is correct but too long.
111
110
  #
112
- #
113
111
  # ## References
114
112
  #
115
113
  # 1. Tarjan, "Depth First Search and Linear Graph Algorithms",
116
- #
117
- #
118
114
  # *SIAM Journal on Computing*, Vol. 1, No. 2, pp. 146-160, June 1972.
119
115
  #
120
116
  module TSort[Node] : TSort::_Sortable[Node]