rbs 4.1.0.pre.2-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (574) hide show
  1. checksums.yaml +7 -0
  2. data/.clang-format +75 -0
  3. data/.clangd +2 -0
  4. data/.github/dependabot.yml +24 -0
  5. data/.github/workflows/bundle-update.yml +63 -0
  6. data/.github/workflows/c-check.yml +61 -0
  7. data/.github/workflows/comments.yml +37 -0
  8. data/.github/workflows/dependabot.yml +30 -0
  9. data/.github/workflows/jruby.yml +67 -0
  10. data/.github/workflows/milestone.yml +83 -0
  11. data/.github/workflows/ruby.yml +158 -0
  12. data/.github/workflows/rust.yml +184 -0
  13. data/.github/workflows/truffleruby.yml +54 -0
  14. data/.github/workflows/typecheck.yml +39 -0
  15. data/.github/workflows/wasm.yml +53 -0
  16. data/.github/workflows/windows.yml +49 -0
  17. data/.gitignore +38 -0
  18. data/.rubocop.yml +72 -0
  19. data/BSDL +22 -0
  20. data/CHANGELOG.md +2292 -0
  21. data/COPYING +56 -0
  22. data/README.md +240 -0
  23. data/Rakefile +869 -0
  24. data/Steepfile +53 -0
  25. data/config.yml +913 -0
  26. data/core/array.rbs +4142 -0
  27. data/core/basic_object.rbs +376 -0
  28. data/core/binding.rbs +148 -0
  29. data/core/builtin.rbs +278 -0
  30. data/core/class.rbs +223 -0
  31. data/core/comparable.rbs +192 -0
  32. data/core/complex.rbs +812 -0
  33. data/core/constants.rbs +96 -0
  34. data/core/data.rbs +415 -0
  35. data/core/dir.rbs +993 -0
  36. data/core/encoding.rbs +1368 -0
  37. data/core/enumerable.rbs +2506 -0
  38. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  39. data/core/enumerator/product.rbs +92 -0
  40. data/core/enumerator.rbs +705 -0
  41. data/core/env.rbs +6 -0
  42. data/core/errno.rbs +682 -0
  43. data/core/errors.rbs +789 -0
  44. data/core/exception.rbs +485 -0
  45. data/core/false_class.rbs +82 -0
  46. data/core/fiber.rbs +570 -0
  47. data/core/fiber_error.rbs +11 -0
  48. data/core/file.rbs +2045 -0
  49. data/core/file_constants.rbs +463 -0
  50. data/core/file_stat.rbs +534 -0
  51. data/core/file_test.rbs +331 -0
  52. data/core/float.rbs +1316 -0
  53. data/core/gc.rbs +788 -0
  54. data/core/global_variables.rbs +184 -0
  55. data/core/hash.rbs +2183 -0
  56. data/core/integer.rbs +1374 -0
  57. data/core/io/buffer.rbs +995 -0
  58. data/core/io/wait.rbs +48 -0
  59. data/core/io.rbs +3472 -0
  60. data/core/kernel.rbs +3172 -0
  61. data/core/marshal.rbs +207 -0
  62. data/core/match_data.rbs +637 -0
  63. data/core/math.rbs +770 -0
  64. data/core/method.rbs +422 -0
  65. data/core/module.rbs +1856 -0
  66. data/core/nil_class.rbs +210 -0
  67. data/core/numeric.rbs +832 -0
  68. data/core/object.rbs +108 -0
  69. data/core/object_space/weak_key_map.rbs +166 -0
  70. data/core/object_space.rbs +197 -0
  71. data/core/pathname.rbs +1322 -0
  72. data/core/proc.rbs +905 -0
  73. data/core/process.rbs +2316 -0
  74. data/core/ractor.rbs +924 -0
  75. data/core/random.rbs +255 -0
  76. data/core/range.rbs +1209 -0
  77. data/core/rational.rbs +502 -0
  78. data/core/rb_config.rbs +88 -0
  79. data/core/rbs/ops.rbs +154 -0
  80. data/core/rbs/unnamed/argf.rbs +1236 -0
  81. data/core/rbs/unnamed/env_class.rbs +1214 -0
  82. data/core/rbs/unnamed/main_class.rbs +123 -0
  83. data/core/rbs/unnamed/random.rbs +186 -0
  84. data/core/refinement.rbs +59 -0
  85. data/core/regexp.rbs +1974 -0
  86. data/core/ruby.rbs +53 -0
  87. data/core/ruby_vm.rbs +809 -0
  88. data/core/rubygems/basic_specification.rbs +6 -0
  89. data/core/rubygems/config_file.rbs +38 -0
  90. data/core/rubygems/dependency_installer.rbs +6 -0
  91. data/core/rubygems/errors.rbs +109 -0
  92. data/core/rubygems/installer.rbs +15 -0
  93. data/core/rubygems/path_support.rbs +6 -0
  94. data/core/rubygems/platform.rbs +7 -0
  95. data/core/rubygems/request_set.rbs +49 -0
  96. data/core/rubygems/requirement.rbs +148 -0
  97. data/core/rubygems/rubygems.rbs +1105 -0
  98. data/core/rubygems/source_list.rbs +15 -0
  99. data/core/rubygems/specification.rbs +23 -0
  100. data/core/rubygems/stream_ui.rbs +5 -0
  101. data/core/rubygems/uninstaller.rbs +10 -0
  102. data/core/rubygems/version.rbs +293 -0
  103. data/core/set.rbs +751 -0
  104. data/core/signal.rbs +110 -0
  105. data/core/string.rbs +5532 -0
  106. data/core/struct.rbs +668 -0
  107. data/core/symbol.rbs +482 -0
  108. data/core/thread.rbs +1826 -0
  109. data/core/thread_group.rbs +79 -0
  110. data/core/time.rbs +1793 -0
  111. data/core/trace_point.rbs +483 -0
  112. data/core/true_class.rbs +98 -0
  113. data/core/unbound_method.rbs +337 -0
  114. data/core/warning.rbs +87 -0
  115. data/docs/CONTRIBUTING.md +107 -0
  116. data/docs/aliases.md +79 -0
  117. data/docs/architecture.md +110 -0
  118. data/docs/collection.md +192 -0
  119. data/docs/config.md +171 -0
  120. data/docs/data_and_struct.md +86 -0
  121. data/docs/encoding.md +56 -0
  122. data/docs/gem.md +56 -0
  123. data/docs/inline.md +634 -0
  124. data/docs/rbs_by_example.md +309 -0
  125. data/docs/repo.md +125 -0
  126. data/docs/rust.md +96 -0
  127. data/docs/sigs.md +167 -0
  128. data/docs/stdlib.md +147 -0
  129. data/docs/syntax.md +940 -0
  130. data/docs/tools.md +17 -0
  131. data/docs/type_fingerprint.md +21 -0
  132. data/docs/wasm_serialization.md +80 -0
  133. data/exe/rbs +7 -0
  134. data/ext/rbs_extension/ast_translation.c +1855 -0
  135. data/ext/rbs_extension/ast_translation.h +41 -0
  136. data/ext/rbs_extension/class_constants.c +187 -0
  137. data/ext/rbs_extension/class_constants.h +104 -0
  138. data/ext/rbs_extension/compat.h +10 -0
  139. data/ext/rbs_extension/extconf.rb +40 -0
  140. data/ext/rbs_extension/legacy_location.c +294 -0
  141. data/ext/rbs_extension/legacy_location.h +82 -0
  142. data/ext/rbs_extension/main.c +613 -0
  143. data/ext/rbs_extension/rbs_extension.h +16 -0
  144. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  145. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  146. data/goodcheck.yml +91 -0
  147. data/include/rbs/ast.h +1047 -0
  148. data/include/rbs/defines.h +99 -0
  149. data/include/rbs/lexer.h +207 -0
  150. data/include/rbs/location.h +40 -0
  151. data/include/rbs/parser.h +153 -0
  152. data/include/rbs/serialize.h +39 -0
  153. data/include/rbs/string.h +47 -0
  154. data/include/rbs/util/rbs_allocator.h +59 -0
  155. data/include/rbs/util/rbs_assert.h +20 -0
  156. data/include/rbs/util/rbs_buffer.h +83 -0
  157. data/include/rbs/util/rbs_constant_pool.h +155 -0
  158. data/include/rbs/util/rbs_encoding.h +282 -0
  159. data/include/rbs/util/rbs_unescape.h +24 -0
  160. data/include/rbs.h +14 -0
  161. data/lib/rbs/ancestor_graph.rb +92 -0
  162. data/lib/rbs/annotate/annotations.rb +199 -0
  163. data/lib/rbs/annotate/formatter.rb +82 -0
  164. data/lib/rbs/annotate/rdoc_annotator.rb +398 -0
  165. data/lib/rbs/annotate/rdoc_source.rb +131 -0
  166. data/lib/rbs/annotate.rb +8 -0
  167. data/lib/rbs/ast/annotation.rb +29 -0
  168. data/lib/rbs/ast/comment.rb +29 -0
  169. data/lib/rbs/ast/declarations.rb +472 -0
  170. data/lib/rbs/ast/directives.rb +49 -0
  171. data/lib/rbs/ast/members.rb +451 -0
  172. data/lib/rbs/ast/ruby/annotations.rb +451 -0
  173. data/lib/rbs/ast/ruby/comment_block.rb +247 -0
  174. data/lib/rbs/ast/ruby/declarations.rb +291 -0
  175. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  176. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  177. data/lib/rbs/ast/ruby/members.rb +762 -0
  178. data/lib/rbs/ast/type_param.rb +235 -0
  179. data/lib/rbs/ast/visitor.rb +137 -0
  180. data/lib/rbs/buffer.rb +189 -0
  181. data/lib/rbs/builtin_names.rb +58 -0
  182. data/lib/rbs/cli/colored_io.rb +48 -0
  183. data/lib/rbs/cli/diff.rb +84 -0
  184. data/lib/rbs/cli/validate.rb +294 -0
  185. data/lib/rbs/cli.rb +1253 -0
  186. data/lib/rbs/collection/cleaner.rb +38 -0
  187. data/lib/rbs/collection/config/lockfile.rb +92 -0
  188. data/lib/rbs/collection/config/lockfile_generator.rb +269 -0
  189. data/lib/rbs/collection/config.rb +81 -0
  190. data/lib/rbs/collection/installer.rb +32 -0
  191. data/lib/rbs/collection/sources/base.rb +14 -0
  192. data/lib/rbs/collection/sources/git.rb +265 -0
  193. data/lib/rbs/collection/sources/local.rb +81 -0
  194. data/lib/rbs/collection/sources/rubygems.rb +48 -0
  195. data/lib/rbs/collection/sources/stdlib.rb +50 -0
  196. data/lib/rbs/collection/sources.rb +38 -0
  197. data/lib/rbs/collection.rb +16 -0
  198. data/lib/rbs/constant.rb +28 -0
  199. data/lib/rbs/definition.rb +415 -0
  200. data/lib/rbs/definition_builder/ancestor_builder.rb +678 -0
  201. data/lib/rbs/definition_builder/method_builder.rb +295 -0
  202. data/lib/rbs/definition_builder.rb +1054 -0
  203. data/lib/rbs/diff.rb +131 -0
  204. data/lib/rbs/environment/class_entry.rb +69 -0
  205. data/lib/rbs/environment/module_entry.rb +66 -0
  206. data/lib/rbs/environment/use_map.rb +77 -0
  207. data/lib/rbs/environment.rb +1028 -0
  208. data/lib/rbs/environment_loader.rb +167 -0
  209. data/lib/rbs/environment_walker.rb +155 -0
  210. data/lib/rbs/errors.rb +634 -0
  211. data/lib/rbs/factory.rb +18 -0
  212. data/lib/rbs/file_finder.rb +28 -0
  213. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  214. data/lib/rbs/inline_parser.rb +568 -0
  215. data/lib/rbs/location_aux.rb +170 -0
  216. data/lib/rbs/locator.rb +247 -0
  217. data/lib/rbs/method_type.rb +145 -0
  218. data/lib/rbs/namespace.rb +154 -0
  219. data/lib/rbs/parser/lex_result.rb +15 -0
  220. data/lib/rbs/parser/token.rb +23 -0
  221. data/lib/rbs/parser_aux.rb +142 -0
  222. data/lib/rbs/prototype/helpers.rb +197 -0
  223. data/lib/rbs/prototype/node_usage.rb +99 -0
  224. data/lib/rbs/prototype/rb.rb +816 -0
  225. data/lib/rbs/prototype/rbi.rb +625 -0
  226. data/lib/rbs/prototype/runtime/helpers.rb +59 -0
  227. data/lib/rbs/prototype/runtime/reflection.rb +19 -0
  228. data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
  229. data/lib/rbs/prototype/runtime.rb +680 -0
  230. data/lib/rbs/repository.rb +127 -0
  231. data/lib/rbs/resolver/constant_resolver.rb +219 -0
  232. data/lib/rbs/resolver/type_name_resolver.rb +167 -0
  233. data/lib/rbs/rewriter.rb +70 -0
  234. data/lib/rbs/sorter.rb +198 -0
  235. data/lib/rbs/source.rb +99 -0
  236. data/lib/rbs/substitution.rb +83 -0
  237. data/lib/rbs/subtractor.rb +204 -0
  238. data/lib/rbs/test/errors.rb +80 -0
  239. data/lib/rbs/test/guaranteed.rb +30 -0
  240. data/lib/rbs/test/hook.rb +212 -0
  241. data/lib/rbs/test/observer.rb +19 -0
  242. data/lib/rbs/test/setup.rb +84 -0
  243. data/lib/rbs/test/setup_helper.rb +50 -0
  244. data/lib/rbs/test/tester.rb +167 -0
  245. data/lib/rbs/test/type_check.rb +457 -0
  246. data/lib/rbs/test.rb +112 -0
  247. data/lib/rbs/type_alias_dependency.rb +100 -0
  248. data/lib/rbs/type_alias_regularity.rb +126 -0
  249. data/lib/rbs/type_name.rb +122 -0
  250. data/lib/rbs/types.rb +1604 -0
  251. data/lib/rbs/unit_test/convertibles.rb +177 -0
  252. data/lib/rbs/unit_test/spy.rb +138 -0
  253. data/lib/rbs/unit_test/type_assertions.rb +383 -0
  254. data/lib/rbs/unit_test/with_aliases.rb +145 -0
  255. data/lib/rbs/unit_test.rb +6 -0
  256. data/lib/rbs/validator.rb +186 -0
  257. data/lib/rbs/variance_calculator.rb +189 -0
  258. data/lib/rbs/vendorer.rb +71 -0
  259. data/lib/rbs/version.rb +5 -0
  260. data/lib/rbs/wasm/deserializer.rb +213 -0
  261. data/lib/rbs/wasm/jars/asm-analysis.jar +0 -0
  262. data/lib/rbs/wasm/jars/asm-commons.jar +0 -0
  263. data/lib/rbs/wasm/jars/asm-tree.jar +0 -0
  264. data/lib/rbs/wasm/jars/asm-util.jar +0 -0
  265. data/lib/rbs/wasm/jars/asm.jar +0 -0
  266. data/lib/rbs/wasm/jars/compiler.jar +0 -0
  267. data/lib/rbs/wasm/jars/log.jar +0 -0
  268. data/lib/rbs/wasm/jars/runtime.jar +0 -0
  269. data/lib/rbs/wasm/jars/wasi.jar +0 -0
  270. data/lib/rbs/wasm/jars/wasm.jar +0 -0
  271. data/lib/rbs/wasm/location.rb +61 -0
  272. data/lib/rbs/wasm/parser.rb +137 -0
  273. data/lib/rbs/wasm/rbs_parser.wasm +0 -0
  274. data/lib/rbs/wasm/runtime.rb +217 -0
  275. data/lib/rbs/wasm/serialization_schema.rb +110 -0
  276. data/lib/rbs/writer.rb +424 -0
  277. data/lib/rbs.rb +117 -0
  278. data/lib/rdoc/discover.rb +20 -0
  279. data/lib/rdoc_plugin/parser.rb +163 -0
  280. data/rbs.gemspec +68 -0
  281. data/schema/annotation.json +14 -0
  282. data/schema/comment.json +26 -0
  283. data/schema/decls.json +326 -0
  284. data/schema/function.json +87 -0
  285. data/schema/location.json +56 -0
  286. data/schema/members.json +266 -0
  287. data/schema/methodType.json +50 -0
  288. data/schema/typeParam.json +52 -0
  289. data/schema/types.json +317 -0
  290. data/sig/ancestor_builder.rbs +163 -0
  291. data/sig/ancestor_graph.rbs +60 -0
  292. data/sig/annotate/annotations.rbs +102 -0
  293. data/sig/annotate/formatter.rbs +24 -0
  294. data/sig/annotate/rdoc_annotater.rbs +85 -0
  295. data/sig/annotate/rdoc_source.rbs +32 -0
  296. data/sig/annotation.rbs +27 -0
  297. data/sig/ast/ruby/annotations.rbs +470 -0
  298. data/sig/ast/ruby/comment_block.rbs +127 -0
  299. data/sig/ast/ruby/declarations.rbs +158 -0
  300. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  301. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  302. data/sig/ast/ruby/members.rbs +198 -0
  303. data/sig/buffer.rbs +108 -0
  304. data/sig/builtin_names.rbs +44 -0
  305. data/sig/cli/colored_io.rbs +15 -0
  306. data/sig/cli/diff.rbs +15 -0
  307. data/sig/cli/validate.rbs +47 -0
  308. data/sig/cli.rbs +89 -0
  309. data/sig/collection/cleaner.rbs +13 -0
  310. data/sig/collection/config/lockfile.rbs +74 -0
  311. data/sig/collection/config/lockfile_generator.rbs +68 -0
  312. data/sig/collection/config.rbs +46 -0
  313. data/sig/collection/installer.rbs +17 -0
  314. data/sig/collection/sources.rbs +214 -0
  315. data/sig/collection.rbs +4 -0
  316. data/sig/comment.rbs +26 -0
  317. data/sig/constant.rbs +21 -0
  318. data/sig/declarations.rbs +274 -0
  319. data/sig/definition.rbs +232 -0
  320. data/sig/definition_builder.rbs +181 -0
  321. data/sig/diff.rbs +28 -0
  322. data/sig/directives.rbs +77 -0
  323. data/sig/environment/class_entry.rbs +50 -0
  324. data/sig/environment/module_entry.rbs +50 -0
  325. data/sig/environment.rbs +286 -0
  326. data/sig/environment_loader.rbs +111 -0
  327. data/sig/environment_walker.rbs +65 -0
  328. data/sig/errors.rbs +408 -0
  329. data/sig/factory.rbs +5 -0
  330. data/sig/file_finder.rbs +28 -0
  331. data/sig/inline_parser/comment_association.rbs +71 -0
  332. data/sig/inline_parser.rbs +126 -0
  333. data/sig/location.rbs +135 -0
  334. data/sig/locator.rbs +56 -0
  335. data/sig/manifest.yaml +5 -0
  336. data/sig/members.rbs +258 -0
  337. data/sig/method_builder.rbs +89 -0
  338. data/sig/method_types.rbs +58 -0
  339. data/sig/namespace.rbs +161 -0
  340. data/sig/parser.rbs +164 -0
  341. data/sig/prototype/helpers.rbs +29 -0
  342. data/sig/prototype/node_usage.rbs +20 -0
  343. data/sig/prototype/rb.rbs +96 -0
  344. data/sig/prototype/rbi.rbs +75 -0
  345. data/sig/prototype/runtime.rbs +182 -0
  346. data/sig/rbs.rbs +21 -0
  347. data/sig/rdoc/rbs.rbs +67 -0
  348. data/sig/repository.rbs +85 -0
  349. data/sig/resolver/constant_resolver.rbs +92 -0
  350. data/sig/resolver/context.rbs +34 -0
  351. data/sig/resolver/type_name_resolver.rbs +61 -0
  352. data/sig/rewriter.rbs +45 -0
  353. data/sig/shims/bundler.rbs +38 -0
  354. data/sig/shims/enumerable.rbs +5 -0
  355. data/sig/shims/rubygems.rbs +19 -0
  356. data/sig/sorter.rbs +41 -0
  357. data/sig/source.rbs +48 -0
  358. data/sig/substitution.rbs +48 -0
  359. data/sig/subtractor.rbs +37 -0
  360. data/sig/test/errors.rbs +52 -0
  361. data/sig/test/guranteed.rbs +9 -0
  362. data/sig/test/type_check.rbs +19 -0
  363. data/sig/test.rbs +82 -0
  364. data/sig/type_alias_dependency.rbs +53 -0
  365. data/sig/type_alias_regularity.rbs +98 -0
  366. data/sig/type_param.rbs +115 -0
  367. data/sig/typename.rbs +89 -0
  368. data/sig/types.rbs +578 -0
  369. data/sig/unit_test/convertibles.rbs +154 -0
  370. data/sig/unit_test/spy.rbs +22 -0
  371. data/sig/unit_test/type_assertions.rbs +211 -0
  372. data/sig/unit_test/with_aliases.rbs +136 -0
  373. data/sig/use_map.rbs +35 -0
  374. data/sig/util.rbs +9 -0
  375. data/sig/validator.rbs +63 -0
  376. data/sig/variance_calculator.rbs +87 -0
  377. data/sig/vendorer.rbs +51 -0
  378. data/sig/version.rbs +3 -0
  379. data/sig/visitor.rbs +47 -0
  380. data/sig/wasm/deserializer.rbs +66 -0
  381. data/sig/wasm/serialization_schema.rbs +13 -0
  382. data/sig/writer.rbs +127 -0
  383. data/src/ast.c +1628 -0
  384. data/src/lexer.c +3217 -0
  385. data/src/lexer.re +155 -0
  386. data/src/lexstate.c +217 -0
  387. data/src/location.c +31 -0
  388. data/src/parser.c +4255 -0
  389. data/src/serialize.c +958 -0
  390. data/src/string.c +41 -0
  391. data/src/util/rbs_allocator.c +162 -0
  392. data/src/util/rbs_assert.c +19 -0
  393. data/src/util/rbs_buffer.c +54 -0
  394. data/src/util/rbs_constant_pool.c +268 -0
  395. data/src/util/rbs_encoding.c +21308 -0
  396. data/src/util/rbs_unescape.c +167 -0
  397. data/stdlib/abbrev/0/abbrev.rbs +66 -0
  398. data/stdlib/abbrev/0/array.rbs +26 -0
  399. data/stdlib/base64/0/base64.rbs +355 -0
  400. data/stdlib/benchmark/0/benchmark.rbs +452 -0
  401. data/stdlib/bigdecimal/0/big_decimal.rbs +1647 -0
  402. data/stdlib/bigdecimal-math/0/big_math.rbs +280 -0
  403. data/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
  404. data/stdlib/cgi/0/core.rbs +911 -0
  405. data/stdlib/cgi/0/manifest.yaml +4 -0
  406. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  407. data/stdlib/coverage/0/coverage.rbs +266 -0
  408. data/stdlib/csv/0/csv.rbs +3776 -0
  409. data/stdlib/csv/0/manifest.yaml +3 -0
  410. data/stdlib/date/0/date.rbs +1598 -0
  411. data/stdlib/date/0/date_time.rbs +617 -0
  412. data/stdlib/date/0/time.rbs +26 -0
  413. data/stdlib/dbm/0/dbm.rbs +421 -0
  414. data/stdlib/delegate/0/delegator.rbs +187 -0
  415. data/stdlib/delegate/0/kernel.rbs +47 -0
  416. data/stdlib/delegate/0/simple_delegator.rbs +96 -0
  417. data/stdlib/did_you_mean/0/did_you_mean.rbs +344 -0
  418. data/stdlib/digest/0/digest.rbs +687 -0
  419. data/stdlib/erb/0/erb.rbs +933 -0
  420. data/stdlib/etc/0/etc.rbs +884 -0
  421. data/stdlib/fileutils/0/fileutils.rbs +1753 -0
  422. data/stdlib/find/0/find.rbs +49 -0
  423. data/stdlib/forwardable/0/forwardable.rbs +271 -0
  424. data/stdlib/io-console/0/io-console.rbs +414 -0
  425. data/stdlib/ipaddr/0/ipaddr.rbs +436 -0
  426. data/stdlib/json/0/json.rbs +1963 -0
  427. data/stdlib/kconv/0/kconv.rbs +166 -0
  428. data/stdlib/logger/0/formatter.rbs +45 -0
  429. data/stdlib/logger/0/log_device.rbs +100 -0
  430. data/stdlib/logger/0/logger.rbs +796 -0
  431. data/stdlib/logger/0/manifest.yaml +2 -0
  432. data/stdlib/logger/0/period.rbs +17 -0
  433. data/stdlib/logger/0/severity.rbs +34 -0
  434. data/stdlib/minitest/0/kernel.rbs +42 -0
  435. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
  436. data/stdlib/minitest/0/minitest/assertion.rbs +17 -0
  437. data/stdlib/minitest/0/minitest/assertions.rbs +590 -0
  438. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
  439. data/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
  440. data/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
  441. data/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
  442. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  443. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  444. data/stdlib/minitest/0/minitest/expectation.rbs +2 -0
  445. data/stdlib/minitest/0/minitest/expectations.rbs +21 -0
  446. data/stdlib/minitest/0/minitest/guard.rbs +64 -0
  447. data/stdlib/minitest/0/minitest/mock.rbs +64 -0
  448. data/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
  449. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
  450. data/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
  451. data/stdlib/minitest/0/minitest/parallel.rbs +2 -0
  452. data/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
  453. data/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
  454. data/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
  455. data/stdlib/minitest/0/minitest/reportable.rbs +53 -0
  456. data/stdlib/minitest/0/minitest/reporter.rbs +5 -0
  457. data/stdlib/minitest/0/minitest/result.rbs +28 -0
  458. data/stdlib/minitest/0/minitest/runnable.rbs +163 -0
  459. data/stdlib/minitest/0/minitest/skip.rbs +6 -0
  460. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
  461. data/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
  462. data/stdlib/minitest/0/minitest/spec.rbs +11 -0
  463. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
  464. data/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
  465. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
  466. data/stdlib/minitest/0/minitest/test.rbs +69 -0
  467. data/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
  468. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  469. data/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
  470. data/stdlib/minitest/0/minitest/unit.rbs +4 -0
  471. data/stdlib/minitest/0/minitest.rbs +115 -0
  472. data/stdlib/monitor/0/monitor.rbs +363 -0
  473. data/stdlib/mutex_m/0/mutex_m.rbs +104 -0
  474. data/stdlib/net-http/0/manifest.yaml +3 -0
  475. data/stdlib/net-http/0/net-http.rbs +5580 -0
  476. data/stdlib/net-protocol/0/manifest.yaml +2 -0
  477. data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  478. data/stdlib/net-smtp/0/manifest.yaml +2 -0
  479. data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  480. data/stdlib/nkf/0/nkf.rbs +402 -0
  481. data/stdlib/objspace/0/objspace.rbs +470 -0
  482. data/stdlib/observable/0/observable.rbs +217 -0
  483. data/stdlib/open-uri/0/manifest.yaml +4 -0
  484. data/stdlib/open-uri/0/open-uri.rbs +433 -0
  485. data/stdlib/open3/0/open3.rbs +606 -0
  486. data/stdlib/openssl/0/manifest.yaml +3 -0
  487. data/stdlib/openssl/0/openssl.rbs +12231 -0
  488. data/stdlib/optparse/0/optparse.rbs +1734 -0
  489. data/stdlib/pathname/0/pathname.rbs +36 -0
  490. data/stdlib/pp/0/manifest.yaml +2 -0
  491. data/stdlib/pp/0/pp.rbs +301 -0
  492. data/stdlib/prettyprint/0/prettyprint.rbs +383 -0
  493. data/stdlib/pstore/0/pstore.rbs +608 -0
  494. data/stdlib/psych/0/core_ext.rbs +12 -0
  495. data/stdlib/psych/0/dbm.rbs +237 -0
  496. data/stdlib/psych/0/manifest.yaml +3 -0
  497. data/stdlib/psych/0/psych.rbs +455 -0
  498. data/stdlib/psych/0/store.rbs +57 -0
  499. data/stdlib/pty/0/pty.rbs +240 -0
  500. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  501. data/stdlib/rdoc/0/code_object.rbs +52 -0
  502. data/stdlib/rdoc/0/comment.rbs +61 -0
  503. data/stdlib/rdoc/0/context.rbs +153 -0
  504. data/stdlib/rdoc/0/markup.rbs +117 -0
  505. data/stdlib/rdoc/0/options.rbs +76 -0
  506. data/stdlib/rdoc/0/parser.rbs +56 -0
  507. data/stdlib/rdoc/0/rdoc.rbs +393 -0
  508. data/stdlib/rdoc/0/ri.rbs +17 -0
  509. data/stdlib/rdoc/0/store.rbs +48 -0
  510. data/stdlib/rdoc/0/top_level.rbs +97 -0
  511. data/stdlib/resolv/0/manifest.yaml +3 -0
  512. data/stdlib/resolv/0/resolv.rbs +1787 -0
  513. data/stdlib/ripper/0/ripper.rbs +1654 -0
  514. data/stdlib/securerandom/0/manifest.yaml +2 -0
  515. data/stdlib/securerandom/0/securerandom.rbs +49 -0
  516. data/stdlib/shellwords/0/shellwords.rbs +229 -0
  517. data/stdlib/singleton/0/singleton.rbs +134 -0
  518. data/stdlib/socket/0/addrinfo.rbs +666 -0
  519. data/stdlib/socket/0/basic_socket.rbs +590 -0
  520. data/stdlib/socket/0/constants.rbs +2295 -0
  521. data/stdlib/socket/0/ip_socket.rbs +94 -0
  522. data/stdlib/socket/0/socket.rbs +4170 -0
  523. data/stdlib/socket/0/socket_error.rbs +5 -0
  524. data/stdlib/socket/0/tcp_server.rbs +192 -0
  525. data/stdlib/socket/0/tcp_socket.rbs +87 -0
  526. data/stdlib/socket/0/udp_socket.rbs +133 -0
  527. data/stdlib/socket/0/unix_server.rbs +169 -0
  528. data/stdlib/socket/0/unix_socket.rbs +172 -0
  529. data/stdlib/stringio/0/stringio.rbs +1681 -0
  530. data/stdlib/strscan/0/string_scanner.rbs +1648 -0
  531. data/stdlib/tempfile/0/tempfile.rbs +483 -0
  532. data/stdlib/time/0/time.rbs +434 -0
  533. data/stdlib/timeout/0/timeout.rbs +137 -0
  534. data/stdlib/tmpdir/0/tmpdir.rbs +69 -0
  535. data/stdlib/tsort/0/cyclic.rbs +8 -0
  536. data/stdlib/tsort/0/interfaces.rbs +20 -0
  537. data/stdlib/tsort/0/tsort.rbs +410 -0
  538. data/stdlib/uri/0/common.rbs +621 -0
  539. data/stdlib/uri/0/file.rbs +118 -0
  540. data/stdlib/uri/0/ftp.rbs +13 -0
  541. data/stdlib/uri/0/generic.rbs +1116 -0
  542. data/stdlib/uri/0/http.rbs +104 -0
  543. data/stdlib/uri/0/https.rbs +14 -0
  544. data/stdlib/uri/0/ldap.rbs +230 -0
  545. data/stdlib/uri/0/ldaps.rbs +14 -0
  546. data/stdlib/uri/0/mailto.rbs +92 -0
  547. data/stdlib/uri/0/rfc2396_parser.rbs +189 -0
  548. data/stdlib/uri/0/rfc3986_parser.rbs +2 -0
  549. data/stdlib/uri/0/ws.rbs +13 -0
  550. data/stdlib/uri/0/wss.rbs +9 -0
  551. data/stdlib/yaml/0/manifest.yaml +2 -0
  552. data/stdlib/yaml/0/yaml.rbs +1 -0
  553. data/stdlib/zlib/0/buf_error.rbs +10 -0
  554. data/stdlib/zlib/0/data_error.rbs +10 -0
  555. data/stdlib/zlib/0/deflate.rbs +211 -0
  556. data/stdlib/zlib/0/error.rbs +20 -0
  557. data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  558. data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  559. data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  560. data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  561. data/stdlib/zlib/0/gzip_file.rbs +156 -0
  562. data/stdlib/zlib/0/gzip_reader.rbs +293 -0
  563. data/stdlib/zlib/0/gzip_writer.rbs +168 -0
  564. data/stdlib/zlib/0/inflate.rbs +180 -0
  565. data/stdlib/zlib/0/mem_error.rbs +10 -0
  566. data/stdlib/zlib/0/need_dict.rbs +13 -0
  567. data/stdlib/zlib/0/stream_end.rbs +11 -0
  568. data/stdlib/zlib/0/stream_error.rbs +11 -0
  569. data/stdlib/zlib/0/version_error.rbs +11 -0
  570. data/stdlib/zlib/0/zlib.rbs +449 -0
  571. data/stdlib/zlib/0/zstream.rbs +201 -0
  572. data/wasm/README.md +59 -0
  573. data/wasm/rbs_wasm.c +411 -0
  574. metadata +660 -0
@@ -0,0 +1,235 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module AST
5
+ class TypeParam
6
+ attr_reader :name, :variance, :location, :upper_bound_type, :lower_bound_type, :default_type
7
+
8
+ def initialize(name:, variance:, upper_bound:, lower_bound:, location:, default_type: nil, unchecked: false)
9
+ @name = name
10
+ @variance = variance
11
+ @upper_bound_type = upper_bound
12
+ @lower_bound_type = lower_bound
13
+ @location = location
14
+ @default_type = default_type
15
+ @unchecked = unchecked
16
+ end
17
+
18
+ def upper_bound
19
+ case upper_bound_type
20
+ when Types::ClassInstance, Types::ClassSingleton, Types::Interface
21
+ upper_bound_type
22
+ end
23
+ end
24
+
25
+ def lower_bound
26
+ case lower_bound_type
27
+ when Types::ClassInstance, Types::ClassSingleton, Types::Interface
28
+ lower_bound_type
29
+ end
30
+ end
31
+
32
+ def unchecked!(value = true)
33
+ @unchecked = value ? true : false
34
+ self
35
+ end
36
+
37
+ def unchecked?
38
+ @unchecked
39
+ end
40
+
41
+ def ==(other)
42
+ other.is_a?(TypeParam) &&
43
+ other.name == name &&
44
+ other.variance == variance &&
45
+ other.upper_bound_type == upper_bound_type &&
46
+ other.lower_bound_type == lower_bound_type &&
47
+ other.default_type == default_type &&
48
+ other.unchecked? == unchecked?
49
+ end
50
+
51
+ alias eql? ==
52
+
53
+ def hash
54
+ self.class.hash ^ name.hash ^ variance.hash ^ upper_bound_type.hash ^ lower_bound_type.hash ^ unchecked?.hash ^ default_type.hash
55
+ end
56
+
57
+ def to_json(state = JSON::State.new)
58
+ {
59
+ name: name,
60
+ variance: variance,
61
+ unchecked: unchecked?,
62
+ location: location,
63
+ upper_bound: upper_bound_type,
64
+ lower_bound: lower_bound_type,
65
+ default_type: default_type
66
+ }.to_json(state)
67
+ end
68
+
69
+ def map_type(&block)
70
+ if b = upper_bound_type
71
+ _upper_bound_type = yield(b)
72
+ end
73
+
74
+ if b = lower_bound_type
75
+ _lower_bound_type = yield(b)
76
+ end
77
+
78
+ if dt = default_type
79
+ _default_type = yield(dt)
80
+ end
81
+
82
+ TypeParam.new(
83
+ name: name,
84
+ variance: variance,
85
+ upper_bound: _upper_bound_type,
86
+ lower_bound: _lower_bound_type,
87
+ location: location,
88
+ default_type: _default_type
89
+ ).unchecked!(unchecked?)
90
+ end
91
+
92
+ def self.resolve_variables(params)
93
+ return if params.empty?
94
+
95
+ vars = Set.new(params.map(&:name))
96
+
97
+ params.map! do |param|
98
+ param.map_type {|bound| _ = subst_var(vars, bound) }
99
+ end
100
+ end
101
+
102
+ def self.subst_var(vars, type)
103
+ case type
104
+ when Types::ClassInstance
105
+ namespace = type.name.namespace
106
+ if namespace.relative? && namespace.empty? && vars.member?(type.name.name)
107
+ return Types::Variable.new(name: type.name.name, location: type.location)
108
+ end
109
+ end
110
+
111
+ type.map_type {|t| subst_var(vars, t) }
112
+ end
113
+
114
+ def self.rename(params, new_names:)
115
+ raise unless params.size == new_names.size
116
+
117
+ subst = Substitution.build(new_names, Types::Variable.build(new_names))
118
+
119
+ params.map.with_index do |param, index|
120
+ new_name = new_names[index]
121
+
122
+ TypeParam.new(
123
+ name: new_name,
124
+ variance: param.variance,
125
+ upper_bound: param.upper_bound_type&.map_type {|type| type.sub(subst) },
126
+ lower_bound: param.lower_bound_type&.map_type {|type| type.sub(subst) },
127
+ location: param.location,
128
+ default_type: param.default_type&.map_type {|type| type.sub(subst) }
129
+ ).unchecked!(param.unchecked?)
130
+ end
131
+ end
132
+
133
+ def to_s
134
+ s = +""
135
+
136
+ if unchecked?
137
+ s << "unchecked "
138
+ end
139
+
140
+ case variance
141
+ when :invariant
142
+ # nop
143
+ when :covariant
144
+ s << "out "
145
+ when :contravariant
146
+ s << "in "
147
+ end
148
+
149
+ s << name.to_s
150
+
151
+ if type = upper_bound_type
152
+ s << " < #{type}"
153
+ end
154
+
155
+ if type = lower_bound_type
156
+ s << " > #{type}"
157
+ end
158
+
159
+ if dt = default_type
160
+ s << " = #{dt}"
161
+ end
162
+
163
+ s
164
+ end
165
+
166
+ def self.application(params, args)
167
+ if params.empty?
168
+ return nil
169
+ end
170
+
171
+ optional_params, required_params = params.partition {|param| param.default_type }
172
+
173
+ param_subst = Substitution.new()
174
+ app_subst = Substitution.new()
175
+
176
+ required_params.zip(args.take(required_params.size)).each do |param, arg|
177
+ arg ||= Types::Bases::Any.new(location: nil)
178
+ param_subst.add(from: param.name, to: arg)
179
+ app_subst.add(from: param.name, to: arg)
180
+ end
181
+
182
+ optional_params.each do |param|
183
+ param_subst.add(from: param.name, to: Types::Bases::Any.new(location: nil))
184
+ end
185
+
186
+ optional_params.zip(args.drop(required_params.size)).each do |param, arg|
187
+ if arg
188
+ app_subst.add(from: param.name, to: arg)
189
+ else
190
+ param.default_type or raise
191
+ app_subst.add(from: param.name, to: param.default_type.sub(param_subst))
192
+ end
193
+ end
194
+
195
+ app_subst
196
+ end
197
+
198
+ def self.normalize_args(params, args)
199
+ app = application(params, args) or return args
200
+
201
+ min_count = params.count { _1.default_type.nil? }
202
+ unless min_count <= args.size && args.size <= params.size
203
+ return args
204
+ end
205
+
206
+ params.zip(args).filter_map do |param, arg|
207
+ if arg
208
+ arg
209
+ else
210
+ if param.default_type
211
+ param.default_type.sub(app)
212
+ else
213
+ Types::Bases::Any.new(location: nil)
214
+ end
215
+ end
216
+ end
217
+ end
218
+
219
+ def self.validate(type_params)
220
+ optionals = type_params.filter {|param| param.default_type }
221
+
222
+ optional_param_names = optionals.map(&:name).sort
223
+
224
+ optionals.filter! do |param|
225
+ default_type = param.default_type or raise
226
+ optional_param_names.any? { default_type.free_variables.include?(_1) }
227
+ end
228
+
229
+ unless optionals.empty?
230
+ optionals
231
+ end
232
+ end
233
+ end
234
+ end
235
+ end
@@ -0,0 +1,137 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module AST
5
+ # The Visitor class implements the Visitor pattern for traversing the RBS Abstract Syntax Tree (AST).
6
+ #
7
+ # It provides methods to visit each type of node in the AST, allowing for custom processing of each node type.
8
+ #
9
+ # This class is designed to be subclassed, with specific visit methods overridden to implement custom behavior for
10
+ # different node types.
11
+ #
12
+ # Example usage:
13
+ #
14
+ # ~~~rb
15
+ # class MyVisitor < RBS::AST::Visitor
16
+ # def visit_declaration_class(node)
17
+ # puts "Visiting class: #{node.name}"
18
+ #
19
+ # super # call `super` to run the default visiting behavior
20
+ # end
21
+ # end
22
+ #
23
+ # visitor = MyVisitor.new
24
+ # visitor.visit(ast_node)
25
+ # ~~~
26
+ class Visitor
27
+ def visit(node)
28
+ case node
29
+ when Declarations::Global
30
+ visit_declaration_global(node)
31
+ when Declarations::Class
32
+ visit_declaration_class(node)
33
+ when Declarations::Module
34
+ visit_declaration_module(node)
35
+ when Declarations::Constant
36
+ visit_declaration_constant(node)
37
+ when Declarations::TypeAlias
38
+ visit_declaration_type_alias(node)
39
+ when Declarations::Interface
40
+ visit_declaration_interface(node)
41
+ when Members::Alias
42
+ visit_member_alias(node)
43
+ when Members::ClassInstanceVariable
44
+ visit_member_class_instance_variable(node)
45
+ when Members::ClassVariable
46
+ visit_member_class_variable(node)
47
+ when Members::InstanceVariable
48
+ visit_member_instance_variable(node)
49
+ when Members::Private
50
+ visit_member_private(node)
51
+ when Members::Public
52
+ visit_member_public(node)
53
+ when Members::MethodDefinition
54
+ visit_member_method_definition(node)
55
+ when Members::AttrReader
56
+ visit_member_attr_reader(node)
57
+ when Members::AttrWriter
58
+ visit_member_attr_writer(node)
59
+ when Members::AttrAccessor
60
+ visit_member_attr_accessor(node)
61
+ when Members::Include
62
+ visit_member_include(node)
63
+ when Members::Prepend
64
+ visit_member_prepend(node)
65
+ when Members::Extend
66
+ visit_member_extend(node)
67
+ end
68
+ end
69
+
70
+ def visit_all(nodes)
71
+ nodes.each do |node|
72
+ visit(node)
73
+ end
74
+ end
75
+
76
+ def visit_declaration_global(node)
77
+ end
78
+
79
+ def visit_declaration_class(node)
80
+ visit_all(node.members)
81
+ end
82
+
83
+ def visit_declaration_module(node)
84
+ visit_all(node.members)
85
+ end
86
+
87
+ def visit_declaration_constant(node)
88
+ end
89
+
90
+ def visit_declaration_type_alias(node)
91
+ end
92
+
93
+ def visit_declaration_interface(node)
94
+ visit_all(node.members)
95
+ end
96
+
97
+ def visit_member_alias(node)
98
+ end
99
+
100
+ def visit_member_class_instance_variable(node)
101
+ end
102
+
103
+ def visit_member_class_variable(node)
104
+ end
105
+
106
+ def visit_member_instance_variable(node)
107
+ end
108
+
109
+ def visit_member_private(node)
110
+ end
111
+
112
+ def visit_member_public(node)
113
+ end
114
+
115
+ def visit_member_method_definition(node)
116
+ end
117
+
118
+ def visit_member_attr_reader(node)
119
+ end
120
+
121
+ def visit_member_attr_writer(node)
122
+ end
123
+
124
+ def visit_member_attr_accessor(node)
125
+ end
126
+
127
+ def visit_member_include(node)
128
+ end
129
+
130
+ def visit_member_prepend(node)
131
+ end
132
+
133
+ def visit_member_extend(node)
134
+ end
135
+ end
136
+ end
137
+ end
data/lib/rbs/buffer.rb ADDED
@@ -0,0 +1,189 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class Buffer
5
+ attr_reader :name
6
+ attr_reader :content
7
+ attr_reader :parent
8
+
9
+ def initialize(name: nil, content:, parent: nil)
10
+ case
11
+ when name && content
12
+ @name = name
13
+ @content = content
14
+ @parent = nil
15
+ when parent && content
16
+ @name = parent[0].name
17
+ @content = content
18
+ @parent = parent
19
+ end
20
+ end
21
+
22
+ def lines
23
+ ranges.map { self.content[_1] || raise } #$ String
24
+ end
25
+
26
+ def line_count
27
+ ranges.size
28
+ end
29
+
30
+ def ranges
31
+ @ranges ||= begin
32
+ if content.empty?
33
+ ranges = [0...0] #: Array[Range[Integer]]
34
+ lines = [""]
35
+ else
36
+ lines = content.lines
37
+ lines << "" if content.end_with?("\n")
38
+
39
+ ranges = [] #: Array[Range[Integer]]
40
+ offset = 0
41
+
42
+ lines.each do |line|
43
+ size0 = line.size
44
+ line = line.chomp
45
+ range = offset...(offset+line.size)
46
+ ranges << range
47
+
48
+ offset += size0
49
+ end
50
+ end
51
+
52
+ ranges
53
+ end
54
+ end
55
+
56
+ def pos_to_loc(pos)
57
+ index = ranges.bsearch_index do |range|
58
+ pos <= range.end ? true : false
59
+ end
60
+
61
+ if index
62
+ [index + 1, pos - ranges[index].begin]
63
+ else
64
+ [ranges.size + 1, 0]
65
+ end
66
+ end
67
+
68
+ def loc_to_pos(loc)
69
+ line, column = loc
70
+
71
+ if range = ranges.fetch(line - 1, nil)
72
+ range.begin + column
73
+ else
74
+ last_position
75
+ end
76
+ end
77
+
78
+ def last_position
79
+ if ranges.empty?
80
+ 0
81
+ else
82
+ ranges[-1].end
83
+ end
84
+ end
85
+
86
+ def inspect
87
+ "#<RBS::Buffer:#{__id__} @name=#{name}, @content=#{content.bytesize} bytes, @lines=#{ranges.size} lines,>"
88
+ end
89
+
90
+ def character_offset(byte_offset)
91
+ top = top_buffer
92
+ return top.character_offset(byte_offset) unless top.equal?(self)
93
+
94
+ keys, vals = (@character_offset_cache ||= [[0], [0]])
95
+
96
+ idx = keys.bsearch_index { |k| k > byte_offset }
97
+ lo = idx ? idx - 1 : keys.size - 1
98
+
99
+ base_byte = keys[lo]
100
+ base_char = vals[lo]
101
+ delta = byte_offset - base_byte
102
+ return base_char if delta == 0
103
+
104
+ result = base_char + (content.byteslice(base_byte, delta) or raise).length
105
+
106
+ if base_byte == keys[-1]
107
+ keys << byte_offset
108
+ vals << result
109
+ end
110
+
111
+ result
112
+ end
113
+
114
+ def rbs_location(location, loc2=nil)
115
+ top = top_buffer
116
+ if loc2
117
+ Location.new(top, character_offset(location.start_offset), character_offset(loc2.end_offset))
118
+ else
119
+ Location.new(top, character_offset(location.start_offset), character_offset(location.end_offset))
120
+ end
121
+ end
122
+
123
+ def sub_buffer(lines:, byte_lines_hint: nil)
124
+ buf = +""
125
+
126
+ if byte_lines_hint
127
+ byte_lines_hint.each_with_index do |range, index|
128
+ slice = content.byteslice(range.begin, range.end - range.begin) or raise
129
+ if slice.include?("\n")
130
+ raise "Line #{index + 1} cannot contain newline character."
131
+ end
132
+ buf << slice
133
+ buf << "\n"
134
+ end
135
+ else
136
+ lines.each_with_index do |range, index|
137
+ start_pos = range.begin
138
+ end_pos = range.end
139
+ slice = content[start_pos...end_pos] or raise
140
+ if slice.include?("\n")
141
+ raise "Line #{index + 1} cannot contain newline character."
142
+ end
143
+ buf << slice
144
+ buf << "\n"
145
+ end
146
+ end
147
+
148
+ buf.chomp!
149
+
150
+ Buffer.new(content: buf, parent: [self, lines])
151
+ end
152
+
153
+ def parent_buffer
154
+ if parent
155
+ parent[0]
156
+ end
157
+ end
158
+
159
+ def parent_position(position)
160
+ parent or raise "#parent_position is unavailable with buffer without parent"
161
+ return nil unless position <= last_position
162
+
163
+ line, column = pos_to_loc(position)
164
+ parent_range = parent[1][line - 1]
165
+ parent_range.begin + column
166
+ end
167
+
168
+ def absolute_position(position)
169
+ if parent_buffer
170
+ pos = parent_position(position) or return
171
+ parent_buffer.absolute_position(pos)
172
+ else
173
+ position
174
+ end
175
+ end
176
+
177
+ def top_buffer
178
+ if parent_buffer
179
+ parent_buffer.top_buffer
180
+ else
181
+ self
182
+ end
183
+ end
184
+
185
+ def detach
186
+ Buffer.new(name: name, content: content)
187
+ end
188
+ end
189
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module BuiltinNames
5
+ class Name
6
+ attr_reader :name
7
+
8
+ def initialize(name:)
9
+ @name = name
10
+ end
11
+
12
+ def to_s
13
+ name.to_s
14
+ end
15
+
16
+ def instance_type(*args)
17
+ Types::ClassInstance.new(name: name, args: args, location: nil)
18
+ end
19
+
20
+ def instance_type?(type)
21
+ type.is_a?(Types::ClassInstance) && type.name == name
22
+ end
23
+
24
+ def singleton_type
25
+ @singleton_type ||= Types::ClassSingleton.new(name: name, location: nil)
26
+ end
27
+
28
+ def singleton_type?(type)
29
+ type.is_a?(Types::ClassSingleton) && type.name == name
30
+ end
31
+
32
+ def self.define(name, namespace: Namespace.root)
33
+ new(name: TypeName.new(name: name, namespace: namespace))
34
+ end
35
+ end
36
+
37
+ BasicObject = Name.new(name: TypeName.new(name: :BasicObject, namespace: Namespace.root))
38
+ Object = Name.new(name: TypeName.new(name: :Object, namespace: Namespace.root))
39
+ Kernel = Name.new(name: TypeName.new(name: :Kernel, namespace: Namespace.root))
40
+ String = Name.define(:String)
41
+ Comparable = Name.define(:Comparable)
42
+ Enumerable = Name.define(:Enumerable)
43
+ Class = Name.define(:Class)
44
+ Module = Name.define(:Module)
45
+ Array = Name.define(:Array)
46
+ Hash = Name.define(:Hash)
47
+ Range = Name.define(:Range)
48
+ Enumerator = Name.define(:Enumerator)
49
+ Set = Name.define(:Set)
50
+ Symbol = Name.define(:Symbol)
51
+ Integer = Name.define(:Integer)
52
+ Float = Name.define(:Float)
53
+ Regexp = Name.define(:Regexp)
54
+ TrueClass = Name.define(:TrueClass)
55
+ FalseClass = Name.define(:FalseClass)
56
+ Numeric = Name.define(:Numeric)
57
+ end
58
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class CLI
5
+ class ColoredIO
6
+ attr_reader :stdout
7
+
8
+ def initialize(stdout:)
9
+ @stdout = stdout
10
+ end
11
+
12
+ def puts_red(string)
13
+ if can_display_colors?
14
+ puts "\e[31m#{string}\e[m"
15
+ else
16
+ puts string
17
+ end
18
+ end
19
+
20
+ def puts_green(string)
21
+ if can_display_colors?
22
+ puts "\e[32m#{string}\e[m"
23
+ else
24
+ puts string
25
+ end
26
+ end
27
+
28
+ def puts(...)
29
+ stdout.puts(...)
30
+ end
31
+
32
+ private
33
+
34
+ # https://github.com/rubygems/rubygems/blob/ed65279100234a17d65d71fe26de5083984ac5b8/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb#L99-L109
35
+ def can_display_colors?
36
+ are_colors_supported? && !are_colors_disabled?
37
+ end
38
+
39
+ def are_colors_supported?
40
+ stdout.tty? && ENV["TERM"] != "dumb"
41
+ end
42
+
43
+ def are_colors_disabled?
44
+ !ENV['NO_COLOR'].nil? && !ENV.fetch('NO_COLOR', '').empty?
45
+ end
46
+ end
47
+ end
48
+ end