rbs 4.1.0.pre.2-java

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 (574) hide show
  1. checksums.yaml +7 -0
  2. data/.clang-format +75 -0
  3. data/.clangd +2 -0
  4. data/.github/dependabot.yml +24 -0
  5. data/.github/workflows/bundle-update.yml +63 -0
  6. data/.github/workflows/c-check.yml +61 -0
  7. data/.github/workflows/comments.yml +37 -0
  8. data/.github/workflows/dependabot.yml +30 -0
  9. data/.github/workflows/jruby.yml +67 -0
  10. data/.github/workflows/milestone.yml +83 -0
  11. data/.github/workflows/ruby.yml +158 -0
  12. data/.github/workflows/rust.yml +184 -0
  13. data/.github/workflows/truffleruby.yml +54 -0
  14. data/.github/workflows/typecheck.yml +39 -0
  15. data/.github/workflows/wasm.yml +53 -0
  16. data/.github/workflows/windows.yml +49 -0
  17. data/.gitignore +38 -0
  18. data/.rubocop.yml +72 -0
  19. data/BSDL +22 -0
  20. data/CHANGELOG.md +2292 -0
  21. data/COPYING +56 -0
  22. data/README.md +240 -0
  23. data/Rakefile +869 -0
  24. data/Steepfile +53 -0
  25. data/config.yml +913 -0
  26. data/core/array.rbs +4142 -0
  27. data/core/basic_object.rbs +376 -0
  28. data/core/binding.rbs +148 -0
  29. data/core/builtin.rbs +278 -0
  30. data/core/class.rbs +223 -0
  31. data/core/comparable.rbs +192 -0
  32. data/core/complex.rbs +812 -0
  33. data/core/constants.rbs +96 -0
  34. data/core/data.rbs +415 -0
  35. data/core/dir.rbs +993 -0
  36. data/core/encoding.rbs +1368 -0
  37. data/core/enumerable.rbs +2506 -0
  38. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  39. data/core/enumerator/product.rbs +92 -0
  40. data/core/enumerator.rbs +705 -0
  41. data/core/env.rbs +6 -0
  42. data/core/errno.rbs +682 -0
  43. data/core/errors.rbs +789 -0
  44. data/core/exception.rbs +485 -0
  45. data/core/false_class.rbs +82 -0
  46. data/core/fiber.rbs +570 -0
  47. data/core/fiber_error.rbs +11 -0
  48. data/core/file.rbs +2045 -0
  49. data/core/file_constants.rbs +463 -0
  50. data/core/file_stat.rbs +534 -0
  51. data/core/file_test.rbs +331 -0
  52. data/core/float.rbs +1316 -0
  53. data/core/gc.rbs +788 -0
  54. data/core/global_variables.rbs +184 -0
  55. data/core/hash.rbs +2183 -0
  56. data/core/integer.rbs +1374 -0
  57. data/core/io/buffer.rbs +995 -0
  58. data/core/io/wait.rbs +48 -0
  59. data/core/io.rbs +3472 -0
  60. data/core/kernel.rbs +3172 -0
  61. data/core/marshal.rbs +207 -0
  62. data/core/match_data.rbs +637 -0
  63. data/core/math.rbs +770 -0
  64. data/core/method.rbs +422 -0
  65. data/core/module.rbs +1856 -0
  66. data/core/nil_class.rbs +210 -0
  67. data/core/numeric.rbs +832 -0
  68. data/core/object.rbs +108 -0
  69. data/core/object_space/weak_key_map.rbs +166 -0
  70. data/core/object_space.rbs +197 -0
  71. data/core/pathname.rbs +1322 -0
  72. data/core/proc.rbs +905 -0
  73. data/core/process.rbs +2316 -0
  74. data/core/ractor.rbs +924 -0
  75. data/core/random.rbs +255 -0
  76. data/core/range.rbs +1209 -0
  77. data/core/rational.rbs +502 -0
  78. data/core/rb_config.rbs +88 -0
  79. data/core/rbs/ops.rbs +154 -0
  80. data/core/rbs/unnamed/argf.rbs +1236 -0
  81. data/core/rbs/unnamed/env_class.rbs +1214 -0
  82. data/core/rbs/unnamed/main_class.rbs +123 -0
  83. data/core/rbs/unnamed/random.rbs +186 -0
  84. data/core/refinement.rbs +59 -0
  85. data/core/regexp.rbs +1974 -0
  86. data/core/ruby.rbs +53 -0
  87. data/core/ruby_vm.rbs +809 -0
  88. data/core/rubygems/basic_specification.rbs +6 -0
  89. data/core/rubygems/config_file.rbs +38 -0
  90. data/core/rubygems/dependency_installer.rbs +6 -0
  91. data/core/rubygems/errors.rbs +109 -0
  92. data/core/rubygems/installer.rbs +15 -0
  93. data/core/rubygems/path_support.rbs +6 -0
  94. data/core/rubygems/platform.rbs +7 -0
  95. data/core/rubygems/request_set.rbs +49 -0
  96. data/core/rubygems/requirement.rbs +148 -0
  97. data/core/rubygems/rubygems.rbs +1105 -0
  98. data/core/rubygems/source_list.rbs +15 -0
  99. data/core/rubygems/specification.rbs +23 -0
  100. data/core/rubygems/stream_ui.rbs +5 -0
  101. data/core/rubygems/uninstaller.rbs +10 -0
  102. data/core/rubygems/version.rbs +293 -0
  103. data/core/set.rbs +751 -0
  104. data/core/signal.rbs +110 -0
  105. data/core/string.rbs +5532 -0
  106. data/core/struct.rbs +668 -0
  107. data/core/symbol.rbs +482 -0
  108. data/core/thread.rbs +1826 -0
  109. data/core/thread_group.rbs +79 -0
  110. data/core/time.rbs +1793 -0
  111. data/core/trace_point.rbs +483 -0
  112. data/core/true_class.rbs +98 -0
  113. data/core/unbound_method.rbs +337 -0
  114. data/core/warning.rbs +87 -0
  115. data/docs/CONTRIBUTING.md +107 -0
  116. data/docs/aliases.md +79 -0
  117. data/docs/architecture.md +110 -0
  118. data/docs/collection.md +192 -0
  119. data/docs/config.md +171 -0
  120. data/docs/data_and_struct.md +86 -0
  121. data/docs/encoding.md +56 -0
  122. data/docs/gem.md +56 -0
  123. data/docs/inline.md +634 -0
  124. data/docs/rbs_by_example.md +309 -0
  125. data/docs/repo.md +125 -0
  126. data/docs/rust.md +96 -0
  127. data/docs/sigs.md +167 -0
  128. data/docs/stdlib.md +147 -0
  129. data/docs/syntax.md +940 -0
  130. data/docs/tools.md +17 -0
  131. data/docs/type_fingerprint.md +21 -0
  132. data/docs/wasm_serialization.md +80 -0
  133. data/exe/rbs +7 -0
  134. data/ext/rbs_extension/ast_translation.c +1855 -0
  135. data/ext/rbs_extension/ast_translation.h +41 -0
  136. data/ext/rbs_extension/class_constants.c +187 -0
  137. data/ext/rbs_extension/class_constants.h +104 -0
  138. data/ext/rbs_extension/compat.h +10 -0
  139. data/ext/rbs_extension/extconf.rb +40 -0
  140. data/ext/rbs_extension/legacy_location.c +294 -0
  141. data/ext/rbs_extension/legacy_location.h +82 -0
  142. data/ext/rbs_extension/main.c +613 -0
  143. data/ext/rbs_extension/rbs_extension.h +16 -0
  144. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  145. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  146. data/goodcheck.yml +91 -0
  147. data/include/rbs/ast.h +1047 -0
  148. data/include/rbs/defines.h +99 -0
  149. data/include/rbs/lexer.h +207 -0
  150. data/include/rbs/location.h +40 -0
  151. data/include/rbs/parser.h +153 -0
  152. data/include/rbs/serialize.h +39 -0
  153. data/include/rbs/string.h +47 -0
  154. data/include/rbs/util/rbs_allocator.h +59 -0
  155. data/include/rbs/util/rbs_assert.h +20 -0
  156. data/include/rbs/util/rbs_buffer.h +83 -0
  157. data/include/rbs/util/rbs_constant_pool.h +155 -0
  158. data/include/rbs/util/rbs_encoding.h +282 -0
  159. data/include/rbs/util/rbs_unescape.h +24 -0
  160. data/include/rbs.h +14 -0
  161. data/lib/rbs/ancestor_graph.rb +92 -0
  162. data/lib/rbs/annotate/annotations.rb +199 -0
  163. data/lib/rbs/annotate/formatter.rb +82 -0
  164. data/lib/rbs/annotate/rdoc_annotator.rb +398 -0
  165. data/lib/rbs/annotate/rdoc_source.rb +131 -0
  166. data/lib/rbs/annotate.rb +8 -0
  167. data/lib/rbs/ast/annotation.rb +29 -0
  168. data/lib/rbs/ast/comment.rb +29 -0
  169. data/lib/rbs/ast/declarations.rb +472 -0
  170. data/lib/rbs/ast/directives.rb +49 -0
  171. data/lib/rbs/ast/members.rb +451 -0
  172. data/lib/rbs/ast/ruby/annotations.rb +451 -0
  173. data/lib/rbs/ast/ruby/comment_block.rb +247 -0
  174. data/lib/rbs/ast/ruby/declarations.rb +291 -0
  175. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  176. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  177. data/lib/rbs/ast/ruby/members.rb +762 -0
  178. data/lib/rbs/ast/type_param.rb +235 -0
  179. data/lib/rbs/ast/visitor.rb +137 -0
  180. data/lib/rbs/buffer.rb +189 -0
  181. data/lib/rbs/builtin_names.rb +58 -0
  182. data/lib/rbs/cli/colored_io.rb +48 -0
  183. data/lib/rbs/cli/diff.rb +84 -0
  184. data/lib/rbs/cli/validate.rb +294 -0
  185. data/lib/rbs/cli.rb +1253 -0
  186. data/lib/rbs/collection/cleaner.rb +38 -0
  187. data/lib/rbs/collection/config/lockfile.rb +92 -0
  188. data/lib/rbs/collection/config/lockfile_generator.rb +269 -0
  189. data/lib/rbs/collection/config.rb +81 -0
  190. data/lib/rbs/collection/installer.rb +32 -0
  191. data/lib/rbs/collection/sources/base.rb +14 -0
  192. data/lib/rbs/collection/sources/git.rb +265 -0
  193. data/lib/rbs/collection/sources/local.rb +81 -0
  194. data/lib/rbs/collection/sources/rubygems.rb +48 -0
  195. data/lib/rbs/collection/sources/stdlib.rb +50 -0
  196. data/lib/rbs/collection/sources.rb +38 -0
  197. data/lib/rbs/collection.rb +16 -0
  198. data/lib/rbs/constant.rb +28 -0
  199. data/lib/rbs/definition.rb +415 -0
  200. data/lib/rbs/definition_builder/ancestor_builder.rb +678 -0
  201. data/lib/rbs/definition_builder/method_builder.rb +295 -0
  202. data/lib/rbs/definition_builder.rb +1054 -0
  203. data/lib/rbs/diff.rb +131 -0
  204. data/lib/rbs/environment/class_entry.rb +69 -0
  205. data/lib/rbs/environment/module_entry.rb +66 -0
  206. data/lib/rbs/environment/use_map.rb +77 -0
  207. data/lib/rbs/environment.rb +1028 -0
  208. data/lib/rbs/environment_loader.rb +167 -0
  209. data/lib/rbs/environment_walker.rb +155 -0
  210. data/lib/rbs/errors.rb +634 -0
  211. data/lib/rbs/factory.rb +18 -0
  212. data/lib/rbs/file_finder.rb +28 -0
  213. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  214. data/lib/rbs/inline_parser.rb +568 -0
  215. data/lib/rbs/location_aux.rb +170 -0
  216. data/lib/rbs/locator.rb +247 -0
  217. data/lib/rbs/method_type.rb +145 -0
  218. data/lib/rbs/namespace.rb +154 -0
  219. data/lib/rbs/parser/lex_result.rb +15 -0
  220. data/lib/rbs/parser/token.rb +23 -0
  221. data/lib/rbs/parser_aux.rb +142 -0
  222. data/lib/rbs/prototype/helpers.rb +197 -0
  223. data/lib/rbs/prototype/node_usage.rb +99 -0
  224. data/lib/rbs/prototype/rb.rb +816 -0
  225. data/lib/rbs/prototype/rbi.rb +625 -0
  226. data/lib/rbs/prototype/runtime/helpers.rb +59 -0
  227. data/lib/rbs/prototype/runtime/reflection.rb +19 -0
  228. data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
  229. data/lib/rbs/prototype/runtime.rb +680 -0
  230. data/lib/rbs/repository.rb +127 -0
  231. data/lib/rbs/resolver/constant_resolver.rb +219 -0
  232. data/lib/rbs/resolver/type_name_resolver.rb +167 -0
  233. data/lib/rbs/rewriter.rb +70 -0
  234. data/lib/rbs/sorter.rb +198 -0
  235. data/lib/rbs/source.rb +99 -0
  236. data/lib/rbs/substitution.rb +83 -0
  237. data/lib/rbs/subtractor.rb +204 -0
  238. data/lib/rbs/test/errors.rb +80 -0
  239. data/lib/rbs/test/guaranteed.rb +30 -0
  240. data/lib/rbs/test/hook.rb +212 -0
  241. data/lib/rbs/test/observer.rb +19 -0
  242. data/lib/rbs/test/setup.rb +84 -0
  243. data/lib/rbs/test/setup_helper.rb +50 -0
  244. data/lib/rbs/test/tester.rb +167 -0
  245. data/lib/rbs/test/type_check.rb +457 -0
  246. data/lib/rbs/test.rb +112 -0
  247. data/lib/rbs/type_alias_dependency.rb +100 -0
  248. data/lib/rbs/type_alias_regularity.rb +126 -0
  249. data/lib/rbs/type_name.rb +122 -0
  250. data/lib/rbs/types.rb +1604 -0
  251. data/lib/rbs/unit_test/convertibles.rb +177 -0
  252. data/lib/rbs/unit_test/spy.rb +138 -0
  253. data/lib/rbs/unit_test/type_assertions.rb +383 -0
  254. data/lib/rbs/unit_test/with_aliases.rb +145 -0
  255. data/lib/rbs/unit_test.rb +6 -0
  256. data/lib/rbs/validator.rb +186 -0
  257. data/lib/rbs/variance_calculator.rb +189 -0
  258. data/lib/rbs/vendorer.rb +71 -0
  259. data/lib/rbs/version.rb +5 -0
  260. data/lib/rbs/wasm/deserializer.rb +213 -0
  261. data/lib/rbs/wasm/jars/asm-analysis.jar +0 -0
  262. data/lib/rbs/wasm/jars/asm-commons.jar +0 -0
  263. data/lib/rbs/wasm/jars/asm-tree.jar +0 -0
  264. data/lib/rbs/wasm/jars/asm-util.jar +0 -0
  265. data/lib/rbs/wasm/jars/asm.jar +0 -0
  266. data/lib/rbs/wasm/jars/compiler.jar +0 -0
  267. data/lib/rbs/wasm/jars/log.jar +0 -0
  268. data/lib/rbs/wasm/jars/runtime.jar +0 -0
  269. data/lib/rbs/wasm/jars/wasi.jar +0 -0
  270. data/lib/rbs/wasm/jars/wasm.jar +0 -0
  271. data/lib/rbs/wasm/location.rb +61 -0
  272. data/lib/rbs/wasm/parser.rb +137 -0
  273. data/lib/rbs/wasm/rbs_parser.wasm +0 -0
  274. data/lib/rbs/wasm/runtime.rb +217 -0
  275. data/lib/rbs/wasm/serialization_schema.rb +110 -0
  276. data/lib/rbs/writer.rb +424 -0
  277. data/lib/rbs.rb +117 -0
  278. data/lib/rdoc/discover.rb +20 -0
  279. data/lib/rdoc_plugin/parser.rb +163 -0
  280. data/rbs.gemspec +68 -0
  281. data/schema/annotation.json +14 -0
  282. data/schema/comment.json +26 -0
  283. data/schema/decls.json +326 -0
  284. data/schema/function.json +87 -0
  285. data/schema/location.json +56 -0
  286. data/schema/members.json +266 -0
  287. data/schema/methodType.json +50 -0
  288. data/schema/typeParam.json +52 -0
  289. data/schema/types.json +317 -0
  290. data/sig/ancestor_builder.rbs +163 -0
  291. data/sig/ancestor_graph.rbs +60 -0
  292. data/sig/annotate/annotations.rbs +102 -0
  293. data/sig/annotate/formatter.rbs +24 -0
  294. data/sig/annotate/rdoc_annotater.rbs +85 -0
  295. data/sig/annotate/rdoc_source.rbs +32 -0
  296. data/sig/annotation.rbs +27 -0
  297. data/sig/ast/ruby/annotations.rbs +470 -0
  298. data/sig/ast/ruby/comment_block.rbs +127 -0
  299. data/sig/ast/ruby/declarations.rbs +158 -0
  300. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  301. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  302. data/sig/ast/ruby/members.rbs +198 -0
  303. data/sig/buffer.rbs +108 -0
  304. data/sig/builtin_names.rbs +44 -0
  305. data/sig/cli/colored_io.rbs +15 -0
  306. data/sig/cli/diff.rbs +15 -0
  307. data/sig/cli/validate.rbs +47 -0
  308. data/sig/cli.rbs +89 -0
  309. data/sig/collection/cleaner.rbs +13 -0
  310. data/sig/collection/config/lockfile.rbs +74 -0
  311. data/sig/collection/config/lockfile_generator.rbs +68 -0
  312. data/sig/collection/config.rbs +46 -0
  313. data/sig/collection/installer.rbs +17 -0
  314. data/sig/collection/sources.rbs +214 -0
  315. data/sig/collection.rbs +4 -0
  316. data/sig/comment.rbs +26 -0
  317. data/sig/constant.rbs +21 -0
  318. data/sig/declarations.rbs +274 -0
  319. data/sig/definition.rbs +232 -0
  320. data/sig/definition_builder.rbs +181 -0
  321. data/sig/diff.rbs +28 -0
  322. data/sig/directives.rbs +77 -0
  323. data/sig/environment/class_entry.rbs +50 -0
  324. data/sig/environment/module_entry.rbs +50 -0
  325. data/sig/environment.rbs +286 -0
  326. data/sig/environment_loader.rbs +111 -0
  327. data/sig/environment_walker.rbs +65 -0
  328. data/sig/errors.rbs +408 -0
  329. data/sig/factory.rbs +5 -0
  330. data/sig/file_finder.rbs +28 -0
  331. data/sig/inline_parser/comment_association.rbs +71 -0
  332. data/sig/inline_parser.rbs +126 -0
  333. data/sig/location.rbs +135 -0
  334. data/sig/locator.rbs +56 -0
  335. data/sig/manifest.yaml +5 -0
  336. data/sig/members.rbs +258 -0
  337. data/sig/method_builder.rbs +89 -0
  338. data/sig/method_types.rbs +58 -0
  339. data/sig/namespace.rbs +161 -0
  340. data/sig/parser.rbs +164 -0
  341. data/sig/prototype/helpers.rbs +29 -0
  342. data/sig/prototype/node_usage.rbs +20 -0
  343. data/sig/prototype/rb.rbs +96 -0
  344. data/sig/prototype/rbi.rbs +75 -0
  345. data/sig/prototype/runtime.rbs +182 -0
  346. data/sig/rbs.rbs +21 -0
  347. data/sig/rdoc/rbs.rbs +67 -0
  348. data/sig/repository.rbs +85 -0
  349. data/sig/resolver/constant_resolver.rbs +92 -0
  350. data/sig/resolver/context.rbs +34 -0
  351. data/sig/resolver/type_name_resolver.rbs +61 -0
  352. data/sig/rewriter.rbs +45 -0
  353. data/sig/shims/bundler.rbs +38 -0
  354. data/sig/shims/enumerable.rbs +5 -0
  355. data/sig/shims/rubygems.rbs +19 -0
  356. data/sig/sorter.rbs +41 -0
  357. data/sig/source.rbs +48 -0
  358. data/sig/substitution.rbs +48 -0
  359. data/sig/subtractor.rbs +37 -0
  360. data/sig/test/errors.rbs +52 -0
  361. data/sig/test/guranteed.rbs +9 -0
  362. data/sig/test/type_check.rbs +19 -0
  363. data/sig/test.rbs +82 -0
  364. data/sig/type_alias_dependency.rbs +53 -0
  365. data/sig/type_alias_regularity.rbs +98 -0
  366. data/sig/type_param.rbs +115 -0
  367. data/sig/typename.rbs +89 -0
  368. data/sig/types.rbs +578 -0
  369. data/sig/unit_test/convertibles.rbs +154 -0
  370. data/sig/unit_test/spy.rbs +22 -0
  371. data/sig/unit_test/type_assertions.rbs +211 -0
  372. data/sig/unit_test/with_aliases.rbs +136 -0
  373. data/sig/use_map.rbs +35 -0
  374. data/sig/util.rbs +9 -0
  375. data/sig/validator.rbs +63 -0
  376. data/sig/variance_calculator.rbs +87 -0
  377. data/sig/vendorer.rbs +51 -0
  378. data/sig/version.rbs +3 -0
  379. data/sig/visitor.rbs +47 -0
  380. data/sig/wasm/deserializer.rbs +66 -0
  381. data/sig/wasm/serialization_schema.rbs +13 -0
  382. data/sig/writer.rbs +127 -0
  383. data/src/ast.c +1628 -0
  384. data/src/lexer.c +3217 -0
  385. data/src/lexer.re +155 -0
  386. data/src/lexstate.c +217 -0
  387. data/src/location.c +31 -0
  388. data/src/parser.c +4255 -0
  389. data/src/serialize.c +958 -0
  390. data/src/string.c +41 -0
  391. data/src/util/rbs_allocator.c +162 -0
  392. data/src/util/rbs_assert.c +19 -0
  393. data/src/util/rbs_buffer.c +54 -0
  394. data/src/util/rbs_constant_pool.c +268 -0
  395. data/src/util/rbs_encoding.c +21308 -0
  396. data/src/util/rbs_unescape.c +167 -0
  397. data/stdlib/abbrev/0/abbrev.rbs +66 -0
  398. data/stdlib/abbrev/0/array.rbs +26 -0
  399. data/stdlib/base64/0/base64.rbs +355 -0
  400. data/stdlib/benchmark/0/benchmark.rbs +452 -0
  401. data/stdlib/bigdecimal/0/big_decimal.rbs +1647 -0
  402. data/stdlib/bigdecimal-math/0/big_math.rbs +280 -0
  403. data/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
  404. data/stdlib/cgi/0/core.rbs +911 -0
  405. data/stdlib/cgi/0/manifest.yaml +4 -0
  406. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  407. data/stdlib/coverage/0/coverage.rbs +266 -0
  408. data/stdlib/csv/0/csv.rbs +3776 -0
  409. data/stdlib/csv/0/manifest.yaml +3 -0
  410. data/stdlib/date/0/date.rbs +1598 -0
  411. data/stdlib/date/0/date_time.rbs +617 -0
  412. data/stdlib/date/0/time.rbs +26 -0
  413. data/stdlib/dbm/0/dbm.rbs +421 -0
  414. data/stdlib/delegate/0/delegator.rbs +187 -0
  415. data/stdlib/delegate/0/kernel.rbs +47 -0
  416. data/stdlib/delegate/0/simple_delegator.rbs +96 -0
  417. data/stdlib/did_you_mean/0/did_you_mean.rbs +344 -0
  418. data/stdlib/digest/0/digest.rbs +687 -0
  419. data/stdlib/erb/0/erb.rbs +933 -0
  420. data/stdlib/etc/0/etc.rbs +884 -0
  421. data/stdlib/fileutils/0/fileutils.rbs +1753 -0
  422. data/stdlib/find/0/find.rbs +49 -0
  423. data/stdlib/forwardable/0/forwardable.rbs +271 -0
  424. data/stdlib/io-console/0/io-console.rbs +414 -0
  425. data/stdlib/ipaddr/0/ipaddr.rbs +436 -0
  426. data/stdlib/json/0/json.rbs +1963 -0
  427. data/stdlib/kconv/0/kconv.rbs +166 -0
  428. data/stdlib/logger/0/formatter.rbs +45 -0
  429. data/stdlib/logger/0/log_device.rbs +100 -0
  430. data/stdlib/logger/0/logger.rbs +796 -0
  431. data/stdlib/logger/0/manifest.yaml +2 -0
  432. data/stdlib/logger/0/period.rbs +17 -0
  433. data/stdlib/logger/0/severity.rbs +34 -0
  434. data/stdlib/minitest/0/kernel.rbs +42 -0
  435. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
  436. data/stdlib/minitest/0/minitest/assertion.rbs +17 -0
  437. data/stdlib/minitest/0/minitest/assertions.rbs +590 -0
  438. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
  439. data/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
  440. data/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
  441. data/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
  442. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  443. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  444. data/stdlib/minitest/0/minitest/expectation.rbs +2 -0
  445. data/stdlib/minitest/0/minitest/expectations.rbs +21 -0
  446. data/stdlib/minitest/0/minitest/guard.rbs +64 -0
  447. data/stdlib/minitest/0/minitest/mock.rbs +64 -0
  448. data/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
  449. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
  450. data/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
  451. data/stdlib/minitest/0/minitest/parallel.rbs +2 -0
  452. data/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
  453. data/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
  454. data/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
  455. data/stdlib/minitest/0/minitest/reportable.rbs +53 -0
  456. data/stdlib/minitest/0/minitest/reporter.rbs +5 -0
  457. data/stdlib/minitest/0/minitest/result.rbs +28 -0
  458. data/stdlib/minitest/0/minitest/runnable.rbs +163 -0
  459. data/stdlib/minitest/0/minitest/skip.rbs +6 -0
  460. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
  461. data/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
  462. data/stdlib/minitest/0/minitest/spec.rbs +11 -0
  463. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
  464. data/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
  465. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
  466. data/stdlib/minitest/0/minitest/test.rbs +69 -0
  467. data/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
  468. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  469. data/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
  470. data/stdlib/minitest/0/minitest/unit.rbs +4 -0
  471. data/stdlib/minitest/0/minitest.rbs +115 -0
  472. data/stdlib/monitor/0/monitor.rbs +363 -0
  473. data/stdlib/mutex_m/0/mutex_m.rbs +104 -0
  474. data/stdlib/net-http/0/manifest.yaml +3 -0
  475. data/stdlib/net-http/0/net-http.rbs +5580 -0
  476. data/stdlib/net-protocol/0/manifest.yaml +2 -0
  477. data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  478. data/stdlib/net-smtp/0/manifest.yaml +2 -0
  479. data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  480. data/stdlib/nkf/0/nkf.rbs +402 -0
  481. data/stdlib/objspace/0/objspace.rbs +470 -0
  482. data/stdlib/observable/0/observable.rbs +217 -0
  483. data/stdlib/open-uri/0/manifest.yaml +4 -0
  484. data/stdlib/open-uri/0/open-uri.rbs +433 -0
  485. data/stdlib/open3/0/open3.rbs +606 -0
  486. data/stdlib/openssl/0/manifest.yaml +3 -0
  487. data/stdlib/openssl/0/openssl.rbs +12231 -0
  488. data/stdlib/optparse/0/optparse.rbs +1734 -0
  489. data/stdlib/pathname/0/pathname.rbs +36 -0
  490. data/stdlib/pp/0/manifest.yaml +2 -0
  491. data/stdlib/pp/0/pp.rbs +301 -0
  492. data/stdlib/prettyprint/0/prettyprint.rbs +383 -0
  493. data/stdlib/pstore/0/pstore.rbs +608 -0
  494. data/stdlib/psych/0/core_ext.rbs +12 -0
  495. data/stdlib/psych/0/dbm.rbs +237 -0
  496. data/stdlib/psych/0/manifest.yaml +3 -0
  497. data/stdlib/psych/0/psych.rbs +455 -0
  498. data/stdlib/psych/0/store.rbs +57 -0
  499. data/stdlib/pty/0/pty.rbs +240 -0
  500. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  501. data/stdlib/rdoc/0/code_object.rbs +52 -0
  502. data/stdlib/rdoc/0/comment.rbs +61 -0
  503. data/stdlib/rdoc/0/context.rbs +153 -0
  504. data/stdlib/rdoc/0/markup.rbs +117 -0
  505. data/stdlib/rdoc/0/options.rbs +76 -0
  506. data/stdlib/rdoc/0/parser.rbs +56 -0
  507. data/stdlib/rdoc/0/rdoc.rbs +393 -0
  508. data/stdlib/rdoc/0/ri.rbs +17 -0
  509. data/stdlib/rdoc/0/store.rbs +48 -0
  510. data/stdlib/rdoc/0/top_level.rbs +97 -0
  511. data/stdlib/resolv/0/manifest.yaml +3 -0
  512. data/stdlib/resolv/0/resolv.rbs +1787 -0
  513. data/stdlib/ripper/0/ripper.rbs +1654 -0
  514. data/stdlib/securerandom/0/manifest.yaml +2 -0
  515. data/stdlib/securerandom/0/securerandom.rbs +49 -0
  516. data/stdlib/shellwords/0/shellwords.rbs +229 -0
  517. data/stdlib/singleton/0/singleton.rbs +134 -0
  518. data/stdlib/socket/0/addrinfo.rbs +666 -0
  519. data/stdlib/socket/0/basic_socket.rbs +590 -0
  520. data/stdlib/socket/0/constants.rbs +2295 -0
  521. data/stdlib/socket/0/ip_socket.rbs +94 -0
  522. data/stdlib/socket/0/socket.rbs +4170 -0
  523. data/stdlib/socket/0/socket_error.rbs +5 -0
  524. data/stdlib/socket/0/tcp_server.rbs +192 -0
  525. data/stdlib/socket/0/tcp_socket.rbs +87 -0
  526. data/stdlib/socket/0/udp_socket.rbs +133 -0
  527. data/stdlib/socket/0/unix_server.rbs +169 -0
  528. data/stdlib/socket/0/unix_socket.rbs +172 -0
  529. data/stdlib/stringio/0/stringio.rbs +1681 -0
  530. data/stdlib/strscan/0/string_scanner.rbs +1648 -0
  531. data/stdlib/tempfile/0/tempfile.rbs +483 -0
  532. data/stdlib/time/0/time.rbs +434 -0
  533. data/stdlib/timeout/0/timeout.rbs +137 -0
  534. data/stdlib/tmpdir/0/tmpdir.rbs +69 -0
  535. data/stdlib/tsort/0/cyclic.rbs +8 -0
  536. data/stdlib/tsort/0/interfaces.rbs +20 -0
  537. data/stdlib/tsort/0/tsort.rbs +410 -0
  538. data/stdlib/uri/0/common.rbs +621 -0
  539. data/stdlib/uri/0/file.rbs +118 -0
  540. data/stdlib/uri/0/ftp.rbs +13 -0
  541. data/stdlib/uri/0/generic.rbs +1116 -0
  542. data/stdlib/uri/0/http.rbs +104 -0
  543. data/stdlib/uri/0/https.rbs +14 -0
  544. data/stdlib/uri/0/ldap.rbs +230 -0
  545. data/stdlib/uri/0/ldaps.rbs +14 -0
  546. data/stdlib/uri/0/mailto.rbs +92 -0
  547. data/stdlib/uri/0/rfc2396_parser.rbs +189 -0
  548. data/stdlib/uri/0/rfc3986_parser.rbs +2 -0
  549. data/stdlib/uri/0/ws.rbs +13 -0
  550. data/stdlib/uri/0/wss.rbs +9 -0
  551. data/stdlib/yaml/0/manifest.yaml +2 -0
  552. data/stdlib/yaml/0/yaml.rbs +1 -0
  553. data/stdlib/zlib/0/buf_error.rbs +10 -0
  554. data/stdlib/zlib/0/data_error.rbs +10 -0
  555. data/stdlib/zlib/0/deflate.rbs +211 -0
  556. data/stdlib/zlib/0/error.rbs +20 -0
  557. data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  558. data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  559. data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  560. data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  561. data/stdlib/zlib/0/gzip_file.rbs +156 -0
  562. data/stdlib/zlib/0/gzip_reader.rbs +293 -0
  563. data/stdlib/zlib/0/gzip_writer.rbs +168 -0
  564. data/stdlib/zlib/0/inflate.rbs +180 -0
  565. data/stdlib/zlib/0/mem_error.rbs +10 -0
  566. data/stdlib/zlib/0/need_dict.rbs +13 -0
  567. data/stdlib/zlib/0/stream_end.rbs +11 -0
  568. data/stdlib/zlib/0/stream_error.rbs +11 -0
  569. data/stdlib/zlib/0/version_error.rbs +11 -0
  570. data/stdlib/zlib/0/zlib.rbs +449 -0
  571. data/stdlib/zlib/0/zstream.rbs +201 -0
  572. data/wasm/README.md +59 -0
  573. data/wasm/rbs_wasm.c +411 -0
  574. metadata +660 -0
@@ -0,0 +1,1648 @@
1
+ # <!-- rdoc-file=ext/strscan/strscan.c -->
2
+ # Class `StringScanner` supports processing a stored string as a stream;
3
+ # this code creates a new `StringScanner` object with string
4
+ # <code>'foobarbaz'</code>:
5
+ # require 'strscan'
6
+ # scanner = StringScanner.new('foobarbaz')
7
+ #
8
+ # ## About the Examples
9
+ # All examples here assume that `StringScanner` has been required:
10
+ # require 'strscan'
11
+ #
12
+ # Some examples here assume that these constants are defined:
13
+ # MULTILINE_TEXT = <<~EOT
14
+ # Go placidly amid the noise and haste,
15
+ # and remember what peace there may be in silence.
16
+ # EOT
17
+ #
18
+ # HIRAGANA_TEXT = 'こんにちは'
19
+ #
20
+ # ENGLISH_TEXT = 'Hello'
21
+ #
22
+ # Some examples here assume that certain helper methods are defined:
23
+ # * <code>put_situation(scanner)</code>:
24
+ # Displays the values of the scanner's
25
+ # methods #pos, #charpos, #rest, and #rest_size.
26
+ # * <code>put_match_values(scanner)</code>:
27
+ # Displays the scanner's [match
28
+ # values](rdoc-ref:StringScanner@Match+Values).
29
+ # * <code>match_values_cleared?(scanner)</code>:
30
+ # Returns whether the scanner's [match
31
+ # values](rdoc-ref:StringScanner@Match+Values) are cleared.
32
+ # See examples at [helper methods](helper_methods.md).
33
+ # ## The `StringScanner` Object
34
+ # This code creates a `StringScanner` object
35
+ # (we'll call it simply a *scanner*),
36
+ # and shows some of its basic properties:
37
+ # scanner = StringScanner.new('foobarbaz')
38
+ # scanner.string # => "foobarbaz"
39
+ # put_situation(scanner)
40
+ # # Situation:
41
+ # # pos: 0
42
+ # # charpos: 0
43
+ # # rest: "foobarbaz"
44
+ # # rest_size: 9
45
+ #
46
+ # The scanner has:
47
+ # * A *stored string*, which is:
48
+ # * Initially set by StringScanner.new(string) to the given `string`
49
+ # (<code>'foobarbaz'</code> in the example above).
50
+ # * Modifiable by methods #string=(new_string) and #concat(more_string).
51
+ # * Returned by method #string.
52
+ # More at [Stored String](rdoc-ref:StringScanner@Stored+String) below.
53
+ # * A *position*;
54
+ # a zero-based index into the bytes of the stored string (*not* into its
55
+ # characters):
56
+ # * Initially set by StringScanner.new to `0`.
57
+ # * Returned by method #pos.
58
+ # * Modifiable explicitly by methods #reset, #terminate, and
59
+ # #pos=(new_pos).
60
+ # * Modifiable implicitly (various traversing methods, among others).
61
+ # More at [Byte
62
+ # Position](rdoc-ref:StringScanner@Byte+Position+-28Position-29) below.
63
+ # * A *target substring*,
64
+ # which is a trailing substring of the stored string;
65
+ # it extends from the current position to the end of the stored string:
66
+ # * Initially set by StringScanner.new(string) to the given `string`
67
+ # (<code>'foobarbaz'</code> in the example above).
68
+ # * Returned by method #rest.
69
+ # * Modified by any modification to either the stored string or the
70
+ # position.
71
+ # **Most importantly**:
72
+ # the searching and traversing methods operate on the target substring,
73
+ # which may be (and often is) less than the entire stored string.
74
+ # More at [Target Substring](rdoc-ref:StringScanner@Target+Substring) below.
75
+ # ## Stored String
76
+ # The *stored string* is the string stored in the `StringScanner` object.
77
+ # Each of these methods sets, modifies, or returns the stored string:
78
+ # Method | Effect
79
+ # --------------------|-----------------------------------------------
80
+ # ::new(string) | Creates a new scanner for the given string.
81
+ # #string=(new_string)| Replaces the existing stored string.
82
+ # #concat(more_string)|Appends a string to the existing stored string.
83
+ # #string | Returns the stored string.
84
+ # ## Positions
85
+ # A `StringScanner` object maintains a zero-based *byte position*
86
+ # and a zero-based *character position*.
87
+ # Each of these methods explicitly sets positions:
88
+ # Method | Effect
89
+ # ------------------------|---------------------------------------------------------
90
+ # #reset |Sets both positions to zero (beginning of stored string).
91
+ # #terminate | Sets both positions to the end of the stored string.
92
+ # #pos=(new_byte_position)| Sets byte position; adjusts character position.
93
+ # ### Byte Position (Position)
94
+ # The byte position (or simply *position*)
95
+ # is a zero-based index into the bytes in the scanner's stored string;
96
+ # for a new `StringScanner` object, the byte position is zero.
97
+ # When the byte position is:
98
+ # * Zero (at the beginning), the target substring is the entire stored string.
99
+ # * Equal to the size of the stored string (at the end),
100
+ # the target substring is the empty string <code>''</code>.
101
+ # To get or set the byte position:
102
+ # * #pos: returns the byte position.
103
+ # * #pos=(new_pos): sets the byte position.
104
+ # Many methods use the byte position as the basis for finding matches;
105
+ # many others set, increment, or decrement the byte position:
106
+ # scanner = StringScanner.new('foobar')
107
+ # scanner.pos # => 0
108
+ # scanner.scan(/foo/) # => "foo" # Match found.
109
+ # scanner.pos # => 3 # Byte position incremented.
110
+ # scanner.scan(/foo/) # => nil # Match not found.
111
+ # scanner.pos # => 3 # Byte position not changed.
112
+ #
113
+ # Some methods implicitly modify the byte position;
114
+ # see:
115
+ # * [Setting the Target
116
+ # Substring](rdoc-ref:StringScanner@Setting+the+Target+Substring).
117
+ # * [Traversing the Target
118
+ # Substring](rdoc-ref:StringScanner@Traversing+the+Target+Substring).
119
+ # The values of these methods are derived directly from the values of #pos and
120
+ # #string:
121
+ # * #charpos: the [character
122
+ # position](rdoc-ref:StringScanner@Character+Position).
123
+ # * #rest: the [target substring](rdoc-ref:StringScanner@Target+Substring).
124
+ # * #rest_size: <code>rest.size</code>.
125
+ # ### Character Position
126
+ # The character position is a zero-based index into the *characters*
127
+ # in the stored string;
128
+ # for a new `StringScanner` object, the character position is zero.
129
+ # Method #charpos returns the character position;
130
+ # its value may not be reset explicitly.
131
+ # Some methods change (increment or reset) the character position;
132
+ # see:
133
+ # * [Setting the Target
134
+ # Substring](rdoc-ref:StringScanner@Setting+the+Target+Substring).
135
+ # * [Traversing the Target
136
+ # Substring](rdoc-ref:StringScanner@Traversing+the+Target+Substring).
137
+ # Example (string includes multi-byte characters):
138
+ # scanner = StringScanner.new(ENGLISH_TEXT) # Five 1-byte characters.
139
+ # scanner.concat(HIRAGANA_TEXT) # Five 3-byte characters
140
+ # scanner.string # => "Helloこんにちは" # Twenty bytes in all.
141
+ # put_situation(scanner)
142
+ # # Situation:
143
+ # # pos: 0
144
+ # # charpos: 0
145
+ # # rest: "Helloこんにちは"
146
+ # # rest_size: 20
147
+ # scanner.scan(/Hello/) # => "Hello" # Five 1-byte characters.
148
+ # put_situation(scanner)
149
+ # # Situation:
150
+ # # pos: 5
151
+ # # charpos: 5
152
+ # # rest: "こんにちは"
153
+ # # rest_size: 15
154
+ # scanner.getch # => "こ" # One 3-byte character.
155
+ # put_situation(scanner)
156
+ # # Situation:
157
+ # # pos: 8
158
+ # # charpos: 6
159
+ # # rest: "んにちは"
160
+ # # rest_size: 12
161
+ #
162
+ # ## Target Substring
163
+ # The target substring is the part of the [stored
164
+ # string](rdoc-ref:StringScanner@Stored+String)
165
+ # that extends from the current [byte
166
+ # position](rdoc-ref:StringScanner@Byte+Position+-28Position-29) to the end of
167
+ # the stored string;
168
+ # it is always either:
169
+ # * The entire stored string (byte position is zero).
170
+ # * A trailing substring of the stored string (byte position positive).
171
+ # The target substring is returned by method #rest,
172
+ # and its size is returned by method #rest_size.
173
+ # Examples:
174
+ # scanner = StringScanner.new('foobarbaz')
175
+ # put_situation(scanner)
176
+ # # Situation:
177
+ # # pos: 0
178
+ # # charpos: 0
179
+ # # rest: "foobarbaz"
180
+ # # rest_size: 9
181
+ # scanner.pos = 3
182
+ # put_situation(scanner)
183
+ # # Situation:
184
+ # # pos: 3
185
+ # # charpos: 3
186
+ # # rest: "barbaz"
187
+ # # rest_size: 6
188
+ # scanner.pos = 9
189
+ # put_situation(scanner)
190
+ # # Situation:
191
+ # # pos: 9
192
+ # # charpos: 9
193
+ # # rest: ""
194
+ # # rest_size: 0
195
+ #
196
+ # ### Setting the Target Substring
197
+ # The target substring is set whenever:
198
+ # * The [stored string](rdoc-ref:StringScanner@Stored+String) is set (position
199
+ # reset to zero; target substring set to stored string).
200
+ # * The [byte position](rdoc-ref:StringScanner@Byte+Position+-28Position-29)
201
+ # is set (target substring adjusted accordingly).
202
+ # ### Querying the Target Substring
203
+ # This table summarizes (details and examples at the links):
204
+ # Method | Returns
205
+ # ----------|---------------------------------
206
+ # #rest | Target substring.
207
+ # #rest_size|Size (bytes) of target substring.
208
+ # ### Searching the Target Substring
209
+ # A *search* method examines the target substring,
210
+ # but does not advance the [positions](rdoc-ref:StringScanner@Positions)
211
+ # or (by implication) shorten the target substring.
212
+ # This table summarizes (details and examples at the links):
213
+ # Method | Returns |Sets Match Values?
214
+ # ---------------------|---------------------------------------------|------------------
215
+ # #check(pattern) | Matched leading substring or +nil+. | Yes.
216
+ # #check_until(pattern)| Matched substring (anywhere) or +nil+. | Yes.
217
+ # #exist?(pattern) | Matched substring (anywhere) end index. | Yes.
218
+ # #match?(pattern) | Size of matched leading substring or +nil+. | Yes.
219
+ # #peek(size) | Leading substring of given length (bytes). | No.
220
+ # #peek_byte | Integer leading byte or +nil+. | No.
221
+ # #rest |Target substring (from byte position to end).| No.
222
+ # ### Traversing the Target Substring
223
+ # A *traversal* method examines the target substring,
224
+ # and, if successful:
225
+ # * Advances the [positions](rdoc-ref:StringScanner@Positions).
226
+ # * Shortens the target substring.
227
+ # This table summarizes (details and examples at links):
228
+ # Method | Returns |Sets Match Values?
229
+ # --------------------|----------------------------------------------------|------------------
230
+ # #get_byte | Leading byte or +nil+. | No.
231
+ # #getch | Leading character or +nil+. | No.
232
+ # #scan(pattern) | Matched leading substring or +nil+. | Yes.
233
+ # #scan_byte | Integer leading byte or +nil+. | No.
234
+ # #scan_until(pattern)| Matched substring (anywhere) or +nil+. | Yes.
235
+ # #skip(pattern) | Matched leading substring size or +nil+. | Yes.
236
+ # #skip_until(pattern)|Position delta to end-of-matched-substring or +nil+.| Yes.
237
+ # #unscan | +self+. | No.
238
+ # ## Querying the Scanner
239
+ # Each of these methods queries the scanner object
240
+ # without modifying it (details and examples at links)
241
+ # Method | Returns
242
+ # -------------------|--------------------------------
243
+ # #beginning_of_line?| +true+ or +false+.
244
+ # #charpos | Character position.
245
+ # #eos? | +true+ or +false+.
246
+ # #fixed_anchor? | +true+ or +false+.
247
+ # #inspect |String representation of +self+.
248
+ # #pos | Byte position.
249
+ # #rest | Target substring.
250
+ # #rest_size | Size of target substring.
251
+ # #string | Stored string.
252
+ # ## Matching
253
+ # `StringScanner` implements pattern matching via Ruby class
254
+ # [Regexp](https://docs.ruby-lang.org/en/master/Regexp.html),
255
+ # and its matching behaviors are the same as Ruby's
256
+ # except for the [fixed-anchor
257
+ # property](rdoc-ref:StringScanner@Fixed-Anchor+Property).
258
+ # ### Matcher Methods
259
+ # Each *matcher method* takes a single argument `pattern`,
260
+ # and attempts to find a matching substring in the [target
261
+ # substring](rdoc-ref:StringScanner@Target+Substring).
262
+ # Method | Pattern Type |Matches Target Substring| Success Return |May Update Positions?
263
+ # ------------|-----------------|------------------------|------------------|---------------------
264
+ # #check |Regexp or String.| At beginning. |Matched substring.| No.
265
+ # #check_until|Regexp or String.| Anywhere. | Substring. | No.
266
+ # #match? |Regexp or String.| At beginning. | Match size. | No.
267
+ # #exist? |Regexp or String.| Anywhere. | Substring size. | No.
268
+ # #scan |Regexp or String.| At beginning. |Matched substring.| Yes.
269
+ # #scan_until |Regexp or String.| Anywhere. | Substring. | Yes.
270
+ # #skip |Regexp or String.| At beginning. | Match size. | Yes.
271
+ # #skip_until |Regexp or String.| Anywhere. | Substring size. | Yes.
272
+ #
273
+ # Which matcher you choose will depend on:
274
+ # * Where you want to find a match:
275
+ # * Only at the beginning of the target substring:
276
+ # #check, #match?, #scan, #skip.
277
+ # * Anywhere in the target substring:
278
+ # #check_until, #exist?, #scan_until, #skip_until.
279
+ # * Whether you want to:
280
+ # * Traverse, by advancing the positions:
281
+ # #scan, #scan_until, #skip, #skip_until.
282
+ # * Keep the positions unchanged:
283
+ # #check, #check_until, #match?, #exist?.
284
+ # * What you want for the return value:
285
+ # * The matched substring: #check, #scan.
286
+ # * The substring: #check_until, #scan_until.
287
+ # * The match size: #match?, #skip.
288
+ # * The substring size: #exist?, #skip_until.
289
+ # ### Match Values
290
+ # The *match values* in a `StringScanner` object
291
+ # generally contain the results of the most recent attempted match.
292
+ # Each match value may be thought of as:
293
+ # * *Clear*: Initially, or after an unsuccessful match attempt:
294
+ # usually, `false`, `nil`, or <code>{}</code>.
295
+ # * *Set*: After a successful match attempt:
296
+ # `true`, string, array, or hash.
297
+ # Each of these methods clears match values:
298
+ # * ::new(string).
299
+ # * #reset.
300
+ # * #terminate.
301
+ # Each of these methods attempts a match based on a pattern,
302
+ # and either sets match values (if successful) or clears them (if not);
303
+ # * #check(pattern)
304
+ # * #check_until(pattern)
305
+ # * #exist?(pattern)
306
+ # * #match?(pattern)
307
+ # * #scan(pattern)
308
+ # * #scan_until(pattern)
309
+ # * #skip(pattern)
310
+ # * #skip_until(pattern)
311
+ # #### Basic Match Values
312
+ # Basic match values are those not related to captures.
313
+ # Each of these methods returns a basic match value:
314
+ # Method | Return After Match |Return After No Match
315
+ # -------------|--------------------------------------|---------------------
316
+ # #matched? | +true+. | +false+.
317
+ # #matched_size| Size of matched substring. | +nil+.
318
+ # #matched | Matched substring. | +nil+.
319
+ # #pre_match |Substring preceding matched substring.| +nil+.
320
+ # #post_match |Substring following matched substring.| +nil+.
321
+ #
322
+ # See examples below.
323
+ # #### Captured Match Values
324
+ # Captured match values are those related to
325
+ # [captures](https://docs.ruby-lang.org/en/master/Regexp.html#class-Regexp-label
326
+ # -Groups+and+Captures).
327
+ # Each of these methods returns a captured match value:
328
+ # Method | Return After Match |Return After No Match
329
+ # ---------------|---------------------------------------|---------------------
330
+ # #size | Count of captured substrings. | +nil+.
331
+ # #[](n) | `n`th captured substring. | +nil+.
332
+ # #captures | Array of all captured substrings. | +nil+.
333
+ # #values_at(*n) |Array of specified captured substrings.| +nil+.
334
+ # #named_captures| Hash of named captures. | <code>{}</code>.
335
+ #
336
+ # See examples below.
337
+ # #### Match Values Examples
338
+ # Successful basic match attempt (no captures):
339
+ # scanner = StringScanner.new('foobarbaz')
340
+ # scanner.exist?(/bar/)
341
+ # put_match_values(scanner)
342
+ # # Basic match values:
343
+ # # matched?: true
344
+ # # matched_size: 3
345
+ # # pre_match: "foo"
346
+ # # matched : "bar"
347
+ # # post_match: "baz"
348
+ # # Captured match values:
349
+ # # size: 1
350
+ # # captures: []
351
+ # # named_captures: {}
352
+ # # values_at: ["bar", nil]
353
+ # # []:
354
+ # # [0]: "bar"
355
+ # # [1]: nil
356
+ #
357
+ # Failed basic match attempt (no captures);
358
+ # scanner = StringScanner.new('foobarbaz')
359
+ # scanner.exist?(/nope/)
360
+ # match_values_cleared?(scanner) # => true
361
+ #
362
+ # Successful unnamed capture match attempt:
363
+ # scanner = StringScanner.new('foobarbazbatbam')
364
+ # scanner.exist?(/(foo)bar(baz)bat(bam)/)
365
+ # put_match_values(scanner)
366
+ # # Basic match values:
367
+ # # matched?: true
368
+ # # matched_size: 15
369
+ # # pre_match: ""
370
+ # # matched : "foobarbazbatbam"
371
+ # # post_match: ""
372
+ # # Captured match values:
373
+ # # size: 4
374
+ # # captures: ["foo", "baz", "bam"]
375
+ # # named_captures: {}
376
+ # # values_at: ["foobarbazbatbam", "foo", "baz", "bam", nil]
377
+ # # []:
378
+ # # [0]: "foobarbazbatbam"
379
+ # # [1]: "foo"
380
+ # # [2]: "baz"
381
+ # # [3]: "bam"
382
+ # # [4]: nil
383
+ #
384
+ # Successful named capture match attempt;
385
+ # same as unnamed above, except for #named_captures:
386
+ # scanner = StringScanner.new('foobarbazbatbam')
387
+ # scanner.exist?(/(?<x>foo)bar(?<y>baz)bat(?<z>bam)/)
388
+ # scanner.named_captures # => {"x"=>"foo", "y"=>"baz", "z"=>"bam"}
389
+ #
390
+ # Failed unnamed capture match attempt:
391
+ # scanner = StringScanner.new('somestring')
392
+ # scanner.exist?(/(foo)bar(baz)bat(bam)/)
393
+ # match_values_cleared?(scanner) # => true
394
+ #
395
+ # Failed named capture match attempt;
396
+ # same as unnamed above, except for #named_captures:
397
+ # scanner = StringScanner.new('somestring')
398
+ # scanner.exist?(/(?<x>foo)bar(?<y>baz)bat(?<z>bam)/)
399
+ # match_values_cleared?(scanner) # => false
400
+ # scanner.named_captures # => {"x"=>nil, "y"=>nil, "z"=>nil}
401
+ #
402
+ # ## Fixed-Anchor Property
403
+ # Pattern matching in `StringScanner` is the same as in Ruby's,
404
+ # except for its fixed-anchor property,
405
+ # which determines the meaning of <code>'\A'</code>:
406
+ # * `false` (the default): matches the current byte position.
407
+ # scanner = StringScanner.new('foobar')
408
+ # scanner.scan(/\A./) # => "f"
409
+ # scanner.scan(/\A./) # => "o"
410
+ # scanner.scan(/\A./) # => "o"
411
+ # scanner.scan(/\A./) # => "b"
412
+ #
413
+ # * `true`: matches the beginning of the target substring;
414
+ # never matches unless the byte position is zero:
415
+ # scanner = StringScanner.new('foobar', fixed_anchor: true)
416
+ # scanner.scan(/\A./) # => "f"
417
+ # scanner.scan(/\A./) # => nil
418
+ # scanner.reset
419
+ # scanner.scan(/\A./) # => "f"
420
+ #
421
+ # The fixed-anchor property is set when the `StringScanner` object is created,
422
+ # and may not be modified
423
+ # (see StringScanner.new);
424
+ # method #fixed_anchor? returns the setting.
425
+ #
426
+ class StringScanner
427
+ # <!--
428
+ # rdoc-file=ext/strscan/strscan.c
429
+ # - StringScanner.must_C_version
430
+ # -->
431
+ # This method is defined for backward compatibility.
432
+ #
433
+ def self.must_C_version: () -> self
434
+
435
+ # <!-- rdoc-file=ext/strscan/strscan.c -->
436
+ # * Appends the given `more_string`
437
+ # to the [stored string](rdoc-ref:StringScanner@Stored+String).
438
+ # * Returns `self`.
439
+ # * Does not affect the [positions](rdoc-ref:StringScanner@Positions)
440
+ # or [match values](rdoc-ref:StringScanner@Match+Values).
441
+ # scanner = StringScanner.new('foo')
442
+ # scanner.string # => "foo"
443
+ # scanner.terminate
444
+ # scanner.concat('barbaz') # => #<StringScanner 3/9 "foo" @ "barba...">
445
+ # scanner.string # => "foobarbaz"
446
+ # put_situation(scanner)
447
+ # # Situation:
448
+ # # pos: 3
449
+ # # charpos: 3
450
+ # # rest: "barbaz"
451
+ # # rest_size: 6
452
+ #
453
+ def <<: (String) -> self
454
+
455
+ # <!--
456
+ # rdoc-file=ext/strscan/strscan.c
457
+ # - [](specifier) -> substring or nil
458
+ # -->
459
+ # Returns a captured substring or `nil`;
460
+ # see [Captured Match Values](rdoc-ref:StringScanner@Captured+Match+Values).
461
+ # When there are captures:
462
+ # scanner = StringScanner.new('Fri Dec 12 1975 14:39')
463
+ # scanner.scan(/(?<wday>\w+) (?<month>\w+) (?<day>\d+) /)
464
+ #
465
+ # * `specifier` zero: returns the entire matched substring:
466
+ # scanner[0] # => "Fri Dec 12 "
467
+ # scanner.pre_match # => ""
468
+ # scanner.post_match # => "1975 14:39"
469
+ #
470
+ # * `specifier` positive integer. returns the `n`th capture, or `nil` if out
471
+ # of range:
472
+ # scanner[1] # => "Fri"
473
+ # scanner[2] # => "Dec"
474
+ # scanner[3] # => "12"
475
+ # scanner[4] # => nil
476
+ #
477
+ # * `specifier` negative integer. counts backward from the last subgroup:
478
+ # scanner[-1] # => "12"
479
+ # scanner[-4] # => "Fri Dec 12 "
480
+ # scanner[-5] # => nil
481
+ #
482
+ # * `specifier` symbol or string. returns the named subgroup, or `nil` if no
483
+ # such:
484
+ # scanner[:wday] # => "Fri"
485
+ # scanner['wday'] # => "Fri"
486
+ # scanner[:month] # => "Dec"
487
+ # scanner[:day] # => "12"
488
+ # scanner[:nope] # => nil
489
+ #
490
+ # When there are no captures, only <code>[0]</code> returns non-`nil`:
491
+ # scanner = StringScanner.new('foobarbaz')
492
+ # scanner.exist?(/bar/)
493
+ # scanner[0] # => "bar"
494
+ # scanner[1] # => nil
495
+ #
496
+ # For a failed match, even <code>[0]</code> returns `nil`:
497
+ # scanner.scan(/nope/) # => nil
498
+ # scanner[0] # => nil
499
+ # scanner[1] # => nil
500
+ #
501
+ def []: (Integer | String | Symbol) -> String?
502
+
503
+ # <!--
504
+ # rdoc-file=ext/strscan/strscan.c
505
+ # - beginning_of_line? -> true or false
506
+ # -->
507
+ # Returns whether the
508
+ # [position](rdoc-ref:StringScanner@Byte+Position+-28Position-29) is at the
509
+ # beginning of a line;
510
+ # that is, at the beginning of the [stored
511
+ # string](rdoc-ref:StringScanner@Stored+String)
512
+ # or immediately after a newline:
513
+ # scanner = StringScanner.new(MULTILINE_TEXT)
514
+ # scanner.string
515
+ # # => "Go placidly amid the noise and haste,\nand remember what peace there may be in silence.\n"
516
+ # scanner.pos # => 0
517
+ # scanner.beginning_of_line? # => true
518
+ #
519
+ # scanner.scan_until(/,/) # => "Go placidly amid the noise and haste,"
520
+ # scanner.beginning_of_line? # => false
521
+ #
522
+ # scanner.scan(/\n/) # => "\n"
523
+ # scanner.beginning_of_line? # => true
524
+ #
525
+ # scanner.terminate
526
+ # scanner.beginning_of_line? # => true
527
+ #
528
+ # scanner.concat('x')
529
+ # scanner.terminate
530
+ # scanner.beginning_of_line? # => false
531
+ #
532
+ # StringScanner#bol? is an alias for StringScanner#beginning_of_line?.
533
+ #
534
+ def beginning_of_line?: () -> bool
535
+
536
+ alias bol? beginning_of_line?
537
+
538
+ # <!--
539
+ # rdoc-file=ext/strscan/strscan.c
540
+ # - captures -> substring_array or nil
541
+ # -->
542
+ # Returns the array of [captured match
543
+ # values](rdoc-ref:StringScanner@Captured+Match+Values) at indexes
544
+ # <code>(1..)</code>
545
+ # if the most recent match attempt succeeded, or `nil` otherwise:
546
+ # scanner = StringScanner.new('Fri Dec 12 1975 14:39')
547
+ # scanner.captures # => nil
548
+ #
549
+ # scanner.exist?(/(?<wday>\w+) (?<month>\w+) (?<day>\d+) /)
550
+ # scanner.captures # => ["Fri", "Dec", "12"]
551
+ # scanner.values_at(*0..4) # => ["Fri Dec 12 ", "Fri", "Dec", "12", nil]
552
+ #
553
+ # scanner.exist?(/Fri/)
554
+ # scanner.captures # => []
555
+ #
556
+ # scanner.scan(/nope/)
557
+ # scanner.captures # => nil
558
+ #
559
+ def captures: () -> Array[String]?
560
+
561
+ # <!--
562
+ # rdoc-file=ext/strscan/strscan.c
563
+ # - charpos()
564
+ # -->
565
+ # call-seq:
566
+ # charpos -> character_position
567
+ # Returns the [character position](rdoc-ref:StringScanner@Character+Position)
568
+ # (initially zero),
569
+ # which may be different from the [byte
570
+ # position](rdoc-ref:StringScanner@Byte+Position+-28Position-29)
571
+ # given by method #pos:
572
+ # scanner = StringScanner.new(HIRAGANA_TEXT)
573
+ # scanner.string # => "こんにちは"
574
+ # scanner.getch # => "こ" # 3-byte character.
575
+ # scanner.getch # => "ん" # 3-byte character.
576
+ # put_situation(scanner)
577
+ # # Situation:
578
+ # # pos: 6
579
+ # # charpos: 2
580
+ # # rest: "にちは"
581
+ # # rest_size: 9
582
+ #
583
+ def charpos: () -> Integer
584
+
585
+ # <!--
586
+ # rdoc-file=ext/strscan/strscan.c
587
+ # - check(pattern) -> matched_substring or nil
588
+ # -->
589
+ # Attempts to [match](rdoc-ref:StringScanner@Matching) the given `pattern`
590
+ # at the beginning of the [target
591
+ # substring](rdoc-ref:StringScanner@Target+Substring);
592
+ # does not modify the [positions](rdoc-ref:StringScanner@Positions).
593
+ # If the match succeeds:
594
+ # * Returns the matched substring.
595
+ # * Sets all [match values](rdoc-ref:StringScanner@Match+Values).
596
+ # scanner = StringScanner.new('foobarbaz')
597
+ # scanner.pos = 3
598
+ # scanner.check('bar') # => "bar"
599
+ # put_match_values(scanner)
600
+ # # Basic match values:
601
+ # # matched?: true
602
+ # # matched_size: 3
603
+ # # pre_match: "foo"
604
+ # # matched : "bar"
605
+ # # post_match: "baz"
606
+ # # Captured match values:
607
+ # # size: 1
608
+ # # captures: []
609
+ # # named_captures: {}
610
+ # # values_at: ["bar", nil]
611
+ # # []:
612
+ # # [0]: "bar"
613
+ # # [1]: nil
614
+ # # => 0..1
615
+ # put_situation(scanner)
616
+ # # Situation:
617
+ # # pos: 3
618
+ # # charpos: 3
619
+ # # rest: "barbaz"
620
+ # # rest_size: 6
621
+ #
622
+ # If the match fails:
623
+ # * Returns `nil`.
624
+ # * Clears all [match values](rdoc-ref:StringScanner@Match+Values).
625
+ # scanner.check(/nope/) # => nil
626
+ # match_values_cleared?(scanner) # => true
627
+ #
628
+ def check: (Regexp | String) -> String?
629
+
630
+ # <!--
631
+ # rdoc-file=ext/strscan/strscan.c
632
+ # - check_until(pattern) -> substring or nil
633
+ # -->
634
+ # Attempts to [match](rdoc-ref:StringScanner@Matching) the given `pattern`
635
+ # anywhere (at any
636
+ # [position](rdoc-ref:StringScanner@Byte+Position+-28Position-29))
637
+ # in the [target substring](rdoc-ref:StringScanner@Target+Substring);
638
+ # does not modify the [positions](rdoc-ref:StringScanner@Positions).
639
+ # If the match succeeds:
640
+ # * Sets all [match values](rdoc-ref:StringScanner@Match+Values).
641
+ # * Returns the matched substring,
642
+ # which extends from the current
643
+ # [position](rdoc-ref:StringScanner@Byte+Position+-28Position-29)
644
+ # to the end of the matched substring.
645
+ # scanner = StringScanner.new('foobarbazbatbam')
646
+ # scanner.pos = 6
647
+ # scanner.check_until(/bat/) # => "bazbat"
648
+ # put_match_values(scanner)
649
+ # # Basic match values:
650
+ # # matched?: true
651
+ # # matched_size: 3
652
+ # # pre_match: "foobarbaz"
653
+ # # matched : "bat"
654
+ # # post_match: "bam"
655
+ # # Captured match values:
656
+ # # size: 1
657
+ # # captures: []
658
+ # # named_captures: {}
659
+ # # values_at: ["bat", nil]
660
+ # # []:
661
+ # # [0]: "bat"
662
+ # # [1]: nil
663
+ # put_situation(scanner)
664
+ # # Situation:
665
+ # # pos: 6
666
+ # # charpos: 6
667
+ # # rest: "bazbatbam"
668
+ # # rest_size: 9
669
+ #
670
+ # If the match fails:
671
+ # * Clears all [match values](rdoc-ref:StringScanner@Match+Values).
672
+ # * Returns `nil`.
673
+ # scanner.check_until(/nope/) # => nil
674
+ # match_values_cleared?(scanner) # => true
675
+ #
676
+ def check_until: (Regexp | String) -> String?
677
+
678
+ # <!--
679
+ # rdoc-file=ext/strscan/strscan.c
680
+ # - concat(more_string) -> self
681
+ # -->
682
+ # * Appends the given `more_string`
683
+ # to the [stored string](rdoc-ref:StringScanner@Stored+String).
684
+ # * Returns `self`.
685
+ # * Does not affect the [positions](rdoc-ref:StringScanner@Positions)
686
+ # or [match values](rdoc-ref:StringScanner@Match+Values).
687
+ # scanner = StringScanner.new('foo')
688
+ # scanner.string # => "foo"
689
+ # scanner.terminate
690
+ # scanner.concat('barbaz') # => #<StringScanner 3/9 "foo" @ "barba...">
691
+ # scanner.string # => "foobarbaz"
692
+ # put_situation(scanner)
693
+ # # Situation:
694
+ # # pos: 3
695
+ # # charpos: 3
696
+ # # rest: "barbaz"
697
+ # # rest_size: 6
698
+ #
699
+ alias concat <<
700
+
701
+ # <!--
702
+ # rdoc-file=ext/strscan/strscan.c
703
+ # - eos? -> true or false
704
+ # -->
705
+ # Returns whether the
706
+ # [position](rdoc-ref:StringScanner@Byte+Position+-28Position-29)
707
+ # is at the end of the [stored string](rdoc-ref:StringScanner@Stored+String):
708
+ # scanner = StringScanner.new('foobarbaz')
709
+ # scanner.eos? # => false
710
+ # pos = 3
711
+ # scanner.eos? # => false
712
+ # scanner.terminate
713
+ # scanner.eos? # => true
714
+ #
715
+ def eos?: () -> bool
716
+
717
+ # <!--
718
+ # rdoc-file=ext/strscan/strscan.c
719
+ # - exist?(pattern) -> byte_offset or nil
720
+ # -->
721
+ # Attempts to [match](rdoc-ref:StringScanner@Matching) the given `pattern`
722
+ # anywhere (at any
723
+ # [position](rdoc-ref:StringScanner@Byte+Position+-28Position-29))
724
+ # n the [target substring](rdoc-ref:StringScanner@Target+Substring);
725
+ # does not modify the [positions](rdoc-ref:StringScanner@Positions).
726
+ # If the match succeeds:
727
+ # * Returns a byte offset:
728
+ # the distance in bytes between the current
729
+ # [position](rdoc-ref:StringScanner@Byte+Position+-28Position-29)
730
+ # and the end of the matched substring.
731
+ # * Sets all [match values](rdoc-ref:StringScanner@Match+Values).
732
+ # scanner = StringScanner.new('foobarbazbatbam')
733
+ # scanner.pos = 6
734
+ # scanner.exist?(/bat/) # => 6
735
+ # put_match_values(scanner)
736
+ # # Basic match values:
737
+ # # matched?: true
738
+ # # matched_size: 3
739
+ # # pre_match: "foobarbaz"
740
+ # # matched : "bat"
741
+ # # post_match: "bam"
742
+ # # Captured match values:
743
+ # # size: 1
744
+ # # captures: []
745
+ # # named_captures: {}
746
+ # # values_at: ["bat", nil]
747
+ # # []:
748
+ # # [0]: "bat"
749
+ # # [1]: nil
750
+ # put_situation(scanner)
751
+ # # Situation:
752
+ # # pos: 6
753
+ # # charpos: 6
754
+ # # rest: "bazbatbam"
755
+ # # rest_size: 9
756
+ #
757
+ # If the match fails:
758
+ # * Returns `nil`.
759
+ # * Clears all [match values](rdoc-ref:StringScanner@Match+Values).
760
+ # scanner.exist?(/nope/) # => nil
761
+ # match_values_cleared?(scanner) # => true
762
+ #
763
+ def exist?: (Regexp | String) -> Integer?
764
+
765
+ # <!--
766
+ # rdoc-file=ext/strscan/strscan.c
767
+ # - fixed_anchor? -> true or false
768
+ # -->
769
+ # Returns whether the [fixed-anchor
770
+ # property](rdoc-ref:StringScanner@Fixed-Anchor+Property) is set.
771
+ #
772
+ def fixed_anchor?: () -> bool
773
+
774
+ # <!--
775
+ # rdoc-file=ext/strscan/strscan.c
776
+ # - get_byte()
777
+ # -->
778
+ # call-seq:
779
+ # get_byte -> byte_as_character or nil
780
+ # Returns the next byte, if available:
781
+ # * If the [position](rdoc-ref:StringScanner@Byte+Position+-28Position-29)
782
+ # is not at the end of the [stored
783
+ # string](rdoc-ref:StringScanner@Stored+String):
784
+ # * Returns the next byte.
785
+ # * Increments the [byte
786
+ # position](rdoc-ref:StringScanner@Byte+Position+-28Position-29).
787
+ # * Adjusts the [character
788
+ # position](rdoc-ref:StringScanner@Character+Position).
789
+ # scanner = StringScanner.new(HIRAGANA_TEXT)
790
+ # # => #<StringScanner 0/15 @ "\xE3\x81\x93\xE3\x82...">
791
+ # scanner.string # => "こんにちは"
792
+ # [scanner.get_byte, scanner.pos, scanner.charpos] # => ["\xE3", 1, 1]
793
+ # [scanner.get_byte, scanner.pos, scanner.charpos] # => ["\x81", 2, 2]
794
+ # [scanner.get_byte, scanner.pos, scanner.charpos] # => ["\x93", 3, 1]
795
+ # [scanner.get_byte, scanner.pos, scanner.charpos] # => ["\xE3", 4, 2]
796
+ # [scanner.get_byte, scanner.pos, scanner.charpos] # => ["\x82", 5, 3]
797
+ # [scanner.get_byte, scanner.pos, scanner.charpos] # => ["\x93", 6, 2]
798
+ #
799
+ # * Otherwise, returns `nil`, and does not change the positions.
800
+ # scanner.terminate
801
+ # [scanner.get_byte, scanner.pos, scanner.charpos] # => [nil, 15, 5]
802
+ #
803
+ def get_byte: () -> String?
804
+
805
+ # <!--
806
+ # rdoc-file=ext/strscan/strscan.c
807
+ # - getch()
808
+ # -->
809
+ # call-seq:
810
+ # getch -> character or nil
811
+ # Returns the next (possibly multibyte) character,
812
+ # if available:
813
+ # * If the [position](rdoc-ref:StringScanner@Byte+Position+-28Position-29)
814
+ # is at the beginning of a character:
815
+ # * Returns the character.
816
+ # * Increments the [character
817
+ # position](rdoc-ref:StringScanner@Character+Position) by 1.
818
+ # * Increments the [byte
819
+ # position](rdoc-ref:StringScanner@Byte+Position+-28Position-29)
820
+ # by the size (in bytes) of the character.
821
+ # scanner = StringScanner.new(HIRAGANA_TEXT)
822
+ # scanner.string # => "こんにちは"
823
+ # [scanner.getch, scanner.pos, scanner.charpos] # => ["こ", 3, 1]
824
+ # [scanner.getch, scanner.pos, scanner.charpos] # => ["ん", 6, 2]
825
+ # [scanner.getch, scanner.pos, scanner.charpos] # => ["に", 9, 3]
826
+ # [scanner.getch, scanner.pos, scanner.charpos] # => ["ち", 12, 4]
827
+ # [scanner.getch, scanner.pos, scanner.charpos] # => ["は", 15, 5]
828
+ # [scanner.getch, scanner.pos, scanner.charpos] # => [nil, 15, 5]
829
+ #
830
+ # * If the [position](rdoc-ref:StringScanner@Byte+Position+-28Position-29) is
831
+ # within a multi-byte character
832
+ # (that is, not at its beginning),
833
+ # behaves like #get_byte (returns a 1-byte character):
834
+ # scanner.pos = 1
835
+ # [scanner.getch, scanner.pos, scanner.charpos] # => ["\x81", 2, 2]
836
+ # [scanner.getch, scanner.pos, scanner.charpos] # => ["\x93", 3, 1]
837
+ # [scanner.getch, scanner.pos, scanner.charpos] # => ["ん", 6, 2]
838
+ #
839
+ # * If the [position](rdoc-ref:StringScanner@Byte+Position+-28Position-29) is
840
+ # at the end of the [stored string](rdoc-ref:StringScanner@Stored+String),
841
+ # returns `nil` and does not modify the positions:
842
+ # scanner.terminate
843
+ # [scanner.getch, scanner.pos, scanner.charpos] # => [nil, 15, 5]
844
+ #
845
+ def getch: () -> String?
846
+
847
+ # <!--
848
+ # rdoc-file=ext/strscan/strscan.c
849
+ # - inspect -> string
850
+ # -->
851
+ # Returns a string representation of `self` that may show:
852
+ # 1. The current
853
+ # [position](rdoc-ref:StringScanner@Byte+Position+-28Position-29).
854
+ # 2. The size (in bytes) of the [stored
855
+ # string](rdoc-ref:StringScanner@Stored+String).
856
+ # 3. The substring preceding the current position.
857
+ # 4. The substring following the current position (which is also the [target
858
+ # substring](rdoc-ref:StringScanner@Target+Substring)).
859
+ # scanner = StringScanner.new("Fri Dec 12 1975 14:39")
860
+ # scanner.pos = 11
861
+ # scanner.inspect # => "#<StringScanner 11/21 \"...c 12 \" @ \"1975 ...\">"
862
+ #
863
+ # If at beginning-of-string, item 4 above (following substring) is omitted:
864
+ # scanner.reset
865
+ # scanner.inspect # => "#<StringScanner 0/21 @ \"Fri D...\">"
866
+ #
867
+ # If at end-of-string, all items above are omitted:
868
+ # scanner.terminate
869
+ # scanner.inspect # => "#<StringScanner fin>"
870
+ #
871
+ def inspect: () -> String
872
+
873
+ # <!--
874
+ # rdoc-file=ext/strscan/strscan.c
875
+ # - match?(pattern) -> updated_position or nil
876
+ # -->
877
+ # Attempts to [match](rdoc-ref:StringScanner@Matching) the given `pattern`
878
+ # at the beginning of the [target
879
+ # substring](rdoc-ref:StringScanner@Target+Substring);
880
+ # does not modify the [positions](rdoc-ref:StringScanner@Positions).
881
+ # If the match succeeds:
882
+ # * Sets [match values](rdoc-ref:StringScanner@Match+Values).
883
+ # * Returns the size in bytes of the matched substring.
884
+ # scanner = StringScanner.new('foobarbaz')
885
+ # scanner.pos = 3
886
+ # scanner.match?(/bar/) => 3
887
+ # put_match_values(scanner)
888
+ # # Basic match values:
889
+ # # matched?: true
890
+ # # matched_size: 3
891
+ # # pre_match: "foo"
892
+ # # matched : "bar"
893
+ # # post_match: "baz"
894
+ # # Captured match values:
895
+ # # size: 1
896
+ # # captures: []
897
+ # # named_captures: {}
898
+ # # values_at: ["bar", nil]
899
+ # # []:
900
+ # # [0]: "bar"
901
+ # # [1]: nil
902
+ # put_situation(scanner)
903
+ # # Situation:
904
+ # # pos: 3
905
+ # # charpos: 3
906
+ # # rest: "barbaz"
907
+ # # rest_size: 6
908
+ #
909
+ # If the match fails:
910
+ # * Clears match values.
911
+ # * Returns `nil`.
912
+ # * Does not increment positions.
913
+ # scanner.match?(/nope/) # => nil
914
+ # match_values_cleared?(scanner) # => true
915
+ #
916
+ def match?: (Regexp | String) -> Integer?
917
+
918
+ # <!--
919
+ # rdoc-file=ext/strscan/strscan.c
920
+ # - matched -> matched_substring or nil
921
+ # -->
922
+ # Returns the matched substring from the most recent
923
+ # [match](rdoc-ref:StringScanner@Matching) attempt
924
+ # if it was successful,
925
+ # or `nil` otherwise;
926
+ # see [Basic Matched Values](rdoc-ref:StringScanner@Basic+Match+Values):
927
+ # scanner = StringScanner.new('foobarbaz')
928
+ # scanner.matched # => nil
929
+ # scanner.pos = 3
930
+ # scanner.match?(/bar/) # => 3
931
+ # scanner.matched # => "bar"
932
+ # scanner.match?(/nope/) # => nil
933
+ # scanner.matched # => nil
934
+ #
935
+ def matched: () -> String?
936
+
937
+ # <!--
938
+ # rdoc-file=ext/strscan/strscan.c
939
+ # - matched? -> true or false
940
+ # -->
941
+ # Returns `true` of the most recent [match
942
+ # attempt](rdoc-ref:StringScanner@Matching) was successful,
943
+ # `false` otherwise;
944
+ # see [Basic Matched Values](rdoc-ref:StringScanner@Basic+Match+Values):
945
+ # scanner = StringScanner.new('foobarbaz')
946
+ # scanner.matched? # => false
947
+ # scanner.pos = 3
948
+ # scanner.exist?(/baz/) # => 6
949
+ # scanner.matched? # => true
950
+ # scanner.exist?(/nope/) # => nil
951
+ # scanner.matched? # => false
952
+ #
953
+ def matched?: () -> bool
954
+
955
+ # <!--
956
+ # rdoc-file=ext/strscan/strscan.c
957
+ # - matched_size -> substring_size or nil
958
+ # -->
959
+ # Returns the size (in bytes) of the matched substring
960
+ # from the most recent match [match attempt](rdoc-ref:StringScanner@Matching) if
961
+ # it was successful,
962
+ # or `nil` otherwise;
963
+ # see [Basic Matched Values](rdoc-ref:StringScanner@Basic+Match+Values):
964
+ # scanner = StringScanner.new('foobarbaz')
965
+ # scanner.matched_size # => nil
966
+ #
967
+ # pos = 3
968
+ # scanner.exist?(/baz/) # => 9
969
+ # scanner.matched_size # => 3
970
+ #
971
+ # scanner.exist?(/nope/) # => nil
972
+ # scanner.matched_size # => nil
973
+ #
974
+ def matched_size: () -> Integer?
975
+
976
+ # <!--
977
+ # rdoc-file=ext/strscan/strscan.c
978
+ # - named_captures -> hash
979
+ # -->
980
+ # Returns the array of captured match values at indexes (1..)
981
+ # if the most recent match attempt succeeded, or nil otherwise;
982
+ # see [Captured Match Values](rdoc-ref:StringScanner@Captured+Match+Values):
983
+ # scanner = StringScanner.new('Fri Dec 12 1975 14:39')
984
+ # scanner.named_captures # => {}
985
+ #
986
+ # pattern = /(?<wday>\w+) (?<month>\w+) (?<day>\d+) /
987
+ # scanner.match?(pattern)
988
+ # scanner.named_captures # => {"wday"=>"Fri", "month"=>"Dec", "day"=>"12"}
989
+ #
990
+ # scanner.string = 'nope'
991
+ # scanner.match?(pattern)
992
+ # scanner.named_captures # => {"wday"=>nil, "month"=>nil, "day"=>nil}
993
+ #
994
+ # scanner.match?(/nosuch/)
995
+ # scanner.named_captures # => {}
996
+ #
997
+ def named_captures: () -> Hash[String, String?]
998
+
999
+ # <!--
1000
+ # rdoc-file=ext/strscan/strscan.c
1001
+ # - peek(length) -> substring
1002
+ # -->
1003
+ # Returns the substring <code>string[pos, length]</code>;
1004
+ # does not update [match values](rdoc-ref:StringScanner@Match+Values) or
1005
+ # [positions](rdoc-ref:StringScanner@Positions):
1006
+ # scanner = StringScanner.new('foobarbaz')
1007
+ # scanner.pos = 3
1008
+ # scanner.peek(3) # => "bar"
1009
+ # scanner.terminate
1010
+ # scanner.peek(3) # => ""
1011
+ #
1012
+ def peek: (Integer) -> String
1013
+
1014
+ # <!--
1015
+ # rdoc-file=ext/strscan/strscan.c
1016
+ # - peek_byte()
1017
+ # -->
1018
+ # Peeks at the current byte and returns it as an integer.
1019
+ #
1020
+ # s = StringScanner.new('ab')
1021
+ # s.peek_byte # => 97
1022
+ #
1023
+ def peek_byte: () -> Integer?
1024
+
1025
+ # <!-- rdoc-file=ext/strscan/strscan.c -->
1026
+ # call-seq:
1027
+ # pos -> byte_position
1028
+ # Returns the integer [byte
1029
+ # position](rdoc-ref:StringScanner@Byte+Position+-28Position-29),
1030
+ # which may be different from the [character
1031
+ # position](rdoc-ref:StringScanner@Character+Position):
1032
+ # scanner = StringScanner.new(HIRAGANA_TEXT)
1033
+ # scanner.string # => "こんにちは"
1034
+ # scanner.pos # => 0
1035
+ # scanner.getch # => "こ" # 3-byte character.
1036
+ # scanner.charpos # => 1
1037
+ # scanner.pos # => 3
1038
+ #
1039
+ def pointer: () -> Integer
1040
+
1041
+ # <!-- rdoc-file=ext/strscan/strscan.c -->
1042
+ # call-seq:
1043
+ # pos = n -> n
1044
+ # pointer = n -> n
1045
+ # Sets the [byte position](rdoc-ref:StringScanner@Byte+Position+-28Position-29)
1046
+ # and the [character position](rdoc-ref:StringScanner@Positions);
1047
+ # returns `n`.
1048
+ # Does not affect [match values](rdoc-ref:StringScanner@Match+Values).
1049
+ # For non-negative `n`, sets the position to `n`:
1050
+ # scanner = StringScanner.new(HIRAGANA_TEXT)
1051
+ # scanner.string # => "こんにちは"
1052
+ # scanner.pos = 3 # => 3
1053
+ # scanner.rest # => "んにちは"
1054
+ # scanner.charpos # => 1
1055
+ #
1056
+ # For negative `n`, counts from the end of the [stored
1057
+ # string](rdoc-ref:StringScanner@Stored+String):
1058
+ # scanner.pos = -9 # => -9
1059
+ # scanner.pos # => 6
1060
+ # scanner.rest # => "にちは"
1061
+ # scanner.charpos # => 2
1062
+ #
1063
+ def pointer=: (Integer) -> Integer
1064
+
1065
+ # <!--
1066
+ # rdoc-file=ext/strscan/strscan.c
1067
+ # - pos()
1068
+ # -->
1069
+ # call-seq:
1070
+ # pos -> byte_position
1071
+ # Returns the integer [byte
1072
+ # position](rdoc-ref:StringScanner@Byte+Position+-28Position-29),
1073
+ # which may be different from the [character
1074
+ # position](rdoc-ref:StringScanner@Character+Position):
1075
+ # scanner = StringScanner.new(HIRAGANA_TEXT)
1076
+ # scanner.string # => "こんにちは"
1077
+ # scanner.pos # => 0
1078
+ # scanner.getch # => "こ" # 3-byte character.
1079
+ # scanner.charpos # => 1
1080
+ # scanner.pos # => 3
1081
+ #
1082
+ def pos: () -> Integer
1083
+
1084
+ # <!--
1085
+ # rdoc-file=ext/strscan/strscan.c
1086
+ # - pos=(p1)
1087
+ # -->
1088
+ # call-seq:
1089
+ # pos = n -> n
1090
+ # pointer = n -> n
1091
+ # Sets the [byte position](rdoc-ref:StringScanner@Byte+Position+-28Position-29)
1092
+ # and the [character position](rdoc-ref:StringScanner@Positions);
1093
+ # returns `n`.
1094
+ # Does not affect [match values](rdoc-ref:StringScanner@Match+Values).
1095
+ # For non-negative `n`, sets the position to `n`:
1096
+ # scanner = StringScanner.new(HIRAGANA_TEXT)
1097
+ # scanner.string # => "こんにちは"
1098
+ # scanner.pos = 3 # => 3
1099
+ # scanner.rest # => "んにちは"
1100
+ # scanner.charpos # => 1
1101
+ #
1102
+ # For negative `n`, counts from the end of the [stored
1103
+ # string](rdoc-ref:StringScanner@Stored+String):
1104
+ # scanner.pos = -9 # => -9
1105
+ # scanner.pos # => 6
1106
+ # scanner.rest # => "にちは"
1107
+ # scanner.charpos # => 2
1108
+ #
1109
+ def pos=: (Integer) -> Integer
1110
+
1111
+ # <!--
1112
+ # rdoc-file=ext/strscan/strscan.c
1113
+ # - post_match -> substring
1114
+ # -->
1115
+ # Returns the substring that follows the matched substring
1116
+ # from the most recent match attempt if it was successful,
1117
+ # or `nil` otherwise;
1118
+ # see [Basic Match Values](rdoc-ref:StringScanner@Basic+Match+Values):
1119
+ # scanner = StringScanner.new('foobarbaz')
1120
+ # scanner.post_match # => nil
1121
+ #
1122
+ # scanner.pos = 3
1123
+ # scanner.match?(/bar/) # => 3
1124
+ # scanner.post_match # => "baz"
1125
+ #
1126
+ # scanner.match?(/nope/) # => nil
1127
+ # scanner.post_match # => nil
1128
+ #
1129
+ def post_match: () -> String?
1130
+
1131
+ # <!--
1132
+ # rdoc-file=ext/strscan/strscan.c
1133
+ # - pre_match -> substring
1134
+ # -->
1135
+ # Returns the substring that precedes the matched substring
1136
+ # from the most recent match attempt if it was successful,
1137
+ # or `nil` otherwise;
1138
+ # see [Basic Match Values](rdoc-ref:StringScanner@Basic+Match+Values):
1139
+ # scanner = StringScanner.new('foobarbaz')
1140
+ # scanner.pre_match # => nil
1141
+ #
1142
+ # scanner.pos = 3
1143
+ # scanner.exist?(/baz/) # => 6
1144
+ # scanner.pre_match # => "foobar" # Substring of entire string, not just target string.
1145
+ #
1146
+ # scanner.exist?(/nope/) # => nil
1147
+ # scanner.pre_match # => nil
1148
+ #
1149
+ def pre_match: () -> String?
1150
+
1151
+ # <!--
1152
+ # rdoc-file=ext/strscan/strscan.c
1153
+ # - reset -> self
1154
+ # -->
1155
+ # Sets both [byte position](rdoc-ref:StringScanner@Byte+Position+-28Position-29)
1156
+ # and [character position](rdoc-ref:StringScanner@Character+Position) to zero,
1157
+ # and clears [match values](rdoc-ref:StringScanner@Match+Values);
1158
+ # returns +self+:
1159
+ # scanner = StringScanner.new('foobarbaz')
1160
+ # scanner.exist?(/bar/) # => 6
1161
+ # scanner.reset # => #<StringScanner 0/9 @ "fooba...">
1162
+ # put_situation(scanner)
1163
+ # # Situation:
1164
+ # # pos: 0
1165
+ # # charpos: 0
1166
+ # # rest: "foobarbaz"
1167
+ # # rest_size: 9
1168
+ # # => nil
1169
+ # match_values_cleared?(scanner) # => true
1170
+ #
1171
+ def reset: () -> self
1172
+
1173
+ # <!--
1174
+ # rdoc-file=ext/strscan/strscan.c
1175
+ # - rest -> target_substring
1176
+ # -->
1177
+ # Returns the 'rest' of the [stored
1178
+ # string](rdoc-ref:StringScanner@Stored+String) (all after the current
1179
+ # [position](rdoc-ref:StringScanner@Byte+Position+-28Position-29)),
1180
+ # which is the [target substring](rdoc-ref:StringScanner@Target+Substring):
1181
+ # scanner = StringScanner.new('foobarbaz')
1182
+ # scanner.rest # => "foobarbaz"
1183
+ # scanner.pos = 3
1184
+ # scanner.rest # => "barbaz"
1185
+ # scanner.terminate
1186
+ # scanner.rest # => ""
1187
+ #
1188
+ def rest: () -> String
1189
+
1190
+ # <!--
1191
+ # rdoc-file=ext/strscan/strscan.c
1192
+ # - rest?()
1193
+ # -->
1194
+ # Returns true if and only if there is more data in the string. See #eos?. This
1195
+ # method is obsolete; use #eos? instead.
1196
+ #
1197
+ # s = StringScanner.new('test string')
1198
+ # # These two are opposites
1199
+ # s.eos? # => false
1200
+ # s.rest? # => true
1201
+ #
1202
+ def rest?: () -> bool
1203
+
1204
+ # <!--
1205
+ # rdoc-file=ext/strscan/strscan.c
1206
+ # - rest_size -> integer
1207
+ # -->
1208
+ # Returns the size (in bytes) of the #rest of the [stored
1209
+ # string](rdoc-ref:StringScanner@Stored+String):
1210
+ # scanner = StringScanner.new('foobarbaz')
1211
+ # scanner.rest # => "foobarbaz"
1212
+ # scanner.rest_size # => 9
1213
+ # scanner.pos = 3
1214
+ # scanner.rest # => "barbaz"
1215
+ # scanner.rest_size # => 6
1216
+ # scanner.terminate
1217
+ # scanner.rest # => ""
1218
+ # scanner.rest_size # => 0
1219
+ #
1220
+ def rest_size: () -> Integer
1221
+
1222
+ # <!--
1223
+ # rdoc-file=ext/strscan/strscan.c
1224
+ # - scan(p1)
1225
+ # -->
1226
+ # call-seq:
1227
+ # scan(pattern) -> substring or nil
1228
+ # Attempts to [match](rdoc-ref:StringScanner@Matching) the given `pattern`
1229
+ # at the beginning of the [target
1230
+ # substring](rdoc-ref:StringScanner@Target+Substring).
1231
+ # If the match succeeds:
1232
+ # * Returns the matched substring.
1233
+ # * Increments the [byte
1234
+ # position](rdoc-ref:StringScanner@Byte+Position+-28Position-29) by
1235
+ # <code>substring.bytesize</code>,
1236
+ # and may increment the [character
1237
+ # position](rdoc-ref:StringScanner@Character+Position).
1238
+ # * Sets [match values](rdoc-ref:StringScanner@Match+Values).
1239
+ # scanner = StringScanner.new(HIRAGANA_TEXT)
1240
+ # scanner.string # => "こんにちは"
1241
+ # scanner.pos = 6
1242
+ # scanner.scan(/に/) # => "に"
1243
+ # put_match_values(scanner)
1244
+ # # Basic match values:
1245
+ # # matched?: true
1246
+ # # matched_size: 3
1247
+ # # pre_match: "こん"
1248
+ # # matched : "に"
1249
+ # # post_match: "ちは"
1250
+ # # Captured match values:
1251
+ # # size: 1
1252
+ # # captures: []
1253
+ # # named_captures: {}
1254
+ # # values_at: ["に", nil]
1255
+ # # []:
1256
+ # # [0]: "に"
1257
+ # # [1]: nil
1258
+ # put_situation(scanner)
1259
+ # # Situation:
1260
+ # # pos: 9
1261
+ # # charpos: 3
1262
+ # # rest: "ちは"
1263
+ # # rest_size: 6
1264
+ #
1265
+ # If the match fails:
1266
+ # * Returns `nil`.
1267
+ # * Does not increment byte and character positions.
1268
+ # * Clears match values.
1269
+ # scanner.scan(/nope/) # => nil
1270
+ # match_values_cleared?(scanner) # => true
1271
+ #
1272
+ def scan: (Regexp | String) -> String?
1273
+
1274
+ # <!--
1275
+ # rdoc-file=ext/strscan/strscan.c
1276
+ # - scan_byte -> integer_byte
1277
+ # -->
1278
+ # Scans one byte and returns it as an integer. This method is not multibyte
1279
+ # character sensitive. See also: #getch.
1280
+ #
1281
+ def scan_byte: () -> Integer?
1282
+
1283
+ # <!--
1284
+ # rdoc-file=ext/strscan/strscan.c
1285
+ # - scan_full(pattern, advance_pointer_p, return_string_p)
1286
+ # -->
1287
+ # Tests whether the given `pattern` is matched from the current scan pointer.
1288
+ # Advances the scan pointer if `advance_pointer_p` is true. Returns the matched
1289
+ # string if `return_string_p` is true. The match register is affected.
1290
+ #
1291
+ # "full" means "#scan with full parameters".
1292
+ #
1293
+ def scan_full: (Regexp | String pattern, bool advance_pointer_p, true return_string_p) -> String?
1294
+ | (Regexp | String pattern, bool advance_pointer_p, false return_string_p) -> Integer?
1295
+
1296
+ # <!--
1297
+ # rdoc-file=ext/strscan/lib/strscan/strscan.rb
1298
+ # - scan_integer(base: 10)
1299
+ # -->
1300
+ # If `base` isn't provided or is `10`, then it is equivalent to calling
1301
+ # <code>#scan</code> with a `[+-]?d+` pattern, and returns an Integer or nil.
1302
+ #
1303
+ # If `base` is `16`, then it is equivalent to calling <code>#scan</code> with a
1304
+ # `[+-]?(0x)?[0-9a-fA-F]+` pattern, and returns an Integer or nil.
1305
+ #
1306
+ # The scanned string must be encoded with an ASCII compatible encoding,
1307
+ # otherwise Encoding::CompatibilityError will be raised.
1308
+ #
1309
+ def scan_integer: (?base: Integer) -> Integer?
1310
+
1311
+ # <!--
1312
+ # rdoc-file=ext/strscan/strscan.c
1313
+ # - scan_until(p1)
1314
+ # -->
1315
+ # call-seq:
1316
+ # scan_until(pattern) -> substring or nil
1317
+ # Attempts to [match](rdoc-ref:StringScanner@Matching) the given `pattern`
1318
+ # anywhere (at any
1319
+ # [position](rdoc-ref:StringScanner@Byte+Position+-28Position-29)) in the
1320
+ # [target substring](rdoc-ref:StringScanner@Target+Substring).
1321
+ # If the match attempt succeeds:
1322
+ # * Sets [match values](rdoc-ref:StringScanner@Match+Values).
1323
+ # * Sets the [byte
1324
+ # position](rdoc-ref:StringScanner@Byte+Position+-28Position-29) to the end
1325
+ # of the matched substring;
1326
+ # may adjust the [character
1327
+ # position](rdoc-ref:StringScanner@Character+Position).
1328
+ # * Returns the matched substring.
1329
+ # scanner = StringScanner.new(HIRAGANA_TEXT)
1330
+ # scanner.string # => "こんにちは"
1331
+ # scanner.pos = 6
1332
+ # scanner.scan_until(/ち/) # => "にち"
1333
+ # put_match_values(scanner)
1334
+ # # Basic match values:
1335
+ # # matched?: true
1336
+ # # matched_size: 3
1337
+ # # pre_match: "こんに"
1338
+ # # matched : "ち"
1339
+ # # post_match: "は"
1340
+ # # Captured match values:
1341
+ # # size: 1
1342
+ # # captures: []
1343
+ # # named_captures: {}
1344
+ # # values_at: ["ち", nil]
1345
+ # # []:
1346
+ # # [0]: "ち"
1347
+ # # [1]: nil
1348
+ # put_situation(scanner)
1349
+ # # Situation:
1350
+ # # pos: 12
1351
+ # # charpos: 4
1352
+ # # rest: "は"
1353
+ # # rest_size: 3
1354
+ #
1355
+ # If the match attempt fails:
1356
+ # * Clears match data.
1357
+ # * Returns `nil`.
1358
+ # * Does not update positions.
1359
+ # scanner.scan_until(/nope/) # => nil
1360
+ # match_values_cleared?(scanner) # => true
1361
+ #
1362
+ def scan_until: (Regexp | String) -> String?
1363
+
1364
+ # <!--
1365
+ # rdoc-file=ext/strscan/strscan.c
1366
+ # - search_full(pattern, advance_pointer_p, return_string_p)
1367
+ # -->
1368
+ # Scans the string *until* the `pattern` is matched. Advances the scan pointer
1369
+ # if `advance_pointer_p`, otherwise not. Returns the matched string if
1370
+ # `return_string_p` is true, otherwise returns the number of bytes advanced.
1371
+ # This method does affect the match register.
1372
+ #
1373
+ def search_full: (Regexp | String pattern, bool advance_pointer_p, true return_string_p) -> String?
1374
+ | (Regexp | String pattern, bool advance_pointer_p, false return_string_p) -> Integer?
1375
+
1376
+ # <!--
1377
+ # rdoc-file=ext/strscan/strscan.c
1378
+ # - size -> captures_count
1379
+ # -->
1380
+ # Returns the count of captures if the most recent match attempt succeeded,
1381
+ # `nil` otherwise;
1382
+ # see [Captures Match Values](rdoc-ref:StringScanner@Captured+Match+Values):
1383
+ # scanner = StringScanner.new('Fri Dec 12 1975 14:39')
1384
+ # scanner.size # => nil
1385
+ #
1386
+ # pattern = /(?<wday>\w+) (?<month>\w+) (?<day>\d+) /
1387
+ # scanner.match?(pattern)
1388
+ # scanner.values_at(*0..scanner.size) # => ["Fri Dec 12 ", "Fri", "Dec", "12", nil]
1389
+ # scanner.size # => 4
1390
+ #
1391
+ # scanner.match?(/nope/) # => nil
1392
+ # scanner.size # => nil
1393
+ #
1394
+ def size: () -> Integer?
1395
+
1396
+ # <!--
1397
+ # rdoc-file=ext/strscan/strscan.c
1398
+ # - skip(p1)
1399
+ # -->
1400
+ # call-seq:
1401
+ # skip(pattern) match_size or nil
1402
+ # Attempts to [match](rdoc-ref:StringScanner@Matching) the given `pattern`
1403
+ # at the beginning of the [target
1404
+ # substring](rdoc-ref:StringScanner@Target+Substring);
1405
+ # If the match succeeds:
1406
+ # * Increments the [byte
1407
+ # position](rdoc-ref:StringScanner@Byte+Position+-28Position-29) by
1408
+ # substring.bytesize,
1409
+ # and may increment the [character
1410
+ # position](rdoc-ref:StringScanner@Character+Position).
1411
+ # * Sets [match values](rdoc-ref:StringScanner@Match+Values).
1412
+ # * Returns the size (bytes) of the matched substring.
1413
+ # scanner = StringScanner.new(HIRAGANA_TEXT)
1414
+ # scanner.string # => "こんにちは"
1415
+ # scanner.pos = 6
1416
+ # scanner.skip(/に/) # => 3
1417
+ # put_match_values(scanner)
1418
+ # # Basic match values:
1419
+ # # matched?: true
1420
+ # # matched_size: 3
1421
+ # # pre_match: "こん"
1422
+ # # matched : "に"
1423
+ # # post_match: "ちは"
1424
+ # # Captured match values:
1425
+ # # size: 1
1426
+ # # captures: []
1427
+ # # named_captures: {}
1428
+ # # values_at: ["に", nil]
1429
+ # # []:
1430
+ # # [0]: "に"
1431
+ # # [1]: nil
1432
+ # put_situation(scanner)
1433
+ # # Situation:
1434
+ # # pos: 9
1435
+ # # charpos: 3
1436
+ # # rest: "ちは"
1437
+ # # rest_size: 6
1438
+ #
1439
+ # scanner.skip(/nope/) # => nil
1440
+ # match_values_cleared?(scanner) # => true
1441
+ #
1442
+ def skip: (Regexp | String) -> Integer?
1443
+
1444
+ # <!--
1445
+ # rdoc-file=ext/strscan/strscan.c
1446
+ # - skip_until(p1)
1447
+ # -->
1448
+ # call-seq:
1449
+ # skip_until(pattern) -> matched_substring_size or nil
1450
+ # Attempts to [match](rdoc-ref:StringScanner@Matching) the given `pattern`
1451
+ # anywhere (at any
1452
+ # [position](rdoc-ref:StringScanner@Byte+Position+-28Position-29)) in the
1453
+ # [target substring](rdoc-ref:StringScanner@Target+Substring);
1454
+ # does not modify the positions.
1455
+ # If the match attempt succeeds:
1456
+ # * Sets [match values](rdoc-ref:StringScanner@Match+Values).
1457
+ # * Returns the size of the matched substring.
1458
+ # scanner = StringScanner.new(HIRAGANA_TEXT)
1459
+ # scanner.string # => "こんにちは"
1460
+ # scanner.pos = 6
1461
+ # scanner.skip_until(/ち/) # => 6
1462
+ # put_match_values(scanner)
1463
+ # # Basic match values:
1464
+ # # matched?: true
1465
+ # # matched_size: 3
1466
+ # # pre_match: "こんに"
1467
+ # # matched : "ち"
1468
+ # # post_match: "は"
1469
+ # # Captured match values:
1470
+ # # size: 1
1471
+ # # captures: []
1472
+ # # named_captures: {}
1473
+ # # values_at: ["ち", nil]
1474
+ # # []:
1475
+ # # [0]: "ち"
1476
+ # # [1]: nil
1477
+ # put_situation(scanner)
1478
+ # # Situation:
1479
+ # # pos: 12
1480
+ # # charpos: 4
1481
+ # # rest: "は"
1482
+ # # rest_size: 3
1483
+ #
1484
+ # If the match attempt fails:
1485
+ # * Clears match values.
1486
+ # * Returns `nil`.
1487
+ # scanner.skip_until(/nope/) # => nil
1488
+ # match_values_cleared?(scanner) # => true
1489
+ #
1490
+ def skip_until: (Regexp | String) -> Integer?
1491
+
1492
+ # <!--
1493
+ # rdoc-file=ext/strscan/strscan.c
1494
+ # - string -> stored_string
1495
+ # -->
1496
+ # Returns the [stored string](rdoc-ref:StringScanner@Stored+String):
1497
+ # scanner = StringScanner.new('foobar')
1498
+ # scanner.string # => "foobar"
1499
+ # scanner.concat('baz')
1500
+ # scanner.string # => "foobarbaz"
1501
+ #
1502
+ def string: () -> String
1503
+
1504
+ # <!--
1505
+ # rdoc-file=ext/strscan/strscan.c
1506
+ # - string = other_string -> other_string
1507
+ # -->
1508
+ # Replaces the [stored string](rdoc-ref:StringScanner@Stored+String) with the
1509
+ # given `other_string`:
1510
+ # * Sets both [positions](rdoc-ref:StringScanner@Positions) to zero.
1511
+ # * Clears [match values](rdoc-ref:StringScanner@Match+Values).
1512
+ # * Returns `other_string`.
1513
+ # scanner = StringScanner.new('foobar')
1514
+ # scanner.scan(/foo/)
1515
+ # put_situation(scanner)
1516
+ # # Situation:
1517
+ # # pos: 3
1518
+ # # charpos: 3
1519
+ # # rest: "bar"
1520
+ # # rest_size: 3
1521
+ # match_values_cleared?(scanner) # => false
1522
+ #
1523
+ # scanner.string = 'baz' # => "baz"
1524
+ # put_situation(scanner)
1525
+ # # Situation:
1526
+ # # pos: 0
1527
+ # # charpos: 0
1528
+ # # rest: "baz"
1529
+ # # rest_size: 3
1530
+ # match_values_cleared?(scanner) # => true
1531
+ #
1532
+ def string=: (String) -> String
1533
+
1534
+ # <!--
1535
+ # rdoc-file=ext/strscan/strscan.c
1536
+ # - terminate()
1537
+ # -->
1538
+ # call-seq:
1539
+ # terminate -> self
1540
+ # Sets the scanner to end-of-string;
1541
+ # returns +self+:
1542
+ # * Sets both [positions](rdoc-ref:StringScanner@Positions) to end-of-stream.
1543
+ # * Clears [match values](rdoc-ref:StringScanner@Match+Values).
1544
+ # scanner = StringScanner.new(HIRAGANA_TEXT)
1545
+ # scanner.string # => "こんにちは"
1546
+ # scanner.scan_until(/に/)
1547
+ # put_situation(scanner)
1548
+ # # Situation:
1549
+ # # pos: 9
1550
+ # # charpos: 3
1551
+ # # rest: "ちは"
1552
+ # # rest_size: 6
1553
+ # match_values_cleared?(scanner) # => false
1554
+ #
1555
+ # scanner.terminate # => #<StringScanner fin>
1556
+ # put_situation(scanner)
1557
+ # # Situation:
1558
+ # # pos: 15
1559
+ # # charpos: 5
1560
+ # # rest: ""
1561
+ # # rest_size: 0
1562
+ # match_values_cleared?(scanner) # => true
1563
+ #
1564
+ def terminate: () -> self
1565
+
1566
+ # <!--
1567
+ # rdoc-file=ext/strscan/strscan.c
1568
+ # - unscan -> self
1569
+ # -->
1570
+ # Sets the [position](rdoc-ref:StringScanner@Byte+Position+-28Position-29) to
1571
+ # its value previous to the recent successful
1572
+ # [match](rdoc-ref:StringScanner@Matching) attempt:
1573
+ # scanner = StringScanner.new('foobarbaz')
1574
+ # scanner.scan(/foo/)
1575
+ # put_situation(scanner)
1576
+ # # Situation:
1577
+ # # pos: 3
1578
+ # # charpos: 3
1579
+ # # rest: "barbaz"
1580
+ # # rest_size: 6
1581
+ # scanner.unscan
1582
+ # # => #<StringScanner 0/9 @ "fooba...">
1583
+ # put_situation(scanner)
1584
+ # # Situation:
1585
+ # # pos: 0
1586
+ # # charpos: 0
1587
+ # # rest: "foobarbaz"
1588
+ # # rest_size: 9
1589
+ #
1590
+ # Raises an exception if match values are clear:
1591
+ # scanner.scan(/nope/) # => nil
1592
+ # match_values_cleared?(scanner) # => true
1593
+ # scanner.unscan # Raises StringScanner::Error.
1594
+ #
1595
+ def unscan: () -> self
1596
+
1597
+ # <!--
1598
+ # rdoc-file=ext/strscan/strscan.c
1599
+ # - values_at(*specifiers) -> array_of_captures or nil
1600
+ # -->
1601
+ # Returns an array of captured substrings, or `nil` of none.
1602
+ # For each `specifier`, the returned substring is <code>[specifier]</code>;
1603
+ # see #[].
1604
+ # scanner = StringScanner.new('Fri Dec 12 1975 14:39')
1605
+ # pattern = /(?<wday>\w+) (?<month>\w+) (?<day>\d+) /
1606
+ # scanner.match?(pattern)
1607
+ # scanner.values_at(*0..3) # => ["Fri Dec 12 ", "Fri", "Dec", "12"]
1608
+ # scanner.values_at(*%i[wday month day]) # => ["Fri", "Dec", "12"]
1609
+ #
1610
+ def values_at: (*Integer | String | Symbol) -> Array[String]?
1611
+
1612
+ private
1613
+
1614
+ # <!--
1615
+ # rdoc-file=ext/strscan/strscan.c
1616
+ # - StringScanner.new(string, fixed_anchor: false) -> string_scanner
1617
+ # -->
1618
+ # Returns a new `StringScanner` object whose [stored
1619
+ # string](rdoc-ref:StringScanner@Stored+String)
1620
+ # is the given `string`;
1621
+ # sets the [fixed-anchor
1622
+ # property](rdoc-ref:StringScanner@Fixed-Anchor+Property):
1623
+ # scanner = StringScanner.new('foobarbaz')
1624
+ # scanner.string # => "foobarbaz"
1625
+ # scanner.fixed_anchor? # => false
1626
+ # put_situation(scanner)
1627
+ # # Situation:
1628
+ # # pos: 0
1629
+ # # charpos: 0
1630
+ # # rest: "foobarbaz"
1631
+ # # rest_size: 9
1632
+ #
1633
+ def initialize: (String, ?fixed_anchor: bool) -> void
1634
+
1635
+ # <!--
1636
+ # rdoc-file=ext/strscan/strscan.c
1637
+ # - dup -> shallow_copy
1638
+ # -->
1639
+ # Returns a shallow copy of `self`;
1640
+ # the [stored string](rdoc-ref:StringScanner@Stored+String) in the copy is the
1641
+ # same string as in `self`.
1642
+ #
1643
+ def initialize_copy: (StringScanner) -> void
1644
+ end
1645
+
1646
+ StringScanner::Id: String
1647
+
1648
+ StringScanner::Version: String