rbs 3.9.5 → 4.0.0

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 (330) hide show
  1. checksums.yaml +4 -4
  2. data/.clang-format +74 -0
  3. data/.clangd +2 -0
  4. data/.github/dependabot.yml +14 -14
  5. data/.github/workflows/bundle-update.yml +60 -0
  6. data/.github/workflows/c-check.yml +58 -0
  7. data/.github/workflows/comments.yml +5 -3
  8. data/.github/workflows/dependabot.yml +2 -2
  9. data/.github/workflows/ruby.yml +40 -32
  10. data/.github/workflows/rust.yml +95 -0
  11. data/.github/workflows/typecheck.yml +2 -2
  12. data/.github/workflows/windows.yml +3 -3
  13. data/.gitignore +4 -0
  14. data/.rubocop.yml +2 -2
  15. data/.vscode/extensions.json +5 -0
  16. data/.vscode/settings.json +19 -0
  17. data/CHANGELOG.md +284 -0
  18. data/README.md +38 -1
  19. data/Rakefile +144 -29
  20. data/Steepfile +2 -0
  21. data/config.yml +634 -62
  22. data/core/array.rbs +307 -227
  23. data/core/basic_object.rbs +9 -8
  24. data/core/binding.rbs +0 -2
  25. data/core/builtin.rbs +2 -2
  26. data/core/class.rbs +6 -5
  27. data/core/comparable.rbs +55 -34
  28. data/core/complex.rbs +104 -78
  29. data/core/dir.rbs +61 -49
  30. data/core/encoding.rbs +12 -15
  31. data/core/enumerable.rbs +188 -87
  32. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  33. data/core/enumerator.rbs +65 -2
  34. data/core/errno.rbs +11 -2
  35. data/core/errors.rbs +58 -29
  36. data/core/exception.rbs +13 -13
  37. data/core/fiber.rbs +74 -54
  38. data/core/file.rbs +280 -177
  39. data/core/file_test.rbs +3 -3
  40. data/core/float.rbs +257 -92
  41. data/core/gc.rbs +425 -281
  42. data/core/hash.rbs +1045 -739
  43. data/core/integer.rbs +135 -137
  44. data/core/io/buffer.rbs +53 -42
  45. data/core/io/wait.rbs +13 -35
  46. data/core/io.rbs +196 -148
  47. data/core/kernel.rbs +216 -155
  48. data/core/marshal.rbs +4 -4
  49. data/core/match_data.rbs +15 -13
  50. data/core/math.rbs +107 -66
  51. data/core/method.rbs +69 -33
  52. data/core/module.rbs +244 -106
  53. data/core/nil_class.rbs +7 -6
  54. data/core/numeric.rbs +74 -63
  55. data/core/object.rbs +9 -11
  56. data/core/object_space.rbs +30 -23
  57. data/core/pathname.rbs +1322 -0
  58. data/core/proc.rbs +95 -58
  59. data/core/process.rbs +222 -202
  60. data/core/ractor.rbs +371 -515
  61. data/core/random.rbs +21 -3
  62. data/core/range.rbs +159 -57
  63. data/core/rational.rbs +60 -89
  64. data/core/rbs/unnamed/argf.rbs +60 -53
  65. data/core/rbs/unnamed/env_class.rbs +19 -14
  66. data/core/rbs/unnamed/main_class.rbs +123 -0
  67. data/core/rbs/unnamed/random.rbs +11 -118
  68. data/core/regexp.rbs +258 -214
  69. data/core/ruby.rbs +53 -0
  70. data/core/ruby_vm.rbs +38 -34
  71. data/core/rubygems/config_file.rbs +5 -5
  72. data/core/rubygems/errors.rbs +4 -71
  73. data/core/rubygems/requirement.rbs +5 -5
  74. data/core/rubygems/rubygems.rbs +16 -82
  75. data/core/rubygems/version.rbs +2 -3
  76. data/core/set.rbs +490 -360
  77. data/core/signal.rbs +26 -16
  78. data/core/string.rbs +3303 -1365
  79. data/core/struct.rbs +27 -26
  80. data/core/symbol.rbs +41 -34
  81. data/core/thread.rbs +135 -74
  82. data/core/time.rbs +81 -50
  83. data/core/trace_point.rbs +41 -35
  84. data/core/true_class.rbs +2 -2
  85. data/core/unbound_method.rbs +24 -16
  86. data/core/warning.rbs +7 -7
  87. data/docs/aliases.md +79 -0
  88. data/docs/collection.md +3 -3
  89. data/docs/config.md +171 -0
  90. data/docs/encoding.md +56 -0
  91. data/docs/gem.md +0 -1
  92. data/docs/inline.md +576 -0
  93. data/docs/sigs.md +3 -3
  94. data/docs/syntax.md +46 -16
  95. data/docs/type_fingerprint.md +21 -0
  96. data/exe/rbs +1 -1
  97. data/ext/rbs_extension/ast_translation.c +1513 -0
  98. data/ext/rbs_extension/ast_translation.h +37 -0
  99. data/ext/rbs_extension/class_constants.c +185 -0
  100. data/{include/rbs/constants.h → ext/rbs_extension/class_constants.h} +22 -1
  101. data/ext/rbs_extension/compat.h +10 -0
  102. data/ext/rbs_extension/extconf.rb +25 -1
  103. data/ext/rbs_extension/legacy_location.c +294 -0
  104. data/ext/rbs_extension/legacy_location.h +82 -0
  105. data/ext/rbs_extension/main.c +468 -24
  106. data/ext/rbs_extension/rbs_extension.h +6 -21
  107. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  108. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  109. data/include/rbs/ast.h +1022 -0
  110. data/include/rbs/defines.h +86 -0
  111. data/include/rbs/lexer.h +206 -0
  112. data/include/rbs/location.h +40 -0
  113. data/include/rbs/parser.h +153 -0
  114. data/include/rbs/string.h +47 -0
  115. data/include/rbs/util/rbs_allocator.h +59 -0
  116. data/include/rbs/util/rbs_assert.h +20 -0
  117. data/include/rbs/util/rbs_buffer.h +83 -0
  118. data/include/rbs/util/rbs_constant_pool.h +6 -70
  119. data/include/rbs/util/rbs_encoding.h +282 -0
  120. data/include/rbs/util/rbs_unescape.h +24 -0
  121. data/include/rbs.h +9 -2
  122. data/lib/rbs/annotate/formatter.rb +3 -13
  123. data/lib/rbs/annotate/rdoc_annotator.rb +3 -1
  124. data/lib/rbs/annotate/rdoc_source.rb +1 -1
  125. data/lib/rbs/ast/annotation.rb +1 -1
  126. data/lib/rbs/ast/comment.rb +1 -1
  127. data/lib/rbs/ast/declarations.rb +10 -10
  128. data/lib/rbs/ast/members.rb +14 -14
  129. data/lib/rbs/ast/ruby/annotations.rb +409 -0
  130. data/lib/rbs/ast/ruby/comment_block.rb +245 -0
  131. data/lib/rbs/ast/ruby/declarations.rb +281 -0
  132. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  133. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  134. data/lib/rbs/ast/ruby/members.rb +723 -0
  135. data/lib/rbs/ast/type_param.rb +24 -4
  136. data/lib/rbs/buffer.rb +105 -20
  137. data/lib/rbs/cli/diff.rb +16 -15
  138. data/lib/rbs/cli/validate.rb +63 -126
  139. data/lib/rbs/cli.rb +56 -24
  140. data/lib/rbs/collection/config/lockfile_generator.rb +14 -2
  141. data/lib/rbs/collection/sources/git.rb +1 -0
  142. data/lib/rbs/collection.rb +0 -1
  143. data/lib/rbs/definition.rb +6 -1
  144. data/lib/rbs/definition_builder/ancestor_builder.rb +121 -65
  145. data/lib/rbs/definition_builder/method_builder.rb +65 -30
  146. data/lib/rbs/definition_builder.rb +177 -20
  147. data/lib/rbs/diff.rb +7 -1
  148. data/lib/rbs/environment/class_entry.rb +69 -0
  149. data/lib/rbs/environment/module_entry.rb +66 -0
  150. data/lib/rbs/environment.rb +402 -214
  151. data/lib/rbs/environment_loader.rb +2 -8
  152. data/lib/rbs/errors.rb +31 -21
  153. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  154. data/lib/rbs/inline_parser.rb +542 -0
  155. data/lib/rbs/location_aux.rb +36 -4
  156. data/lib/rbs/locator.rb +5 -1
  157. data/lib/rbs/method_type.rb +5 -3
  158. data/lib/rbs/namespace.rb +0 -7
  159. data/lib/rbs/parser_aux.rb +35 -7
  160. data/lib/rbs/prototype/helpers.rb +57 -0
  161. data/lib/rbs/prototype/rb.rb +3 -28
  162. data/lib/rbs/prototype/rbi.rb +3 -20
  163. data/lib/rbs/prototype/runtime.rb +10 -2
  164. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  165. data/lib/rbs/resolver/type_name_resolver.rb +116 -38
  166. data/lib/rbs/source.rb +99 -0
  167. data/lib/rbs/subtractor.rb +7 -4
  168. data/lib/rbs/test/type_check.rb +19 -2
  169. data/lib/rbs/type_name.rb +1 -8
  170. data/lib/rbs/types.rb +91 -79
  171. data/lib/rbs/unit_test/convertibles.rb +1 -0
  172. data/lib/rbs/unit_test/type_assertions.rb +35 -8
  173. data/lib/rbs/validator.rb +2 -2
  174. data/lib/rbs/version.rb +1 -1
  175. data/lib/rbs.rb +13 -2
  176. data/lib/rdoc/discover.rb +1 -1
  177. data/lib/rdoc_plugin/parser.rb +3 -3
  178. data/rbs.gemspec +4 -2
  179. data/rust/.gitignore +1 -0
  180. data/rust/Cargo.lock +378 -0
  181. data/rust/Cargo.toml +7 -0
  182. data/rust/ruby-rbs/Cargo.toml +22 -0
  183. data/rust/ruby-rbs/build.rs +764 -0
  184. data/rust/ruby-rbs/examples/locations.rs +60 -0
  185. data/rust/ruby-rbs/src/lib.rs +1 -0
  186. data/rust/ruby-rbs/src/node/mod.rs +742 -0
  187. data/rust/ruby-rbs/tests/sanity.rs +47 -0
  188. data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
  189. data/rust/ruby-rbs-sys/Cargo.toml +23 -0
  190. data/rust/ruby-rbs-sys/build.rs +204 -0
  191. data/rust/ruby-rbs-sys/src/lib.rs +50 -0
  192. data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
  193. data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
  194. data/rust/ruby-rbs-sys/wrapper.h +1 -0
  195. data/schema/typeParam.json +17 -1
  196. data/sig/ancestor_builder.rbs +1 -1
  197. data/sig/annotate/formatter.rbs +2 -2
  198. data/sig/annotate/rdoc_annotater.rbs +1 -1
  199. data/sig/ast/ruby/annotations.rbs +421 -0
  200. data/sig/ast/ruby/comment_block.rbs +127 -0
  201. data/sig/ast/ruby/declarations.rbs +158 -0
  202. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  203. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  204. data/sig/ast/ruby/members.rbs +178 -0
  205. data/sig/buffer.rbs +63 -5
  206. data/sig/cli/diff.rbs +5 -11
  207. data/sig/cli/validate.rbs +12 -8
  208. data/sig/cli.rbs +18 -18
  209. data/sig/definition.rbs +6 -0
  210. data/sig/definition_builder.rbs +3 -1
  211. data/sig/environment/class_entry.rbs +50 -0
  212. data/sig/environment/module_entry.rbs +50 -0
  213. data/sig/environment.rbs +94 -87
  214. data/sig/errors.rbs +26 -20
  215. data/sig/inline_parser/comment_association.rbs +71 -0
  216. data/sig/inline_parser.rbs +124 -0
  217. data/sig/location.rbs +32 -7
  218. data/sig/locator.rbs +0 -2
  219. data/sig/manifest.yaml +0 -1
  220. data/sig/method_builder.rbs +9 -4
  221. data/sig/namespace.rbs +0 -5
  222. data/sig/parser.rbs +67 -13
  223. data/sig/prototype/helpers.rbs +2 -0
  224. data/sig/resolver/type_name_resolver.rbs +35 -7
  225. data/sig/source.rbs +48 -0
  226. data/sig/type_param.rbs +13 -8
  227. data/sig/typename.rbs +0 -5
  228. data/sig/types.rbs +10 -8
  229. data/sig/unit_test/spy.rbs +0 -8
  230. data/sig/unit_test/type_assertions.rbs +11 -0
  231. data/src/ast.c +1604 -0
  232. data/src/lexer.c +3194 -0
  233. data/src/lexer.re +154 -0
  234. data/src/lexstate.c +212 -0
  235. data/src/location.c +31 -0
  236. data/src/parser.c +4205 -0
  237. data/src/string.c +41 -0
  238. data/src/util/rbs_allocator.c +165 -0
  239. data/src/util/rbs_assert.c +19 -0
  240. data/src/util/rbs_buffer.c +54 -0
  241. data/src/util/rbs_constant_pool.c +18 -92
  242. data/src/util/rbs_encoding.c +21308 -0
  243. data/src/util/rbs_unescape.c +167 -0
  244. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  245. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  246. data/stdlib/cgi/0/core.rbs +9 -393
  247. data/stdlib/cgi/0/manifest.yaml +1 -0
  248. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  249. data/stdlib/coverage/0/coverage.rbs +7 -4
  250. data/stdlib/date/0/date.rbs +92 -79
  251. data/stdlib/date/0/date_time.rbs +25 -24
  252. data/stdlib/delegate/0/delegator.rbs +10 -7
  253. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  254. data/stdlib/digest/0/digest.rbs +110 -0
  255. data/stdlib/erb/0/erb.rbs +748 -347
  256. data/stdlib/etc/0/etc.rbs +55 -50
  257. data/stdlib/fileutils/0/fileutils.rbs +158 -139
  258. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  259. data/stdlib/io-console/0/io-console.rbs +2 -2
  260. data/stdlib/json/0/json.rbs +226 -179
  261. data/stdlib/monitor/0/monitor.rbs +3 -3
  262. data/stdlib/net-http/0/net-http.rbs +162 -134
  263. data/stdlib/objspace/0/objspace.rbs +17 -34
  264. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  265. data/stdlib/open3/0/open3.rbs +469 -10
  266. data/stdlib/openssl/0/openssl.rbs +475 -357
  267. data/stdlib/optparse/0/optparse.rbs +26 -17
  268. data/stdlib/pathname/0/pathname.rbs +11 -1381
  269. data/stdlib/pp/0/pp.rbs +9 -8
  270. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  271. data/stdlib/pstore/0/pstore.rbs +35 -30
  272. data/stdlib/psych/0/psych.rbs +65 -12
  273. data/stdlib/psych/0/store.rbs +2 -4
  274. data/stdlib/pty/0/pty.rbs +9 -6
  275. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  276. data/stdlib/rdoc/0/code_object.rbs +4 -3
  277. data/stdlib/rdoc/0/comment.rbs +2 -0
  278. data/stdlib/rdoc/0/options.rbs +76 -0
  279. data/stdlib/rdoc/0/parser.rbs +1 -1
  280. data/stdlib/rdoc/0/rdoc.rbs +7 -5
  281. data/stdlib/rdoc/0/store.rbs +2 -2
  282. data/stdlib/resolv/0/resolv.rbs +25 -68
  283. data/stdlib/ripper/0/ripper.rbs +25 -19
  284. data/stdlib/securerandom/0/manifest.yaml +2 -0
  285. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  286. data/stdlib/shellwords/0/shellwords.rbs +2 -2
  287. data/stdlib/singleton/0/singleton.rbs +3 -0
  288. data/stdlib/socket/0/addrinfo.rbs +9 -9
  289. data/stdlib/socket/0/basic_socket.rbs +3 -3
  290. data/stdlib/socket/0/ip_socket.rbs +10 -8
  291. data/stdlib/socket/0/socket.rbs +23 -10
  292. data/stdlib/socket/0/tcp_server.rbs +1 -1
  293. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  294. data/stdlib/socket/0/udp_socket.rbs +1 -1
  295. data/stdlib/socket/0/unix_server.rbs +1 -1
  296. data/stdlib/stringio/0/stringio.rbs +1177 -85
  297. data/stdlib/strscan/0/string_scanner.rbs +27 -25
  298. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  299. data/stdlib/time/0/time.rbs +8 -6
  300. data/stdlib/timeout/0/timeout.rbs +63 -7
  301. data/stdlib/tsort/0/cyclic.rbs +3 -0
  302. data/stdlib/tsort/0/tsort.rbs +7 -6
  303. data/stdlib/uri/0/common.rbs +42 -20
  304. data/stdlib/uri/0/file.rbs +3 -3
  305. data/stdlib/uri/0/generic.rbs +26 -18
  306. data/stdlib/uri/0/http.rbs +2 -2
  307. data/stdlib/uri/0/ldap.rbs +2 -2
  308. data/stdlib/uri/0/mailto.rbs +3 -3
  309. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  310. data/stdlib/zlib/0/deflate.rbs +4 -3
  311. data/stdlib/zlib/0/gzip_reader.rbs +6 -6
  312. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  313. data/stdlib/zlib/0/inflate.rbs +1 -1
  314. data/stdlib/zlib/0/need_dict.rbs +1 -1
  315. data/stdlib/zlib/0/zstream.rbs +1 -0
  316. metadata +121 -18
  317. data/ext/rbs_extension/lexer.c +0 -2728
  318. data/ext/rbs_extension/lexer.h +0 -179
  319. data/ext/rbs_extension/lexer.re +0 -147
  320. data/ext/rbs_extension/lexstate.c +0 -175
  321. data/ext/rbs_extension/location.c +0 -325
  322. data/ext/rbs_extension/location.h +0 -85
  323. data/ext/rbs_extension/parser.c +0 -2982
  324. data/ext/rbs_extension/parser.h +0 -18
  325. data/ext/rbs_extension/parserstate.c +0 -411
  326. data/ext/rbs_extension/parserstate.h +0 -163
  327. data/ext/rbs_extension/unescape.c +0 -32
  328. data/include/rbs/ruby_objs.h +0 -72
  329. data/src/constants.c +0 -153
  330. data/src/ruby_objs.c +0 -799
data/core/enumerable.rbs CHANGED
@@ -16,8 +16,8 @@
16
16
  # These methods return information about the Enumerable other than the elements
17
17
  # themselves:
18
18
  #
19
- # * #member? (aliased as #include?): Returns `true` if `self == object`,
20
- # `false` otherwise.
19
+ # * #member? (aliased as #include?): Returns `true` if <code>self ==
20
+ # object</code>, `false` otherwise.
21
21
  # * #all?: Returns `true` if all elements meet a specified criterion; `false`
22
22
  # otherwise.
23
23
  # * #any?: Returns `true` if any element meets a specified criterion; `false`
@@ -35,7 +35,7 @@
35
35
  #
36
36
  # These methods return entries from the Enumerable, without modifying it:
37
37
  #
38
- # *Leading, trailing, or all elements*:
38
+ # <em>Leading, trailing, or all elements</em>:
39
39
  #
40
40
  # * #to_a (aliased as #entries): Returns all elements.
41
41
  # * #first: Returns the first element or leading elements.
@@ -47,9 +47,9 @@
47
47
  # *Minimum and maximum value elements*:
48
48
  #
49
49
  # * #min: Returns the elements whose values are smallest among the elements,
50
- # as determined by `#<=>` or a given block.
50
+ # as determined by <code>#<=></code> or a given block.
51
51
  # * #max: Returns the elements whose values are largest among the elements, as
52
- # determined by `#<=>` or a given block.
52
+ # determined by <code>#<=></code> or a given block.
53
53
  # * #minmax: Returns a 2-element Array containing the smallest and largest
54
54
  # elements.
55
55
  # * #min_by: Returns the smallest element, as determined by the given block.
@@ -57,7 +57,7 @@
57
57
  # * #minmax_by: Returns the smallest and largest elements, as determined by
58
58
  # the given block.
59
59
  #
60
- # *Groups, slices, and partitions*:
60
+ # <em>Groups, slices, and partitions</em>:
61
61
  #
62
62
  # * #group_by: Returns a Hash that partitions the elements into groups.
63
63
  # * #partition: Returns elements partitioned into two new Arrays, as
@@ -89,7 +89,8 @@
89
89
  #
90
90
  # These methods return elements in sorted order:
91
91
  #
92
- # * #sort: Returns the elements, sorted by `#<=>` or the given block.
92
+ # * #sort: Returns the elements, sorted by <code>#<=></code> or the given
93
+ # block.
93
94
  # * #sort_by: Returns the elements, sorted by the given block.
94
95
  #
95
96
  # ### Methods for Iterating
@@ -114,11 +115,11 @@
114
115
  # by the block.
115
116
  # * #grep: Returns elements selected by a given object or objects returned by
116
117
  # a given block.
117
- # * #grep_v: Returns elements selected by a given object or objects returned
118
- # by a given block.
118
+ # * #grep_v: Returns elements not selected by a given object or objects
119
+ # returned by a given block.
119
120
  # * #inject (aliased as #reduce): Returns the object formed by combining all
120
121
  # elements.
121
- # * #sum: Returns the sum of the elements, using method `+`.
122
+ # * #sum: Returns the sum of the elements, using method <code>+</code>.
122
123
  # * #zip: Combines each element with elements from other enumerables; returns
123
124
  # the n-tuples or calls the block with each.
124
125
  # * #cycle: Calls the block with each element, cycling repeatedly.
@@ -131,8 +132,9 @@
131
132
  #
132
133
  # include Enumerable
133
134
  #
134
- # * Implement method `#each` which must yield successive elements of the
135
- # collection. The method will be called by almost any Enumerable method.
135
+ # * Implement method <code>#each</code> which must yield successive elements
136
+ # of the collection. The method will be called by almost any Enumerable
137
+ # method.
136
138
  #
137
139
  # Example:
138
140
  #
@@ -173,13 +175,15 @@
173
175
  # * CSV::Row
174
176
  # * Set
175
177
  #
176
- # Virtually all methods in Enumerable call method `#each` in the including
177
- # class:
178
+ # Virtually all methods in Enumerable call method <code>#each</code> in the
179
+ # including class:
178
180
  #
179
- # * `Hash#each` yields the next key-value pair as a 2-element Array.
180
- # * `Struct#each` yields the next name-value pair as a 2-element Array.
181
- # * For the other classes above, `#each` yields the next object from the
182
- # collection.
181
+ # * <code>Hash#each</code> yields the next key-value pair as a 2-element
182
+ # Array.
183
+ # * <code>Struct#each</code> yields the next name-value pair as a 2-element
184
+ # Array.
185
+ # * For the other classes above, <code>#each</code> yields the next object
186
+ # from the collection.
183
187
  #
184
188
  # ## About the Examples
185
189
  #
@@ -191,7 +195,88 @@
191
195
  # usage would not make sense, and so it is not shown. Example: #tally would
192
196
  # find exactly one of each Hash entry.
193
197
  #
198
+ # ## Extended Methods
199
+ #
200
+ # A Enumerable class may define extended methods. This section describes the
201
+ # standard behavior of extension methods for reference purposes.
202
+ #
203
+ # ### #size
204
+ #
205
+ # Enumerator has a #size method. It uses the size function argument passed to
206
+ # <code>Enumerator.new</code>.
207
+ #
208
+ # e = Enumerator.new(-> { 3 }) {|y| p y; y.yield :a; y.yield :b; y.yield :c; :z }
209
+ # p e.size #=> 3
210
+ # p e.next #=> :a
211
+ # p e.next #=> :b
212
+ # p e.next #=> :c
213
+ # begin
214
+ # e.next
215
+ # rescue StopIteration
216
+ # p $!.result #=> :z
217
+ # end
218
+ #
219
+ # The result of the size function should represent the number of iterations
220
+ # (i.e., the number of times Enumerator::Yielder#yield is called). In the above
221
+ # example, the block calls #yield three times, and the size function, +-> { 3
222
+ # }+, returns 3 accordingly. The result of the size function can be an integer,
223
+ # <code>Float::INFINITY</code>, or `nil`. An integer means the exact number of
224
+ # times #yield will be called, as shown above. <code>Float::INFINITY</code>
225
+ # indicates an infinite number of #yield calls. `nil` means the number of #yield
226
+ # calls is difficult or impossible to determine.
227
+ #
228
+ # Many iteration methods return an Enumerator object with an appropriate size
229
+ # function if no block is given.
230
+ #
231
+ # Examples:
232
+ #
233
+ # ["a", "b", "c"].each.size #=> 3
234
+ # {a: "x", b: "y", c: "z"}.each.size #=> 3
235
+ # (0..20).to_a.permutation.size #=> 51090942171709440000
236
+ # loop.size #=> Float::INFINITY
237
+ # (1..100).drop_while.size #=> nil # size depends on the block's behavior
238
+ # STDIN.each.size #=> nil # cannot be computed without consuming input
239
+ # File.open("/etc/resolv.conf").each.size #=> nil # cannot be computed without reading the file
240
+ #
241
+ # The behavior of #size for Range-based enumerators depends on the #begin
242
+ # element:
243
+ #
244
+ # * If the #begin element is an Integer, the #size method returns an Integer
245
+ # or <code>Float::INFINITY</code>.
246
+ # * If the #begin element is an object with a #succ method (other than
247
+ # Integer), #size returns `nil`. (Computing the size would require
248
+ # repeatedly calling #succ, which may be too slow.)
249
+ # * If the #begin element does not have a #succ method, #size raises a
250
+ # TypeError.
251
+ #
252
+ # Examples:
253
+ #
254
+ # (10..42).each.size #=> 33
255
+ # (10..42.9).each.size #=> 33 (the #end element may be a non-integer numeric)
256
+ # (10..).each.size #=> Float::INFINITY
257
+ # ("a".."z").each.size #=> nil
258
+ # ("a"..).each.size #=> nil
259
+ # (1.0..9.0).each.size # raises TypeError (Float does not have #succ)
260
+ # (..10).each.size # raises TypeError (beginless range has nil as its #begin)
261
+ #
262
+ # The Enumerable module itself does not define a #size method. A class that
263
+ # includes Enumerable may define its own #size method. It is recommended that
264
+ # such a #size method be consistent with Enumerator#size.
265
+ #
266
+ # Array and Hash implement #size and return values consistent with
267
+ # Enumerator#size. IO and Dir do not define #size, which is also consistent
268
+ # because the corresponding enumerator's size function returns `nil`.
269
+ #
270
+ # However, it is not strictly required for a class's #size method to match
271
+ # Enumerator#size. For example, File#size returns the number of bytes in the
272
+ # file, not the number of lines.
273
+ #
194
274
  module Enumerable[unchecked out Elem] : _Each[Elem]
275
+ %a{private}
276
+ interface _Pattern
277
+ def ===: (untyped) -> bool
278
+ end
279
+
195
280
  # <!--
196
281
  # rdoc-file=enum.c
197
282
  # - all? -> true or false
@@ -211,7 +296,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
211
296
  # [].all? # => true
212
297
  #
213
298
  # With argument `pattern` and no block, returns whether for each element
214
- # `element`, `pattern === element`:
299
+ # `element`, <code>pattern === element</code>:
215
300
  #
216
301
  # (1..4).all?(Integer) # => true
217
302
  # (1..4).all?(Numeric) # => true
@@ -234,6 +319,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
234
319
  # Related: #any?, #none? #one?.
235
320
  #
236
321
  def all?: () -> bool
322
+ | (_Pattern) -> bool
237
323
  | () { (Elem) -> boolish } -> bool
238
324
 
239
325
  # <!--
@@ -254,7 +340,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
254
340
  # [].any? # => false
255
341
  #
256
342
  # With argument `pattern` and no block, returns whether for any element
257
- # `element`, `pattern === element`:
343
+ # `element`, <code>pattern === element</code>:
258
344
  #
259
345
  # [nil, false, 0].any?(Integer) # => true
260
346
  # [nil, false, 0].any?(Numeric) # => true
@@ -277,6 +363,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
277
363
  # Related: #all?, #none?, #one?.
278
364
  #
279
365
  def any?: () -> bool
366
+ | (_Pattern) -> bool
280
367
  | () { (Elem) -> boolish } -> bool
281
368
 
282
369
  # <!--
@@ -340,8 +427,8 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
340
427
  # [0, 1, 2].count # => 3
341
428
  # {foo: 0, bar: 1, baz: 2}.count # => 3
342
429
  #
343
- # With argument `object` given, returns the number of elements that are `==` to
344
- # `object`:
430
+ # With argument `object` given, returns the number of elements that are
431
+ # <code>==</code> to `object`:
345
432
  #
346
433
  # [0, 1, 2, 1].count(1) # => 2
347
434
  #
@@ -438,6 +525,17 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
438
525
  #
439
526
  # With no block given, returns an Enumerator.
440
527
  #
528
+ # e = (1..4).drop_while
529
+ # p e #=> #<Enumerator: 1..4:drop_while>
530
+ # i = e.next; p i; e.feed(i < 3) #=> 1
531
+ # i = e.next; p i; e.feed(i < 3) #=> 2
532
+ # i = e.next; p i; e.feed(i < 3) #=> 3
533
+ # begin
534
+ # e.next
535
+ # rescue StopIteration
536
+ # p $!.result #=> [3, 4]
537
+ # end
538
+ #
441
539
  def drop_while: () { (Elem) -> boolish } -> ::Array[Elem]
442
540
  | () -> ::Enumerator[Elem, ::Array[Elem]]
443
541
 
@@ -468,8 +566,8 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
468
566
  # - each_with_index(*args) {|element, i| ..... } -> self
469
567
  # - each_with_index(*args) -> enumerator
470
568
  # -->
471
- # Invoke `self.each` with `*args`. With a block given, the block receives each
472
- # element and its index; returns `self`:
569
+ # Invoke <code>self.each</code> with <code>*args</code>. With a block given, the
570
+ # block receives each element and its index; returns `self`:
473
571
  #
474
572
  # h = {}
475
573
  # (1..4).each_with_index {|element, i| h[element] = i } # => 1..4
@@ -586,7 +684,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
586
684
  # `nil` if no such element is found.
587
685
  #
588
686
  # With argument `object` given, returns the index of the first element that is
589
- # `==` `object`:
687
+ # <code>==</code> `object`:
590
688
  #
591
689
  # ['a', 'b', 'c', 'b'].find_index('b') # => 1
592
690
  #
@@ -637,7 +735,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
637
735
  # pattern.
638
736
  #
639
737
  # With no block given, returns an array containing each element for which
640
- # `pattern === element` is `true`:
738
+ # <code>pattern === element</code> is `true`:
641
739
  #
642
740
  # a = ['foo', 'bar', 'car', 'moo']
643
741
  # a.grep(/ar/) # => ["bar", "car"]
@@ -660,11 +758,11 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
660
758
  # - grep_v(pattern) -> array
661
759
  # - grep_v(pattern) {|element| ... } -> array
662
760
  # -->
663
- # Returns an array of objects based on elements of `self` that *don't* match the
664
- # given pattern.
761
+ # Returns an array of objects based on elements of `self` that <em>don't</em>
762
+ # match the given pattern.
665
763
  #
666
764
  # With no block given, returns an array containing each element for which
667
- # `pattern === element` is `false`:
765
+ # <code>pattern === element</code> is `false`:
668
766
  #
669
767
  # a = ['foo', 'bar', 'car', 'moo']
670
768
  # a.grep_v(/ar/) # => ["foo", "moo"]
@@ -707,7 +805,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
707
805
  | () -> ::Enumerator[Elem, ::Array[Elem]]
708
806
 
709
807
  # <!-- rdoc-file=enum.c -->
710
- # Returns whether for any element `object == element`:
808
+ # Returns whether for any element <code>object == element</code>:
711
809
  #
712
810
  # (1..4).include?(2) # => true
713
811
  # (1..4).include?(5) # => false
@@ -718,7 +816,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
718
816
  # {foo: 0, bar: 1, baz: 2}.include?('foo') # => false
719
817
  # {foo: 0, bar: 1, baz: 2}.include?(0) # => false
720
818
  #
721
- def include?: (Elem arg0) -> bool
819
+ def include?: (top arg0) -> bool
722
820
 
723
821
  # <!--
724
822
  # rdoc-file=enum.c
@@ -765,13 +863,13 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
765
863
  # product #=> 24
766
864
  #
767
865
  # When this runs, the block is first called with `1` (the initial value) and `2`
768
- # (the first element of the array). The block returns `1*2`, so on the next
769
- # iteration the block is called with `2` (the previous result) and `3`. The
770
- # block returns `6`, and is called one last time with `6` and `4`. The result of
771
- # the block, `24` becomes the value returned by `inject`. This code returns the
772
- # product of the elements in the enumerable.
866
+ # (the first element of the array). The block returns <code>1*2</code>, so on
867
+ # the next iteration the block is called with `2` (the previous result) and `3`.
868
+ # The block returns `6`, and is called one last time with `6` and `4`. The
869
+ # result of the block, `24` becomes the value returned by `inject`. This code
870
+ # returns the product of the elements in the enumerable.
773
871
  #
774
- # **First Shortcut: Default Initial value**
872
+ # <strong>First Shortcut: Default Initial value</strong>
775
873
  #
776
874
  # In the case of the previous example, the initial value, `1`, wasn't really
777
875
  # necessary: the calculation of the product of a list of numbers is
@@ -808,7 +906,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
808
906
  # Note that the last line of the block is just the word `counts`. This ensures
809
907
  # the return value of the block is the result that's being calculated.
810
908
  #
811
- # **Second Shortcut: a Reducer function**
909
+ # <strong>Second Shortcut: a Reducer function</strong>
812
910
  #
813
911
  # A *reducer function* is a function that takes a partial result and the next
814
912
  # value, returning the next partial result. The block that is given to `inject`
@@ -853,11 +951,11 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
853
951
  # position = "nnneesw".chars.reduce(Turtle.new, :move)
854
952
  # position #=>> #<Turtle:0x00000001052f4698 @y=2, @x=1>
855
953
  #
856
- # **Third Shortcut: Reducer With no Initial Value**
954
+ # <strong>Third Shortcut: Reducer With no Initial Value</strong>
857
955
  #
858
956
  # If your reducer returns a value that it can accept as a parameter, then you
859
- # don't have to pass in an initial value. Here `:*` is the name of the *times*
860
- # function:
957
+ # don't have to pass in an initial value. Here <code>:*</code> is the name of
958
+ # the *times* function:
861
959
  #
862
960
  # product = [ 2, 3, 4 ].inject(:*)
863
961
  # product # => 24
@@ -888,7 +986,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
888
986
  # The ordering of equal elements is indeterminate and may be unstable.
889
987
  #
890
988
  # With no argument and no block, returns the maximum element, using the
891
- # elements' own method `#<=>` for comparison:
989
+ # elements' own method <code>#<=></code> for comparison:
892
990
  #
893
991
  # (1..4).max # => 4
894
992
  # (-4..-1).max # => -1
@@ -908,9 +1006,9 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
908
1006
  # With a block given, the block determines the maximum elements. The block is
909
1007
  # called with two elements `a` and `b`, and must return:
910
1008
  #
911
- # * A negative integer if `a < b`.
912
- # * Zero if `a == b`.
913
- # * A positive integer if `a > b`.
1009
+ # * A negative integer if <code>a < b</code>.
1010
+ # * Zero if <code>a == b</code>.
1011
+ # * A positive integer if <code>a > b</code>.
914
1012
  #
915
1013
  # With a block given and no argument, returns the maximum element as determined
916
1014
  # by the block:
@@ -986,7 +1084,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
986
1084
  # The ordering of equal elements is indeterminate and may be unstable.
987
1085
  #
988
1086
  # With no argument and no block, returns the minimum element, using the
989
- # elements' own method `#<=>` for comparison:
1087
+ # elements' own method <code>#<=></code> for comparison:
990
1088
  #
991
1089
  # (1..4).min # => 1
992
1090
  # (-4..-1).min # => -4
@@ -1006,9 +1104,9 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
1006
1104
  # With a block given, the block determines the minimum elements. The block is
1007
1105
  # called with two elements `a` and `b`, and must return:
1008
1106
  #
1009
- # * A negative integer if `a < b`.
1010
- # * Zero if `a == b`.
1011
- # * A positive integer if `a > b`.
1107
+ # * A negative integer if <code>a < b</code>.
1108
+ # * Zero if <code>a == b</code>.
1109
+ # * A positive integer if <code>a > b</code>.
1012
1110
  #
1013
1111
  # With a block given and no argument, returns the minimum element as determined
1014
1112
  # by the block:
@@ -1083,7 +1181,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
1083
1181
  # indeterminate and may be unstable.
1084
1182
  #
1085
1183
  # With no argument and no block, returns the minimum and maximum elements, using
1086
- # the elements' own method `#<=>` for comparison:
1184
+ # the elements' own method <code>#<=></code> for comparison:
1087
1185
  #
1088
1186
  # (1..4).minmax # => [1, 4]
1089
1187
  # (-4..-1).minmax # => [-4, -1]
@@ -1146,7 +1244,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
1146
1244
  # [].none? # => true
1147
1245
  #
1148
1246
  # With argument `pattern` and no block, returns whether for no element
1149
- # `element`, `pattern === element`:
1247
+ # `element`, <code>pattern === element</code>:
1150
1248
  #
1151
1249
  # [nil, false, 1.1].none?(Integer) # => true
1152
1250
  # %w[bar baz bat bam].none?(/m/) # => false
@@ -1167,6 +1265,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
1167
1265
  # Related: #one?, #all?, #any?.
1168
1266
  #
1169
1267
  def none?: () -> bool
1268
+ | (_Pattern) -> bool
1170
1269
  | () { (Elem) -> boolish } -> bool
1171
1270
 
1172
1271
  # <!--
@@ -1187,7 +1286,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
1187
1286
  # [].one? # => false
1188
1287
  #
1189
1288
  # With argument `pattern` and no block, returns whether for exactly one element
1190
- # `element`, `pattern === element`:
1289
+ # `element`, <code>pattern === element</code>:
1191
1290
  #
1192
1291
  # [nil, false, 0].one?(Integer) # => true
1193
1292
  # [nil, false, 0].one?(Numeric) # => true
@@ -1210,6 +1309,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
1210
1309
  # Related: #none?, #all?, #any?.
1211
1310
  #
1212
1311
  def one?: () -> bool
1312
+ | (_Pattern) -> bool
1213
1313
  | () { (Elem) -> boolish } -> bool
1214
1314
 
1215
1315
  # <!--
@@ -1297,7 +1397,8 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
1297
1397
  # Returns an array containing the sorted elements of `self`. The ordering of
1298
1398
  # equal elements is indeterminate and may be unstable.
1299
1399
  #
1300
- # With no block given, the sort compares using the elements' own method `#<=>`:
1400
+ # With no block given, the sort compares using the elements' own method
1401
+ # <code>#<=></code>:
1301
1402
  #
1302
1403
  # %w[b c a d].sort # => ["a", "b", "c", "d"]
1303
1404
  # {foo: 0, bar: 1, baz: 2}.sort # => [[:bar, 1], [:baz, 2], [:foo, 0]]
@@ -1305,9 +1406,9 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
1305
1406
  # With a block given, comparisons in the block determine the ordering. The block
1306
1407
  # is called with two elements `a` and `b`, and must return:
1307
1408
  #
1308
- # * A negative integer if `a < b`.
1309
- # * Zero if `a == b`.
1310
- # * A positive integer if `a > b`.
1409
+ # * A negative integer if <code>a < b</code>.
1410
+ # * Zero if <code>a == b</code>.
1411
+ # * A positive integer if <code>a > b</code>.
1311
1412
  #
1312
1413
  # Examples:
1313
1414
  #
@@ -1355,7 +1456,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
1355
1456
  # b.report("Sort by") { a.sort_by { |a| a } }
1356
1457
  # end
1357
1458
  #
1358
- # *produces:*
1459
+ # <em>produces:</em>
1359
1460
  #
1360
1461
  # user system total real
1361
1462
  # Sort 0.180000 0.000000 0.180000 ( 0.175469)
@@ -1551,7 +1652,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
1551
1652
  # rdoc-file=enum.c
1552
1653
  # - include?(object) -> true or false
1553
1654
  # -->
1554
- # Returns whether for any element `object == element`:
1655
+ # Returns whether for any element <code>object == element</code>:
1555
1656
  #
1556
1657
  # (1..4).include?(2) # => true
1557
1658
  # (1..4).include?(5) # => false
@@ -1562,7 +1663,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
1562
1663
  # {foo: 0, bar: 1, baz: 2}.include?('foo') # => false
1563
1664
  # {foo: 0, bar: 1, baz: 2}.include?(0) # => false
1564
1665
  #
1565
- def member?: (Elem arg0) -> bool
1666
+ def member?: (top arg0) -> bool
1566
1667
 
1567
1668
  # <!-- rdoc-file=enum.c -->
1568
1669
  # Returns the result of applying a reducer to an initial value and the first
@@ -1603,13 +1704,13 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
1603
1704
  # product #=> 24
1604
1705
  #
1605
1706
  # When this runs, the block is first called with `1` (the initial value) and `2`
1606
- # (the first element of the array). The block returns `1*2`, so on the next
1607
- # iteration the block is called with `2` (the previous result) and `3`. The
1608
- # block returns `6`, and is called one last time with `6` and `4`. The result of
1609
- # the block, `24` becomes the value returned by `inject`. This code returns the
1610
- # product of the elements in the enumerable.
1707
+ # (the first element of the array). The block returns <code>1*2</code>, so on
1708
+ # the next iteration the block is called with `2` (the previous result) and `3`.
1709
+ # The block returns `6`, and is called one last time with `6` and `4`. The
1710
+ # result of the block, `24` becomes the value returned by `inject`. This code
1711
+ # returns the product of the elements in the enumerable.
1611
1712
  #
1612
- # **First Shortcut: Default Initial value**
1713
+ # <strong>First Shortcut: Default Initial value</strong>
1613
1714
  #
1614
1715
  # In the case of the previous example, the initial value, `1`, wasn't really
1615
1716
  # necessary: the calculation of the product of a list of numbers is
@@ -1646,7 +1747,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
1646
1747
  # Note that the last line of the block is just the word `counts`. This ensures
1647
1748
  # the return value of the block is the result that's being calculated.
1648
1749
  #
1649
- # **Second Shortcut: a Reducer function**
1750
+ # <strong>Second Shortcut: a Reducer function</strong>
1650
1751
  #
1651
1752
  # A *reducer function* is a function that takes a partial result and the next
1652
1753
  # value, returning the next partial result. The block that is given to `inject`
@@ -1691,11 +1792,11 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
1691
1792
  # position = "nnneesw".chars.reduce(Turtle.new, :move)
1692
1793
  # position #=>> #<Turtle:0x00000001052f4698 @y=2, @x=1>
1693
1794
  #
1694
- # **Third Shortcut: Reducer With no Initial Value**
1795
+ # <strong>Third Shortcut: Reducer With no Initial Value</strong>
1695
1796
  #
1696
1797
  # If your reducer returns a value that it can accept as a parameter, then you
1697
- # don't have to pass in an initial value. Here `:*` is the name of the *times*
1698
- # function:
1798
+ # don't have to pass in an initial value. Here <code>:*</code> is the name of
1799
+ # the *times* function:
1699
1800
  #
1700
1801
  # product = [ 2, 3, 4 ].inject(:*)
1701
1802
  # product # => 24
@@ -1758,7 +1859,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
1758
1859
  # - uniq {|element| ... } -> array
1759
1860
  # -->
1760
1861
  # With no block, returns a new array containing only unique elements; the array
1761
- # has no two elements `e0` and `e1` such that `e0.eql?(e1)`:
1862
+ # has no two elements `e0` and `e1` such that <code>e0.eql?(e1)</code>:
1762
1863
  #
1763
1864
  # %w[a b c c b a a b c].uniq # => ["a", "b", "c"]
1764
1865
  # [0, 1, 2, 2, 1, 0, 0, 1, 2].uniq # => [0, 1, 2]
@@ -1785,12 +1886,12 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
1785
1886
  # (1..100).sum(1) # => 5051
1786
1887
  # ('a'..'d').sum('foo') # => "fooabcd"
1787
1888
  #
1788
- # Generally, the sum is computed using methods `+` and `each`; for performance
1789
- # optimizations, those methods may not be used, and so any redefinition of those
1790
- # methods may not have effect here.
1889
+ # Generally, the sum is computed using methods <code>+</code> and `each`; for
1890
+ # performance optimizations, those methods may not be used, and so any
1891
+ # redefinition of those methods may not have effect here.
1791
1892
  #
1792
1893
  # One such optimization: When possible, computes using Gauss's summation formula
1793
- # *n(n+1)/2*:
1894
+ # <em>n(n+1)/2</em>:
1794
1895
  #
1795
1896
  # 100 * (100 + 1) / 2 # => 5050
1796
1897
  #
@@ -1929,8 +2030,8 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
1929
2030
  # - zip(*other_enums) {|array| ... } -> nil
1930
2031
  # -->
1931
2032
  # With no block given, returns a new array `new_array` of size self.size whose
1932
- # elements are arrays. Each nested array `new_array[n]` is of size
1933
- # `other_enums.size+1`, and contains:
2033
+ # elements are arrays. Each nested array <code>new_array[n]</code> is of size
2034
+ # <code>other_enums.size+1</code>, and contains:
1934
2035
  #
1935
2036
  # * The `n`-th element of self.
1936
2037
  # * The `n`-th element of each of the `other_enums`.
@@ -1954,8 +2055,8 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
1954
2055
  # # [[:baz, 2], [:gaz, 5], [:haz, 8]]
1955
2056
  # # ]
1956
2057
  #
1957
- # If any enumerable in other_enums is smaller than self, fills to `self.size`
1958
- # with `nil`:
2058
+ # If any enumerable in other_enums is smaller than self, fills to
2059
+ # <code>self.size</code> with `nil`:
1959
2060
  #
1960
2061
  # a = [:a0, :a1, :a2, :a3]
1961
2062
  # b = [:b0, :b1, :b2]
@@ -2039,8 +2140,8 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
2039
2140
  # ["E", 8736]
2040
2141
  # ["F", 6860]
2041
2142
  #
2042
- # You can use the special symbol `:_alone` to force an element into its own
2043
- # separate chuck:
2143
+ # You can use the special symbol <code>:_alone</code> to force an element into
2144
+ # its own separate chunk:
2044
2145
  #
2045
2146
  # a = [0, 0, 1, 1]
2046
2147
  # e = a.chunk{|i| i.even? ? :_alone : true }
@@ -2055,8 +2156,8 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
2055
2156
  # }
2056
2157
  # }
2057
2158
  #
2058
- # You can use the special symbol `:_separator` or `nil` to force an element to
2059
- # be ignored (not included in any chunk):
2159
+ # You can use the special symbol <code>:_separator</code> or `nil` to force an
2160
+ # element to be ignored (not included in any chunk):
2060
2161
  #
2061
2162
  # a = [0, 0, -1, 1, 1]
2062
2163
  # e = a.chunk{|i| i < 0 ? :_separator : true }
@@ -2218,11 +2319,11 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
2218
2319
  # Creates an enumerator for each chunked elements. The ends of chunks are
2219
2320
  # defined by *pattern* and the block.
2220
2321
  #
2221
- # If *`pattern* === *elt`* returns `true` or the block returns `true` for the
2222
- # element, the element is end of a chunk.
2322
+ # If <code>_pattern_ === _elt_</code> returns `true` or the block returns `true`
2323
+ # for the element, the element is end of a chunk.
2223
2324
  #
2224
- # The `===` and *block* is called from the first element to the last element of
2225
- # *enum*.
2325
+ # The <code>===</code> and *block* is called from the first element to the last
2326
+ # element of *enum*.
2226
2327
  #
2227
2328
  # The result enumerator yields the chunked elements as an array. So `each`
2228
2329
  # method can be called as follows:
@@ -2253,7 +2354,7 @@ module Enumerable[unchecked out Elem] : _Each[Elem]
2253
2354
  # -->
2254
2355
  # With argument `pattern`, returns an enumerator that uses the pattern to
2255
2356
  # partition elements into arrays ("slices"). An element begins a new slice if
2256
- # `element === pattern` (or if it is the first element).
2357
+ # <code>element === pattern</code> (or if it is the first element).
2257
2358
  #
2258
2359
  # a = %w[foo bar fop for baz fob fog bam foy]
2259
2360
  # e = a.slice_before(/ba/) # => #<Enumerator: ...>