rbs-relaxed 3.9.0.1

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