rbs 3.9.4 → 4.1.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 (348) hide show
  1. checksums.yaml +4 -4
  2. data/.clang-format +75 -0
  3. data/.clangd +2 -0
  4. data/.dockerignore +37 -0
  5. data/.github/dependabot.yml +16 -14
  6. data/.github/workflows/bundle-update.yml +63 -0
  7. data/.github/workflows/c-check.yml +66 -0
  8. data/.github/workflows/comments.yml +5 -3
  9. data/.github/workflows/dependabot.yml +2 -2
  10. data/.github/workflows/jruby.yml +79 -0
  11. data/.github/workflows/release-gems.yml +164 -0
  12. data/.github/workflows/ruby.yml +84 -30
  13. data/.github/workflows/rust.yml +186 -0
  14. data/.github/workflows/truffleruby.yml +54 -0
  15. data/.github/workflows/typecheck.yml +5 -2
  16. data/.github/workflows/wasm.yml +55 -0
  17. data/.github/workflows/windows.yml +9 -3
  18. data/.gitignore +16 -0
  19. data/.rubocop.yml +2 -2
  20. data/CHANGELOG.md +430 -0
  21. data/Dockerfile.jruby +53 -0
  22. data/README.md +41 -4
  23. data/Rakefile +777 -60
  24. data/Steepfile +11 -0
  25. data/config.yml +660 -62
  26. data/core/array.rbs +541 -398
  27. data/core/basic_object.rbs +9 -8
  28. data/core/binding.rbs +0 -2
  29. data/core/builtin.rbs +9 -8
  30. data/core/class.rbs +11 -8
  31. data/core/comparable.rbs +55 -34
  32. data/core/complex.rbs +104 -78
  33. data/core/dir.rbs +61 -49
  34. data/core/encoding.rbs +12 -15
  35. data/core/enumerable.rbs +297 -196
  36. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  37. data/core/enumerator/product.rbs +5 -5
  38. data/core/enumerator.rbs +91 -28
  39. data/core/errno.rbs +11 -2
  40. data/core/errors.rbs +58 -29
  41. data/core/exception.rbs +13 -13
  42. data/core/fiber.rbs +74 -54
  43. data/core/file.rbs +260 -1151
  44. data/core/file_constants.rbs +463 -0
  45. data/core/file_stat.rbs +534 -0
  46. data/core/file_test.rbs +3 -3
  47. data/core/float.rbs +257 -116
  48. data/core/gc.rbs +425 -281
  49. data/core/hash.rbs +1151 -829
  50. data/core/integer.rbs +156 -195
  51. data/core/io/buffer.rbs +53 -42
  52. data/core/io/wait.rbs +13 -35
  53. data/core/io.rbs +220 -154
  54. data/core/kernel.rbs +239 -163
  55. data/core/marshal.rbs +4 -4
  56. data/core/match_data.rbs +16 -14
  57. data/core/math.rbs +107 -66
  58. data/core/method.rbs +69 -33
  59. data/core/module.rbs +302 -150
  60. data/core/nil_class.rbs +7 -6
  61. data/core/numeric.rbs +77 -63
  62. data/core/object.rbs +9 -11
  63. data/core/object_space/weak_key_map.rbs +7 -7
  64. data/core/object_space.rbs +30 -23
  65. data/core/pathname.rbs +1312 -0
  66. data/core/proc.rbs +95 -58
  67. data/core/process.rbs +222 -202
  68. data/core/ractor.rbs +364 -518
  69. data/core/random.rbs +21 -3
  70. data/core/range.rbs +181 -79
  71. data/core/rational.rbs +60 -89
  72. data/core/rbs/ops.rbs +154 -0
  73. data/core/rbs/unnamed/argf.rbs +63 -56
  74. data/core/rbs/unnamed/env_class.rbs +19 -14
  75. data/core/rbs/unnamed/main_class.rbs +123 -0
  76. data/core/rbs/unnamed/random.rbs +11 -118
  77. data/core/regexp.rbs +258 -214
  78. data/core/ruby.rbs +53 -0
  79. data/core/ruby_vm.rbs +78 -34
  80. data/core/rubygems/config_file.rbs +5 -5
  81. data/core/rubygems/errors.rbs +6 -70
  82. data/core/rubygems/requirement.rbs +5 -15
  83. data/core/rubygems/rubygems.rbs +18 -81
  84. data/core/rubygems/specification.rbs +8 -0
  85. data/core/rubygems/version.rbs +2 -163
  86. data/core/set.rbs +493 -363
  87. data/core/signal.rbs +26 -16
  88. data/core/string.rbs +3234 -1285
  89. data/core/struct.rbs +43 -42
  90. data/core/symbol.rbs +41 -34
  91. data/core/thread.rbs +139 -83
  92. data/core/time.rbs +81 -50
  93. data/core/trace_point.rbs +41 -35
  94. data/core/true_class.rbs +2 -2
  95. data/core/unbound_method.rbs +24 -16
  96. data/core/warning.rbs +7 -7
  97. data/docs/CONTRIBUTING.md +2 -1
  98. data/docs/aliases.md +79 -0
  99. data/docs/collection.md +3 -3
  100. data/docs/config.md +171 -0
  101. data/docs/encoding.md +56 -0
  102. data/docs/gem.md +0 -1
  103. data/docs/inline.md +634 -0
  104. data/docs/rbs_by_example.md +20 -20
  105. data/docs/release.md +151 -0
  106. data/docs/rust.md +96 -0
  107. data/docs/sigs.md +3 -3
  108. data/docs/syntax.md +48 -18
  109. data/docs/type_fingerprint.md +21 -0
  110. data/docs/wasm_serialization.md +80 -0
  111. data/exe/rbs +1 -1
  112. data/ext/rbs_extension/ast_translation.c +1855 -0
  113. data/ext/rbs_extension/ast_translation.h +41 -0
  114. data/ext/rbs_extension/class_constants.c +187 -0
  115. data/{include/rbs/constants.h → ext/rbs_extension/class_constants.h} +23 -1
  116. data/ext/rbs_extension/compat.h +10 -0
  117. data/ext/rbs_extension/extconf.rb +26 -1
  118. data/ext/rbs_extension/legacy_location.c +299 -0
  119. data/ext/rbs_extension/legacy_location.h +82 -0
  120. data/ext/rbs_extension/main.c +603 -23
  121. data/ext/rbs_extension/rbs_extension.h +6 -21
  122. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  123. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  124. data/include/rbs/ast.h +1047 -0
  125. data/include/rbs/defines.h +99 -0
  126. data/include/rbs/lexer.h +207 -0
  127. data/include/rbs/location.h +40 -0
  128. data/include/rbs/parser.h +153 -0
  129. data/include/rbs/serialize.h +39 -0
  130. data/include/rbs/string.h +47 -0
  131. data/include/rbs/util/rbs_allocator.h +59 -0
  132. data/include/rbs/util/rbs_assert.h +20 -0
  133. data/include/rbs/util/rbs_buffer.h +83 -0
  134. data/include/rbs/util/rbs_constant_pool.h +6 -70
  135. data/include/rbs/util/rbs_encoding.h +282 -0
  136. data/include/rbs/util/rbs_unescape.h +24 -0
  137. data/include/rbs.h +9 -2
  138. data/lib/rbs/annotate/formatter.rb +3 -13
  139. data/lib/rbs/annotate/rdoc_annotator.rb +30 -32
  140. data/lib/rbs/annotate/rdoc_source.rb +1 -1
  141. data/lib/rbs/ast/annotation.rb +1 -1
  142. data/lib/rbs/ast/comment.rb +1 -1
  143. data/lib/rbs/ast/declarations.rb +10 -10
  144. data/lib/rbs/ast/members.rb +14 -14
  145. data/lib/rbs/ast/ruby/annotations.rb +451 -0
  146. data/lib/rbs/ast/ruby/comment_block.rb +247 -0
  147. data/lib/rbs/ast/ruby/declarations.rb +291 -0
  148. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  149. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  150. data/lib/rbs/ast/ruby/members.rb +762 -0
  151. data/lib/rbs/ast/type_param.rb +24 -4
  152. data/lib/rbs/buffer.rb +142 -20
  153. data/lib/rbs/cli/diff.rb +16 -15
  154. data/lib/rbs/cli/validate.rb +63 -126
  155. data/lib/rbs/cli.rb +59 -29
  156. data/lib/rbs/collection/config/lockfile_generator.rb +28 -3
  157. data/lib/rbs/collection/sources/git.rb +7 -0
  158. data/lib/rbs/definition.rb +6 -1
  159. data/lib/rbs/definition_builder/ancestor_builder.rb +121 -65
  160. data/lib/rbs/definition_builder/method_builder.rb +74 -33
  161. data/lib/rbs/definition_builder.rb +177 -20
  162. data/lib/rbs/diff.rb +7 -1
  163. data/lib/rbs/environment/class_entry.rb +69 -0
  164. data/lib/rbs/environment/module_entry.rb +66 -0
  165. data/lib/rbs/environment.rb +410 -215
  166. data/lib/rbs/environment_loader.rb +2 -8
  167. data/lib/rbs/errors.rb +31 -21
  168. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  169. data/lib/rbs/inline_parser.rb +568 -0
  170. data/lib/rbs/location_aux.rb +36 -4
  171. data/lib/rbs/locator.rb +5 -1
  172. data/lib/rbs/method_type.rb +5 -3
  173. data/lib/rbs/namespace.rb +47 -18
  174. data/lib/rbs/parser_aux.rb +37 -7
  175. data/lib/rbs/prototype/helpers.rb +57 -0
  176. data/lib/rbs/prototype/rb.rb +3 -28
  177. data/lib/rbs/prototype/rbi.rb +196 -45
  178. data/lib/rbs/prototype/runtime.rb +12 -2
  179. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  180. data/lib/rbs/resolver/type_name_resolver.rb +120 -44
  181. data/lib/rbs/rewriter.rb +70 -0
  182. data/lib/rbs/source.rb +99 -0
  183. data/lib/rbs/subtractor.rb +7 -4
  184. data/lib/rbs/test/type_check.rb +25 -3
  185. data/lib/rbs/type_name.rb +34 -21
  186. data/lib/rbs/types.rb +91 -79
  187. data/lib/rbs/unit_test/convertibles.rb +1 -0
  188. data/lib/rbs/unit_test/type_assertions.rb +44 -8
  189. data/lib/rbs/validator.rb +2 -2
  190. data/lib/rbs/version.rb +1 -1
  191. data/lib/rbs/wasm/deserializer.rb +213 -0
  192. data/lib/rbs/wasm/location.rb +61 -0
  193. data/lib/rbs/wasm/parser.rb +137 -0
  194. data/lib/rbs/wasm/runtime.rb +196 -0
  195. data/lib/rbs/wasm/serialization_schema.rb +110 -0
  196. data/lib/rbs.rb +25 -2
  197. data/lib/rbs_jars.rb +39 -0
  198. data/lib/rdoc/discover.rb +1 -1
  199. data/lib/rdoc_plugin/parser.rb +8 -3
  200. data/rbs.gemspec +37 -5
  201. data/schema/typeParam.json +17 -1
  202. data/sig/ancestor_builder.rbs +1 -1
  203. data/sig/annotate/formatter.rbs +2 -2
  204. data/sig/annotate/rdoc_annotater.rbs +13 -10
  205. data/sig/ast/ruby/annotations.rbs +470 -0
  206. data/sig/ast/ruby/comment_block.rbs +127 -0
  207. data/sig/ast/ruby/declarations.rbs +158 -0
  208. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  209. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  210. data/sig/ast/ruby/members.rbs +198 -0
  211. data/sig/buffer.rbs +81 -5
  212. data/sig/cli/diff.rbs +5 -11
  213. data/sig/cli/validate.rbs +12 -8
  214. data/sig/cli.rbs +18 -18
  215. data/sig/collection/config/lockfile_generator.rbs +2 -0
  216. data/sig/definition.rbs +6 -0
  217. data/sig/definition_builder.rbs +3 -1
  218. data/sig/environment/class_entry.rbs +50 -0
  219. data/sig/environment/module_entry.rbs +50 -0
  220. data/sig/environment.rbs +94 -87
  221. data/sig/errors.rbs +26 -20
  222. data/sig/inline_parser/comment_association.rbs +71 -0
  223. data/sig/inline_parser.rbs +126 -0
  224. data/sig/location.rbs +32 -7
  225. data/sig/locator.rbs +0 -2
  226. data/sig/manifest.yaml +0 -2
  227. data/sig/method_builder.rbs +9 -4
  228. data/sig/namespace.rbs +20 -5
  229. data/sig/parser.rbs +77 -13
  230. data/sig/prototype/helpers.rbs +2 -0
  231. data/sig/prototype/rbi.rbs +33 -4
  232. data/sig/resolver/type_name_resolver.rbs +36 -10
  233. data/sig/rewriter.rbs +45 -0
  234. data/sig/source.rbs +48 -0
  235. data/sig/type_param.rbs +13 -8
  236. data/sig/typename.rbs +15 -5
  237. data/sig/types.rbs +10 -8
  238. data/sig/unit_test/spy.rbs +0 -8
  239. data/sig/unit_test/type_assertions.rbs +15 -0
  240. data/sig/wasm/deserializer.rbs +66 -0
  241. data/sig/wasm/serialization_schema.rbs +13 -0
  242. data/src/ast.c +1628 -0
  243. data/src/lexer.c +3221 -0
  244. data/src/lexer.re +155 -0
  245. data/src/lexstate.c +221 -0
  246. data/src/location.c +31 -0
  247. data/src/parser.c +4258 -0
  248. data/src/serialize.c +958 -0
  249. data/src/string.c +41 -0
  250. data/src/util/rbs_allocator.c +171 -0
  251. data/src/util/rbs_assert.c +19 -0
  252. data/src/util/rbs_buffer.c +54 -0
  253. data/src/util/rbs_constant_pool.c +18 -92
  254. data/src/util/rbs_encoding.c +21308 -0
  255. data/src/util/rbs_unescape.c +167 -0
  256. data/stdlib/abbrev/0/array.rbs +1 -1
  257. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  258. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  259. data/stdlib/cgi/0/core.rbs +9 -393
  260. data/stdlib/cgi/0/manifest.yaml +1 -0
  261. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  262. data/stdlib/coverage/0/coverage.rbs +7 -4
  263. data/stdlib/csv/0/csv.rbs +5 -5
  264. data/stdlib/date/0/date.rbs +92 -79
  265. data/stdlib/date/0/date_time.rbs +25 -24
  266. data/stdlib/delegate/0/delegator.rbs +11 -7
  267. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  268. data/stdlib/digest/0/digest.rbs +117 -1
  269. data/stdlib/erb/0/erb.rbs +748 -347
  270. data/stdlib/etc/0/etc.rbs +73 -54
  271. data/stdlib/fileutils/0/fileutils.rbs +179 -160
  272. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  273. data/stdlib/io-console/0/io-console.rbs +2 -2
  274. data/stdlib/ipaddr/0/ipaddr.rbs +0 -5
  275. data/stdlib/json/0/json.rbs +232 -185
  276. data/stdlib/monitor/0/monitor.rbs +5 -5
  277. data/stdlib/net-http/0/net-http.rbs +162 -134
  278. data/stdlib/objspace/0/objspace.rbs +17 -34
  279. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  280. data/stdlib/open3/0/open3.rbs +469 -10
  281. data/stdlib/openssl/0/openssl.rbs +521 -397
  282. data/stdlib/optparse/0/optparse.rbs +26 -17
  283. data/stdlib/pathname/0/pathname.rbs +11 -1381
  284. data/stdlib/pp/0/pp.rbs +9 -8
  285. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  286. data/stdlib/pstore/0/pstore.rbs +35 -30
  287. data/stdlib/psych/0/psych.rbs +65 -12
  288. data/stdlib/psych/0/store.rbs +2 -4
  289. data/stdlib/pty/0/pty.rbs +9 -6
  290. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  291. data/stdlib/rdoc/0/code_object.rbs +4 -3
  292. data/stdlib/rdoc/0/comment.rbs +2 -0
  293. data/stdlib/rdoc/0/options.rbs +76 -0
  294. data/stdlib/rdoc/0/parser.rbs +1 -1
  295. data/stdlib/rdoc/0/rdoc.rbs +7 -5
  296. data/stdlib/rdoc/0/store.rbs +2 -2
  297. data/stdlib/resolv/0/resolv.rbs +26 -69
  298. data/stdlib/ripper/0/ripper.rbs +25 -19
  299. data/stdlib/securerandom/0/manifest.yaml +2 -0
  300. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  301. data/stdlib/shellwords/0/shellwords.rbs +3 -3
  302. data/stdlib/singleton/0/singleton.rbs +3 -0
  303. data/stdlib/socket/0/addrinfo.rbs +9 -9
  304. data/stdlib/socket/0/basic_socket.rbs +3 -3
  305. data/stdlib/socket/0/ip_socket.rbs +10 -8
  306. data/stdlib/socket/0/socket.rbs +23 -10
  307. data/stdlib/socket/0/tcp_server.rbs +1 -1
  308. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  309. data/stdlib/socket/0/udp_socket.rbs +1 -1
  310. data/stdlib/socket/0/unix_server.rbs +1 -1
  311. data/stdlib/stringio/0/stringio.rbs +1209 -95
  312. data/stdlib/strscan/0/string_scanner.rbs +101 -80
  313. data/stdlib/tempfile/0/manifest.yaml +3 -0
  314. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  315. data/stdlib/time/0/time.rbs +8 -6
  316. data/stdlib/timeout/0/timeout.rbs +58 -7
  317. data/stdlib/tsort/0/cyclic.rbs +4 -1
  318. data/stdlib/tsort/0/interfaces.rbs +8 -8
  319. data/stdlib/tsort/0/tsort.rbs +16 -15
  320. data/stdlib/uri/0/common.rbs +42 -20
  321. data/stdlib/uri/0/file.rbs +3 -3
  322. data/stdlib/uri/0/generic.rbs +21 -18
  323. data/stdlib/uri/0/http.rbs +2 -2
  324. data/stdlib/uri/0/ldap.rbs +2 -2
  325. data/stdlib/uri/0/mailto.rbs +3 -3
  326. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  327. data/stdlib/zlib/0/deflate.rbs +4 -3
  328. data/stdlib/zlib/0/gzip_reader.rbs +8 -8
  329. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  330. data/stdlib/zlib/0/inflate.rbs +1 -1
  331. data/stdlib/zlib/0/need_dict.rbs +1 -1
  332. data/wasm/README.md +60 -0
  333. data/wasm/rbs_wasm.c +423 -0
  334. metadata +131 -19
  335. data/ext/rbs_extension/lexer.c +0 -2728
  336. data/ext/rbs_extension/lexer.h +0 -179
  337. data/ext/rbs_extension/lexer.re +0 -147
  338. data/ext/rbs_extension/lexstate.c +0 -175
  339. data/ext/rbs_extension/location.c +0 -325
  340. data/ext/rbs_extension/location.h +0 -85
  341. data/ext/rbs_extension/parser.c +0 -2982
  342. data/ext/rbs_extension/parser.h +0 -18
  343. data/ext/rbs_extension/parserstate.c +0 -411
  344. data/ext/rbs_extension/parserstate.h +0 -163
  345. data/ext/rbs_extension/unescape.c +0 -32
  346. data/include/rbs/ruby_objs.h +0 -72
  347. data/src/constants.c +0 -153
  348. data/src/ruby_objs.c +0 -799
@@ -0,0 +1,127 @@
1
+ use Prism::Comment
2
+
3
+ module RBS
4
+ module AST
5
+ module Ruby
6
+ # CommentBlock is a collection of comments
7
+ #
8
+ # ```ruby
9
+ # # Comment1 < block1
10
+ # # Comment2 <
11
+ #
12
+ # # Comment3 < block2
13
+ # ```
14
+ #
15
+ # A comment block is a *leading* block or *trailing* block.
16
+ #
17
+ # ```ruby
18
+ # # This is leading block.
19
+ # # This is the second line of the leading block.
20
+ #
21
+ # foo # This is trailing block.
22
+ # # This is second line of the trailing block.
23
+ # ```
24
+ #
25
+ # A leading block is a comment block where all of the comments are at the start of the line content.
26
+ # A trailing block is a comment block where the first comment of the block has something at the line before the comment.
27
+ #
28
+ class CommentBlock
29
+ attr_reader name: Pathname
30
+
31
+ # Sub buffer of the contents of the comments
32
+ #
33
+ attr_reader comment_buffer: Buffer
34
+
35
+ attr_reader offsets: Array[
36
+ [
37
+ Comment,
38
+ Integer, # -- prefix size
39
+ ]
40
+ ]
41
+
42
+ def initialize: (Buffer source_buffer, Array[Comment]) -> void
43
+
44
+ # Build comment block instances
45
+ def self.build: (Buffer, Array[Comment]) -> Array[instance]
46
+
47
+ # Returns true if the comment block is a *leading* comment, which is attached to the successor node
48
+ def leading?: () -> bool
49
+
50
+ # Returns true if the comment block is a *trailing* comment, which is attached to the predecessor node
51
+ def trailing?: () -> bool
52
+
53
+ # The line number of the first comment in the block
54
+ def start_line: () -> Integer
55
+
56
+ # The line number of the last comment in the block
57
+ def end_line: () -> Integer
58
+
59
+ # The character index of `#comment_buffer` at the start of the lines
60
+ #
61
+ def line_starts: () -> Array[Integer]
62
+
63
+ # Returns the text content of the comment
64
+ def text: (Integer index) -> String
65
+
66
+ # Yields paragraph and annotation
67
+ #
68
+ # A paragraph is a sequence of lines that are separated by annotations.
69
+ # An annotation starts with a line starting with `@rbs` or `:`, and may continue with lines that has more leading spaces.
70
+ #
71
+ # ```
72
+ # # Line 1 ^ Paragraph 1
73
+ # # Line 2 |
74
+ # # |
75
+ # # Line 3 v
76
+ # # @rbs ... < Annotation 1
77
+ # # @rbs ... ^ Annotation 2
78
+ # # ... |
79
+ # # |
80
+ # # ... v
81
+ # # ^ Paragraph 2
82
+ # # Line 4 |
83
+ # # Line 5 v
84
+ # ```
85
+ #
86
+ def each_paragraph: (Array[Symbol] variables) { (Location | AST::Ruby::Annotations::leading_annotation | AnnotationSyntaxError) -> void } -> void
87
+ | (Array[Symbol] variables) -> Enumerator[Location | AST::Ruby::Annotations::leading_annotation | AnnotationSyntaxError]
88
+
89
+ # Returns a trailing annotation if it exists
90
+ #
91
+ # * Returns `nil` if the block is not a type annotation
92
+ # * Returns an annotation if the block has a type annotation
93
+ # * Returns AnnotationSyntaxError if the annotation has a syntax error
94
+ #
95
+ def trailing_annotation: (Array[Symbol] variables) -> (AST::Ruby::Annotations::trailing_annotation | AnnotationSyntaxError | nil)
96
+
97
+ class AnnotationSyntaxError
98
+ attr_reader location: Location
99
+
100
+ attr_reader error: ParsingError
101
+
102
+ def initialize: (Location, ParsingError) -> void
103
+ end
104
+
105
+ private def yield_paragraph: (Integer start_line, Integer current_line, Array[Symbol] variables) { (Location | AST::Ruby::Annotations::leading_annotation | AnnotationSyntaxError) -> void } -> void
106
+
107
+ private def yield_annotation: (Integer start_line, Integer end_line, Integer current_line, Array[Symbol] variables) { (Location | AST::Ruby::Annotations::leading_annotation | AnnotationSyntaxError) -> void } -> void
108
+
109
+ private def parse_annotation_lines: (Integer start_line, Integer end_line, Array[Symbol] variables) -> (AST::Ruby::Annotations::leading_annotation | AnnotationSyntaxError)
110
+
111
+ def comments: () -> Array[Comment]
112
+
113
+ def line_location: (Integer start_line, Integer end_line) -> Location
114
+
115
+ def location: () -> Location
116
+
117
+ private def leading_annotation?: (Integer index) -> bool
118
+
119
+ # Returns an comment object that contains the docs of from the comment block
120
+ #
121
+ # It ignores type annotations and syntax errors.
122
+ #
123
+ def as_comment: () -> AST::Comment?
124
+ end
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,158 @@
1
+ module RBS
2
+ module AST
3
+ module Ruby
4
+ module Declarations
5
+ type t = ClassDecl | ModuleDecl | ConstantDecl | ClassModuleAliasDecl
6
+
7
+ class Base
8
+ attr_reader buffer: Buffer
9
+
10
+ include Helpers::ConstantHelper
11
+ include Helpers::LocationHelper
12
+
13
+ def initialize: (Buffer) -> void
14
+
15
+ def type_fingerprint: () -> untyped
16
+ end
17
+
18
+ class ClassDecl < Base
19
+ class SuperClass
20
+ attr_reader operator_location: Location
21
+
22
+ attr_reader type_name_location: Location
23
+
24
+ attr_reader type_name: TypeName
25
+
26
+ attr_reader type_annotation: Annotations::TypeApplicationAnnotation?
27
+
28
+ def type_args: () -> Array[Types::t]
29
+
30
+ alias name type_name
31
+
32
+ alias args type_args
33
+
34
+ def initialize: (Location type_name_location, Location operator_location, TypeName, RBS::AST::Ruby::Annotations::TypeApplicationAnnotation?) -> void
35
+
36
+ def location: () -> Location
37
+
38
+ def type_fingerprint: () -> untyped
39
+ end
40
+
41
+ type member = t | Members::t
42
+
43
+ attr_reader class_name: TypeName
44
+
45
+ attr_reader node: Prism::ClassNode
46
+
47
+ attr_reader super_class: SuperClass?
48
+
49
+ attr_reader members: Array[member]
50
+
51
+ def initialize: (Buffer, TypeName, Prism::ClassNode, SuperClass?) -> void
52
+
53
+ def each_decl: () { (t) -> void } -> void
54
+ | () -> Enumerator[t]
55
+
56
+ def type_params: () -> Array[AST::TypeParam]
57
+
58
+ def location: () -> Location
59
+
60
+ def name_location: () -> Location
61
+
62
+ def type_fingerprint: () -> untyped
63
+ end
64
+
65
+ class ModuleDecl < Base
66
+ type member = t | Members::t
67
+
68
+ attr_reader module_name: TypeName
69
+
70
+ attr_reader node: Prism::ModuleNode
71
+
72
+ attr_reader members: Array[member]
73
+
74
+ def initialize: (Buffer, TypeName, Prism::ModuleNode) -> void
75
+
76
+ def each_decl: () { (t) -> void } -> void
77
+ | () -> Enumerator[t]
78
+
79
+ def type_params: () -> Array[AST::TypeParam]
80
+
81
+ def location: () -> Location
82
+
83
+ def self_types: () -> Array[AST::Declarations::Module::Self]
84
+
85
+ def name_location: () -> Location
86
+
87
+ def type_fingerprint: () -> untyped
88
+ end
89
+
90
+ class ConstantDecl < Base
91
+ type node = Prism::ConstantWriteNode | Prism::ConstantPathWriteNode
92
+
93
+ attr_reader leading_comment: CommentBlock?
94
+
95
+ attr_reader constant_name: TypeName
96
+
97
+ attr_reader node: node
98
+
99
+ attr_reader type_annotation: Annotations::NodeTypeAssertion?
100
+
101
+ def initialize: (Buffer, TypeName, node, CommentBlock?, Annotations::NodeTypeAssertion?) -> void
102
+
103
+ def location: () -> Location
104
+
105
+ def name_location: () -> Location
106
+
107
+ # Returns the type of the constant
108
+ #
109
+ # - When type_anntoation is given, it returns the type from the annotation.
110
+ # - When type_annotation is not given, it returns infered type from the right-hand-side of the constant assignment
111
+ # - Or it returns `untyped` type
112
+ #
113
+ def type: () -> Types::t
114
+
115
+ # Returns the comment content extracted from the leading comment block
116
+ #
117
+ def comment: () -> AST::Comment?
118
+
119
+ def type_fingerprint: () -> untyped
120
+ end
121
+
122
+ class ClassModuleAliasDecl < Base
123
+ type node = Prism::ConstantWriteNode | Prism::ConstantPathWriteNode
124
+
125
+ type annotation = Annotations::ClassAliasAnnotation | Annotations::ModuleAliasAnnotation
126
+
127
+ attr_reader node: node
128
+
129
+ attr_reader leading_comment: CommentBlock?
130
+
131
+ attr_reader new_name: TypeName
132
+
133
+ # The infered old name from the right-hand side of the constant declaration
134
+ #
135
+ # - `nil` if the annotation has the type name
136
+ #
137
+ attr_reader infered_old_name: TypeName?
138
+
139
+ attr_reader annotation: annotation
140
+
141
+ def initialize: (Buffer, node, TypeName, TypeName?, CommentBlock?, annotation) -> void
142
+
143
+ def name_location: () -> Location
144
+
145
+ def location: () -> Location
146
+
147
+ # Returns the old name of the class/module alias
148
+ #
149
+ def old_name: () -> TypeName
150
+
151
+ def comment: () -> Comment?
152
+
153
+ def type_fingerprint: () -> untyped
154
+ end
155
+ end
156
+ end
157
+ end
158
+ end
@@ -0,0 +1,11 @@
1
+ module RBS
2
+ module AST
3
+ module Ruby
4
+ module Helpers
5
+ module ConstantHelper
6
+ def self?.constant_as_type_name: (Prism::node?) -> TypeName?
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ module RBS
2
+ module AST
3
+ module Ruby
4
+ module Helpers
5
+ module LocationHelper : _WithBuffer
6
+ interface _WithBuffer
7
+ def buffer: () -> Buffer
8
+ end
9
+
10
+ def rbs_location: (Prism::Location) -> Location
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,198 @@
1
+ module RBS
2
+ module AST
3
+ module Ruby
4
+ module Members
5
+ class Base
6
+ attr_reader buffer: Buffer
7
+
8
+ def initialize: (Buffer) -> void
9
+
10
+ include Helpers::LocationHelper
11
+
12
+ def type_fingerprint: () -> untyped
13
+ end
14
+
15
+ type t = DefMember
16
+ | IncludeMember | ExtendMember | PrependMember
17
+ | AttrReaderMember | AttrWriterMember | AttrAccessorMember
18
+ | InstanceVariableMember
19
+ | ModuleSelfMember
20
+
21
+ class MethodTypeAnnotation
22
+ class DocStyle
23
+ type param_type_annotation = Annotations::ParamTypeAnnotation
24
+ | Annotations::SplatParamTypeAnnotation
25
+ | Annotations::DoubleSplatParamTypeAnnotation
26
+ | Annotations::BlockParamTypeAnnotation
27
+
28
+ attr_accessor return_type_annotation: Annotations::ReturnTypeAnnotation | Annotations::NodeTypeAssertion | nil
29
+
30
+ attr_reader required_positionals: Array[Annotations::ParamTypeAnnotation | Symbol]
31
+ attr_reader optional_positionals: Array[Annotations::ParamTypeAnnotation | Symbol]
32
+ attr_accessor rest_positionals: Annotations::SplatParamTypeAnnotation | Symbol | true | nil
33
+ attr_reader trailing_positionals: Array[Annotations::ParamTypeAnnotation | Symbol]
34
+ attr_reader required_keywords: Hash[Symbol, Annotations::ParamTypeAnnotation | Symbol]
35
+ attr_reader optional_keywords: Hash[Symbol, Annotations::ParamTypeAnnotation | Symbol]
36
+ attr_accessor rest_keywords: Annotations::DoubleSplatParamTypeAnnotation | Symbol | true | nil
37
+ attr_accessor block: Annotations::BlockParamTypeAnnotation | Symbol | true | nil
38
+
39
+ def initialize: () -> void
40
+
41
+ def self.build: (Array[param_type_annotation], Annotations::ReturnTypeAnnotation | Annotations::NodeTypeAssertion | nil, Prism::DefNode) -> [DocStyle, Array[param_type_annotation]]
42
+
43
+ def all_param_annotations: () -> Array[param_type_annotation | Symbol | true | nil]
44
+
45
+ def map_type_name: () { (TypeName) -> TypeName } -> self
46
+
47
+ def method_type: () -> MethodType
48
+
49
+ def type_fingerprint: () -> untyped
50
+ end
51
+
52
+ type type_annotations = DocStyle | Array[Annotations::ColonMethodTypeAnnotation | Annotations::MethodTypesAnnotation] | nil
53
+
54
+ attr_reader type_annotations: type_annotations
55
+
56
+ def initialize: (type_annotations: type_annotations) -> void
57
+
58
+ def map_type_name: { (TypeName) -> TypeName } -> self
59
+
60
+ # Returns the method type annotations from the comment block
61
+ #
62
+ # Returns a tuple of `DefAnnotations` object, array of unused leading annotations, and unused trailing annotation.
63
+ #
64
+ def self.build: (CommentBlock? leading_block, CommentBlock? trailing_block, Array[Symbol], Prism::DefNode) -> [
65
+ MethodTypeAnnotation,
66
+ Array[Annotations::leading_annotation | CommentBlock::AnnotationSyntaxError],
67
+ Annotations::trailing_annotation | CommentBlock::AnnotationSyntaxError | nil
68
+ ]
69
+
70
+ # Returns `true` if it doesn't have any annotation
71
+ def empty?: () -> bool
72
+
73
+ # Returns the method type overloads
74
+ #
75
+ def overloads: () -> Array[AST::Members::MethodDefinition::Overload]
76
+
77
+ def overloading?: () -> bool
78
+
79
+ def type_fingerprint: () -> untyped
80
+ end
81
+
82
+ class DefMember < Base
83
+ class Overload = AST::Members::MethodDefinition::Overload
84
+
85
+ attr_reader name: Symbol
86
+ attr_reader node: Prism::DefNode
87
+ attr_reader kind: :instance | :singleton
88
+ attr_reader method_type: MethodTypeAnnotation
89
+ attr_reader leading_comment: CommentBlock?
90
+
91
+ def initialize: (Buffer, Symbol name, Prism::DefNode node, MethodTypeAnnotation, CommentBlock? leading_comment, ?kind: :instance | :singleton) -> void
92
+
93
+ def singleton?: () -> bool
94
+
95
+ def instance?: () -> bool
96
+
97
+ def location: () -> Location
98
+
99
+ def overloads: () -> Array[Overload]
100
+
101
+ def overloading?: () -> bool
102
+
103
+ def annotations: () -> Array[AST::Annotation]
104
+
105
+ def name_location: () -> Location
106
+
107
+ def type_fingerprint: () -> untyped
108
+ end
109
+
110
+ class MixinMember < Base
111
+ attr_reader node: Prism::CallNode
112
+
113
+ attr_reader module_name: TypeName
114
+
115
+ attr_reader annotation: Annotations::TypeApplicationAnnotation | nil
116
+
117
+ def initialize: (Buffer, Prism::CallNode, TypeName, Annotations::TypeApplicationAnnotation | nil) -> void
118
+
119
+ def location: () -> Location
120
+
121
+ def name_location: () -> Location
122
+
123
+ def type_args: () -> Array[Types::t]
124
+
125
+ def type_fingerprint: () -> untyped
126
+ end
127
+
128
+ class IncludeMember < MixinMember
129
+ end
130
+
131
+ class ExtendMember < MixinMember
132
+ end
133
+
134
+ class PrependMember < MixinMember
135
+ end
136
+
137
+ class AttributeMember < Base
138
+ attr_reader node: Prism::CallNode
139
+
140
+ attr_reader name_nodes: Array[Prism::SymbolNode]
141
+
142
+ attr_reader type_annotation: Annotations::NodeTypeAssertion?
143
+
144
+ attr_reader leading_comment: CommentBlock?
145
+
146
+ def initialize: (Buffer, Prism::CallNode, Array[Prism::SymbolNode] name_nodes, RBS::AST::Ruby::CommentBlock? leading_comment, Annotations::NodeTypeAssertion? type_annotation) -> void
147
+
148
+ def names: () -> Array[Symbol]
149
+
150
+ def location: () -> Location
151
+
152
+ def name_locations: () -> Array[Location]
153
+
154
+ def type: () -> Types::t?
155
+
156
+ def type_fingerprint: () -> untyped
157
+ end
158
+
159
+ class AttrReaderMember < AttributeMember
160
+ end
161
+
162
+ class AttrWriterMember < AttributeMember
163
+ end
164
+
165
+ class AttrAccessorMember < AttributeMember
166
+ end
167
+
168
+ class InstanceVariableMember < Base
169
+ attr_reader annotation: Annotations::InstanceVariableAnnotation
170
+
171
+ def initialize: (Buffer, Annotations::InstanceVariableAnnotation) -> void
172
+
173
+ def name: () -> Symbol
174
+
175
+ def type: () -> Types::t
176
+
177
+ def location: () -> Location
178
+
179
+ def type_fingerprint: () -> untyped
180
+ end
181
+
182
+ class ModuleSelfMember < Base
183
+ attr_reader annotation: Annotations::ModuleSelfAnnotation
184
+
185
+ def initialize: (Buffer, Annotations::ModuleSelfAnnotation) -> void
186
+
187
+ def name: () -> TypeName
188
+
189
+ def args: () -> Array[Types::t]
190
+
191
+ def location: () -> Location
192
+
193
+ def type_fingerprint: () -> untyped
194
+ end
195
+ end
196
+ end
197
+ end
198
+ end
data/sig/buffer.rbs CHANGED
@@ -6,21 +6,45 @@ module RBS
6
6
  type loc = [Integer, Integer]
7
7
 
8
8
  # Name to identify Buffer.
9
- attr_reader name: untyped
9
+ attr_reader name: Pathname
10
10
 
11
11
  # The content of the buffer.
12
12
  attr_reader content: String
13
13
 
14
- @lines: Array[String]
14
+ attr_reader parent: [Buffer, Array[Range[Integer]]]?
15
15
 
16
- @ranges: Array[Range[Integer]]
17
-
18
- def initialize: (name: untyped name, content: String content) -> void
16
+ def initialize: (name: Pathname name, content: String content) -> void
17
+ | (content: String content, parent: [Buffer, Array[Range[Integer]]] parent) -> void
19
18
 
19
+ # Array of lines of the content, without the EOL
20
+ #
21
+ # ```rb
22
+ # buffer = Buffer.new(name: name, content: "123\nabc")
23
+ # buffer.lines # => ["123", "abc"]
24
+ # ```
25
+ #
26
+ # If the input has EOL at the end of the file, the `lines` has an empty string at the end.
27
+ #
28
+ # ```rb
29
+ # buffer = Buffer.new(name: name, content: "123\nabc\n")
30
+ # buffer.lines # => ["123", "abc", ""]
31
+ # ```
32
+ #
20
33
  def lines: () -> Array[String]
21
34
 
35
+ @ranges: Array[Range[Integer]]?
36
+ # Array of ranges that stores the ranges of the each line, without the EOL
37
+ #
38
+ # ```rb
39
+ # buffer = Buffer.new(name: name, content: "123\nabc\n")
40
+ # buffer.ranges # => [0...3, 4...7, 8...8]
41
+ # ```
42
+ #
22
43
  def ranges: () -> Array[Range[Integer]]
23
44
 
45
+ # Returns the number of the lines
46
+ def line_count: () -> Integer
47
+
24
48
  # Translate position to location.
25
49
  def pos_to_loc: (Integer pos) -> loc
26
50
 
@@ -28,5 +52,57 @@ module RBS
28
52
  def loc_to_pos: (loc loc) -> Integer
29
53
 
30
54
  def last_position: () -> Integer
55
+
56
+ # Translate `Prism::Location` to `RBS::Location` attached to this buffer
57
+ #
58
+ # It assumes the `Prism::Location` has a source which is equivalent to `self`.
59
+ #
60
+ def rbs_location: (Prism::Location) -> Location
61
+ | (Prism::Location, Prism::Location) -> Location
62
+
63
+ # Translate a byte offset (into the top buffer's source) to a character offset.
64
+ #
65
+ # Resolution is delegated to the top buffer, which keeps a sparse cache of
66
+ # resolved (byte, char) pairs so successive calls scan only the delta from the
67
+ # nearest cached pair. Amortizes to O(content_size) across all calls; a single
68
+ # call is one byteslice + length.
69
+ #
70
+ def character_offset: (Integer byte_offset) -> Integer
71
+
72
+ # Sparse cache backing `#character_offset`: a pair `[byte_keys, char_values]`
73
+ # kept in ascending byte order to support binary search.
74
+ @character_offset_cache: [Array[Integer], Array[Integer]]?
75
+
76
+ # Construct a buffer from substrings of this buffer.
77
+ #
78
+ # The returned buffer contains lines from given ranges.
79
+ #
80
+ # ```rb
81
+ # buffer = Buffer.new(name: name, content: <<TEXT)
82
+ # 12345
83
+ # abcde
84
+ # ABCDE
85
+ # TEXT
86
+ #
87
+ # buffer.sub_buffer(lines: [0...1, 2...3]) # => Buffer with content = 1\n34
88
+ # buffer.sub_buffer(lines: [5..7]) # => Raises an error because the range contains newline
89
+ # ```
90
+ #
91
+ # `byte_lines_hint:` is an optional performance hint: byte ranges corresponding
92
+ # to `lines:`. When provided, slicing uses `byteslice` (O(slice_size) per line)
93
+ # instead of `content[char_range]`, which on a multi-byte string is O(content_size)
94
+ # per call. Result is identical either way.
95
+ #
96
+ %a{pure} def sub_buffer: (lines: Array[Range[Integer]], ?byte_lines_hint: Array[Range[Integer]]?) -> Buffer
97
+
98
+ %a{pure} def parent_buffer: () -> Buffer?
99
+
100
+ %a{pure} def parent_position: (Integer) -> Integer?
101
+
102
+ %a{pure} def absolute_position: (Integer) -> Integer?
103
+
104
+ %a{pure} def top_buffer: () -> Buffer
105
+
106
+ %a{pure} def detach: () -> Buffer
31
107
  end
32
108
  end
data/sig/cli/diff.rbs CHANGED
@@ -1,21 +1,15 @@
1
1
  module RBS
2
2
  class CLI
3
3
  class Diff
4
- @format: String
5
4
  @stdout: _IO
6
5
  @stderr: _IO
7
- @diff: RBS::Diff
8
6
 
9
- def initialize: (
10
- argv: Array[String],
11
- library_options: RBS::CLI::LibraryOptions,
12
- ?stdout: _IO,
13
- ?stderr: _IO,
14
- ) -> void
7
+ def initialize: (?stdout: _IO, ?stderr: _IO) -> void
15
8
 
16
- def run: () -> void
17
- def run_diff: () -> void
18
- def run_markdown: () -> void
9
+ def run: (library_options: RBS::CLI::LibraryOptions, argv: Array[String]) -> Integer
10
+
11
+ def run_diff: (RBS::Diff) -> void
12
+ def run_markdown: (RBS::Diff) -> void
19
13
  end
20
14
  end
21
15
  end
data/sig/cli/validate.rbs CHANGED
@@ -3,15 +3,22 @@ module RBS
3
3
  class Validate
4
4
  class Errors
5
5
  @limit: Integer?
6
- @exit_error: boolish
7
- @has_syntax_error: bool
8
6
  @errors: Array[BaseError]
9
7
 
10
- def initialize: (limit: Integer?, exit_error: boolish) -> void
8
+ # The tag that will be thrown in #finish method
9
+ @tag: top
10
+
11
+ def initialize: (limit: Integer?) -> void
11
12
 
12
13
  def add: (BaseError) -> void
13
14
 
14
- def finish: () -> void
15
+ # Throws the `@tag` with 0 or 1
16
+ #
17
+ # Must be called from the block passed to `#try` method.
18
+ #
19
+ def finish: () -> Integer
20
+
21
+ def try: () { () -> void } -> Integer
15
22
 
16
23
  private
17
24
 
@@ -25,7 +32,7 @@ module RBS
25
32
 
26
33
  def initialize: (args: Array[String], options: LibraryOptions) -> void
27
34
 
28
- def run: () -> void
35
+ def run: () -> Integer
29
36
 
30
37
  private
31
38
 
@@ -35,9 +42,6 @@ module RBS
35
42
  def validate_constant: () -> void
36
43
  def validate_global: () -> void
37
44
  def validate_type_alias: () -> void
38
- def no_self_type_validator: (::RBS::Types::t | ::RBS::MethodType type) -> void
39
- def no_classish_type_validator: (::RBS::Types::t | ::RBS::MethodType type) -> void
40
- def void_type_context_validator: (::RBS::Types::t | ::RBS::MethodType type, ?bool allowed_here) -> void
41
45
  end
42
46
  end
43
47
  end