rbs 4.0.0.dev.4 → 4.1.0.pre.2

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