rbs 4.0.0.dev.4 → 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 (281) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +14 -14
  3. data/.github/workflows/bundle-update.yml +60 -0
  4. data/.github/workflows/c-check.yml +18 -11
  5. data/.github/workflows/comments.yml +5 -3
  6. data/.github/workflows/dependabot.yml +2 -2
  7. data/.github/workflows/ruby.yml +27 -34
  8. data/.github/workflows/rust.yml +95 -0
  9. data/.github/workflows/typecheck.yml +2 -2
  10. data/.github/workflows/windows.yml +2 -2
  11. data/.rubocop.yml +1 -1
  12. data/CHANGELOG.md +323 -0
  13. data/README.md +1 -1
  14. data/Rakefile +43 -33
  15. data/Steepfile +1 -0
  16. data/config.yml +426 -24
  17. data/core/array.rbs +307 -227
  18. data/core/basic_object.rbs +9 -8
  19. data/core/binding.rbs +0 -2
  20. data/core/builtin.rbs +2 -2
  21. data/core/class.rbs +6 -5
  22. data/core/comparable.rbs +55 -34
  23. data/core/complex.rbs +104 -78
  24. data/core/dir.rbs +61 -49
  25. data/core/encoding.rbs +12 -15
  26. data/core/enumerable.rbs +179 -87
  27. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  28. data/core/enumerator.rbs +65 -2
  29. data/core/errno.rbs +11 -2
  30. data/core/errors.rbs +58 -29
  31. data/core/exception.rbs +13 -13
  32. data/core/fiber.rbs +74 -54
  33. data/core/file.rbs +280 -177
  34. data/core/file_test.rbs +3 -3
  35. data/core/float.rbs +257 -92
  36. data/core/gc.rbs +425 -281
  37. data/core/hash.rbs +1045 -739
  38. data/core/integer.rbs +135 -137
  39. data/core/io/buffer.rbs +53 -42
  40. data/core/io/wait.rbs +13 -35
  41. data/core/io.rbs +192 -144
  42. data/core/kernel.rbs +216 -155
  43. data/core/marshal.rbs +4 -4
  44. data/core/match_data.rbs +15 -13
  45. data/core/math.rbs +107 -66
  46. data/core/method.rbs +69 -33
  47. data/core/module.rbs +244 -106
  48. data/core/nil_class.rbs +7 -6
  49. data/core/numeric.rbs +74 -63
  50. data/core/object.rbs +9 -11
  51. data/core/object_space.rbs +30 -23
  52. data/core/pathname.rbs +1322 -0
  53. data/core/proc.rbs +95 -58
  54. data/core/process.rbs +222 -202
  55. data/core/ractor.rbs +371 -515
  56. data/core/random.rbs +21 -3
  57. data/core/range.rbs +159 -57
  58. data/core/rational.rbs +60 -89
  59. data/core/rbs/unnamed/argf.rbs +60 -53
  60. data/core/rbs/unnamed/env_class.rbs +19 -14
  61. data/core/rbs/unnamed/main_class.rbs +123 -0
  62. data/core/rbs/unnamed/random.rbs +11 -118
  63. data/core/regexp.rbs +258 -214
  64. data/core/ruby.rbs +53 -0
  65. data/core/ruby_vm.rbs +38 -34
  66. data/core/rubygems/config_file.rbs +5 -5
  67. data/core/rubygems/errors.rbs +4 -71
  68. data/core/rubygems/requirement.rbs +5 -5
  69. data/core/rubygems/rubygems.rbs +16 -82
  70. data/core/rubygems/version.rbs +2 -3
  71. data/core/set.rbs +490 -360
  72. data/core/signal.rbs +26 -16
  73. data/core/string.rbs +3234 -1285
  74. data/core/struct.rbs +27 -26
  75. data/core/symbol.rbs +41 -34
  76. data/core/thread.rbs +135 -67
  77. data/core/time.rbs +81 -50
  78. data/core/trace_point.rbs +41 -35
  79. data/core/true_class.rbs +2 -2
  80. data/core/unbound_method.rbs +24 -16
  81. data/core/warning.rbs +7 -7
  82. data/docs/aliases.md +79 -0
  83. data/docs/collection.md +3 -3
  84. data/docs/config.md +171 -0
  85. data/docs/encoding.md +56 -0
  86. data/docs/gem.md +0 -1
  87. data/docs/inline.md +576 -0
  88. data/docs/sigs.md +3 -3
  89. data/docs/syntax.md +46 -16
  90. data/docs/type_fingerprint.md +21 -0
  91. data/exe/rbs +1 -1
  92. data/ext/rbs_extension/ast_translation.c +544 -116
  93. data/ext/rbs_extension/ast_translation.h +3 -0
  94. data/ext/rbs_extension/class_constants.c +16 -2
  95. data/ext/rbs_extension/class_constants.h +8 -0
  96. data/ext/rbs_extension/extconf.rb +5 -1
  97. data/ext/rbs_extension/legacy_location.c +33 -56
  98. data/ext/rbs_extension/legacy_location.h +37 -0
  99. data/ext/rbs_extension/main.c +44 -35
  100. data/include/rbs/ast.h +448 -173
  101. data/include/rbs/defines.h +27 -0
  102. data/include/rbs/lexer.h +30 -11
  103. data/include/rbs/location.h +25 -44
  104. data/include/rbs/parser.h +6 -6
  105. data/include/rbs/string.h +0 -2
  106. data/include/rbs/util/rbs_allocator.h +34 -13
  107. data/include/rbs/util/rbs_assert.h +12 -1
  108. data/include/rbs/util/rbs_constant_pool.h +0 -3
  109. data/include/rbs/util/rbs_encoding.h +2 -0
  110. data/include/rbs/util/rbs_unescape.h +2 -1
  111. data/include/rbs.h +8 -0
  112. data/lib/rbs/ast/annotation.rb +1 -1
  113. data/lib/rbs/ast/comment.rb +1 -1
  114. data/lib/rbs/ast/declarations.rb +10 -10
  115. data/lib/rbs/ast/members.rb +14 -14
  116. data/lib/rbs/ast/ruby/annotations.rb +293 -3
  117. data/lib/rbs/ast/ruby/comment_block.rb +24 -0
  118. data/lib/rbs/ast/ruby/declarations.rb +198 -3
  119. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
  120. data/lib/rbs/ast/ruby/members.rb +532 -22
  121. data/lib/rbs/ast/type_param.rb +24 -4
  122. data/lib/rbs/buffer.rb +20 -15
  123. data/lib/rbs/cli/diff.rb +16 -15
  124. data/lib/rbs/cli/validate.rb +38 -106
  125. data/lib/rbs/cli.rb +52 -19
  126. data/lib/rbs/collection/config/lockfile_generator.rb +14 -2
  127. data/lib/rbs/collection/sources/git.rb +1 -0
  128. data/lib/rbs/definition.rb +1 -1
  129. data/lib/rbs/definition_builder/ancestor_builder.rb +62 -9
  130. data/lib/rbs/definition_builder/method_builder.rb +20 -0
  131. data/lib/rbs/definition_builder.rb +147 -25
  132. data/lib/rbs/diff.rb +7 -1
  133. data/lib/rbs/environment.rb +227 -74
  134. data/lib/rbs/environment_loader.rb +0 -6
  135. data/lib/rbs/errors.rb +27 -18
  136. data/lib/rbs/inline_parser.rb +342 -6
  137. data/lib/rbs/location_aux.rb +1 -1
  138. data/lib/rbs/locator.rb +5 -1
  139. data/lib/rbs/method_type.rb +5 -3
  140. data/lib/rbs/parser_aux.rb +20 -7
  141. data/lib/rbs/prototype/helpers.rb +57 -0
  142. data/lib/rbs/prototype/rb.rb +3 -28
  143. data/lib/rbs/prototype/rbi.rb +3 -20
  144. data/lib/rbs/prototype/runtime.rb +8 -0
  145. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  146. data/lib/rbs/resolver/type_name_resolver.rb +116 -38
  147. data/lib/rbs/subtractor.rb +3 -1
  148. data/lib/rbs/test/type_check.rb +19 -2
  149. data/lib/rbs/type_name.rb +1 -1
  150. data/lib/rbs/types.rb +88 -78
  151. data/lib/rbs/unit_test/type_assertions.rb +35 -8
  152. data/lib/rbs/validator.rb +2 -2
  153. data/lib/rbs/version.rb +1 -1
  154. data/lib/rbs.rb +1 -2
  155. data/lib/rdoc/discover.rb +1 -1
  156. data/lib/rdoc_plugin/parser.rb +1 -1
  157. data/rbs.gemspec +4 -3
  158. data/rust/.gitignore +1 -0
  159. data/rust/Cargo.lock +378 -0
  160. data/rust/Cargo.toml +7 -0
  161. data/rust/ruby-rbs/Cargo.toml +22 -0
  162. data/rust/ruby-rbs/build.rs +764 -0
  163. data/rust/ruby-rbs/examples/locations.rs +60 -0
  164. data/rust/ruby-rbs/src/lib.rs +1 -0
  165. data/rust/ruby-rbs/src/node/mod.rs +742 -0
  166. data/rust/ruby-rbs/tests/sanity.rs +47 -0
  167. data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
  168. data/rust/ruby-rbs-sys/Cargo.toml +23 -0
  169. data/rust/ruby-rbs-sys/build.rs +204 -0
  170. data/rust/ruby-rbs-sys/src/lib.rs +50 -0
  171. data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
  172. data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
  173. data/rust/ruby-rbs-sys/wrapper.h +1 -0
  174. data/schema/typeParam.json +17 -1
  175. data/sig/ast/ruby/annotations.rbs +315 -4
  176. data/sig/ast/ruby/comment_block.rbs +8 -0
  177. data/sig/ast/ruby/declarations.rbs +102 -4
  178. data/sig/ast/ruby/members.rbs +108 -2
  179. data/sig/cli/diff.rbs +5 -11
  180. data/sig/cli/validate.rbs +12 -8
  181. data/sig/cli.rbs +18 -18
  182. data/sig/definition.rbs +6 -1
  183. data/sig/definition_builder.rbs +2 -0
  184. data/sig/environment.rbs +70 -12
  185. data/sig/errors.rbs +13 -14
  186. data/sig/inline_parser.rbs +39 -2
  187. data/sig/locator.rbs +0 -2
  188. data/sig/manifest.yaml +0 -1
  189. data/sig/method_builder.rbs +3 -1
  190. data/sig/parser.rbs +31 -13
  191. data/sig/prototype/helpers.rbs +2 -0
  192. data/sig/resolver/type_name_resolver.rbs +35 -7
  193. data/sig/source.rbs +3 -3
  194. data/sig/type_param.rbs +13 -8
  195. data/sig/types.rbs +6 -7
  196. data/sig/unit_test/spy.rbs +0 -8
  197. data/sig/unit_test/type_assertions.rbs +11 -0
  198. data/src/ast.c +410 -153
  199. data/src/lexer.c +1392 -1313
  200. data/src/lexer.re +3 -0
  201. data/src/lexstate.c +58 -37
  202. data/src/location.c +8 -48
  203. data/src/parser.c +977 -516
  204. data/src/string.c +0 -48
  205. data/src/util/rbs_allocator.c +89 -71
  206. data/src/util/rbs_assert.c +1 -1
  207. data/src/util/rbs_buffer.c +2 -2
  208. data/src/util/rbs_constant_pool.c +10 -14
  209. data/src/util/rbs_encoding.c +4 -8
  210. data/src/util/rbs_unescape.c +56 -20
  211. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  212. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  213. data/stdlib/cgi/0/core.rbs +9 -393
  214. data/stdlib/cgi/0/manifest.yaml +1 -0
  215. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  216. data/stdlib/coverage/0/coverage.rbs +7 -4
  217. data/stdlib/date/0/date.rbs +92 -79
  218. data/stdlib/date/0/date_time.rbs +25 -24
  219. data/stdlib/delegate/0/delegator.rbs +10 -7
  220. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  221. data/stdlib/digest/0/digest.rbs +110 -0
  222. data/stdlib/erb/0/erb.rbs +748 -347
  223. data/stdlib/etc/0/etc.rbs +55 -50
  224. data/stdlib/fileutils/0/fileutils.rbs +158 -139
  225. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  226. data/stdlib/io-console/0/io-console.rbs +2 -2
  227. data/stdlib/json/0/json.rbs +217 -136
  228. data/stdlib/monitor/0/monitor.rbs +3 -3
  229. data/stdlib/net-http/0/net-http.rbs +162 -134
  230. data/stdlib/objspace/0/objspace.rbs +17 -34
  231. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  232. data/stdlib/open3/0/open3.rbs +469 -10
  233. data/stdlib/openssl/0/openssl.rbs +475 -357
  234. data/stdlib/optparse/0/optparse.rbs +26 -17
  235. data/stdlib/pathname/0/pathname.rbs +11 -1381
  236. data/stdlib/pp/0/pp.rbs +9 -8
  237. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  238. data/stdlib/pstore/0/pstore.rbs +35 -30
  239. data/stdlib/psych/0/psych.rbs +65 -12
  240. data/stdlib/psych/0/store.rbs +2 -4
  241. data/stdlib/pty/0/pty.rbs +9 -6
  242. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  243. data/stdlib/rdoc/0/code_object.rbs +2 -1
  244. data/stdlib/rdoc/0/parser.rbs +1 -1
  245. data/stdlib/rdoc/0/rdoc.rbs +1 -1
  246. data/stdlib/rdoc/0/store.rbs +1 -1
  247. data/stdlib/resolv/0/resolv.rbs +25 -68
  248. data/stdlib/ripper/0/ripper.rbs +22 -19
  249. data/stdlib/securerandom/0/manifest.yaml +2 -0
  250. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  251. data/stdlib/shellwords/0/shellwords.rbs +2 -2
  252. data/stdlib/singleton/0/singleton.rbs +3 -0
  253. data/stdlib/socket/0/addrinfo.rbs +7 -7
  254. data/stdlib/socket/0/basic_socket.rbs +3 -3
  255. data/stdlib/socket/0/ip_socket.rbs +10 -8
  256. data/stdlib/socket/0/socket.rbs +23 -10
  257. data/stdlib/socket/0/tcp_server.rbs +1 -1
  258. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  259. data/stdlib/socket/0/udp_socket.rbs +1 -1
  260. data/stdlib/socket/0/unix_server.rbs +1 -1
  261. data/stdlib/stringio/0/stringio.rbs +1177 -85
  262. data/stdlib/strscan/0/string_scanner.rbs +27 -25
  263. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  264. data/stdlib/time/0/time.rbs +8 -6
  265. data/stdlib/timeout/0/timeout.rbs +63 -7
  266. data/stdlib/tsort/0/cyclic.rbs +3 -0
  267. data/stdlib/tsort/0/tsort.rbs +7 -6
  268. data/stdlib/uri/0/common.rbs +42 -20
  269. data/stdlib/uri/0/file.rbs +3 -3
  270. data/stdlib/uri/0/generic.rbs +26 -18
  271. data/stdlib/uri/0/http.rbs +2 -2
  272. data/stdlib/uri/0/ldap.rbs +2 -2
  273. data/stdlib/uri/0/mailto.rbs +3 -3
  274. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  275. data/stdlib/zlib/0/deflate.rbs +4 -3
  276. data/stdlib/zlib/0/gzip_reader.rbs +6 -6
  277. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  278. data/stdlib/zlib/0/inflate.rbs +1 -1
  279. data/stdlib/zlib/0/need_dict.rbs +1 -1
  280. data/stdlib/zlib/0/zstream.rbs +1 -0
  281. metadata +50 -6
@@ -6,8 +6,16 @@ module RBS
6
6
  | MethodTypesAnnotation
7
7
  | SkipAnnotation
8
8
  | ReturnTypeAnnotation
9
+ | InstanceVariableAnnotation
10
+ | ParamTypeAnnotation
11
+ | SplatParamTypeAnnotation
12
+ | DoubleSplatParamTypeAnnotation
13
+ | BlockParamTypeAnnotation
9
14
 
10
15
  type trailing_annotation = NodeTypeAssertion
16
+ | TypeApplicationAnnotation
17
+ | ClassAliasAnnotation
18
+ | ModuleAliasAnnotation
11
19
 
12
20
  type t = leading_annotation | trailing_annotation
13
21
 
@@ -23,6 +31,9 @@ module RBS
23
31
  def initialize: (Location location, Location prefix_location) -> void
24
32
 
25
33
  def buffer: () -> Buffer
34
+
35
+ # Returns the type fingerprint for this annotation
36
+ def type_fingerprint: () -> untyped
26
37
  end
27
38
 
28
39
  # `: TYPE` annotation attached to nodes
@@ -33,6 +44,51 @@ module RBS
33
44
  def initialize: (location: Location, prefix_location: Location, type: Types::t) -> void
34
45
 
35
46
  def map_type_name: () { (TypeName) -> TypeName } -> self
47
+
48
+ def type_fingerprint: () -> untyped
49
+ end
50
+
51
+ class AliasAnnotation < Base
52
+ attr_reader keyword_location: Location
53
+
54
+ attr_reader type_name_location: Location?
55
+
56
+ # The name of the module that will be the target of the alias
57
+ #
58
+ # - `nil` if the module/class name is unspecified
59
+ # - `TypeName` object if the module/class name is specified
60
+ #
61
+ attr_reader type_name: TypeName?
62
+
63
+ def initialize: (location: Location, prefix_location: Location, keyword_location: Location, type_name: TypeName?, type_name_location: Location?) -> void
64
+
65
+ def map_type_name: () { (TypeName) -> TypeName } -> self
66
+ end
67
+
68
+ # `: class-alias` annotation
69
+ #
70
+ # ```
71
+ # : class-alias Foo::Bar
72
+ # ^ -- prefix_location
73
+ # ^^^^^^^^^^^^ -- keyword_location
74
+ # ^^^^^^^^ -- type_name_location
75
+ # ```
76
+ #
77
+ class ClassAliasAnnotation < AliasAnnotation
78
+ def type_fingerprint: () -> untyped
79
+ end
80
+
81
+ # `: module-alias` annotation
82
+ #
83
+ # ```
84
+ # : module-alias Foo::Bar
85
+ # ^ -- prefix_location
86
+ # ^^^^^^^^^^^^ -- keyword_location
87
+ # ^^^^^^^^ -- type_name_location
88
+ # ```
89
+ #
90
+ class ModuleAliasAnnotation < AliasAnnotation
91
+ def type_fingerprint: () -> untyped
36
92
  end
37
93
 
38
94
  # `: METHOD-TYPE` annotation in leading comments
@@ -45,14 +101,18 @@ module RBS
45
101
  def initialize: (location: Location, prefix_location: Location, annotations: Array[AST::Annotation], method_type: MethodType) -> void
46
102
 
47
103
  def map_type_name: () { (TypeName) -> TypeName } -> self
104
+
105
+ def type_fingerprint: () -> untyped
48
106
  end
49
107
 
50
108
  # `@rbs METHOD-TYPEs` annotation in leading comments
51
109
  #
52
110
  # ```
53
- # @rbs () -> void | %a{foo} () -> String
54
- # ^^^^ -- prefix_location
55
- # ^ -- vertical_bar_locations[0]
111
+ # @rbs () -> void | %a{foo} () -> String | ...
112
+ # ^^^^ -- prefix_location
113
+ # ^ -- vertical_bar_locations[0]
114
+ # ^ -- vertical_bar_locations[1]
115
+ # ^^^ -- dot3_location
56
116
  # ```
57
117
  class MethodTypesAnnotation < Base
58
118
  class Overload = AST::Members::MethodDefinition::Overload
@@ -61,9 +121,13 @@ module RBS
61
121
 
62
122
  attr_reader vertical_bar_locations: Array[Location]
63
123
 
64
- def initialize: (location: Location, prefix_location: Location, overloads: Array[Overload], vertical_bar_locations: Array[Location]) -> void
124
+ attr_reader dot3_location: Location?
125
+
126
+ def initialize: (location: Location, prefix_location: Location, overloads: Array[Overload], vertical_bar_locations: Array[Location], dot3_location: Location?) -> void
65
127
 
66
128
  def map_type_name: () { (TypeName) -> TypeName } -> self
129
+
130
+ def type_fingerprint: () -> untyped
67
131
  end
68
132
 
69
133
  # `@rbs skip -- comment` annotation in leading comments
@@ -73,6 +137,8 @@ module RBS
73
137
  attr_reader comment_location: Location?
74
138
 
75
139
  def initialize: (location: Location, prefix_location: Location, skip_location: Location, comment_location: Location?) -> void
140
+
141
+ def type_fingerprint: () -> untyped
76
142
  end
77
143
 
78
144
  # `@rbs return: T -- comment` annotation in leading comments
@@ -103,6 +169,251 @@ module RBS
103
169
  ) -> void
104
170
 
105
171
  def map_type_name: () { (TypeName) -> TypeName } -> self
172
+
173
+ def type_fingerprint: () -> untyped
174
+ end
175
+
176
+ # `[T1, T2, ...]` annotation in trailing comments
177
+ #
178
+ # ```
179
+ # #[String, Integer]
180
+ # ^ -- prefix_location
181
+ # ^ -- comma_locations[0]
182
+ # ^ -- close_bracket_location
183
+ # ```
184
+ #
185
+ class TypeApplicationAnnotation < Base
186
+ attr_reader type_args: Array[Types::t]
187
+
188
+ attr_reader close_bracket_location: Location
189
+
190
+ attr_reader comma_locations: Array[Location]
191
+
192
+ def initialize: (
193
+ location: Location,
194
+ prefix_location: Location,
195
+ type_args: Array[Types::t],
196
+ close_bracket_location: Location,
197
+ comma_locations: Array[Location],
198
+ ) -> void
199
+
200
+ def map_type_name: () { (TypeName) -> TypeName } -> self
201
+
202
+ def type_fingerprint: () -> untyped
203
+ end
204
+
205
+ # `@rbs IVAR-NAME : TYPE` annotation in leading comments
206
+ #
207
+ # ```
208
+ # @rbs @foo : String -- comment
209
+ # ^^^^ -- prefix_location
210
+ # ^^^^ -- ivar_name_location
211
+ # ^ -- colon_location
212
+ # ^^^^^^^^^^ -- comment_location
213
+ # ```
214
+ class InstanceVariableAnnotation < Base
215
+ attr_reader ivar_name: Symbol
216
+
217
+ attr_reader ivar_name_location: Location
218
+
219
+ attr_reader colon_location: Location
220
+
221
+ attr_reader type: Types::t
222
+
223
+ attr_reader comment_location: Location?
224
+
225
+ def initialize: (
226
+ location: Location,
227
+ prefix_location: Location,
228
+ ivar_name: Symbol,
229
+ ivar_name_location: Location,
230
+ colon_location: Location,
231
+ type: Types::t,
232
+ comment_location: Location?,
233
+ ) -> void
234
+
235
+ def map_type_name: () { (TypeName) -> TypeName } -> self
236
+
237
+ def type_fingerprint: () -> untyped
238
+ end
239
+
240
+ class ParamTypeAnnotation < Base
241
+ attr_reader name_location: Location
242
+
243
+ attr_reader colon_location: Location
244
+
245
+ attr_reader param_type: Types::t
246
+
247
+ attr_reader comment_location: Location?
248
+
249
+ def initialize: (
250
+ location: Location,
251
+ prefix_location: Location,
252
+ name_location: Location,
253
+ colon_location: Location,
254
+ param_type: Types::t,
255
+ comment_location: Location?,
256
+ ) -> void
257
+
258
+ def map_type_name: () { (TypeName) -> TypeName } -> self
259
+
260
+ def type_fingerprint: () -> untyped
261
+
262
+ %a{pure}
263
+ def name: () -> Symbol
264
+ end
265
+
266
+ # `@rbs *name: Type -- comment` annotation in leading comments
267
+ #
268
+ # ```
269
+ # @rbs *a: String -- comment
270
+ # ^^^^ -- prefix_location
271
+ # ^ -- star_location
272
+ # ^ -- name_location
273
+ # ^ -- colon_location
274
+ # ^^^^^^^^^^ -- comment_location
275
+ # ```
276
+ #
277
+ # ```
278
+ # @rbs *: String
279
+ # ^^^^ -- prefix_location
280
+ # ^ -- star_location
281
+ # ^ -- colon_location
282
+ # ```
283
+ #
284
+ class SplatParamTypeAnnotation < Base
285
+ attr_reader star_location: Location
286
+
287
+ attr_reader name_location: Location?
288
+
289
+ attr_reader colon_location: Location
290
+
291
+ attr_reader param_type: Types::t
292
+
293
+ attr_reader comment_location: Location?
294
+
295
+ def initialize: (
296
+ location: Location,
297
+ prefix_location: Location,
298
+ star_location: Location,
299
+ name_location: Location?,
300
+ colon_location: Location,
301
+ param_type: Types::t,
302
+ comment_location: Location?,
303
+ ) -> void
304
+
305
+ def map_type_name: () { (TypeName) -> TypeName } -> self
306
+
307
+ def type_fingerprint: () -> untyped
308
+
309
+ %a{pure}
310
+ def name: () -> Symbol?
311
+ end
312
+
313
+ # `@rbs **name: Type -- comment` annotation in leading comments
314
+ #
315
+ # ```
316
+ # @rbs **b: bool -- comment
317
+ # ^^^^ -- prefix_location
318
+ # ^^ -- star2_location
319
+ # ^ -- name_location
320
+ # ^ -- colon_location
321
+ # ^^^^^^^^^^ -- comment_location
322
+ # ```
323
+ #
324
+ # ```
325
+ # @rbs **: bool
326
+ # ^^^^ -- prefix_location
327
+ # ^^ -- star2_location
328
+ # ^ -- colon_location
329
+ # ```
330
+ #
331
+ class DoubleSplatParamTypeAnnotation < Base
332
+ attr_reader star2_location: Location
333
+
334
+ attr_reader name_location: Location?
335
+
336
+ attr_reader colon_location: Location
337
+
338
+ attr_reader param_type: Types::t
339
+
340
+ attr_reader comment_location: Location?
341
+
342
+ def initialize: (
343
+ location: Location,
344
+ prefix_location: Location,
345
+ star2_location: Location,
346
+ name_location: Location?,
347
+ colon_location: Location,
348
+ param_type: Types::t,
349
+ comment_location: Location?,
350
+ ) -> void
351
+
352
+ def map_type_name: () { (TypeName) -> TypeName } -> self
353
+
354
+ def type_fingerprint: () -> untyped
355
+
356
+ %a{pure}
357
+ def name: () -> Symbol?
358
+ end
359
+
360
+ # `@rbs &name: TYPE -- comment` annotation in leading comments
361
+ #
362
+ # ```
363
+ # @rbs &block: () -> void -- comment
364
+ # ^^^^ -- prefix_location
365
+ # ^ -- ampersand_location
366
+ # ^^^^^ -- name_location
367
+ # ^ -- colon_location
368
+ # ^^^^^^^^^^ -- type_location
369
+ # ^^^^^^^^^^ -- comment_location
370
+ # ```
371
+ #
372
+ # ```
373
+ # @rbs &: ? () -> void
374
+ # ^^^^ -- prefix_location
375
+ # ^ -- ampersand_location
376
+ # ^ -- colon_location
377
+ # ^ -- question_location
378
+ # ^^^^^^^^^^ -- type_location
379
+ # ```
380
+ #
381
+ class BlockParamTypeAnnotation < Base
382
+ attr_reader ampersand_location: Location
383
+
384
+ attr_reader name_location: Location?
385
+
386
+ attr_reader colon_location: Location
387
+
388
+ attr_reader type_location: Location
389
+
390
+ attr_reader type: Types::function
391
+
392
+ attr_reader question_location: Location?
393
+
394
+ attr_reader comment_location: Location?
395
+
396
+ def initialize: (
397
+ location: Location,
398
+ prefix_location: Location,
399
+ ampersand_location: Location,
400
+ name_location: Location?,
401
+ colon_location: Location,
402
+ question_location: Location?,
403
+ type_location: Location,
404
+ type: Types::function,
405
+ comment_location: Location?,
406
+ ) -> void
407
+
408
+ def map_type_name: () { (TypeName) -> TypeName } -> self
409
+
410
+ def type_fingerprint: () -> untyped
411
+
412
+ %a{pure} def name: () -> Symbol?
413
+
414
+ def optional?: () -> bool
415
+
416
+ def required?: () -> bool
106
417
  end
107
418
  end
108
419
  end
@@ -112,7 +112,15 @@ module RBS
112
112
 
113
113
  def line_location: (Integer start_line, Integer end_line) -> Location
114
114
 
115
+ def location: () -> Location
116
+
115
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?
116
124
  end
117
125
  end
118
126
  end
@@ -2,7 +2,7 @@ module RBS
2
2
  module AST
3
3
  module Ruby
4
4
  module Declarations
5
- type t = ClassDecl | ModuleDecl
5
+ type t = ClassDecl | ModuleDecl | ConstantDecl | ClassModuleAliasDecl
6
6
 
7
7
  class Base
8
8
  attr_reader buffer: Buffer
@@ -11,27 +11,55 @@ module RBS
11
11
  include Helpers::LocationHelper
12
12
 
13
13
  def initialize: (Buffer) -> void
14
+
15
+ def type_fingerprint: () -> untyped
14
16
  end
15
17
 
16
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
+
17
41
  type member = t | Members::t
18
42
 
19
43
  attr_reader class_name: TypeName
20
44
 
21
45
  attr_reader node: Prism::ClassNode
22
46
 
47
+ attr_reader super_class: SuperClass?
48
+
23
49
  attr_reader members: Array[member]
24
50
 
25
- def initialize: (Buffer, TypeName, Prism::ClassNode) -> void
51
+ def initialize: (Buffer, TypeName, Prism::ClassNode, SuperClass?) -> void
26
52
 
27
53
  def each_decl: () { (t) -> void } -> void
28
54
  | () -> Enumerator[t]
29
55
 
30
- def super_class: () -> nil
31
-
32
56
  def type_params: () -> Array[AST::TypeParam]
33
57
 
34
58
  def location: () -> Location
59
+
60
+ def name_location: () -> Location
61
+
62
+ def type_fingerprint: () -> untyped
35
63
  end
36
64
 
37
65
  class ModuleDecl < Base
@@ -53,6 +81,76 @@ module RBS
53
81
  def location: () -> Location
54
82
 
55
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
56
154
  end
57
155
  end
58
156
  end
@@ -8,19 +8,44 @@ module RBS
8
8
  def initialize: (Buffer) -> void
9
9
 
10
10
  include Helpers::LocationHelper
11
+
12
+ def type_fingerprint: () -> untyped
11
13
  end
12
14
 
13
15
  type t = DefMember
16
+ | IncludeMember | ExtendMember | PrependMember
17
+ | AttrReaderMember | AttrWriterMember | AttrAccessorMember
18
+ | InstanceVariableMember
14
19
 
15
20
  class MethodTypeAnnotation
16
21
  class DocStyle
22
+ type param_type_annotation = Annotations::ParamTypeAnnotation
23
+ | Annotations::SplatParamTypeAnnotation
24
+ | Annotations::DoubleSplatParamTypeAnnotation
25
+ | Annotations::BlockParamTypeAnnotation
26
+
17
27
  attr_accessor return_type_annotation: Annotations::ReturnTypeAnnotation | Annotations::NodeTypeAssertion | nil
18
28
 
29
+ attr_reader required_positionals: Array[Annotations::ParamTypeAnnotation | Symbol]
30
+ attr_reader optional_positionals: Array[Annotations::ParamTypeAnnotation | Symbol]
31
+ attr_accessor rest_positionals: Annotations::SplatParamTypeAnnotation | Symbol | true | nil
32
+ attr_reader trailing_positionals: Array[Annotations::ParamTypeAnnotation | Symbol]
33
+ attr_reader required_keywords: Hash[Symbol, Annotations::ParamTypeAnnotation | Symbol]
34
+ attr_reader optional_keywords: Hash[Symbol, Annotations::ParamTypeAnnotation | Symbol]
35
+ attr_accessor rest_keywords: Annotations::DoubleSplatParamTypeAnnotation | Symbol | true | nil
36
+ attr_accessor block: Annotations::BlockParamTypeAnnotation | Symbol | true | nil
37
+
19
38
  def initialize: () -> void
20
39
 
40
+ def self.build: (Array[param_type_annotation], Annotations::ReturnTypeAnnotation | Annotations::NodeTypeAssertion | nil, Prism::DefNode) -> [DocStyle, Array[param_type_annotation]]
41
+
42
+ def all_param_annotations: () -> Array[param_type_annotation | Symbol | true | nil]
43
+
21
44
  def map_type_name: () { (TypeName) -> TypeName } -> self
22
45
 
23
46
  def method_type: () -> MethodType
47
+
48
+ def type_fingerprint: () -> untyped
24
49
  end
25
50
 
26
51
  type type_annotations = DocStyle | Array[Annotations::ColonMethodTypeAnnotation | Annotations::MethodTypesAnnotation] | nil
@@ -35,7 +60,7 @@ module RBS
35
60
  #
36
61
  # Returns a tuple of `DefAnnotations` object, array of unused leading annotations, and unused trailing annotation.
37
62
  #
38
- def self.build: (CommentBlock? leading_block, CommentBlock? trailing_block, Array[Symbol]) -> [
63
+ def self.build: (CommentBlock? leading_block, CommentBlock? trailing_block, Array[Symbol], Prism::DefNode) -> [
39
64
  MethodTypeAnnotation,
40
65
  Array[Annotations::leading_annotation | CommentBlock::AnnotationSyntaxError],
41
66
  Annotations::trailing_annotation | CommentBlock::AnnotationSyntaxError | nil
@@ -47,6 +72,10 @@ module RBS
47
72
  # Returns the method type overloads
48
73
  #
49
74
  def overloads: () -> Array[AST::Members::MethodDefinition::Overload]
75
+
76
+ def overloading?: () -> bool
77
+
78
+ def type_fingerprint: () -> untyped
50
79
  end
51
80
 
52
81
  class DefMember < Base
@@ -55,8 +84,9 @@ module RBS
55
84
  attr_reader name: Symbol
56
85
  attr_reader node: Prism::DefNode
57
86
  attr_reader method_type: MethodTypeAnnotation
87
+ attr_reader leading_comment: CommentBlock?
58
88
 
59
- def initialize: (Buffer, Symbol name, Prism::DefNode node, MethodTypeAnnotation) -> void
89
+ def initialize: (Buffer, Symbol name, Prism::DefNode node, MethodTypeAnnotation, CommentBlock? leading_comment) -> void
60
90
 
61
91
  def location: () -> Location
62
92
 
@@ -65,6 +95,82 @@ module RBS
65
95
  def overloading?: () -> bool
66
96
 
67
97
  def annotations: () -> Array[AST::Annotation]
98
+
99
+ def name_location: () -> Location
100
+
101
+ def type_fingerprint: () -> untyped
102
+ end
103
+
104
+ class MixinMember < Base
105
+ attr_reader node: Prism::CallNode
106
+
107
+ attr_reader module_name: TypeName
108
+
109
+ attr_reader annotation: Annotations::TypeApplicationAnnotation | nil
110
+
111
+ def initialize: (Buffer, Prism::CallNode, TypeName, Annotations::TypeApplicationAnnotation | nil) -> void
112
+
113
+ def location: () -> Location
114
+
115
+ def name_location: () -> Location
116
+
117
+ def type_args: () -> Array[Types::t]
118
+
119
+ def type_fingerprint: () -> untyped
120
+ end
121
+
122
+ class IncludeMember < MixinMember
123
+ end
124
+
125
+ class ExtendMember < MixinMember
126
+ end
127
+
128
+ class PrependMember < MixinMember
129
+ end
130
+
131
+ class AttributeMember < Base
132
+ attr_reader node: Prism::CallNode
133
+
134
+ attr_reader name_nodes: Array[Prism::SymbolNode]
135
+
136
+ attr_reader type_annotation: Annotations::NodeTypeAssertion?
137
+
138
+ attr_reader leading_comment: CommentBlock?
139
+
140
+ def initialize: (Buffer, Prism::CallNode, Array[Prism::SymbolNode] name_nodes, RBS::AST::Ruby::CommentBlock? leading_comment, Annotations::NodeTypeAssertion? type_annotation) -> void
141
+
142
+ def names: () -> Array[Symbol]
143
+
144
+ def location: () -> Location
145
+
146
+ def name_locations: () -> Array[Location]
147
+
148
+ def type: () -> Types::t?
149
+
150
+ def type_fingerprint: () -> untyped
151
+ end
152
+
153
+ class AttrReaderMember < AttributeMember
154
+ end
155
+
156
+ class AttrWriterMember < AttributeMember
157
+ end
158
+
159
+ class AttrAccessorMember < AttributeMember
160
+ end
161
+
162
+ class InstanceVariableMember < Base
163
+ attr_reader annotation: Annotations::InstanceVariableAnnotation
164
+
165
+ def initialize: (Buffer, Annotations::InstanceVariableAnnotation) -> void
166
+
167
+ def name: () -> Symbol
168
+
169
+ def type: () -> Types::t
170
+
171
+ def location: () -> Location
172
+
173
+ def type_fingerprint: () -> untyped
68
174
  end
69
175
  end
70
176
  end