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
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
 
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
 
@@ -9,6 +9,8 @@ module RBS
9
9
  attr_reader diagnostics: Array[Diagnostic::t]
10
10
 
11
11
  def initialize: (Buffer, Prism::ParseResult) -> void
12
+
13
+ def type_fingerprint: () -> untyped
12
14
  end
13
15
 
14
16
  module Diagnostic
@@ -29,19 +31,44 @@ module RBS
29
31
  class NonConstantModuleName < Base
30
32
  end
31
33
 
34
+ class NonConstantSuperClassName < Base
35
+ end
36
+
32
37
  class TopLevelMethodDefinition < Base
33
38
  end
34
39
 
40
+ class TopLevelAttributeDefinition < Base
41
+ end
42
+
35
43
  class UnusedInlineAnnotation < Base
36
44
  end
37
45
 
38
46
  class AnnotationSyntaxError < Base
39
47
  end
40
48
 
49
+ class MixinMultipleArguments < Base
50
+ end
51
+
52
+ class MixinNonConstantModule < Base
53
+ end
54
+
55
+ class AttributeNonSymbolName < Base
56
+ end
57
+
58
+ class NonConstantConstantDeclaration < Base
59
+ end
60
+
61
+ class ClassModuleAliasDeclarationMissingTypeName < Base
62
+ end
63
+
41
64
  type t = NotImplementedYet
42
- | NonConstantClassName | NonConstantModuleName
43
- | TopLevelMethodDefinition
65
+ | NonConstantClassName | NonConstantModuleName | NonConstantSuperClassName
66
+ | TopLevelMethodDefinition | TopLevelAttributeDefinition
44
67
  | UnusedInlineAnnotation | AnnotationSyntaxError
68
+ | MixinMultipleArguments | MixinNonConstantModule
69
+ | AttributeNonSymbolName
70
+ | NonConstantConstantDeclaration
71
+ | ClassModuleAliasDeclarationMissingTypeName
45
72
  end
46
73
 
47
74
  def self.parse: (Buffer, Prism::ParseResult) -> Result
@@ -82,6 +109,16 @@ module RBS
82
109
  def report_unused_annotation: (*AST::Ruby::Annotations::t | nil | AST::Ruby::CommentBlock::AnnotationSyntaxError) -> void
83
110
 
84
111
  def report_unused_block: (AST::Ruby::CommentBlock) -> void
112
+
113
+ private
114
+
115
+ def parse_mixin_call: (Prism::CallNode) -> void
116
+
117
+ def parse_attribute_call: (Prism::CallNode) -> void
118
+
119
+ def parse_constant_declaration: (Prism::ConstantWriteNode | Prism::ConstantPathWriteNode) -> void
120
+
121
+ def parse_super_class: (Prism::node, Prism::Location) -> Declarations::ClassDecl::SuperClass?
85
122
  end
86
123
  end
87
124
  end
data/sig/locator.rbs CHANGED
@@ -37,8 +37,6 @@ module RBS
37
37
  #
38
38
  def find2: (line: Integer, column: Integer) -> [Symbol?, Array[component]]?
39
39
 
40
- private
41
-
42
40
  def find_in_directive: (Integer pos, AST::Directives::t, Array[component]) -> bool
43
41
 
44
42
  def find_in_decl: (Integer pos, decl: AST::Declarations::t, array: Array[component]) -> bool
data/sig/manifest.yaml CHANGED
@@ -1,6 +1,5 @@
1
1
  dependencies:
2
2
  - name: logger
3
- - name: pathname
4
3
  - name: json
5
4
  - name: optparse
6
5
  - name: tsort
@@ -16,7 +16,7 @@ module RBS
16
16
  #
17
17
  class Definition
18
18
  type original = AST::Members::MethodDefinition | AST::Members::Alias | AST::Members::AttrAccessor | AST::Members::AttrWriter | AST::Members::AttrReader
19
- | AST::Ruby::Members::DefMember
19
+ | AST::Ruby::Members::DefMember | AST::Ruby::Members::AttrReaderMember | AST::Ruby::Members::AttrWriterMember | AST::Ruby::Members::AttrAccessorMember
20
20
 
21
21
  type overloading_definition = AST::Members::MethodDefinition | AST::Ruby::Members::DefMember
22
22
 
@@ -77,6 +77,8 @@ module RBS
77
77
 
78
78
  def build_attribute: (Methods, Methods::instance_type, member: AST::Members::AttrAccessor | AST::Members::AttrReader | AST::Members::AttrWriter, accessibility: Definition::accessibility) -> void
79
79
 
80
+ def build_ruby_attribute: (Methods, Methods::instance_type, member: AST::Ruby::Members::AttrReaderMember | AST::Ruby::Members::AttrWriterMember | AST::Ruby::Members::AttrAccessorMember, accessibility: Definition::accessibility) -> void
81
+
80
82
  def build_method: (Methods, Methods::instance_type, member: AST::Members::MethodDefinition | AST::Ruby::Members::DefMember, accessibility: Definition::accessibility) -> void
81
83
 
82
84
  def each_rbs_member_with_accessibility: (Array[AST::Members::t | AST::Declarations::t], ?accessibility: Definition::accessibility) { (AST::Members::t | AST::Declarations::t, Definition::accessibility) -> void } -> void
data/sig/parser.rbs CHANGED
@@ -20,13 +20,13 @@ module RBS
20
20
 
21
21
  # Parse a method type and return it
22
22
  #
23
- # When `range` keyword is specified, it starts parsing from the `begin` to the `end` of the range.
23
+ # When `byte_range` keyword is specified, it starts parsing from the `begin` to the `end` of the range.
24
24
  #
25
25
  # ```ruby
26
- # RBS::Parser.parse_method_type("() -> void") # => `() -> void`
27
- # RBS::Parser.parse_method_type("() -> void", range: 0...) # => `() -> void`
28
- # RBS::Parser.parse_method_type("() -> void () -> String", range: 11...) # => `() -> String`
29
- # RBS::Parser.parse_method_type("() -> void () -> String", range: 23...) # => nil
26
+ # RBS::Parser.parse_method_type("() -> void") # => `() -> void`
27
+ # RBS::Parser.parse_method_type("() -> void", byte_range: 0...) # => `() -> void`
28
+ # RBS::Parser.parse_method_type("() -> void () -> String", byte_range: 11...) # => `() -> String`
29
+ # RBS::Parser.parse_method_type("() -> void () -> String", byte_range: 23...) # => nil
30
30
  # ```
31
31
  #
32
32
  # When `require_eof` is `true`, an error is raised if more tokens are left in the input.
@@ -39,17 +39,18 @@ module RBS
39
39
  # RBS::Parser.parse_method_type("", require_eof: true) # => nil
40
40
  # ```
41
41
  #
42
- def self.parse_method_type: (Buffer | String, ?range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool) -> MethodType?
42
+ def self.parse_method_type: (Buffer | String, ?byte_range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool) -> MethodType?
43
+ | %a{deprecated: Use `byte_range:` keyword instead of `range:`} (Buffer | String, range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool) -> MethodType?
43
44
 
44
45
  # Parse a type and return it
45
46
  #
46
- # When `range` keyword is specified, it starts parsing from the `begin` to the `end` of the range.
47
+ # When `byte_range` keyword is specified, it starts parsing from the `begin` to the `end` of the range.
47
48
  #
48
49
  # ```ruby
49
- # RBS::Parser.parse_type("String") # => `String`
50
- # RBS::Parser.parse_type("String", range: 0...) # => `String`
51
- # RBS::Parser.parse_type("String Integer", pos: 7...) # => `Integer`
52
- # RBS::Parser.parse_type("String Integer", pos: 14...) # => nil
50
+ # RBS::Parser.parse_type("String") # => `String`
51
+ # RBS::Parser.parse_type("String", byte_range: 0...) # => `String`
52
+ # RBS::Parser.parse_type("String Integer", byte_range: 7...) # => `Integer`
53
+ # RBS::Parser.parse_type("String Integer", byte_range: 14...) # => nil
53
54
  # ```
54
55
  #
55
56
  # When `require_eof` is `true`, an error is raised if more tokens are left in the input.
@@ -62,7 +63,22 @@ module RBS
62
63
  # RBS::Parser.parse_type("", require_eof: true) # => nil
63
64
  # ```
64
65
  #
65
- def self.parse_type: (Buffer | String, ?range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool) -> Types::t?
66
+ # The `void_allowed` keyword controls whether `void` is allowed as a type.
67
+ #
68
+ # ```ruby
69
+ # RBS::Parser.parse_type("void", void_allowed: true) # => `void`
70
+ # RBS::Parser.parse_type("void", void_allowed: false) # => Raises an syntax error
71
+ # ```
72
+ #
73
+ # The `self_allowed` keyword controls whether `self` is allowed as a type.
74
+ #
75
+ # ```ruby
76
+ # RBS::Parser.parse_type("self", self_allowed: true) # => `self`
77
+ # RBS::Parser.parse_type("self", self_allowed: false) # => Raises an syntax error
78
+ # ```
79
+ #
80
+ def self.parse_type: (Buffer | String, ?byte_range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool, ?void_allowed: bool, ?self_allowed: bool, ?classish_allowed: bool) -> Types::t?
81
+ | %a{deprecated: Use `byte_range:` keyword instead of `range:`} (Buffer | String, range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool, ?void_allowed: bool, ?self_allowed: bool, ?classish_allowed: bool) -> Types::t?
66
82
 
67
83
  # Parse whole RBS file and return an array of declarations
68
84
  #
@@ -116,7 +132,9 @@ module RBS
116
132
 
117
133
  def self.buffer: (String | Buffer source) -> Buffer
118
134
 
119
- def self._parse_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables, bool require_eof) -> Types::t?
135
+ def self.byte_range: (Range[Integer?] char_range, String content) -> Range[Integer?]
136
+
137
+ def self._parse_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables, bool require_eof, bool void_allowed, bool self_allowed, bool classish_allowed) -> Types::t?
120
138
 
121
139
  def self._parse_method_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables, bool require_eof) -> MethodType?
122
140
 
@@ -3,6 +3,8 @@ module RBS
3
3
  module Helpers
4
4
  type node = RubyVM::AbstractSyntaxTree::Node
5
5
 
6
+ def parse_comments: (String, include_trailing: bool) -> Hash[Integer, AST::Comment]
7
+
6
8
  def block_from_body: (node) -> Types::Block?
7
9
 
8
10
  def each_node: (Array[untyped] nodes) { (node) -> void } -> void