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,179 @@
1
+ #ifndef RBS__LEXER_H
2
+ #define RBS__LEXER_H
3
+
4
+ enum TokenType {
5
+ NullType, /* (Nothing) */
6
+ pEOF, /* EOF */
7
+ ErrorToken, /* Error */
8
+
9
+ pLPAREN, /* ( */
10
+ pRPAREN, /* ) */
11
+ pCOLON, /* : */
12
+ pCOLON2, /* :: */
13
+ pLBRACKET, /* [ */
14
+ pRBRACKET, /* ] */
15
+ pLBRACE, /* { */
16
+ pRBRACE, /* } */
17
+ pHAT, /* ^ */
18
+ pARROW, /* -> */
19
+ pFATARROW, /* => */
20
+ pCOMMA, /* , */
21
+ pBAR, /* | */
22
+ pAMP, /* & */
23
+ pSTAR, /* * */
24
+ pSTAR2, /* ** */
25
+ pDOT, /* . */
26
+ pDOT3, /* ... */
27
+ pBANG, /* ! */
28
+ pQUESTION, /* ? */
29
+ pLT, /* < */
30
+ pEQ, /* = */
31
+
32
+ kALIAS, /* alias */
33
+ kATTRACCESSOR, /* attr_accessor */
34
+ kATTRREADER, /* attr_reader */
35
+ kATTRWRITER, /* attr_writer */
36
+ kBOOL, /* bool */
37
+ kBOT, /* bot */
38
+ kCLASS, /* class */
39
+ kDEF, /* def */
40
+ kEND, /* end */
41
+ kEXTEND, /* extend */
42
+ kFALSE, /* false */
43
+ kIN, /* in */
44
+ kINCLUDE, /* include */
45
+ kINSTANCE, /* instance */
46
+ kINTERFACE, /* interface */
47
+ kMODULE, /* module */
48
+ kNIL, /* nil */
49
+ kOUT, /* out */
50
+ kPREPEND, /* prepend */
51
+ kPRIVATE, /* private */
52
+ kPUBLIC, /* public */
53
+ kSELF, /* self */
54
+ kSINGLETON, /* singleton */
55
+ kTOP, /* top */
56
+ kTRUE, /* true */
57
+ kTYPE, /* type */
58
+ kUNCHECKED, /* unchecked */
59
+ kUNTYPED, /* untyped */
60
+ kVOID, /* void */
61
+ kUSE, /* use */
62
+ kAS, /* as */
63
+ k__TODO__, /* __todo__ */
64
+
65
+ tLIDENT, /* Identifiers starting with lower case */
66
+ tUIDENT, /* Identifiers starting with upper case */
67
+ tULIDENT, /* Identifiers starting with `_` followed by upper case */
68
+ tULLIDENT, /* Identifiers starting with `_` followed by lower case */
69
+ tGIDENT, /* Identifiers starting with `$` */
70
+ tAIDENT, /* Identifiers starting with `@` */
71
+ tA2IDENT, /* Identifiers starting with `@@` */
72
+ tBANGIDENT, /* Identifiers ending with `!` */
73
+ tEQIDENT, /* Identifiers ending with `=` */
74
+ tQIDENT, /* Quoted identifier */
75
+ pAREF_OPR, /* [] */
76
+ tOPERATOR, /* Operator identifier */
77
+
78
+ tCOMMENT, /* Comment */
79
+ tLINECOMMENT, /* Comment of all line */
80
+
81
+ tTRIVIA, /* Trivia tokens -- space and new line */
82
+
83
+ tDQSTRING, /* Double quoted string */
84
+ tSQSTRING, /* Single quoted string */
85
+ tINTEGER, /* Integer */
86
+ tSYMBOL, /* Symbol */
87
+ tDQSYMBOL, /* Double quoted symbol */
88
+ tSQSYMBOL, /* Single quoted symbol */
89
+ tANNOTATION, /* Annotation */
90
+ };
91
+
92
+ /**
93
+ * The `byte_pos` (or `char_pos`) is the primary data.
94
+ * The rest are cache.
95
+ *
96
+ * They can be computed from `byte_pos` (or `char_pos`), but it needs full scan from the beginning of the string (depending on the encoding).
97
+ * */
98
+ typedef struct {
99
+ int byte_pos;
100
+ int char_pos;
101
+ int line;
102
+ int column;
103
+ } position;
104
+
105
+ typedef struct {
106
+ position start;
107
+ position end;
108
+ } range;
109
+
110
+ typedef struct {
111
+ enum TokenType type;
112
+ range range;
113
+ } token;
114
+
115
+ /**
116
+ * The lexer state is the curren token.
117
+ *
118
+ * ```
119
+ * ... "a string token"
120
+ * ^ start position
121
+ * ^ current position
122
+ * ~~~~~~ Token => "a str
123
+ * ```
124
+ * */
125
+ typedef struct {
126
+ VALUE string;
127
+ int start_pos; /* The character position that defines the start of the input */
128
+ int end_pos; /* The character position that defines the end of the input */
129
+ position current; /* The current position */
130
+ position start; /* The start position of the current token */
131
+ bool first_token_of_line; /* This flag is used for tLINECOMMENT */
132
+ unsigned int last_char; /* Last peeked character */
133
+ } lexstate;
134
+
135
+ extern token NullToken;
136
+ extern position NullPosition;
137
+ extern range NULL_RANGE;
138
+
139
+ char *peek_token(lexstate *state, token tok);
140
+ int token_chars(token tok);
141
+ int token_bytes(token tok);
142
+
143
+ #define null_position_p(pos) (pos.byte_pos == -1)
144
+ #define null_range_p(range) (range.start.byte_pos == -1)
145
+ #define nonnull_pos_or(pos1, pos2) (null_position_p(pos1) ? pos2 : pos1)
146
+ #define RANGE_BYTES(range) (range.end.byte_pos - range.start.byte_pos)
147
+
148
+ const char *token_type_str(enum TokenType type);
149
+
150
+ /**
151
+ * Read next character.
152
+ * */
153
+ unsigned int peek(lexstate *state);
154
+
155
+ /**
156
+ * Skip one character.
157
+ * */
158
+ void rbs_skip(lexstate *state);
159
+
160
+ /**
161
+ * Skip n characters.
162
+ * */
163
+ void skipn(lexstate *state, size_t size);
164
+
165
+ /**
166
+ * Return new token with given type.
167
+ * */
168
+ token next_token(lexstate *state, enum TokenType type);
169
+
170
+ /**
171
+ * Return new token with EOF type.
172
+ * */
173
+ token next_eof_token(lexstate *state);
174
+
175
+ token rbsparser_next_token(lexstate *state);
176
+
177
+ void print_token(token tok);
178
+
179
+ #endif
@@ -0,0 +1,147 @@
1
+ #include "rbs_extension.h"
2
+
3
+ token rbsparser_next_token(lexstate *state) {
4
+ lexstate backup;
5
+
6
+ backup = *state;
7
+
8
+ /*!re2c
9
+ re2c:flags:u = 1;
10
+ re2c:api:style = free-form;
11
+ re2c:flags:input = custom;
12
+ re2c:define:YYCTYPE = "unsigned int";
13
+ re2c:define:YYPEEK = "peek(state)";
14
+ re2c:define:YYSKIP = "rbs_skip(state);";
15
+ re2c:define:YYBACKUP = "backup = *state;";
16
+ re2c:define:YYRESTORE = "*state = backup;";
17
+ re2c:yyfill:enable = 0;
18
+
19
+ word = [a-zA-Z0-9_];
20
+
21
+ operator = "/" | "~" | "[]=" | "!" | "!=" | "!~" | "-" | "-@" | "+" | "+@"
22
+ | "==" | "===" | "=~" | "<<" | "<=" | "<=>" | ">" | ">=" | ">>" | "%";
23
+
24
+ "(" { return next_token(state, pLPAREN); }
25
+ ")" { return next_token(state, pRPAREN); }
26
+ "[" { return next_token(state, pLBRACKET); }
27
+ "]" { return next_token(state, pRBRACKET); }
28
+ "{" { return next_token(state, pLBRACE); }
29
+ "}" { return next_token(state, pRBRACE); }
30
+ "," { return next_token(state, pCOMMA); }
31
+ "|" { return next_token(state, pBAR); }
32
+ "^" { return next_token(state, pHAT); }
33
+ "&" { return next_token(state, pAMP); }
34
+ "?" { return next_token(state, pQUESTION); }
35
+ "*" { return next_token(state, pSTAR); }
36
+ "**" { return next_token(state, pSTAR2); }
37
+ "." { return next_token(state, pDOT); }
38
+ "..." { return next_token(state, pDOT3); }
39
+ "`" { return next_token(state, tOPERATOR); }
40
+ "`" [^ :\x00] [^`\x00]* "`" { return next_token(state, tQIDENT); }
41
+ "->" { return next_token(state, pARROW); }
42
+ "=>" { return next_token(state, pFATARROW); }
43
+ "=" { return next_token(state, pEQ); }
44
+ ":" { return next_token(state, pCOLON); }
45
+ "::" { return next_token(state, pCOLON2); }
46
+ "<" { return next_token(state, pLT); }
47
+ "[]" { return next_token(state, pAREF_OPR); }
48
+ operator { return next_token(state, tOPERATOR); }
49
+
50
+ number = [0-9] [0-9_]*;
51
+ ("-"|"+")? number { return next_token(state, tINTEGER); }
52
+
53
+ "%a{" [^}\x00]* "}" { return next_token(state, tANNOTATION); }
54
+ "%a(" [^)\x00]* ")" { return next_token(state, tANNOTATION); }
55
+ "%a[" [^\]\x00]* "]" { return next_token(state, tANNOTATION); }
56
+ "%a|" [^|\x00]* "|" { return next_token(state, tANNOTATION); }
57
+ "%a<" [^>\x00]* ">" { return next_token(state, tANNOTATION); }
58
+
59
+ "#" (. \ [\x00])* {
60
+ return next_token(
61
+ state,
62
+ state->first_token_of_line ? tLINECOMMENT : tCOMMENT
63
+ );
64
+ }
65
+
66
+ "alias" { return next_token(state, kALIAS); }
67
+ "attr_accessor" { return next_token(state, kATTRACCESSOR); }
68
+ "attr_reader" { return next_token(state, kATTRREADER); }
69
+ "attr_writer" { return next_token(state, kATTRWRITER); }
70
+ "bool" { return next_token(state, kBOOL); }
71
+ "bot" { return next_token(state, kBOT); }
72
+ "class" { return next_token(state, kCLASS); }
73
+ "def" { return next_token(state, kDEF); }
74
+ "end" { return next_token(state, kEND); }
75
+ "extend" { return next_token(state, kEXTEND); }
76
+ "false" { return next_token(state, kFALSE); }
77
+ "in" { return next_token(state, kIN); }
78
+ "include" { return next_token(state, kINCLUDE); }
79
+ "instance" { return next_token(state, kINSTANCE); }
80
+ "interface" { return next_token(state, kINTERFACE); }
81
+ "module" { return next_token(state, kMODULE); }
82
+ "nil" { return next_token(state, kNIL); }
83
+ "out" { return next_token(state, kOUT); }
84
+ "prepend" { return next_token(state, kPREPEND); }
85
+ "private" { return next_token(state, kPRIVATE); }
86
+ "public" { return next_token(state, kPUBLIC); }
87
+ "self" { return next_token(state, kSELF); }
88
+ "singleton" { return next_token(state, kSINGLETON); }
89
+ "top" { return next_token(state, kTOP); }
90
+ "true" { return next_token(state, kTRUE); }
91
+ "type" { return next_token(state, kTYPE); }
92
+ "unchecked" { return next_token(state, kUNCHECKED); }
93
+ "untyped" { return next_token(state, kUNTYPED); }
94
+ "void" { return next_token(state, kVOID); }
95
+ "use" { return next_token(state, kUSE); }
96
+ "as" { return next_token(state, kAS); }
97
+ "__todo__" { return next_token(state, k__TODO__); }
98
+
99
+ unicode_char = "\\u" [0-9a-fA-F]{4};
100
+ oct_char = "\\x" [0-9a-f]{1,2};
101
+ hex_char = "\\" [0-7]{1,3};
102
+
103
+ dqstring = ["] (unicode_char | oct_char | hex_char | "\\" [^xu] | [^\\"\x00])* ["];
104
+ sqstring = ['] ("\\"['\\] | [^'\x00])* ['];
105
+
106
+ dqstring { return next_token(state, tDQSTRING); }
107
+ sqstring { return next_token(state, tSQSTRING); }
108
+ ":" dqstring { return next_token(state, tDQSYMBOL); }
109
+ ":" sqstring { return next_token(state, tSQSYMBOL); }
110
+
111
+ identifier = [a-zA-Z_] word* [!?=]?;
112
+ symbol_opr = ":|" | ":&" | ":/" | ":%" | ":~" | ":`" | ":^"
113
+ | ":==" | ":=~" | ":===" | ":!" | ":!=" | ":!~"
114
+ | ":<" | ":<=" | ":<<" | ":<=>" | ":>" | ":>=" | ":>>"
115
+ | ":-" | ":-@" | ":+" | ":+@" | ":*" | ":**" | ":[]" | ":[]=";
116
+
117
+ global_ident = [0-9]+
118
+ | "-" [a-zA-Z0-9_]
119
+ | [~*$?!@\\/;,.=:<>"&'`+]
120
+ | [^ \t\r\n:;=.,!"$%&()-+~|\\'[\]{}*/<>^\x00]+;
121
+
122
+ ":" identifier { return next_token(state, tSYMBOL); }
123
+ ":@" identifier { return next_token(state, tSYMBOL); }
124
+ ":@@" identifier { return next_token(state, tSYMBOL); }
125
+ ":$" global_ident { return next_token(state, tSYMBOL); }
126
+ symbol_opr { return next_token(state, tSYMBOL); }
127
+
128
+ [a-z] word* { return next_token(state, tLIDENT); }
129
+ [A-Z] word* { return next_token(state, tUIDENT); }
130
+ "_" [a-z0-9_] word* { return next_token(state, tULLIDENT); }
131
+ "_" [A-Z] word* { return next_token(state, tULIDENT); }
132
+ "_" { return next_token(state, tULLIDENT); }
133
+ [a-zA-Z_] word* "!" { return next_token(state, tBANGIDENT); }
134
+ [a-zA-Z_] word* "=" { return next_token(state, tEQIDENT); }
135
+
136
+ "@" [a-zA-Z_] word* { return next_token(state, tAIDENT); }
137
+ "@@" [a-zA-Z_] word* { return next_token(state, tA2IDENT); }
138
+
139
+ "$" global_ident { return next_token(state, tGIDENT); }
140
+
141
+ skip = ([ \t]+|[\r\n]);
142
+
143
+ skip { return next_token(state, tTRIVIA); }
144
+ "\x00" { return next_eof_token(state); }
145
+ * { return next_token(state, ErrorToken); }
146
+ */
147
+ }
@@ -0,0 +1,175 @@
1
+ #include "rbs_extension.h"
2
+
3
+ static const char *RBS_TOKENTYPE_NAMES[] = {
4
+ "NullType",
5
+ "pEOF",
6
+ "ErrorToken",
7
+
8
+ "pLPAREN", /* ( */
9
+ "pRPAREN", /* ) */
10
+ "pCOLON", /* : */
11
+ "pCOLON2", /* :: */
12
+ "pLBRACKET", /* [ */
13
+ "pRBRACKET", /* ] */
14
+ "pLBRACE", /* { */
15
+ "pRBRACE", /* } */
16
+ "pHAT", /* ^ */
17
+ "pARROW", /* -> */
18
+ "pFATARROW", /* => */
19
+ "pCOMMA", /* , */
20
+ "pBAR", /* | */
21
+ "pAMP", /* & */
22
+ "pSTAR", /* * */
23
+ "pSTAR2", /* ** */
24
+ "pDOT", /* . */
25
+ "pDOT3", /* ... */
26
+ "pBANG", /* ! */
27
+ "pQUESTION", /* ? */
28
+ "pLT", /* < */
29
+ "pEQ", /* = */
30
+
31
+ "kALIAS", /* alias */
32
+ "kATTRACCESSOR", /* attr_accessor */
33
+ "kATTRREADER", /* attr_reader */
34
+ "kATTRWRITER", /* attr_writer */
35
+ "kBOOL", /* bool */
36
+ "kBOT", /* bot */
37
+ "kCLASS", /* class */
38
+ "kDEF", /* def */
39
+ "kEND", /* end */
40
+ "kEXTEND", /* extend */
41
+ "kFALSE", /* kFALSE */
42
+ "kIN", /* in */
43
+ "kINCLUDE", /* include */
44
+ "kINSTANCE", /* instance */
45
+ "kINTERFACE", /* interface */
46
+ "kMODULE", /* module */
47
+ "kNIL", /* nil */
48
+ "kOUT", /* out */
49
+ "kPREPEND", /* prepend */
50
+ "kPRIVATE", /* private */
51
+ "kPUBLIC", /* public */
52
+ "kSELF", /* self */
53
+ "kSINGLETON", /* singleton */
54
+ "kTOP", /* top */
55
+ "kTRUE", /* true */
56
+ "kTYPE", /* type */
57
+ "kUNCHECKED", /* unchecked */
58
+ "kUNTYPED", /* untyped */
59
+ "kVOID", /* void */
60
+ "kUSE", /* use */
61
+ "kAS", /* as */
62
+ "k__TODO__", /* __todo__ */
63
+
64
+ "tLIDENT", /* Identifiers starting with lower case */
65
+ "tUIDENT", /* Identifiers starting with upper case */
66
+ "tULIDENT", /* Identifiers starting with `_` */
67
+ "tULLIDENT",
68
+ "tGIDENT", /* Identifiers starting with `$` */
69
+ "tAIDENT", /* Identifiers starting with `@` */
70
+ "tA2IDENT", /* Identifiers starting with `@@` */
71
+ "tBANGIDENT",
72
+ "tEQIDENT",
73
+ "tQIDENT", /* Quoted identifier */
74
+ "pAREF_OPR", /* [] */
75
+ "tOPERATOR", /* Operator identifier */
76
+
77
+ "tCOMMENT",
78
+ "tLINECOMMENT",
79
+
80
+ "tTRIVIA",
81
+
82
+ "tDQSTRING", /* Double quoted string */
83
+ "tSQSTRING", /* Single quoted string */
84
+ "tINTEGER", /* Integer */
85
+ "tSYMBOL", /* Symbol */
86
+ "tDQSYMBOL",
87
+ "tSQSYMBOL",
88
+ "tANNOTATION", /* Annotation */
89
+ };
90
+
91
+ token NullToken = { NullType };
92
+ position NullPosition = { -1, -1, -1, -1 };
93
+ range NULL_RANGE = { { -1, -1, -1, -1 }, { -1, -1, -1, -1 } };
94
+
95
+ const char *token_type_str(enum TokenType type) {
96
+ return RBS_TOKENTYPE_NAMES[type];
97
+ }
98
+
99
+ int token_chars(token tok) {
100
+ return tok.range.end.char_pos - tok.range.start.char_pos;
101
+ }
102
+
103
+ int token_bytes(token tok) {
104
+ return RANGE_BYTES(tok.range);
105
+ }
106
+
107
+ unsigned int peek(lexstate *state) {
108
+ if (state->current.char_pos == state->end_pos) {
109
+ state->last_char = '\0';
110
+ return 0;
111
+ } else {
112
+ unsigned int c = rb_enc_mbc_to_codepoint(RSTRING_PTR(state->string) + state->current.byte_pos, RSTRING_END(state->string), rb_enc_get(state->string));
113
+ state->last_char = c;
114
+ return c;
115
+ }
116
+ }
117
+
118
+ token next_token(lexstate *state, enum TokenType type) {
119
+ token t;
120
+
121
+ t.type = type;
122
+ t.range.start = state->start;
123
+ t.range.end = state->current;
124
+ state->start = state->current;
125
+ if (type != tTRIVIA) {
126
+ state->first_token_of_line = false;
127
+ }
128
+
129
+ return t;
130
+ }
131
+
132
+ token next_eof_token(lexstate *state) {
133
+ if (state->current.byte_pos == RSTRING_LEN(state->string)+1) {
134
+ // End of String
135
+ token t;
136
+ t.type = pEOF;
137
+ t.range.start = state->start;
138
+ t.range.end = state->start;
139
+ state->start = state->current;
140
+
141
+ return t;
142
+ } else {
143
+ // NULL byte in the middle of the string
144
+ return next_token(state, pEOF);
145
+ }
146
+ }
147
+
148
+ void rbs_skip(lexstate *state) {
149
+ if (!state->last_char) {
150
+ peek(state);
151
+ }
152
+ int byte_len = rb_enc_codelen(state->last_char, rb_enc_get(state->string));
153
+
154
+ state->current.char_pos += 1;
155
+ state->current.byte_pos += byte_len;
156
+
157
+ if (state->last_char == '\n') {
158
+ state->current.line += 1;
159
+ state->current.column = 0;
160
+ state->first_token_of_line = true;
161
+ } else {
162
+ state->current.column += 1;
163
+ }
164
+ }
165
+
166
+ void skipn(lexstate *state, size_t size) {
167
+ for (size_t i = 0; i < size; i ++) {
168
+ peek(state);
169
+ rbs_skip(state);
170
+ }
171
+ }
172
+
173
+ char *peek_token(lexstate *state, token tok) {
174
+ return RSTRING_PTR(state->string) + tok.range.start.byte_pos;
175
+ }