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
@@ -8,19 +8,45 @@ 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
19
+ | ModuleSelfMember
14
20
 
15
21
  class MethodTypeAnnotation
16
22
  class DocStyle
23
+ type param_type_annotation = Annotations::ParamTypeAnnotation
24
+ | Annotations::SplatParamTypeAnnotation
25
+ | Annotations::DoubleSplatParamTypeAnnotation
26
+ | Annotations::BlockParamTypeAnnotation
27
+
17
28
  attr_accessor return_type_annotation: Annotations::ReturnTypeAnnotation | Annotations::NodeTypeAssertion | nil
18
29
 
30
+ attr_reader required_positionals: Array[Annotations::ParamTypeAnnotation | Symbol]
31
+ attr_reader optional_positionals: Array[Annotations::ParamTypeAnnotation | Symbol]
32
+ attr_accessor rest_positionals: Annotations::SplatParamTypeAnnotation | Symbol | true | nil
33
+ attr_reader trailing_positionals: Array[Annotations::ParamTypeAnnotation | Symbol]
34
+ attr_reader required_keywords: Hash[Symbol, Annotations::ParamTypeAnnotation | Symbol]
35
+ attr_reader optional_keywords: Hash[Symbol, Annotations::ParamTypeAnnotation | Symbol]
36
+ attr_accessor rest_keywords: Annotations::DoubleSplatParamTypeAnnotation | Symbol | true | nil
37
+ attr_accessor block: Annotations::BlockParamTypeAnnotation | Symbol | true | nil
38
+
19
39
  def initialize: () -> void
20
40
 
41
+ def self.build: (Array[param_type_annotation], Annotations::ReturnTypeAnnotation | Annotations::NodeTypeAssertion | nil, Prism::DefNode) -> [DocStyle, Array[param_type_annotation]]
42
+
43
+ def all_param_annotations: () -> Array[param_type_annotation | Symbol | true | nil]
44
+
21
45
  def map_type_name: () { (TypeName) -> TypeName } -> self
22
46
 
23
47
  def method_type: () -> MethodType
48
+
49
+ def type_fingerprint: () -> untyped
24
50
  end
25
51
 
26
52
  type type_annotations = DocStyle | Array[Annotations::ColonMethodTypeAnnotation | Annotations::MethodTypesAnnotation] | nil
@@ -35,7 +61,7 @@ module RBS
35
61
  #
36
62
  # Returns a tuple of `DefAnnotations` object, array of unused leading annotations, and unused trailing annotation.
37
63
  #
38
- def self.build: (CommentBlock? leading_block, CommentBlock? trailing_block, Array[Symbol]) -> [
64
+ def self.build: (CommentBlock? leading_block, CommentBlock? trailing_block, Array[Symbol], Prism::DefNode) -> [
39
65
  MethodTypeAnnotation,
40
66
  Array[Annotations::leading_annotation | CommentBlock::AnnotationSyntaxError],
41
67
  Annotations::trailing_annotation | CommentBlock::AnnotationSyntaxError | nil
@@ -47,6 +73,10 @@ module RBS
47
73
  # Returns the method type overloads
48
74
  #
49
75
  def overloads: () -> Array[AST::Members::MethodDefinition::Overload]
76
+
77
+ def overloading?: () -> bool
78
+
79
+ def type_fingerprint: () -> untyped
50
80
  end
51
81
 
52
82
  class DefMember < Base
@@ -54,9 +84,15 @@ module RBS
54
84
 
55
85
  attr_reader name: Symbol
56
86
  attr_reader node: Prism::DefNode
87
+ attr_reader kind: :instance | :singleton
57
88
  attr_reader method_type: MethodTypeAnnotation
89
+ attr_reader leading_comment: CommentBlock?
90
+
91
+ def initialize: (Buffer, Symbol name, Prism::DefNode node, MethodTypeAnnotation, CommentBlock? leading_comment, ?kind: :instance | :singleton) -> void
58
92
 
59
- def initialize: (Buffer, Symbol name, Prism::DefNode node, MethodTypeAnnotation) -> void
93
+ def singleton?: () -> bool
94
+
95
+ def instance?: () -> bool
60
96
 
61
97
  def location: () -> Location
62
98
 
@@ -65,6 +101,96 @@ module RBS
65
101
  def overloading?: () -> bool
66
102
 
67
103
  def annotations: () -> Array[AST::Annotation]
104
+
105
+ def name_location: () -> Location
106
+
107
+ def type_fingerprint: () -> untyped
108
+ end
109
+
110
+ class MixinMember < Base
111
+ attr_reader node: Prism::CallNode
112
+
113
+ attr_reader module_name: TypeName
114
+
115
+ attr_reader annotation: Annotations::TypeApplicationAnnotation | nil
116
+
117
+ def initialize: (Buffer, Prism::CallNode, TypeName, Annotations::TypeApplicationAnnotation | nil) -> void
118
+
119
+ def location: () -> Location
120
+
121
+ def name_location: () -> Location
122
+
123
+ def type_args: () -> Array[Types::t]
124
+
125
+ def type_fingerprint: () -> untyped
126
+ end
127
+
128
+ class IncludeMember < MixinMember
129
+ end
130
+
131
+ class ExtendMember < MixinMember
132
+ end
133
+
134
+ class PrependMember < MixinMember
135
+ end
136
+
137
+ class AttributeMember < Base
138
+ attr_reader node: Prism::CallNode
139
+
140
+ attr_reader name_nodes: Array[Prism::SymbolNode]
141
+
142
+ attr_reader type_annotation: Annotations::NodeTypeAssertion?
143
+
144
+ attr_reader leading_comment: CommentBlock?
145
+
146
+ def initialize: (Buffer, Prism::CallNode, Array[Prism::SymbolNode] name_nodes, RBS::AST::Ruby::CommentBlock? leading_comment, Annotations::NodeTypeAssertion? type_annotation) -> void
147
+
148
+ def names: () -> Array[Symbol]
149
+
150
+ def location: () -> Location
151
+
152
+ def name_locations: () -> Array[Location]
153
+
154
+ def type: () -> Types::t?
155
+
156
+ def type_fingerprint: () -> untyped
157
+ end
158
+
159
+ class AttrReaderMember < AttributeMember
160
+ end
161
+
162
+ class AttrWriterMember < AttributeMember
163
+ end
164
+
165
+ class AttrAccessorMember < AttributeMember
166
+ end
167
+
168
+ class InstanceVariableMember < Base
169
+ attr_reader annotation: Annotations::InstanceVariableAnnotation
170
+
171
+ def initialize: (Buffer, Annotations::InstanceVariableAnnotation) -> void
172
+
173
+ def name: () -> Symbol
174
+
175
+ def type: () -> Types::t
176
+
177
+ def location: () -> Location
178
+
179
+ def type_fingerprint: () -> untyped
180
+ end
181
+
182
+ class ModuleSelfMember < Base
183
+ attr_reader annotation: Annotations::ModuleSelfAnnotation
184
+
185
+ def initialize: (Buffer, Annotations::ModuleSelfAnnotation) -> void
186
+
187
+ def name: () -> TypeName
188
+
189
+ def args: () -> Array[Types::t]
190
+
191
+ def location: () -> Location
192
+
193
+ def type_fingerprint: () -> untyped
68
194
  end
69
195
  end
70
196
  end
data/sig/buffer.rbs CHANGED
@@ -60,6 +60,19 @@ module RBS
60
60
  def rbs_location: (Prism::Location) -> Location
61
61
  | (Prism::Location, Prism::Location) -> Location
62
62
 
63
+ # Translate a byte offset (into the top buffer's source) to a character offset.
64
+ #
65
+ # Resolution is delegated to the top buffer, which keeps a sparse cache of
66
+ # resolved (byte, char) pairs so successive calls scan only the delta from the
67
+ # nearest cached pair. Amortizes to O(content_size) across all calls; a single
68
+ # call is one byteslice + length.
69
+ #
70
+ def character_offset: (Integer byte_offset) -> Integer
71
+
72
+ # Sparse cache backing `#character_offset`: a pair `[byte_keys, char_values]`
73
+ # kept in ascending byte order to support binary search.
74
+ @character_offset_cache: [Array[Integer], Array[Integer]]?
75
+
63
76
  # Construct a buffer from substrings of this buffer.
64
77
  #
65
78
  # The returned buffer contains lines from given ranges.
@@ -75,7 +88,12 @@ module RBS
75
88
  # buffer.sub_buffer(lines: [5..7]) # => Raises an error because the range contains newline
76
89
  # ```
77
90
  #
78
- %a{pure} def sub_buffer: (lines: Array[Range[Integer]]) -> Buffer
91
+ # `byte_lines_hint:` is an optional performance hint: byte ranges corresponding
92
+ # to `lines:`. When provided, slicing uses `byteslice` (O(slice_size) per line)
93
+ # instead of `content[char_range]`, which on a multi-byte string is O(content_size)
94
+ # per call. Result is identical either way.
95
+ #
96
+ %a{pure} def sub_buffer: (lines: Array[Range[Integer]], ?byte_lines_hint: Array[Range[Integer]]?) -> Buffer
79
97
 
80
98
  %a{pure} def parent_buffer: () -> Buffer?
81
99
 
data/sig/cli/diff.rbs CHANGED
@@ -1,21 +1,15 @@
1
1
  module RBS
2
2
  class CLI
3
3
  class Diff
4
- @format: String
5
4
  @stdout: _IO
6
5
  @stderr: _IO
7
- @diff: RBS::Diff
8
6
 
9
- def initialize: (
10
- argv: Array[String],
11
- library_options: RBS::CLI::LibraryOptions,
12
- ?stdout: _IO,
13
- ?stderr: _IO,
14
- ) -> void
7
+ def initialize: (?stdout: _IO, ?stderr: _IO) -> void
15
8
 
16
- def run: () -> void
17
- def run_diff: () -> void
18
- def run_markdown: () -> void
9
+ def run: (library_options: RBS::CLI::LibraryOptions, argv: Array[String]) -> Integer
10
+
11
+ def run_diff: (RBS::Diff) -> void
12
+ def run_markdown: (RBS::Diff) -> void
19
13
  end
20
14
  end
21
15
  end
data/sig/cli/validate.rbs CHANGED
@@ -3,15 +3,22 @@ module RBS
3
3
  class Validate
4
4
  class Errors
5
5
  @limit: Integer?
6
- @exit_error: boolish
7
- @has_syntax_error: bool
8
6
  @errors: Array[BaseError]
9
7
 
10
- def initialize: (limit: Integer?, exit_error: boolish) -> void
8
+ # The tag that will be thrown in #finish method
9
+ @tag: top
10
+
11
+ def initialize: (limit: Integer?) -> void
11
12
 
12
13
  def add: (BaseError) -> void
13
14
 
14
- def finish: () -> void
15
+ # Throws the `@tag` with 0 or 1
16
+ #
17
+ # Must be called from the block passed to `#try` method.
18
+ #
19
+ def finish: () -> Integer
20
+
21
+ def try: () { () -> void } -> Integer
15
22
 
16
23
  private
17
24
 
@@ -25,7 +32,7 @@ module RBS
25
32
 
26
33
  def initialize: (args: Array[String], options: LibraryOptions) -> void
27
34
 
28
- def run: () -> void
35
+ def run: () -> Integer
29
36
 
30
37
  private
31
38
 
@@ -35,9 +42,6 @@ module RBS
35
42
  def validate_constant: () -> void
36
43
  def validate_global: () -> void
37
44
  def validate_type_alias: () -> void
38
- def no_self_type_validator: (::RBS::Types::t | ::RBS::MethodType type) -> void
39
- def no_classish_type_validator: (::RBS::Types::t | ::RBS::MethodType type) -> void
40
- def void_type_context_validator: (::RBS::Types::t | ::RBS::MethodType type, ?bool allowed_here) -> void
41
45
  end
42
46
  end
43
47
  end
data/sig/cli.rbs CHANGED
@@ -46,41 +46,41 @@ module RBS
46
46
 
47
47
  def has_parser?: () -> bool
48
48
 
49
- def run: (Array[String] args) -> void
49
+ def run: (Array[String] args) -> Integer
50
50
 
51
- def run_ast: (Array[String], LibraryOptions) -> void
51
+ def run_ast: (Array[String], LibraryOptions) -> Integer
52
52
 
53
- def run_list: (Array[String], LibraryOptions) -> void
53
+ def run_list: (Array[String], LibraryOptions) -> Integer
54
54
 
55
- def run_ancestors: (Array[String], LibraryOptions) -> void
55
+ def run_ancestors: (Array[String], LibraryOptions) -> Integer
56
56
 
57
- def run_methods: (Array[String], LibraryOptions) -> void
57
+ def run_methods: (Array[String], LibraryOptions) -> Integer
58
58
 
59
- def run_method: (Array[String], LibraryOptions) -> void
59
+ def run_method: (Array[String], LibraryOptions) -> Integer
60
60
 
61
- def run_validate: (Array[String], LibraryOptions) -> void
61
+ def run_validate: (Array[String], LibraryOptions) -> Integer
62
62
 
63
- def run_constant: (Array[String], LibraryOptions) -> void
63
+ def run_constant: (Array[String], LibraryOptions) -> Integer
64
64
 
65
- def run_paths: (Array[String], LibraryOptions) -> void
65
+ def run_paths: (Array[String], LibraryOptions) -> Integer
66
66
 
67
- def run_prototype: (Array[String], LibraryOptions) -> void
67
+ def run_prototype: (Array[String], LibraryOptions) -> Integer
68
68
 
69
- def run_prototype_file: (String format, Array[String]) -> void
69
+ def run_prototype_file: (String format, Array[String]) -> Integer
70
70
 
71
- def run_vendor: (Array[String], LibraryOptions) -> void
71
+ def run_vendor: (Array[String], LibraryOptions) -> Integer
72
72
 
73
- def run_parse: (Array[String], LibraryOptions) -> void
73
+ def run_parse: (Array[String], LibraryOptions) -> Integer
74
74
 
75
- def run_test: (Array[String], LibraryOptions) -> void
75
+ def run_test: (Array[String], LibraryOptions) -> Integer
76
76
 
77
- def run_collection: (Array[String], LibraryOptions) -> void
77
+ def run_collection: (Array[String], LibraryOptions) -> Integer
78
78
 
79
- def run_annotate: (Array[String], top) -> void
79
+ def run_annotate: (Array[String], top) -> Integer
80
80
 
81
- def run_subtract: (Array[String], top) -> void
81
+ def run_subtract: (Array[String], top) -> Integer
82
82
 
83
- def run_diff: (Array[String], LibraryOptions) -> void
83
+ def run_diff: (Array[String], LibraryOptions) -> Integer
84
84
 
85
85
  def test_opt: (LibraryOptions) -> String?
86
86
 
@@ -6,6 +6,8 @@ module RBS
6
6
  #
7
7
  ALUMNI_STDLIBS: Hash[String, String?]
8
8
 
9
+ NONGEM_STDLIBS: Set[String]
10
+
9
11
  class GemfileLockMismatchError < StandardError
10
12
  @expected: Pathname
11
13
 
data/sig/definition.rbs CHANGED
@@ -12,6 +12,10 @@ module RBS
12
12
  | AST::Members::InstanceVariable
13
13
  | AST::Members::ClassVariable
14
14
  | AST::Members::ClassInstanceVariable
15
+ | AST::Ruby::Members::AttrReaderMember
16
+ | AST::Ruby::Members::AttrWriterMember
17
+ | AST::Ruby::Members::AttrAccessorMember
18
+ | AST::Ruby::Members::InstanceVariableMember
15
19
  attr_reader source: source
16
20
 
17
21
  def initialize: (parent_variable: Variable?, type: Types::t, declared_in: TypeName, source: source) -> void
@@ -21,7 +25,7 @@ module RBS
21
25
 
22
26
  class Method
23
27
  type method_member = AST::Members::MethodDefinition | AST::Members::AttrReader | AST::Members::AttrAccessor | AST::Members::AttrWriter
24
- | AST::Ruby::Members::DefMember
28
+ | AST::Ruby::Members::DefMember | AST::Ruby::Members::AttrReaderMember | AST::Ruby::Members::AttrWriterMember | AST::Ruby::Members::AttrAccessorMember
25
29
 
26
30
  class TypeDef
27
31
  attr_reader type: MethodType
@@ -155,6 +159,7 @@ module RBS
155
159
  type source = :super # Inheritance
156
160
  | nil # Itself
157
161
  | AST::Members::Include | AST::Members::Extend | AST::Members::Prepend # AST
162
+ | AST::Ruby::Members::IncludeMember | AST::Ruby::Members::ExtendMember | AST::Ruby::Members::PrependMember # Ruby AST
158
163
  | AST::Declarations::Module::Self
159
164
 
160
165
  attr_reader name: TypeName
@@ -97,6 +97,8 @@ module RBS
97
97
  #
98
98
  def interface_methods: (Array[Definition::Ancestor::Instance] interface_ancestors) -> interface_methods
99
99
 
100
+ def special_accessibility: (bool, Symbol) -> Definition::accessibility?
101
+
100
102
  def try_cache: (TypeName, cache: Hash[TypeName, Definition | false | nil]) { () -> Definition } -> Definition
101
103
 
102
104
  def validate_params_with: (Array[AST::TypeParam], result: VarianceCalculator::Result) { (AST::TypeParam) -> void } -> void
data/sig/environment.rbs CHANGED
@@ -12,10 +12,10 @@ module RBS
12
12
  def initialize: (name: N, decl: D, context: Resolver::context) -> void
13
13
  end
14
14
 
15
- class ModuleAliasEntry < SingleEntry[TypeName, AST::Declarations::ModuleAlias]
15
+ class ModuleAliasEntry < SingleEntry[TypeName, AST::Declarations::ModuleAlias | AST::Ruby::Declarations::ClassModuleAliasDecl]
16
16
  end
17
17
 
18
- class ClassAliasEntry < SingleEntry[TypeName, AST::Declarations::ClassAlias]
18
+ class ClassAliasEntry < SingleEntry[TypeName, AST::Declarations::ClassAlias | AST::Ruby::Declarations::ClassModuleAliasDecl]
19
19
  end
20
20
 
21
21
  class InterfaceEntry < SingleEntry[TypeName, AST::Declarations::Interface]
@@ -24,7 +24,7 @@ module RBS
24
24
  class TypeAliasEntry < SingleEntry[TypeName, AST::Declarations::TypeAlias]
25
25
  end
26
26
 
27
- class ConstantEntry < SingleEntry[TypeName, AST::Declarations::Constant]
27
+ class ConstantEntry < SingleEntry[TypeName, AST::Declarations::Constant | AST::Ruby::Declarations::ConstantDecl]
28
28
  end
29
29
 
30
30
  class GlobalEntry < SingleEntry[Symbol, AST::Declarations::Global]
@@ -84,9 +84,15 @@ module RBS
84
84
  # When `only` is given, it skips other _top-level_ declarations not included in the collection.
85
85
  # This helps running resolution faster in the case of _partial updates_.
86
86
  #
87
- def resolve_type_names: (?only: Set[AST::Declarations::t]?) -> Environment
87
+ def resolve_type_names: (?only: Set[AST::Declarations::t | AST::Ruby::Declarations::t]?) -> Environment
88
88
 
89
- def resolve_signature: (Resolver::TypeNameResolver, UseMap::Table, Array[AST::Directives::t], Array[AST::Declarations::t], ?only: Set[AST::Declarations::t]?) -> [Array[AST::Directives::t], Array[AST::Declarations::t]]
89
+ def resolve_signature: (
90
+ Resolver::TypeNameResolver,
91
+ UseMap::Table,
92
+ Array[AST::Directives::t],
93
+ Array[AST::Declarations::t],
94
+ ?only: Set[AST::Declarations::t | AST::Ruby::Declarations::t]?
95
+ ) -> [Array[AST::Directives::t], Array[AST::Declarations::t]]
90
96
 
91
97
  def inspect: () -> String
92
98
 
@@ -94,7 +100,8 @@ module RBS
94
100
 
95
101
  # Remove declarations and directives that are loaded from `buffers`
96
102
  #
97
- def unload: (Set[Buffer] buffers) -> Environment
103
+ def unload: (Set[Pathname] paths) -> Environment
104
+ | %a{deprecated: Use pathname version} (Set[Buffer] buffers) -> Environment
98
105
 
99
106
  # Returns true if an interface with the type name is defined
100
107
  #
@@ -135,22 +142,58 @@ module RBS
135
142
  # Returns true if the type name is a class alias
136
143
  def class_alias?: (TypeName) -> bool
137
144
 
138
- def class_entry: (TypeName) -> (ClassEntry | ClassAliasEntry | nil)
145
+ # Returns the entry for the class name
146
+ #
147
+ # Returns `nil` when:
148
+ #
149
+ # * The type name is not found
150
+ # * The type name is not a class
151
+ #
152
+ # It normalizes when `normalized: true` is given -- returns `ClassEntry` or `nil`.
153
+ #
154
+ def class_entry: (TypeName, normalized: true) -> ClassEntry?
155
+ | (TypeName, ?normalized: bool) -> (ClassEntry | ClassAliasEntry | nil)
139
156
 
140
157
  # Returns ClassEntry if the class definition is found, normalized in case of alias
141
158
  #
159
+ %a{deprecated: Use `class_entry(type_name, normalized: true)` instead. }
142
160
  def normalized_class_entry: (TypeName) -> ClassEntry?
143
161
 
144
- def module_entry: (TypeName) -> (ModuleEntry | ModuleAliasEntry | nil)
162
+ # Returns the entry for the module name
163
+ #
164
+ # Returns `nil` when:
165
+ #
166
+ # * The type name is not found
167
+ # * The type name is not a module
168
+ #
169
+ # It normalizes when `normalized: true` is given -- returns `ModuleEntry` or `nil`.
170
+ #
171
+ def module_entry: (TypeName, normalized: true) -> ModuleEntry?
172
+ | (TypeName, ?normalized: bool) -> (ModuleEntry | ModuleAliasEntry | nil)
145
173
 
146
174
  # Returns ModuleEntry if the module definition is found, normalized in case of alias
147
175
  #
176
+ %a{deprecated: Use `module_entry(type_name, normalized: true)` instead. }
148
177
  def normalized_module_entry: (TypeName) -> ModuleEntry?
149
178
 
150
- def constant_entry: (TypeName) -> (ClassEntry | ClassAliasEntry | ModuleEntry | ModuleAliasEntry | ConstantEntry | nil)
179
+ # Returns the entry for the type name
180
+ #
181
+ # The entry is one of ClassEntry, ModuleEntry, ConstantEntry, ClassAliasEntry, or ModuleAliasEntry.
182
+ # When `normalized: true` is given, it returns normalized entry -- one of ClassEntry, ModuleEntry, or ConstantEntry.
183
+ #
184
+ # Returns `nil` if not found.
185
+ #
186
+ def constant_entry: (TypeName, normalized: true) -> (ClassEntry | ModuleEntry | ConstantEntry | nil)
187
+ | (TypeName, ?normalized: bool) -> (ClassEntry | ClassAliasEntry | ModuleEntry | ModuleAliasEntry | ConstantEntry | nil)
151
188
 
152
- def module_class_entry: (TypeName) -> (ClassEntry | ClassAliasEntry | ModuleEntry | ModuleAliasEntry | nil)
189
+ # Returns ClassEntry or ModuleEntry if the class/module definition is found
190
+ #
191
+ # Normalizes when `normalized: true` is given.
192
+ #
193
+ def module_class_entry: (TypeName, normalized: true) -> (ClassEntry | ModuleEntry | nil)
194
+ | (TypeName, ?normalized: bool) -> (ClassEntry | ClassAliasEntry | ModuleEntry | ModuleAliasEntry | nil)
153
195
 
196
+ %a{deprecated: Use `module_class_entry(type_name, normalized: true)` instead. }
154
197
  def normalized_module_class_entry: (TypeName) -> (ClassEntry | ModuleEntry | nil)
155
198
 
156
199
  @normalize_module_name_cache: Hash[TypeName, TypeName | false | nil]
@@ -161,26 +204,39 @@ module RBS
161
204
  # * Returns `nil` if the rhs name cannot be found
162
205
  # * Returns `false` if the name is cyclic
163
206
  #
207
+ # Note that this method assumes the declarations have resolved type names.
208
+ #
164
209
  def normalize_module_name?: (TypeName) -> (TypeName | nil | false)
165
210
 
166
- # Returns the original module name that is defined with `module` declaration
211
+ # Returns the original module name that is defined with `module`/`class` declaration
167
212
  #
168
- # * Raises an error if given type name is not module
213
+ # * Raises an error if given type name is not module/class
169
214
  # * Calls `#absolute!` for relative module names
170
215
  # * Returns the name itself if the name cannot be normalized to a class/module
171
216
  #
217
+ # Note that this method assumes the declarations have resolved type names.
218
+ #
172
219
  def normalize_module_name: (TypeName) -> TypeName
173
220
 
221
+ # Returns the original module name that is defined with `module`/`class` declaration
222
+ #
223
+ # * Raises an error if given type name is not a module/class
224
+ def normalize_module_name!: (TypeName) -> TypeName
225
+
174
226
  # Returns a normalized module/class name or a type name with a normalized namespace
175
227
  #
176
228
  # * Calls `#absolute!` for relative module names
177
229
  # * Returns `nil` if the typename cannot be found
178
230
  # * Returns `false` if the name is cyclic
179
231
  #
232
+ # Note that this method assumes the declarations have resolved type names.
233
+ #
180
234
  def normalize_type_name?: (TypeName) -> (TypeName | nil | false)
181
235
 
182
236
  # Normalize the type name or raises an error
183
237
  #
238
+ # Note that this method assumes the declarations have resolved type names.
239
+ #
184
240
  def normalize_type_name!: (TypeName) -> TypeName
185
241
 
186
242
  # Returns a normalized module/class name or a type name with a normalized namespace
@@ -188,6 +244,8 @@ module RBS
188
244
  # * Calls `#absolute!` for relative module names
189
245
  # * Returns the typename itself if the name cannot be normalized
190
246
  #
247
+ # Note that this method assumes the declarations have resolved type names.
248
+ #
191
249
  def normalize_type_name: (TypeName) -> TypeName
192
250
 
193
251
  # Returns `true` if given type name is normalized
data/sig/errors.rbs CHANGED
@@ -115,14 +115,16 @@ module RBS
115
115
  class NoMixinFoundError < DefinitionError
116
116
  include DetailedMessageable
117
117
 
118
+ type member = AST::Members::t | AST::Ruby::Members::IncludeMember | AST::Ruby::Members::ExtendMember | AST::Ruby::Members::PrependMember
119
+
118
120
  attr_reader type_name: TypeName
119
- attr_reader member: AST::Members::t
121
+ attr_reader member: member
120
122
 
121
- def initialize: (type_name: TypeName, member: AST::Members::t) -> void
123
+ def initialize: (type_name: TypeName, member: member) -> void
122
124
 
123
125
  def location: () -> Location[untyped, untyped]?
124
126
 
125
- def self.check!: (TypeName, env: Environment, member: AST::Members::t) -> void
127
+ def self.check!: (TypeName, env: Environment, member: member) -> void
126
128
  end
127
129
 
128
130
  class DuplicatedMethodDefinitionError < DefinitionError
@@ -287,6 +289,7 @@ module RBS
287
289
  include DetailedMessageable
288
290
 
289
291
  type member = AST::Members::Include | AST::Members::Prepend | AST::Members::Extend
292
+ | AST::Ruby::Members::IncludeMember | AST::Ruby::Members::PrependMember | AST::Ruby::Members::ExtendMember
290
293
 
291
294
  attr_reader type_name: TypeName
292
295
  attr_reader member: member
@@ -297,17 +300,21 @@ module RBS
297
300
 
298
301
  def self.check!: (type_name: TypeName, env: Environment, member: member) -> void
299
302
 
303
+ def member_name: (member) -> TypeName
304
+
300
305
  def mixin_name: () -> String
301
306
  end
302
307
 
303
308
  # InheritModuleError is raised if a class definition inherits a module (not a class)
304
309
  #
305
310
  class InheritModuleError < DefinitionError
311
+ type super_class = AST::Declarations::Class::Super | AST::Ruby::Declarations::ClassDecl::SuperClass
312
+
306
313
  include DetailedMessageable
307
314
 
308
- attr_reader super_decl: AST::Declarations::Class::Super
315
+ attr_reader super_decl: super_class
309
316
 
310
- def initialize: (AST::Declarations::Class::Super) -> void
317
+ def initialize: (super_class) -> void
311
318
 
312
319
  def location: () -> Location[untyped, untyped]?
313
320
 
@@ -315,7 +322,7 @@ module RBS
315
322
  #
316
323
  # Automatically normalize the name of super.
317
324
  #
318
- def self.check!: (AST::Declarations::Class::Super, env: Environment) -> void
325
+ def self.check!: (super_class, env: Environment) -> void
319
326
  end
320
327
 
321
328
  class RecursiveTypeAliasError < BaseError
@@ -387,14 +394,6 @@ module RBS
387
394
  def location: () -> AST::Declarations::AliasDecl::loc?
388
395
  end
389
396
 
390
- class WillSyntaxError < BaseError
391
- include RBS::DetailedMessageable
392
-
393
- def initialize: (String message, location: Location[untyped, untyped]?) -> void
394
-
395
- attr_reader location: Location[untyped, untyped]?
396
- end
397
-
398
397
  class TypeParamDefaultReferenceError < BaseError
399
398
  include DetailedMessageable
400
399