rbs 3.9.5 → 4.0.0

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 (330) hide show
  1. checksums.yaml +4 -4
  2. data/.clang-format +74 -0
  3. data/.clangd +2 -0
  4. data/.github/dependabot.yml +14 -14
  5. data/.github/workflows/bundle-update.yml +60 -0
  6. data/.github/workflows/c-check.yml +58 -0
  7. data/.github/workflows/comments.yml +5 -3
  8. data/.github/workflows/dependabot.yml +2 -2
  9. data/.github/workflows/ruby.yml +40 -32
  10. data/.github/workflows/rust.yml +95 -0
  11. data/.github/workflows/typecheck.yml +2 -2
  12. data/.github/workflows/windows.yml +3 -3
  13. data/.gitignore +4 -0
  14. data/.rubocop.yml +2 -2
  15. data/.vscode/extensions.json +5 -0
  16. data/.vscode/settings.json +19 -0
  17. data/CHANGELOG.md +284 -0
  18. data/README.md +38 -1
  19. data/Rakefile +144 -29
  20. data/Steepfile +2 -0
  21. data/config.yml +634 -62
  22. data/core/array.rbs +307 -227
  23. data/core/basic_object.rbs +9 -8
  24. data/core/binding.rbs +0 -2
  25. data/core/builtin.rbs +2 -2
  26. data/core/class.rbs +6 -5
  27. data/core/comparable.rbs +55 -34
  28. data/core/complex.rbs +104 -78
  29. data/core/dir.rbs +61 -49
  30. data/core/encoding.rbs +12 -15
  31. data/core/enumerable.rbs +188 -87
  32. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  33. data/core/enumerator.rbs +65 -2
  34. data/core/errno.rbs +11 -2
  35. data/core/errors.rbs +58 -29
  36. data/core/exception.rbs +13 -13
  37. data/core/fiber.rbs +74 -54
  38. data/core/file.rbs +280 -177
  39. data/core/file_test.rbs +3 -3
  40. data/core/float.rbs +257 -92
  41. data/core/gc.rbs +425 -281
  42. data/core/hash.rbs +1045 -739
  43. data/core/integer.rbs +135 -137
  44. data/core/io/buffer.rbs +53 -42
  45. data/core/io/wait.rbs +13 -35
  46. data/core/io.rbs +196 -148
  47. data/core/kernel.rbs +216 -155
  48. data/core/marshal.rbs +4 -4
  49. data/core/match_data.rbs +15 -13
  50. data/core/math.rbs +107 -66
  51. data/core/method.rbs +69 -33
  52. data/core/module.rbs +244 -106
  53. data/core/nil_class.rbs +7 -6
  54. data/core/numeric.rbs +74 -63
  55. data/core/object.rbs +9 -11
  56. data/core/object_space.rbs +30 -23
  57. data/core/pathname.rbs +1322 -0
  58. data/core/proc.rbs +95 -58
  59. data/core/process.rbs +222 -202
  60. data/core/ractor.rbs +371 -515
  61. data/core/random.rbs +21 -3
  62. data/core/range.rbs +159 -57
  63. data/core/rational.rbs +60 -89
  64. data/core/rbs/unnamed/argf.rbs +60 -53
  65. data/core/rbs/unnamed/env_class.rbs +19 -14
  66. data/core/rbs/unnamed/main_class.rbs +123 -0
  67. data/core/rbs/unnamed/random.rbs +11 -118
  68. data/core/regexp.rbs +258 -214
  69. data/core/ruby.rbs +53 -0
  70. data/core/ruby_vm.rbs +38 -34
  71. data/core/rubygems/config_file.rbs +5 -5
  72. data/core/rubygems/errors.rbs +4 -71
  73. data/core/rubygems/requirement.rbs +5 -5
  74. data/core/rubygems/rubygems.rbs +16 -82
  75. data/core/rubygems/version.rbs +2 -3
  76. data/core/set.rbs +490 -360
  77. data/core/signal.rbs +26 -16
  78. data/core/string.rbs +3303 -1365
  79. data/core/struct.rbs +27 -26
  80. data/core/symbol.rbs +41 -34
  81. data/core/thread.rbs +135 -74
  82. data/core/time.rbs +81 -50
  83. data/core/trace_point.rbs +41 -35
  84. data/core/true_class.rbs +2 -2
  85. data/core/unbound_method.rbs +24 -16
  86. data/core/warning.rbs +7 -7
  87. data/docs/aliases.md +79 -0
  88. data/docs/collection.md +3 -3
  89. data/docs/config.md +171 -0
  90. data/docs/encoding.md +56 -0
  91. data/docs/gem.md +0 -1
  92. data/docs/inline.md +576 -0
  93. data/docs/sigs.md +3 -3
  94. data/docs/syntax.md +46 -16
  95. data/docs/type_fingerprint.md +21 -0
  96. data/exe/rbs +1 -1
  97. data/ext/rbs_extension/ast_translation.c +1513 -0
  98. data/ext/rbs_extension/ast_translation.h +37 -0
  99. data/ext/rbs_extension/class_constants.c +185 -0
  100. data/{include/rbs/constants.h → ext/rbs_extension/class_constants.h} +22 -1
  101. data/ext/rbs_extension/compat.h +10 -0
  102. data/ext/rbs_extension/extconf.rb +25 -1
  103. data/ext/rbs_extension/legacy_location.c +294 -0
  104. data/ext/rbs_extension/legacy_location.h +82 -0
  105. data/ext/rbs_extension/main.c +468 -24
  106. data/ext/rbs_extension/rbs_extension.h +6 -21
  107. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  108. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  109. data/include/rbs/ast.h +1022 -0
  110. data/include/rbs/defines.h +86 -0
  111. data/include/rbs/lexer.h +206 -0
  112. data/include/rbs/location.h +40 -0
  113. data/include/rbs/parser.h +153 -0
  114. data/include/rbs/string.h +47 -0
  115. data/include/rbs/util/rbs_allocator.h +59 -0
  116. data/include/rbs/util/rbs_assert.h +20 -0
  117. data/include/rbs/util/rbs_buffer.h +83 -0
  118. data/include/rbs/util/rbs_constant_pool.h +6 -70
  119. data/include/rbs/util/rbs_encoding.h +282 -0
  120. data/include/rbs/util/rbs_unescape.h +24 -0
  121. data/include/rbs.h +9 -2
  122. data/lib/rbs/annotate/formatter.rb +3 -13
  123. data/lib/rbs/annotate/rdoc_annotator.rb +3 -1
  124. data/lib/rbs/annotate/rdoc_source.rb +1 -1
  125. data/lib/rbs/ast/annotation.rb +1 -1
  126. data/lib/rbs/ast/comment.rb +1 -1
  127. data/lib/rbs/ast/declarations.rb +10 -10
  128. data/lib/rbs/ast/members.rb +14 -14
  129. data/lib/rbs/ast/ruby/annotations.rb +409 -0
  130. data/lib/rbs/ast/ruby/comment_block.rb +245 -0
  131. data/lib/rbs/ast/ruby/declarations.rb +281 -0
  132. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  133. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  134. data/lib/rbs/ast/ruby/members.rb +723 -0
  135. data/lib/rbs/ast/type_param.rb +24 -4
  136. data/lib/rbs/buffer.rb +105 -20
  137. data/lib/rbs/cli/diff.rb +16 -15
  138. data/lib/rbs/cli/validate.rb +63 -126
  139. data/lib/rbs/cli.rb +56 -24
  140. data/lib/rbs/collection/config/lockfile_generator.rb +14 -2
  141. data/lib/rbs/collection/sources/git.rb +1 -0
  142. data/lib/rbs/collection.rb +0 -1
  143. data/lib/rbs/definition.rb +6 -1
  144. data/lib/rbs/definition_builder/ancestor_builder.rb +121 -65
  145. data/lib/rbs/definition_builder/method_builder.rb +65 -30
  146. data/lib/rbs/definition_builder.rb +177 -20
  147. data/lib/rbs/diff.rb +7 -1
  148. data/lib/rbs/environment/class_entry.rb +69 -0
  149. data/lib/rbs/environment/module_entry.rb +66 -0
  150. data/lib/rbs/environment.rb +402 -214
  151. data/lib/rbs/environment_loader.rb +2 -8
  152. data/lib/rbs/errors.rb +31 -21
  153. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  154. data/lib/rbs/inline_parser.rb +542 -0
  155. data/lib/rbs/location_aux.rb +36 -4
  156. data/lib/rbs/locator.rb +5 -1
  157. data/lib/rbs/method_type.rb +5 -3
  158. data/lib/rbs/namespace.rb +0 -7
  159. data/lib/rbs/parser_aux.rb +35 -7
  160. data/lib/rbs/prototype/helpers.rb +57 -0
  161. data/lib/rbs/prototype/rb.rb +3 -28
  162. data/lib/rbs/prototype/rbi.rb +3 -20
  163. data/lib/rbs/prototype/runtime.rb +10 -2
  164. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  165. data/lib/rbs/resolver/type_name_resolver.rb +116 -38
  166. data/lib/rbs/source.rb +99 -0
  167. data/lib/rbs/subtractor.rb +7 -4
  168. data/lib/rbs/test/type_check.rb +19 -2
  169. data/lib/rbs/type_name.rb +1 -8
  170. data/lib/rbs/types.rb +91 -79
  171. data/lib/rbs/unit_test/convertibles.rb +1 -0
  172. data/lib/rbs/unit_test/type_assertions.rb +35 -8
  173. data/lib/rbs/validator.rb +2 -2
  174. data/lib/rbs/version.rb +1 -1
  175. data/lib/rbs.rb +13 -2
  176. data/lib/rdoc/discover.rb +1 -1
  177. data/lib/rdoc_plugin/parser.rb +3 -3
  178. data/rbs.gemspec +4 -2
  179. data/rust/.gitignore +1 -0
  180. data/rust/Cargo.lock +378 -0
  181. data/rust/Cargo.toml +7 -0
  182. data/rust/ruby-rbs/Cargo.toml +22 -0
  183. data/rust/ruby-rbs/build.rs +764 -0
  184. data/rust/ruby-rbs/examples/locations.rs +60 -0
  185. data/rust/ruby-rbs/src/lib.rs +1 -0
  186. data/rust/ruby-rbs/src/node/mod.rs +742 -0
  187. data/rust/ruby-rbs/tests/sanity.rs +47 -0
  188. data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
  189. data/rust/ruby-rbs-sys/Cargo.toml +23 -0
  190. data/rust/ruby-rbs-sys/build.rs +204 -0
  191. data/rust/ruby-rbs-sys/src/lib.rs +50 -0
  192. data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
  193. data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
  194. data/rust/ruby-rbs-sys/wrapper.h +1 -0
  195. data/schema/typeParam.json +17 -1
  196. data/sig/ancestor_builder.rbs +1 -1
  197. data/sig/annotate/formatter.rbs +2 -2
  198. data/sig/annotate/rdoc_annotater.rbs +1 -1
  199. data/sig/ast/ruby/annotations.rbs +421 -0
  200. data/sig/ast/ruby/comment_block.rbs +127 -0
  201. data/sig/ast/ruby/declarations.rbs +158 -0
  202. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  203. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  204. data/sig/ast/ruby/members.rbs +178 -0
  205. data/sig/buffer.rbs +63 -5
  206. data/sig/cli/diff.rbs +5 -11
  207. data/sig/cli/validate.rbs +12 -8
  208. data/sig/cli.rbs +18 -18
  209. data/sig/definition.rbs +6 -0
  210. data/sig/definition_builder.rbs +3 -1
  211. data/sig/environment/class_entry.rbs +50 -0
  212. data/sig/environment/module_entry.rbs +50 -0
  213. data/sig/environment.rbs +94 -87
  214. data/sig/errors.rbs +26 -20
  215. data/sig/inline_parser/comment_association.rbs +71 -0
  216. data/sig/inline_parser.rbs +124 -0
  217. data/sig/location.rbs +32 -7
  218. data/sig/locator.rbs +0 -2
  219. data/sig/manifest.yaml +0 -1
  220. data/sig/method_builder.rbs +9 -4
  221. data/sig/namespace.rbs +0 -5
  222. data/sig/parser.rbs +67 -13
  223. data/sig/prototype/helpers.rbs +2 -0
  224. data/sig/resolver/type_name_resolver.rbs +35 -7
  225. data/sig/source.rbs +48 -0
  226. data/sig/type_param.rbs +13 -8
  227. data/sig/typename.rbs +0 -5
  228. data/sig/types.rbs +10 -8
  229. data/sig/unit_test/spy.rbs +0 -8
  230. data/sig/unit_test/type_assertions.rbs +11 -0
  231. data/src/ast.c +1604 -0
  232. data/src/lexer.c +3194 -0
  233. data/src/lexer.re +154 -0
  234. data/src/lexstate.c +212 -0
  235. data/src/location.c +31 -0
  236. data/src/parser.c +4205 -0
  237. data/src/string.c +41 -0
  238. data/src/util/rbs_allocator.c +165 -0
  239. data/src/util/rbs_assert.c +19 -0
  240. data/src/util/rbs_buffer.c +54 -0
  241. data/src/util/rbs_constant_pool.c +18 -92
  242. data/src/util/rbs_encoding.c +21308 -0
  243. data/src/util/rbs_unescape.c +167 -0
  244. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  245. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  246. data/stdlib/cgi/0/core.rbs +9 -393
  247. data/stdlib/cgi/0/manifest.yaml +1 -0
  248. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  249. data/stdlib/coverage/0/coverage.rbs +7 -4
  250. data/stdlib/date/0/date.rbs +92 -79
  251. data/stdlib/date/0/date_time.rbs +25 -24
  252. data/stdlib/delegate/0/delegator.rbs +10 -7
  253. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  254. data/stdlib/digest/0/digest.rbs +110 -0
  255. data/stdlib/erb/0/erb.rbs +748 -347
  256. data/stdlib/etc/0/etc.rbs +55 -50
  257. data/stdlib/fileutils/0/fileutils.rbs +158 -139
  258. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  259. data/stdlib/io-console/0/io-console.rbs +2 -2
  260. data/stdlib/json/0/json.rbs +226 -179
  261. data/stdlib/monitor/0/monitor.rbs +3 -3
  262. data/stdlib/net-http/0/net-http.rbs +162 -134
  263. data/stdlib/objspace/0/objspace.rbs +17 -34
  264. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  265. data/stdlib/open3/0/open3.rbs +469 -10
  266. data/stdlib/openssl/0/openssl.rbs +475 -357
  267. data/stdlib/optparse/0/optparse.rbs +26 -17
  268. data/stdlib/pathname/0/pathname.rbs +11 -1381
  269. data/stdlib/pp/0/pp.rbs +9 -8
  270. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  271. data/stdlib/pstore/0/pstore.rbs +35 -30
  272. data/stdlib/psych/0/psych.rbs +65 -12
  273. data/stdlib/psych/0/store.rbs +2 -4
  274. data/stdlib/pty/0/pty.rbs +9 -6
  275. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  276. data/stdlib/rdoc/0/code_object.rbs +4 -3
  277. data/stdlib/rdoc/0/comment.rbs +2 -0
  278. data/stdlib/rdoc/0/options.rbs +76 -0
  279. data/stdlib/rdoc/0/parser.rbs +1 -1
  280. data/stdlib/rdoc/0/rdoc.rbs +7 -5
  281. data/stdlib/rdoc/0/store.rbs +2 -2
  282. data/stdlib/resolv/0/resolv.rbs +25 -68
  283. data/stdlib/ripper/0/ripper.rbs +25 -19
  284. data/stdlib/securerandom/0/manifest.yaml +2 -0
  285. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  286. data/stdlib/shellwords/0/shellwords.rbs +2 -2
  287. data/stdlib/singleton/0/singleton.rbs +3 -0
  288. data/stdlib/socket/0/addrinfo.rbs +9 -9
  289. data/stdlib/socket/0/basic_socket.rbs +3 -3
  290. data/stdlib/socket/0/ip_socket.rbs +10 -8
  291. data/stdlib/socket/0/socket.rbs +23 -10
  292. data/stdlib/socket/0/tcp_server.rbs +1 -1
  293. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  294. data/stdlib/socket/0/udp_socket.rbs +1 -1
  295. data/stdlib/socket/0/unix_server.rbs +1 -1
  296. data/stdlib/stringio/0/stringio.rbs +1177 -85
  297. data/stdlib/strscan/0/string_scanner.rbs +27 -25
  298. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  299. data/stdlib/time/0/time.rbs +8 -6
  300. data/stdlib/timeout/0/timeout.rbs +63 -7
  301. data/stdlib/tsort/0/cyclic.rbs +3 -0
  302. data/stdlib/tsort/0/tsort.rbs +7 -6
  303. data/stdlib/uri/0/common.rbs +42 -20
  304. data/stdlib/uri/0/file.rbs +3 -3
  305. data/stdlib/uri/0/generic.rbs +26 -18
  306. data/stdlib/uri/0/http.rbs +2 -2
  307. data/stdlib/uri/0/ldap.rbs +2 -2
  308. data/stdlib/uri/0/mailto.rbs +3 -3
  309. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  310. data/stdlib/zlib/0/deflate.rbs +4 -3
  311. data/stdlib/zlib/0/gzip_reader.rbs +6 -6
  312. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  313. data/stdlib/zlib/0/inflate.rbs +1 -1
  314. data/stdlib/zlib/0/need_dict.rbs +1 -1
  315. data/stdlib/zlib/0/zstream.rbs +1 -0
  316. metadata +121 -18
  317. data/ext/rbs_extension/lexer.c +0 -2728
  318. data/ext/rbs_extension/lexer.h +0 -179
  319. data/ext/rbs_extension/lexer.re +0 -147
  320. data/ext/rbs_extension/lexstate.c +0 -175
  321. data/ext/rbs_extension/location.c +0 -325
  322. data/ext/rbs_extension/location.h +0 -85
  323. data/ext/rbs_extension/parser.c +0 -2982
  324. data/ext/rbs_extension/parser.h +0 -18
  325. data/ext/rbs_extension/parserstate.c +0 -411
  326. data/ext/rbs_extension/parserstate.h +0 -163
  327. data/ext/rbs_extension/unescape.c +0 -32
  328. data/include/rbs/ruby_objs.h +0 -72
  329. data/src/constants.c +0 -153
  330. data/src/ruby_objs.c +0 -799
data/sig/location.rbs CHANGED
@@ -4,14 +4,20 @@ module RBS
4
4
  #
5
5
  # A location can have _child_ locations.
6
6
  #
7
- class Location[in RequiredChildKeys, in OptionalChildKeys]
7
+ class Location[in RequiredChildKeys = untyped, in OptionalChildKeys = untyped]
8
8
  # The buffer this location points on.
9
9
  attr_reader buffer (): Buffer
10
10
 
11
- # The index of character the range starts from.
11
+ # The absolute start index of character the range starts from
12
+ #
13
+ # It returns the index in the `buffer.top_buffer`.
14
+ #
12
15
  attr_reader start_pos (): Integer
13
16
 
14
- # The index of character the range ends at.
17
+ # The absolute end index of character the range ends at
18
+ #
19
+ # It returns the index in the `buffer.top_buffer`.
20
+ #
15
21
  attr_reader end_pos (): Integer
16
22
 
17
23
  def initialize: (Buffer, Integer start_pos, Integer end_pos) -> void
@@ -24,26 +30,37 @@ module RBS
24
30
  # Returns the name of the buffer.
25
31
  def name: () -> untyped
26
32
 
27
- # Line of the `start_pos` (1 origin)
33
+ # The *raw* index of character the range starts from.
34
+ attr_reader _start_pos (): Integer
35
+
36
+ # The *raw* index of character the range ends at.
37
+ attr_reader _end_pos (): Integer
38
+
39
+ # Line of the `start_pos` (1 origin, absolute)
28
40
  attr_reader start_line (): Integer
29
41
 
30
- # Column of the `start_pos` (0 origin)
42
+ # Column of the `start_pos` (0 origin, absolute)
31
43
  attr_reader start_column (): Integer
32
44
 
33
- # Line of the `end_pos` (1 origin)
45
+ # Line of the `end_pos` (1 origin, absolute)
34
46
  attr_reader end_line (): Integer
35
47
 
36
- # Column of the `end_pos` (0 origin)
48
+ # Column of the `end_pos` (0 origin, absolute)
37
49
  attr_reader end_column (): Integer
38
50
 
51
+ # The absolute line-column pair of the start position
52
+ #
39
53
  attr_reader start_loc (): Buffer::loc
40
54
 
41
55
  @start_loc: Buffer::loc?
42
56
 
57
+ # The absolute line-column pair of the end position
58
+ #
43
59
  attr_reader end_loc (): Buffer::loc
44
60
 
45
61
  @end_loc: Buffer::loc?
46
62
 
63
+ # The absolute range of the start and end position
47
64
  attr_reader range (): Range[Integer]
48
65
 
49
66
  @range: Range[Integer]?
@@ -97,6 +114,14 @@ module RBS
97
114
 
98
115
  def key?: (Symbol) -> bool
99
116
 
117
+ # Returns the location of the buffer, but the buffer is detached from the parent buffer
118
+ #
119
+ def local_location: () -> self
120
+
121
+ # Returns the source of `#local_location`
122
+ #
123
+ def local_source: () -> String
124
+
100
125
  private
101
126
 
102
127
  def _add_required_child: (RequiredChildKeys name, Integer start_pos, Integer end_pos) -> void
data/sig/locator.rbs CHANGED
@@ -37,8 +37,6 @@ module RBS
37
37
  #
38
38
  def find2: (line: Integer, column: Integer) -> [Symbol?, Array[component]]?
39
39
 
40
- private
41
-
42
40
  def find_in_directive: (Integer pos, AST::Directives::t, Array[component]) -> bool
43
41
 
44
42
  def find_in_decl: (Integer pos, decl: AST::Declarations::t, array: Array[component]) -> bool
data/sig/manifest.yaml CHANGED
@@ -1,6 +1,5 @@
1
1
  dependencies:
2
2
  - name: logger
3
- - name: pathname
4
3
  - name: json
5
4
  - name: optparse
6
5
  - name: tsort
@@ -16,16 +16,19 @@ module RBS
16
16
  #
17
17
  class Definition
18
18
  type original = AST::Members::MethodDefinition | AST::Members::Alias | AST::Members::AttrAccessor | AST::Members::AttrWriter | AST::Members::AttrReader
19
+ | AST::Ruby::Members::DefMember | AST::Ruby::Members::AttrReaderMember | AST::Ruby::Members::AttrWriterMember | AST::Ruby::Members::AttrAccessorMember
20
+
21
+ type overloading_definition = AST::Members::MethodDefinition | AST::Ruby::Members::DefMember
19
22
 
20
23
  type accessibility = RBS::Definition::accessibility
21
24
 
22
25
  attr_reader name: Symbol
23
26
  attr_reader type: instance_type
24
27
  attr_reader originals: Array[original]
25
- attr_reader overloads: Array[AST::Members::MethodDefinition]
28
+ attr_reader overloads: Array[overloading_definition]
26
29
  attr_reader accessibilities: Array[accessibility]
27
30
 
28
- def initialize: (name: Symbol, type: instance_type, originals: Array[original], overloads: Array[AST::Members::MethodDefinition], accessibilities: Array[accessibility]) -> void
31
+ def initialize: (name: Symbol, type: instance_type, originals: Array[original], overloads: Array[overloading_definition], accessibilities: Array[accessibility]) -> void
29
32
 
30
33
  def original: () -> original?
31
34
 
@@ -74,9 +77,11 @@ module RBS
74
77
 
75
78
  def build_attribute: (Methods, Methods::instance_type, member: AST::Members::AttrAccessor | AST::Members::AttrReader | AST::Members::AttrWriter, accessibility: Definition::accessibility) -> void
76
79
 
77
- def build_method: (Methods, Methods::instance_type, member: AST::Members::MethodDefinition, accessibility: Definition::accessibility) -> void
80
+ def build_ruby_attribute: (Methods, Methods::instance_type, member: AST::Ruby::Members::AttrReaderMember | AST::Ruby::Members::AttrWriterMember | AST::Ruby::Members::AttrAccessorMember, accessibility: Definition::accessibility) -> void
81
+
82
+ def build_method: (Methods, Methods::instance_type, member: AST::Members::MethodDefinition | AST::Ruby::Members::DefMember, accessibility: Definition::accessibility) -> void
78
83
 
79
- def each_member_with_accessibility: (Array[AST::Members::t | AST::Declarations::t], ?accessibility: Definition::accessibility) { (AST::Members::t | AST::Declarations::t, Definition::accessibility) -> void } -> void
84
+ def each_rbs_member_with_accessibility: (Array[AST::Members::t | AST::Declarations::t], ?accessibility: Definition::accessibility) { (AST::Members::t | AST::Declarations::t, Definition::accessibility) -> void } -> void
80
85
 
81
86
  def update: (env: Environment, except: _Each[TypeName]) -> MethodBuilder
82
87
  end
data/sig/namespace.rbs CHANGED
@@ -139,8 +139,3 @@ module RBS
139
139
  | () -> Enumerator[Namespace, void]
140
140
  end
141
141
  end
142
-
143
- module Kernel
144
- # Deprecated: Use `RBS::Namespace.parse` instead
145
- %a{deprecated} def Namespace: (String) -> RBS::Namespace
146
- end
data/sig/parser.rbs CHANGED
@@ -20,13 +20,13 @@ module RBS
20
20
 
21
21
  # Parse a method type and return it
22
22
  #
23
- # When `range` keyword is specified, it starts parsing from the `begin` to the `end` of the range.
23
+ # When `byte_range` keyword is specified, it starts parsing from the `begin` to the `end` of the range.
24
24
  #
25
25
  # ```ruby
26
- # RBS::Parser.parse_method_type("() -> void") # => `() -> void`
27
- # RBS::Parser.parse_method_type("() -> void", range: 0...) # => `() -> void`
28
- # RBS::Parser.parse_method_type("() -> void () -> String", range: 11...) # => `() -> String`
29
- # RBS::Parser.parse_method_type("() -> void () -> String", range: 23...) # => nil
26
+ # RBS::Parser.parse_method_type("() -> void") # => `() -> void`
27
+ # RBS::Parser.parse_method_type("() -> void", byte_range: 0...) # => `() -> void`
28
+ # RBS::Parser.parse_method_type("() -> void () -> String", byte_range: 11...) # => `() -> String`
29
+ # RBS::Parser.parse_method_type("() -> void () -> String", byte_range: 23...) # => nil
30
30
  # ```
31
31
  #
32
32
  # When `require_eof` is `true`, an error is raised if more tokens are left in the input.
@@ -39,17 +39,18 @@ module RBS
39
39
  # RBS::Parser.parse_method_type("", require_eof: true) # => nil
40
40
  # ```
41
41
  #
42
- def self.parse_method_type: (Buffer | String, ?range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool) -> MethodType?
42
+ def self.parse_method_type: (Buffer | String, ?byte_range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool) -> MethodType?
43
+ | %a{deprecated: Use `byte_range:` keyword instead of `range:`} (Buffer | String, range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool) -> MethodType?
43
44
 
44
45
  # Parse a type and return it
45
46
  #
46
- # When `range` keyword is specified, it starts parsing from the `begin` to the `end` of the range.
47
+ # When `byte_range` keyword is specified, it starts parsing from the `begin` to the `end` of the range.
47
48
  #
48
49
  # ```ruby
49
- # RBS::Parser.parse_type("String") # => `String`
50
- # RBS::Parser.parse_type("String", range: 0...) # => `String`
51
- # RBS::Parser.parse_type("String Integer", pos: 7...) # => `Integer`
52
- # RBS::Parser.parse_type("String Integer", pos: 14...) # => nil
50
+ # RBS::Parser.parse_type("String") # => `String`
51
+ # RBS::Parser.parse_type("String", byte_range: 0...) # => `String`
52
+ # RBS::Parser.parse_type("String Integer", byte_range: 7...) # => `Integer`
53
+ # RBS::Parser.parse_type("String Integer", byte_range: 14...) # => nil
53
54
  # ```
54
55
  #
55
56
  # When `require_eof` is `true`, an error is raised if more tokens are left in the input.
@@ -62,12 +63,45 @@ module RBS
62
63
  # RBS::Parser.parse_type("", require_eof: true) # => nil
63
64
  # ```
64
65
  #
65
- def self.parse_type: (Buffer | String, ?range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool) -> Types::t?
66
+ # The `void_allowed` keyword controls whether `void` is allowed as a type.
67
+ #
68
+ # ```ruby
69
+ # RBS::Parser.parse_type("void", void_allowed: true) # => `void`
70
+ # RBS::Parser.parse_type("void", void_allowed: false) # => Raises an syntax error
71
+ # ```
72
+ #
73
+ # The `self_allowed` keyword controls whether `self` is allowed as a type.
74
+ #
75
+ # ```ruby
76
+ # RBS::Parser.parse_type("self", self_allowed: true) # => `self`
77
+ # RBS::Parser.parse_type("self", self_allowed: false) # => Raises an syntax error
78
+ # ```
79
+ #
80
+ def self.parse_type: (Buffer | String, ?byte_range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool, ?void_allowed: bool, ?self_allowed: bool, ?classish_allowed: bool) -> Types::t?
81
+ | %a{deprecated: Use `byte_range:` keyword instead of `range:`} (Buffer | String, range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool, ?void_allowed: bool, ?self_allowed: bool, ?classish_allowed: bool) -> Types::t?
66
82
 
67
83
  # Parse whole RBS file and return an array of declarations
68
84
  #
69
85
  def self.parse_signature: (Buffer | String) -> [Buffer, Array[AST::Directives::t], Array[AST::Declarations::t]]
70
86
 
87
+ # Parse a list of type parameters and return it
88
+ #
89
+ # ```ruby
90
+ # RBS::Parser.parse_type_params("") # => nil
91
+ # RBS::Parser.parse_type_params("[U, V]") # => `[:U, :V]`
92
+ # RBS::Parser.parse_type_params("[in U, V < Integer]") # => `[:U, :V]`
93
+ # ```
94
+ #
95
+ # When `module_type_params` is `false`, an error is raised if `unchecked`, `in` or `out` are used.
96
+ #
97
+ # ```ruby
98
+ # RBS::Parser.parse_type_params("[unchecked U]", module_type_params: false) # => Raises an error
99
+ # RBS::Parser.parse_type_params("[out U]", module_type_params: false) # => Raises an error
100
+ # RBS::Parser.parse_type_params("[in U]", module_type_params: false) # => Raises an error
101
+ # ```
102
+ #
103
+ def self.parse_type_params: (Buffer | String, ?module_type_params: bool) -> Array[AST::TypeParam]
104
+
71
105
  # Returns the magic comment from the buffer
72
106
  #
73
107
  def self.magic_comment: (Buffer) -> AST::Directives::ResolveTypeNames?
@@ -82,18 +116,38 @@ module RBS
82
116
 
83
117
  KEYWORDS: Hash[String, bot]
84
118
 
119
+ # Parse a leading annotation and return it
120
+ #
121
+ # Raises an exception if the source text contains a syntax error.
122
+ #
123
+ def self.parse_inline_leading_annotation: (Buffer | String, Range[Integer?], ?variables: Array[Symbol]) -> AST::Ruby::Annotations::leading_annotation
124
+
125
+ # Parse a leading annotation and return it
126
+ #
127
+ # Raises an exception if the source text contains a syntax error.
128
+ #
129
+ def self.parse_inline_trailing_annotation: (Buffer | String, Range[Integer?], ?variables: Array[Symbol]) -> AST::Ruby::Annotations::trailing_annotation
130
+
85
131
  private
86
132
 
87
133
  def self.buffer: (String | Buffer source) -> Buffer
88
134
 
89
- def self._parse_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables, bool require_eof) -> Types::t?
135
+ def self.byte_range: (Range[Integer?] char_range, String content) -> Range[Integer?]
136
+
137
+ def self._parse_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables, bool require_eof, bool void_allowed, bool self_allowed, bool classish_allowed) -> Types::t?
90
138
 
91
139
  def self._parse_method_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables, bool require_eof) -> MethodType?
92
140
 
93
141
  def self._parse_signature: (Buffer, Integer start_pos, Integer end_pos) -> [Array[AST::Directives::t], Array[AST::Declarations::t]]
94
142
 
143
+ def self._parse_type_params: (Buffer, Integer start_pos, Integer end_pos, bool module_type_params) -> Array[AST::TypeParam]
144
+
95
145
  def self._lex: (Buffer, Integer end_pos) -> Array[[Symbol, Location[untyped, untyped]]]
96
146
 
147
+ def self._parse_inline_leading_annotation: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables) -> AST::Ruby::Annotations::leading_annotation
148
+
149
+ def self._parse_inline_trailing_annotation: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables) -> AST::Ruby::Annotations::trailing_annotation
150
+
97
151
  class LocatedValue
98
152
  end
99
153
  end
@@ -3,6 +3,8 @@ module RBS
3
3
  module Helpers
4
4
  type node = RubyVM::AbstractSyntaxTree::Node
5
5
 
6
+ def parse_comments: (String, include_trailing: bool) -> Hash[Integer, AST::Comment]
7
+
6
8
  def block_from_body: (node) -> Types::Block?
7
9
 
8
10
  def each_node: (Array[untyped] nodes) { (node) -> void } -> void
@@ -8,28 +8,56 @@ module RBS
8
8
  class TypeNameResolver
9
9
  type query = [TypeName, context]
10
10
 
11
- def initialize: (Environment) -> void
11
+ def initialize: (Set[TypeName] all_names, Hash[TypeName, [TypeName, context]] aliases) -> void
12
12
 
13
- # Translates given type name to absolute type name.
13
+ def self.build: (Environment) -> instance
14
+
15
+ # Translates given type name to absolute type name
16
+ #
14
17
  # Returns `nil` if cannot find associated type name.
18
+ # Module names in the type name are normalized.
15
19
  #
16
20
  def resolve: (TypeName, context: context) -> TypeName?
17
21
 
18
- private
22
+ # Translates given type name to absolute type name
23
+ #
24
+ # Returns `false` if a cycle is detected while resolving aliases.
25
+ # Returns `nil` if the type name cannot be resolved.
26
+ #
27
+ def resolve_namespace: (TypeName, context: context) -> (TypeName | false | nil)
19
28
 
20
- attr_reader env: Environment
29
+ private
21
30
 
22
31
  attr_reader all_names: Set[TypeName]
23
32
 
33
+ attr_reader aliases: Hash[TypeName, [TypeName, context]]
34
+
24
35
  attr_reader cache: Hash[query, TypeName?]
25
36
 
26
- def has_name?: (TypeName) -> TypeName?
37
+ # Returns the type name if it exists in `all_names` (normalized)
38
+ #
39
+ def has_type_name?: (TypeName) -> TypeName?
40
+
41
+ # Returns the type name if it is an alias (not normalized)
42
+ #
43
+ def aliased_name?: (TypeName) -> TypeName?
27
44
 
28
45
  def try_cache: (query) { () -> TypeName? } -> TypeName?
29
46
 
30
- def resolve_in: (Symbol, context) -> TypeName?
47
+ # Translates the head module name in the context and returns an absolute type name
48
+ #
49
+ # Returns `nil` if cannot find associated type name.
50
+ # The returned namespace may be an alias
51
+ #
52
+ def resolve_head_namespace: (Symbol, context) -> TypeName?
53
+
54
+ # Resolves the type name in the given context
55
+ #
56
+ def resolve_type_name: (Symbol, context) -> TypeName?
57
+
58
+ def resolve_namespace0: (TypeName, context, Set[TypeName]) -> (TypeName | false | nil)
31
59
 
32
- def partition: (TypeName) -> [Symbol, TypeName?]
60
+ def normalize_namespace: (TypeName, TypeName rhs, context, Set[TypeName]) -> (TypeName | false | nil)
33
61
  end
34
62
  end
35
63
  end
data/sig/source.rbs ADDED
@@ -0,0 +1,48 @@
1
+ module RBS
2
+ module Source
3
+ type t = RBS | Ruby
4
+
5
+ class RBS
6
+ attr_reader buffer: Buffer
7
+
8
+ attr_reader directives: Array[AST::Directives::t]
9
+
10
+ attr_reader declarations: Array[AST::Declarations::t]
11
+
12
+ def initialize: (Buffer, Array[AST::Directives::t], Array[AST::Declarations::t]) -> void
13
+
14
+ # Enumerates defined type names in the source
15
+ #
16
+ # The order is undefined. Deduplicated per source object.
17
+ #
18
+ def each_type_name: () { (TypeName) -> void } -> void
19
+ | () -> Enumerator[TypeName]
20
+
21
+ private def each_declaration_type_name: (Set[TypeName], AST::Declarations::t) { (TypeName) -> void } -> void
22
+ end
23
+
24
+ class Ruby
25
+ attr_reader buffer: Buffer
26
+
27
+ attr_reader prism_result: Prism::ParseResult
28
+
29
+ attr_reader declarations: Array[AST::Ruby::Declarations::t]
30
+
31
+ attr_reader diagnostics: Array[InlineParser::Diagnostic::t]
32
+
33
+ def initialize: (Buffer, Prism::ParseResult, Array[AST::Ruby::Declarations::t], Array[InlineParser::Diagnostic::t]) -> void
34
+
35
+ def each_type_name: () { (TypeName) -> void } -> void
36
+ | () -> Enumerator[TypeName]
37
+
38
+ private def each_declaration_type_name: (Set[TypeName], AST::Ruby::Declarations::t) { (TypeName) -> void } -> void
39
+
40
+ # Compares the type declaration between `self` and `other`
41
+ #
42
+ # The comparison is based on the AST structure.
43
+ # Differences on Ruby code implementation may be ignored.
44
+ #
45
+ def ==: (other: Ruby) -> bool
46
+ end
47
+ end
48
+ end
data/sig/type_param.rbs CHANGED
@@ -4,13 +4,14 @@ module RBS
4
4
  # Key
5
5
  # ^^^ name
6
6
  #
7
- # unchecked out Elem < _ToJson = untyped
8
- # ^^^^^^^^^ unchecked
9
- # ^^^ variance
10
- # ^^^^ name
11
- # ^^^^^^^^^ upper_bound
12
- # ^^^^^^^^^ default
13
- type loc = Location[:name, :variance | :unchecked | :upper_bound | :default]
7
+ # unchecked out Elem < _ToJson > bot = untyped
8
+ # ^^^^^^^^^ unchecked
9
+ # ^^^ variance
10
+ # ^^^^ name
11
+ # ^^^^^^^^^ upper_bound
12
+ # ^^^^^ lower_bound
13
+ # ^^^^^^^^ default
14
+ type loc = Location[:name, :variance | :unchecked | :upper_bound | :lower_bound | :default]
14
15
 
15
16
  type variance = :invariant | :covariant | :contravariant
16
17
 
@@ -24,9 +25,13 @@ module RBS
24
25
 
25
26
  attr_reader upper_bound_type: Types::t?
26
27
 
28
+ %a{pure} def lower_bound: () -> bound?
29
+
30
+ attr_reader lower_bound_type: Types::t?
31
+
27
32
  attr_reader default_type: Types::t?
28
33
 
29
- def initialize: (name: Symbol, variance: variance, upper_bound: Types::t?, location: loc?, ?default_type: Types::t?, ?unchecked: bool) -> void
34
+ def initialize: (name: Symbol, variance: variance, upper_bound: Types::t?, lower_bound: Types::t?, location: loc?, ?default_type: Types::t?, ?unchecked: bool) -> void
30
35
 
31
36
  include _ToJson
32
37
 
data/sig/typename.rbs CHANGED
@@ -72,8 +72,3 @@ module RBS
72
72
  def self.parse: (String name) -> RBS::TypeName
73
73
  end
74
74
  end
75
-
76
- module Kernel
77
- # Deprecated: Use `RBS::TypeName.parse` instead
78
- %a{deprecated: Use `RBS::TypeName.parse` instead} def TypeName: (String name) -> RBS::TypeName
79
- end
data/sig/types.rbs CHANGED
@@ -172,24 +172,23 @@ module RBS
172
172
  class ClassSingleton
173
173
  # singleton(::Foo)
174
174
  # ^^^^^ => name
175
- type loc = Location[:name, bot]
176
-
177
- def initialize: (name: TypeName, location: loc?) -> void
175
+ type loc = Location[:name, :args]
178
176
 
179
- attr_reader name: TypeName
177
+ def initialize: (name: TypeName, location: loc?, ?args: Array[t]) -> void
180
178
 
181
179
  attr_reader location: loc?
182
180
 
183
181
  include _TypeBase
184
- include NoFreeVariables
185
- include NoSubst
186
- include EmptyEachType
182
+ include Application
187
183
 
188
184
  def ==: (untyped other) -> bool
189
185
 
190
186
  alias eql? ==
191
187
 
192
188
  def hash: () -> Integer
189
+
190
+ def map_type: () { (t) -> t } -> ClassSingleton
191
+ | () -> Enumerator[t, ClassSingleton]
193
192
  end
194
193
 
195
194
  module Application
@@ -518,7 +517,10 @@ module RBS
518
517
 
519
518
  attr_reader self_type: t?
520
519
 
521
- def initialize: (type: function, ?self_type: t?, required: boolish) -> void
520
+ type loc = Location[bot, bot]
521
+ attr_reader location: loc?
522
+
523
+ def initialize: (?location: loc?, type: function, ?self_type: t?, required: boolish) -> void
522
524
 
523
525
  def ==: (untyped other) -> bool
524
526
 
@@ -20,11 +20,3 @@ module RBS
20
20
  end
21
21
  end
22
22
  end
23
-
24
- class Proc
25
- def ruby2_keywords: () -> self
26
- end
27
-
28
- class Module
29
- def ruby2_keywords: (*Symbol) -> void
30
- end
@@ -153,6 +153,17 @@ module RBS
153
153
  #
154
154
  def refute_send_type: (String | MethodType method_type, untyped receiver, Symbol method_name, *untyped args) ?{ () -> untyped } -> void
155
155
 
156
+ # Calls a method `method_name`, validates if it's compatible with RBS type definition, and ensures it raises the `exception` class.
157
+ #
158
+ # 1. It calls `method_name` with `receiver` passing `args` and given block,
159
+ # 2. Validates if it's compatible with given `method_type`, and
160
+ # 3. Validates if it's compatible with one of the overloads defined in RBS type definition
161
+ # 4. Ensures that `exception` is thrown
162
+ #
163
+ # See `assert_send_type` for the details.
164
+ #
165
+ def assert_send_type_error: (String | MethodType method_type, Class exception, untyped receiver, Symbol method_name, *untyped args) ?{ () -> untyped } -> void
166
+
156
167
  # Asserts if the constant `constant_name` has `constant_type`, and the RBS definition has compatible type
157
168
  #
158
169
  # ```ruby