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
data/core/integer.rbs CHANGED
@@ -5,12 +5,10 @@
5
5
  #
6
6
  # * An [integer literal](rdoc-ref:syntax/literals.rdoc@Integer+Literals).
7
7
  #
8
- #
9
8
  # You can convert certain objects to Integers with:
10
9
  #
11
10
  # * Method #Integer.
12
11
  #
13
- #
14
12
  # An attempt to add a singleton method to an instance of this class causes an
15
13
  # exception to be raised.
16
14
  #
@@ -18,8 +16,9 @@
18
16
  #
19
17
  # First, what's elsewhere. Class Integer:
20
18
  #
21
- # * Inherits from [class Numeric](rdoc-ref:Numeric@What-27s+Here).
22
- #
19
+ # * Inherits from [class Numeric](rdoc-ref:Numeric@What-27s+Here) and [class
20
+ # Object](rdoc-ref:Object@What-27s+Here).
21
+ # * Includes [module Comparable](rdoc-ref:Comparable@What-27s+Here).
23
22
  #
24
23
  # Here, class Integer provides methods for:
25
24
  #
@@ -28,14 +27,12 @@
28
27
  # * [Converting](rdoc-ref:Integer@Converting)
29
28
  # * [Other](rdoc-ref:Integer@Other)
30
29
  #
31
- #
32
30
  # ### Querying
33
31
  #
34
32
  # * #allbits?: Returns whether all bits in `self` are set.
35
33
  # * #anybits?: Returns whether any bits in `self` are set.
36
34
  # * #nobits?: Returns whether no bits in `self` are set.
37
35
  #
38
- #
39
36
  # ### Comparing
40
37
  #
41
38
  # * #<: Returns whether `self` is less than the given value.
@@ -48,7 +45,6 @@
48
45
  # * #>: Returns whether `self` is greater than the given value.
49
46
  # * #>=: Returns whether `self` is greater than or equal to the given value.
50
47
  #
51
- #
52
48
  # ### Converting
53
49
  #
54
50
  # * ::sqrt: Returns the integer square root of the given value.
@@ -64,6 +60,7 @@
64
60
  # * #>>: Returns the value of `self` after a rightward bit-shift.
65
61
  # * #[]: Returns a slice of bits from `self`.
66
62
  # * #^: Returns the bitwise EXCLUSIVE OR of `self` and the given value.
63
+ # * #|: Returns the bitwise OR of `self` and the given value.
67
64
  # * #ceil: Returns the smallest number greater than or equal to `self`.
68
65
  # * #chr: Returns a 1-character string containing the character represented by
69
66
  # the value of `self`.
@@ -85,8 +82,6 @@
85
82
  # * #to_s (aliased as #inspect): Returns a string containing the place-value
86
83
  # representation of `self` in the given radix.
87
84
  # * #truncate: Returns `self` truncated to the given precision.
88
- # * #|: Returns the bitwise OR of `self` and the given value.
89
- #
90
85
  #
91
86
  # ### Other
92
87
  #
@@ -362,7 +357,6 @@ class Integer < Numeric
362
357
  # * 1, if `self` is greater then `other`.
363
358
  # * `nil`, if `self` and `other` are incomparable.
364
359
  #
365
- #
366
360
  # Examples:
367
361
  #
368
362
  # 1 <=> 2 # => -1
@@ -620,22 +614,40 @@ class Integer < Numeric
620
614
  # rdoc-file=numeric.c
621
615
  # - ceil(ndigits = 0) -> integer
622
616
  # -->
623
- # Returns the smallest number greater than or equal to `self` with a precision
624
- # of `ndigits` decimal digits.
625
- #
626
- # When the precision is negative, the returned value is an integer with at least
627
- # `ndigits.abs` trailing zeros:
628
- #
629
- # 555.ceil(-1) # => 560
630
- # 555.ceil(-2) # => 600
631
- # -555.ceil(-2) # => -500
632
- # 555.ceil(-3) # => 1000
633
- #
634
- # Returns `self` when `ndigits` is zero or positive.
635
- #
636
- # 555.ceil # => 555
637
- # 555.ceil(50) # => 555
638
- #
617
+ # Returns an integer that is a "ceiling" value for `self`,
618
+ # as specified by the given `ndigits`,
619
+ # which must be an
620
+ # [integer-convertible
621
+ # object](rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects).
622
+ # * When `self` is zero, returns zero (regardless of the value of `ndigits`):
623
+ # 0.ceil(2) # => 0
624
+ # 0.ceil(-2) # => 0
625
+ #
626
+ # * When `self` is non-zero and `ndigits` is non-negative, returns `self`:
627
+ # 555.ceil # => 555
628
+ # 555.ceil(50) # => 555
629
+ #
630
+ # * When `self` is non-zero and `ndigits` is negative,
631
+ # returns a value based on a computed granularity:
632
+ # * The granularity is `10 ** ndigits.abs`.
633
+ # * The returned value is the smallest multiple of the granularity
634
+ # that is greater than or equal to `self`.
635
+ # Examples with positive `self`:
636
+ # ndigits|Granularity|1234.ceil(ndigits)
637
+ # -------|-----------|------------------
638
+ # -1| 10| 1240
639
+ # -2| 100| 1300
640
+ # -3| 1000| 2000
641
+ # -4| 10000| 10000
642
+ # -5| 100000| 100000
643
+ # Examples with negative `self`:
644
+ # ndigits|Granularity|-1234.ceil(ndigits)
645
+ # -------|-----------|-------------------
646
+ # -1| 10| -1230
647
+ # -2| 100| -1200
648
+ # -3| 1000| -1000
649
+ # -4| 10000| 0
650
+ # -5| 100000| 0
639
651
  # Related: Integer#floor.
640
652
  #
641
653
  def ceil: () -> Integer
@@ -728,14 +740,14 @@ class Integer < Numeric
728
740
  # Performs integer division; returns the integer result of dividing `self` by
729
741
  # `numeric`:
730
742
  #
731
- # 4.div(3) # => 1
732
- # 4.div(-3) # => -2
733
- # -4.div(3) # => -2
734
- # -4.div(-3) # => 1
735
- # 4.div(3.0) # => 1
736
- # 4.div(Rational(3, 1)) # => 1
743
+ # 4.div(3) # => 1
744
+ # 4.div(-3) # => -2
745
+ # -4.div(3) # => -2
746
+ # -4.div(-3) # => 1
747
+ # 4.div(3.0) # => 1
748
+ # 4.div(Rational(3, 1)) # => 1
737
749
  #
738
- # Raises an exception if +numeric+ does not have method +div+.
750
+ # Raises an exception if `numeric` does not have method `div`.
739
751
  #
740
752
  def div: (Numeric) -> Integer
741
753
 
@@ -823,22 +835,40 @@ class Integer < Numeric
823
835
  # rdoc-file=numeric.c
824
836
  # - floor(ndigits = 0) -> integer
825
837
  # -->
826
- # Returns the largest number less than or equal to `self` with a precision of
827
- # `ndigits` decimal digits.
828
- #
829
- # When `ndigits` is negative, the returned value has at least `ndigits.abs`
830
- # trailing zeros:
831
- #
832
- # 555.floor(-1) # => 550
833
- # 555.floor(-2) # => 500
834
- # -555.floor(-2) # => -600
835
- # 555.floor(-3) # => 0
836
- #
837
- # Returns `self` when `ndigits` is zero or positive.
838
- #
839
- # 555.floor # => 555
840
- # 555.floor(50) # => 555
841
- #
838
+ # Returns an integer that is a "floor" value for `self`,
839
+ # as specified by the given `ndigits`,
840
+ # which must be an
841
+ # [integer-convertible
842
+ # object](rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects).
843
+ # * When `self` is zero, returns zero (regardless of the value of `ndigits`):
844
+ # 0.floor(2) # => 0
845
+ # 0.floor(-2) # => 0
846
+ #
847
+ # * When `self` is non-zero and `ndigits` is non-negative, returns `self`:
848
+ # 555.floor # => 555
849
+ # 555.floor(50) # => 555
850
+ #
851
+ # * When `self` is non-zero and `ndigits` is negative,
852
+ # returns a value based on a computed granularity:
853
+ # * The granularity is `10 ** ndigits.abs`.
854
+ # * The returned value is the largest multiple of the granularity
855
+ # that is less than or equal to `self`.
856
+ # Examples with positive `self`:
857
+ # ndigits|Granularity|1234.floor(ndigits)
858
+ # -------|-----------|-------------------
859
+ # -1| 10| 1230
860
+ # -2| 100| 1200
861
+ # -3| 1000| 1000
862
+ # -4| 10000| 0
863
+ # -5| 100000| 0
864
+ # Examples with negative `self`:
865
+ # ndigits|Granularity|-1234.floor(ndigits)
866
+ # -------|-----------|--------------------
867
+ # -1| 10| -1240
868
+ # -2| 100| -1300
869
+ # -3| 1000| -2000
870
+ # -4| 10000| -10000
871
+ # -5| 100000| -100000
842
872
  # Related: Integer#ceil.
843
873
  #
844
874
  def floor: (?int digits) -> Integer
@@ -1136,7 +1166,6 @@ class Integer < Numeric
1136
1166
  # 15.round(-1, half: :even) # => 20
1137
1167
  # (-25).round(-1, half: :even) # => -20
1138
1168
  #
1139
- #
1140
1169
  # Raises and exception if the value for `half` is invalid.
1141
1170
  #
1142
1171
  # Related: Integer#truncate.
data/core/io/buffer.rbs CHANGED
@@ -15,7 +15,6 @@ class IO
15
15
  # * Create a string of a fixed size with ::string, then #read into it, or
16
16
  # modify it using #set_value.
17
17
  #
18
- #
19
18
  # Interaction with string and file memory is performed by efficient low-level C
20
19
  # mechanisms like `memcpy`.
21
20
  #
@@ -42,30 +41,28 @@ class IO
42
41
  #
43
42
  # Buffer from string:
44
43
  #
45
- # string = 'buffer'
46
- # buffer = IO::Buffer.for(string)
47
- # # =>
48
- # # #<IO::Buffer 0x00007f3f02be9b18+4 SLICE>
49
- # # ...
50
- # buffer
51
- # # =>
52
- # # #<IO::Buffer 0x00007f3f02be9b18+4 SLICE>
53
- # # 0x00000000 64 61 74 61 buffer
44
+ # string = 'data'
45
+ # IO::Buffer.for(string) do |buffer|
46
+ # buffer
47
+ # # =>
48
+ # # #<IO::Buffer 0x00007f3f02be9b18+4 SLICE>
49
+ # # 0x00000000 64 61 74 61 data
54
50
  #
55
- # buffer.get_string(2) # read content starting from offset 2
56
- # # => "ta"
57
- # buffer.set_string('---', 1) # write content, starting from offset 1
58
- # # => 3
59
- # buffer
60
- # # =>
61
- # # #<IO::Buffer 0x00007f3f02be9b18+4 SLICE>
62
- # # 0x00000000 64 2d 2d 2d d---
63
- # string # original string changed, too
64
- # # => "d---"
51
+ # buffer.get_string(2) # read content starting from offset 2
52
+ # # => "ta"
53
+ # buffer.set_string('---', 1) # write content, starting from offset 1
54
+ # # => 3
55
+ # buffer
56
+ # # =>
57
+ # # #<IO::Buffer 0x00007f3f02be9b18+4 SLICE>
58
+ # # 0x00000000 64 2d 2d 2d d---
59
+ # string # original string changed, too
60
+ # # => "d---"
61
+ # end
65
62
  #
66
63
  # Buffer from file:
67
64
  #
68
- # File.write('test.txt', 'test buffer')
65
+ # File.write('test.txt', 'test data')
69
66
  # # => 9
70
67
  # buffer = IO::Buffer.map(File.open('test.txt'))
71
68
  # # =>
@@ -82,7 +79,7 @@ class IO
82
79
  # buffer.set_string('---', 1)
83
80
  # # => 3 -- bytes written
84
81
  # File.read('test.txt')
85
- # # => "t--- buffer"
82
+ # # => "t--- data"
86
83
  #
87
84
  # **The class is experimental and the interface is subject to change, this is
88
85
  # especially true of file mappings which may be removed entirely in the
@@ -199,29 +196,29 @@ class IO
199
196
  # -->
200
197
  # Fill buffer with `value`, starting with `offset` and going for `length` bytes.
201
198
  #
202
- # buffer = IO::Buffer.for('test')
199
+ # buffer = IO::Buffer.for('test').dup
203
200
  # # =>
204
- # # <IO::Buffer 0x00007fca40087c38+4 SLICE>
201
+ # # <IO::Buffer 0x00007fca40087c38+4 INTERNAL>
205
202
  # # 0x00000000 74 65 73 74 test
206
203
  #
207
204
  # buffer.clear
208
205
  # # =>
209
- # # <IO::Buffer 0x00007fca40087c38+4 SLICE>
206
+ # # <IO::Buffer 0x00007fca40087c38+4 INTERNAL>
210
207
  # # 0x00000000 00 00 00 00 ....
211
208
  #
212
209
  # buf.clear(1) # fill with 1
213
210
  # # =>
214
- # # <IO::Buffer 0x00007fca40087c38+4 SLICE>
211
+ # # <IO::Buffer 0x00007fca40087c38+4 INTERNAL>
215
212
  # # 0x00000000 01 01 01 01 ....
216
213
  #
217
214
  # buffer.clear(2, 1, 2) # fill with 2, starting from offset 1, for 2 bytes
218
215
  # # =>
219
- # # <IO::Buffer 0x00007fca40087c38+4 SLICE>
216
+ # # <IO::Buffer 0x00007fca40087c38+4 INTERNAL>
220
217
  # # 0x00000000 01 02 02 01 ....
221
218
  #
222
219
  # buffer.clear(2, 1) # fill with 2, starting from offset 1
223
220
  # # =>
224
- # # <IO::Buffer 0x00007fca40087c38+4 SLICE>
221
+ # # <IO::Buffer 0x00007fca40087c38+4 INTERNAL>
225
222
  # # 0x00000000 01 02 02 02 ....
226
223
  #
227
224
  def clear: (?Integer value, ?Integer offset, ?Integer length) -> self
@@ -231,7 +228,7 @@ class IO
231
228
  # - copy(source, [offset, [length, [source_offset]]]) -> size
232
229
  # -->
233
230
  # Efficiently copy from a source IO::Buffer into the buffer, at `offset` using
234
- # `memcpy`. For copying String instances, see #set_string.
231
+ # `memmove`. For copying String instances, see #set_string.
235
232
  #
236
233
  # buffer = IO::Buffer.new(32)
237
234
  # # =>
@@ -249,13 +246,14 @@ class IO
249
246
  #
250
247
  # #copy can be used to put buffer into strings associated with buffer:
251
248
  #
252
- # string= "buffer: "
253
- # # => "buffer: "
254
- # buffer = IO::Buffer.for(string)
255
- # buffer.copy(IO::Buffer.for("test"), 5)
249
+ # string = "data: "
250
+ # # => "data: "
251
+ # buffer = IO::Buffer.for(string) do |buffer|
252
+ # buffer.copy(IO::Buffer.for("test"), 5)
253
+ # end
256
254
  # # => 4
257
255
  # string
258
- # # => "buffer:test"
256
+ # # => "data:test"
259
257
  #
260
258
  # Attempt to copy into a read-only buffer will fail:
261
259
  #
@@ -279,6 +277,20 @@ class IO
279
277
  # buffer.copy(IO::Buffer.for('test'), 0)
280
278
  # # in `copy': Specified offset+length is bigger than the buffer size! (ArgumentError)
281
279
  #
280
+ # It is safe to copy between memory regions that overlaps each other. In such
281
+ # case, the data is copied as if the data was first copied from the source
282
+ # buffer to a temporary buffer, and then copied from the temporary buffer to the
283
+ # destination buffer.
284
+ #
285
+ # buffer = IO::Buffer.new(10)
286
+ # buffer.set_string("0123456789")
287
+ # buffer.copy(buffer, 3, 7)
288
+ # # => 7
289
+ # buffer
290
+ # # =>
291
+ # # #<IO::Buffer 0x000056494f8ce440+10 INTERNAL>
292
+ # # 0x00000000 30 31 32 30 31 32 33 34 35 36 0120123456
293
+ #
282
294
  def copy: (Buffer source, ?Integer offset, ?Integer length, ?Integer source_offset) -> Integer
283
295
 
284
296
  # <!--
@@ -313,7 +325,6 @@ class IO
313
325
  # * for a buffer created from scratch: free memory.
314
326
  # * for a buffer created from string: undo the association.
315
327
  #
316
- #
317
328
  # After the buffer is freed, no further operations can't be performed on it.
318
329
  #
319
330
  # You can resize a freed buffer to re-allocate it.
@@ -376,7 +387,6 @@ class IO
376
387
  # * `:f64`: double, 8 bytes, little-endian
377
388
  # * `:F64`: double, 8 bytes, big-endian
378
389
  #
379
- #
380
390
  # A buffer type refers specifically to the type of binary buffer that is stored
381
391
  # in the buffer. For example, a `:u32` buffer type is a 32-bit unsigned integer
382
392
  # in little-endian format.
@@ -654,7 +664,7 @@ class IO
654
664
  # - set_string(string, [offset, [length, [source_offset]]]) -> size
655
665
  # -->
656
666
  # Efficiently copy from a source String into the buffer, at `offset` using
657
- # `memcpy`.
667
+ # `memmove`.
658
668
  #
659
669
  # buf = IO::Buffer.new(8)
660
670
  # # =>
@@ -739,7 +749,7 @@ class IO
739
749
  # bounds.
740
750
  #
741
751
  # string = 'test'
742
- # buffer = IO::Buffer.for(string)
752
+ # buffer = IO::Buffer.for(string).dup
743
753
  #
744
754
  # slice = buffer.slice
745
755
  # # =>
@@ -766,13 +776,9 @@ class IO
766
776
  # # it is also visible at position 1 of the original buffer
767
777
  # buffer
768
778
  # # =>
769
- # # #<IO::Buffer 0x00007fc3d31e2d80+4 SLICE>
779
+ # # #<IO::Buffer 0x00007fc3d31e2d80+4 INTERNAL>
770
780
  # # 0x00000000 74 6f 73 74 tost
771
781
  #
772
- # # ...and original string
773
- # string
774
- # # => tost
775
- #
776
782
  def slice: (Integer offset, Integer length) -> Buffer
777
783
 
778
784
  # <!--