rbs 3.9.5 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (330) hide show
  1. checksums.yaml +4 -4
  2. data/.clang-format +74 -0
  3. data/.clangd +2 -0
  4. data/.github/dependabot.yml +14 -14
  5. data/.github/workflows/bundle-update.yml +60 -0
  6. data/.github/workflows/c-check.yml +58 -0
  7. data/.github/workflows/comments.yml +5 -3
  8. data/.github/workflows/dependabot.yml +2 -2
  9. data/.github/workflows/ruby.yml +40 -32
  10. data/.github/workflows/rust.yml +95 -0
  11. data/.github/workflows/typecheck.yml +2 -2
  12. data/.github/workflows/windows.yml +3 -3
  13. data/.gitignore +4 -0
  14. data/.rubocop.yml +2 -2
  15. data/.vscode/extensions.json +5 -0
  16. data/.vscode/settings.json +19 -0
  17. data/CHANGELOG.md +284 -0
  18. data/README.md +38 -1
  19. data/Rakefile +144 -29
  20. data/Steepfile +2 -0
  21. data/config.yml +634 -62
  22. data/core/array.rbs +307 -227
  23. data/core/basic_object.rbs +9 -8
  24. data/core/binding.rbs +0 -2
  25. data/core/builtin.rbs +2 -2
  26. data/core/class.rbs +6 -5
  27. data/core/comparable.rbs +55 -34
  28. data/core/complex.rbs +104 -78
  29. data/core/dir.rbs +61 -49
  30. data/core/encoding.rbs +12 -15
  31. data/core/enumerable.rbs +188 -87
  32. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  33. data/core/enumerator.rbs +65 -2
  34. data/core/errno.rbs +11 -2
  35. data/core/errors.rbs +58 -29
  36. data/core/exception.rbs +13 -13
  37. data/core/fiber.rbs +74 -54
  38. data/core/file.rbs +280 -177
  39. data/core/file_test.rbs +3 -3
  40. data/core/float.rbs +257 -92
  41. data/core/gc.rbs +425 -281
  42. data/core/hash.rbs +1045 -739
  43. data/core/integer.rbs +135 -137
  44. data/core/io/buffer.rbs +53 -42
  45. data/core/io/wait.rbs +13 -35
  46. data/core/io.rbs +196 -148
  47. data/core/kernel.rbs +216 -155
  48. data/core/marshal.rbs +4 -4
  49. data/core/match_data.rbs +15 -13
  50. data/core/math.rbs +107 -66
  51. data/core/method.rbs +69 -33
  52. data/core/module.rbs +244 -106
  53. data/core/nil_class.rbs +7 -6
  54. data/core/numeric.rbs +74 -63
  55. data/core/object.rbs +9 -11
  56. data/core/object_space.rbs +30 -23
  57. data/core/pathname.rbs +1322 -0
  58. data/core/proc.rbs +95 -58
  59. data/core/process.rbs +222 -202
  60. data/core/ractor.rbs +371 -515
  61. data/core/random.rbs +21 -3
  62. data/core/range.rbs +159 -57
  63. data/core/rational.rbs +60 -89
  64. data/core/rbs/unnamed/argf.rbs +60 -53
  65. data/core/rbs/unnamed/env_class.rbs +19 -14
  66. data/core/rbs/unnamed/main_class.rbs +123 -0
  67. data/core/rbs/unnamed/random.rbs +11 -118
  68. data/core/regexp.rbs +258 -214
  69. data/core/ruby.rbs +53 -0
  70. data/core/ruby_vm.rbs +38 -34
  71. data/core/rubygems/config_file.rbs +5 -5
  72. data/core/rubygems/errors.rbs +4 -71
  73. data/core/rubygems/requirement.rbs +5 -5
  74. data/core/rubygems/rubygems.rbs +16 -82
  75. data/core/rubygems/version.rbs +2 -3
  76. data/core/set.rbs +490 -360
  77. data/core/signal.rbs +26 -16
  78. data/core/string.rbs +3303 -1365
  79. data/core/struct.rbs +27 -26
  80. data/core/symbol.rbs +41 -34
  81. data/core/thread.rbs +135 -74
  82. data/core/time.rbs +81 -50
  83. data/core/trace_point.rbs +41 -35
  84. data/core/true_class.rbs +2 -2
  85. data/core/unbound_method.rbs +24 -16
  86. data/core/warning.rbs +7 -7
  87. data/docs/aliases.md +79 -0
  88. data/docs/collection.md +3 -3
  89. data/docs/config.md +171 -0
  90. data/docs/encoding.md +56 -0
  91. data/docs/gem.md +0 -1
  92. data/docs/inline.md +576 -0
  93. data/docs/sigs.md +3 -3
  94. data/docs/syntax.md +46 -16
  95. data/docs/type_fingerprint.md +21 -0
  96. data/exe/rbs +1 -1
  97. data/ext/rbs_extension/ast_translation.c +1513 -0
  98. data/ext/rbs_extension/ast_translation.h +37 -0
  99. data/ext/rbs_extension/class_constants.c +185 -0
  100. data/{include/rbs/constants.h → ext/rbs_extension/class_constants.h} +22 -1
  101. data/ext/rbs_extension/compat.h +10 -0
  102. data/ext/rbs_extension/extconf.rb +25 -1
  103. data/ext/rbs_extension/legacy_location.c +294 -0
  104. data/ext/rbs_extension/legacy_location.h +82 -0
  105. data/ext/rbs_extension/main.c +468 -24
  106. data/ext/rbs_extension/rbs_extension.h +6 -21
  107. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  108. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  109. data/include/rbs/ast.h +1022 -0
  110. data/include/rbs/defines.h +86 -0
  111. data/include/rbs/lexer.h +206 -0
  112. data/include/rbs/location.h +40 -0
  113. data/include/rbs/parser.h +153 -0
  114. data/include/rbs/string.h +47 -0
  115. data/include/rbs/util/rbs_allocator.h +59 -0
  116. data/include/rbs/util/rbs_assert.h +20 -0
  117. data/include/rbs/util/rbs_buffer.h +83 -0
  118. data/include/rbs/util/rbs_constant_pool.h +6 -70
  119. data/include/rbs/util/rbs_encoding.h +282 -0
  120. data/include/rbs/util/rbs_unescape.h +24 -0
  121. data/include/rbs.h +9 -2
  122. data/lib/rbs/annotate/formatter.rb +3 -13
  123. data/lib/rbs/annotate/rdoc_annotator.rb +3 -1
  124. data/lib/rbs/annotate/rdoc_source.rb +1 -1
  125. data/lib/rbs/ast/annotation.rb +1 -1
  126. data/lib/rbs/ast/comment.rb +1 -1
  127. data/lib/rbs/ast/declarations.rb +10 -10
  128. data/lib/rbs/ast/members.rb +14 -14
  129. data/lib/rbs/ast/ruby/annotations.rb +409 -0
  130. data/lib/rbs/ast/ruby/comment_block.rb +245 -0
  131. data/lib/rbs/ast/ruby/declarations.rb +281 -0
  132. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  133. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  134. data/lib/rbs/ast/ruby/members.rb +723 -0
  135. data/lib/rbs/ast/type_param.rb +24 -4
  136. data/lib/rbs/buffer.rb +105 -20
  137. data/lib/rbs/cli/diff.rb +16 -15
  138. data/lib/rbs/cli/validate.rb +63 -126
  139. data/lib/rbs/cli.rb +56 -24
  140. data/lib/rbs/collection/config/lockfile_generator.rb +14 -2
  141. data/lib/rbs/collection/sources/git.rb +1 -0
  142. data/lib/rbs/collection.rb +0 -1
  143. data/lib/rbs/definition.rb +6 -1
  144. data/lib/rbs/definition_builder/ancestor_builder.rb +121 -65
  145. data/lib/rbs/definition_builder/method_builder.rb +65 -30
  146. data/lib/rbs/definition_builder.rb +177 -20
  147. data/lib/rbs/diff.rb +7 -1
  148. data/lib/rbs/environment/class_entry.rb +69 -0
  149. data/lib/rbs/environment/module_entry.rb +66 -0
  150. data/lib/rbs/environment.rb +402 -214
  151. data/lib/rbs/environment_loader.rb +2 -8
  152. data/lib/rbs/errors.rb +31 -21
  153. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  154. data/lib/rbs/inline_parser.rb +542 -0
  155. data/lib/rbs/location_aux.rb +36 -4
  156. data/lib/rbs/locator.rb +5 -1
  157. data/lib/rbs/method_type.rb +5 -3
  158. data/lib/rbs/namespace.rb +0 -7
  159. data/lib/rbs/parser_aux.rb +35 -7
  160. data/lib/rbs/prototype/helpers.rb +57 -0
  161. data/lib/rbs/prototype/rb.rb +3 -28
  162. data/lib/rbs/prototype/rbi.rb +3 -20
  163. data/lib/rbs/prototype/runtime.rb +10 -2
  164. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  165. data/lib/rbs/resolver/type_name_resolver.rb +116 -38
  166. data/lib/rbs/source.rb +99 -0
  167. data/lib/rbs/subtractor.rb +7 -4
  168. data/lib/rbs/test/type_check.rb +19 -2
  169. data/lib/rbs/type_name.rb +1 -8
  170. data/lib/rbs/types.rb +91 -79
  171. data/lib/rbs/unit_test/convertibles.rb +1 -0
  172. data/lib/rbs/unit_test/type_assertions.rb +35 -8
  173. data/lib/rbs/validator.rb +2 -2
  174. data/lib/rbs/version.rb +1 -1
  175. data/lib/rbs.rb +13 -2
  176. data/lib/rdoc/discover.rb +1 -1
  177. data/lib/rdoc_plugin/parser.rb +3 -3
  178. data/rbs.gemspec +4 -2
  179. data/rust/.gitignore +1 -0
  180. data/rust/Cargo.lock +378 -0
  181. data/rust/Cargo.toml +7 -0
  182. data/rust/ruby-rbs/Cargo.toml +22 -0
  183. data/rust/ruby-rbs/build.rs +764 -0
  184. data/rust/ruby-rbs/examples/locations.rs +60 -0
  185. data/rust/ruby-rbs/src/lib.rs +1 -0
  186. data/rust/ruby-rbs/src/node/mod.rs +742 -0
  187. data/rust/ruby-rbs/tests/sanity.rs +47 -0
  188. data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
  189. data/rust/ruby-rbs-sys/Cargo.toml +23 -0
  190. data/rust/ruby-rbs-sys/build.rs +204 -0
  191. data/rust/ruby-rbs-sys/src/lib.rs +50 -0
  192. data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
  193. data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
  194. data/rust/ruby-rbs-sys/wrapper.h +1 -0
  195. data/schema/typeParam.json +17 -1
  196. data/sig/ancestor_builder.rbs +1 -1
  197. data/sig/annotate/formatter.rbs +2 -2
  198. data/sig/annotate/rdoc_annotater.rbs +1 -1
  199. data/sig/ast/ruby/annotations.rbs +421 -0
  200. data/sig/ast/ruby/comment_block.rbs +127 -0
  201. data/sig/ast/ruby/declarations.rbs +158 -0
  202. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  203. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  204. data/sig/ast/ruby/members.rbs +178 -0
  205. data/sig/buffer.rbs +63 -5
  206. data/sig/cli/diff.rbs +5 -11
  207. data/sig/cli/validate.rbs +12 -8
  208. data/sig/cli.rbs +18 -18
  209. data/sig/definition.rbs +6 -0
  210. data/sig/definition_builder.rbs +3 -1
  211. data/sig/environment/class_entry.rbs +50 -0
  212. data/sig/environment/module_entry.rbs +50 -0
  213. data/sig/environment.rbs +94 -87
  214. data/sig/errors.rbs +26 -20
  215. data/sig/inline_parser/comment_association.rbs +71 -0
  216. data/sig/inline_parser.rbs +124 -0
  217. data/sig/location.rbs +32 -7
  218. data/sig/locator.rbs +0 -2
  219. data/sig/manifest.yaml +0 -1
  220. data/sig/method_builder.rbs +9 -4
  221. data/sig/namespace.rbs +0 -5
  222. data/sig/parser.rbs +67 -13
  223. data/sig/prototype/helpers.rbs +2 -0
  224. data/sig/resolver/type_name_resolver.rbs +35 -7
  225. data/sig/source.rbs +48 -0
  226. data/sig/type_param.rbs +13 -8
  227. data/sig/typename.rbs +0 -5
  228. data/sig/types.rbs +10 -8
  229. data/sig/unit_test/spy.rbs +0 -8
  230. data/sig/unit_test/type_assertions.rbs +11 -0
  231. data/src/ast.c +1604 -0
  232. data/src/lexer.c +3194 -0
  233. data/src/lexer.re +154 -0
  234. data/src/lexstate.c +212 -0
  235. data/src/location.c +31 -0
  236. data/src/parser.c +4205 -0
  237. data/src/string.c +41 -0
  238. data/src/util/rbs_allocator.c +165 -0
  239. data/src/util/rbs_assert.c +19 -0
  240. data/src/util/rbs_buffer.c +54 -0
  241. data/src/util/rbs_constant_pool.c +18 -92
  242. data/src/util/rbs_encoding.c +21308 -0
  243. data/src/util/rbs_unescape.c +167 -0
  244. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  245. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  246. data/stdlib/cgi/0/core.rbs +9 -393
  247. data/stdlib/cgi/0/manifest.yaml +1 -0
  248. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  249. data/stdlib/coverage/0/coverage.rbs +7 -4
  250. data/stdlib/date/0/date.rbs +92 -79
  251. data/stdlib/date/0/date_time.rbs +25 -24
  252. data/stdlib/delegate/0/delegator.rbs +10 -7
  253. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  254. data/stdlib/digest/0/digest.rbs +110 -0
  255. data/stdlib/erb/0/erb.rbs +748 -347
  256. data/stdlib/etc/0/etc.rbs +55 -50
  257. data/stdlib/fileutils/0/fileutils.rbs +158 -139
  258. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  259. data/stdlib/io-console/0/io-console.rbs +2 -2
  260. data/stdlib/json/0/json.rbs +226 -179
  261. data/stdlib/monitor/0/monitor.rbs +3 -3
  262. data/stdlib/net-http/0/net-http.rbs +162 -134
  263. data/stdlib/objspace/0/objspace.rbs +17 -34
  264. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  265. data/stdlib/open3/0/open3.rbs +469 -10
  266. data/stdlib/openssl/0/openssl.rbs +475 -357
  267. data/stdlib/optparse/0/optparse.rbs +26 -17
  268. data/stdlib/pathname/0/pathname.rbs +11 -1381
  269. data/stdlib/pp/0/pp.rbs +9 -8
  270. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  271. data/stdlib/pstore/0/pstore.rbs +35 -30
  272. data/stdlib/psych/0/psych.rbs +65 -12
  273. data/stdlib/psych/0/store.rbs +2 -4
  274. data/stdlib/pty/0/pty.rbs +9 -6
  275. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  276. data/stdlib/rdoc/0/code_object.rbs +4 -3
  277. data/stdlib/rdoc/0/comment.rbs +2 -0
  278. data/stdlib/rdoc/0/options.rbs +76 -0
  279. data/stdlib/rdoc/0/parser.rbs +1 -1
  280. data/stdlib/rdoc/0/rdoc.rbs +7 -5
  281. data/stdlib/rdoc/0/store.rbs +2 -2
  282. data/stdlib/resolv/0/resolv.rbs +25 -68
  283. data/stdlib/ripper/0/ripper.rbs +25 -19
  284. data/stdlib/securerandom/0/manifest.yaml +2 -0
  285. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  286. data/stdlib/shellwords/0/shellwords.rbs +2 -2
  287. data/stdlib/singleton/0/singleton.rbs +3 -0
  288. data/stdlib/socket/0/addrinfo.rbs +9 -9
  289. data/stdlib/socket/0/basic_socket.rbs +3 -3
  290. data/stdlib/socket/0/ip_socket.rbs +10 -8
  291. data/stdlib/socket/0/socket.rbs +23 -10
  292. data/stdlib/socket/0/tcp_server.rbs +1 -1
  293. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  294. data/stdlib/socket/0/udp_socket.rbs +1 -1
  295. data/stdlib/socket/0/unix_server.rbs +1 -1
  296. data/stdlib/stringio/0/stringio.rbs +1177 -85
  297. data/stdlib/strscan/0/string_scanner.rbs +27 -25
  298. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  299. data/stdlib/time/0/time.rbs +8 -6
  300. data/stdlib/timeout/0/timeout.rbs +63 -7
  301. data/stdlib/tsort/0/cyclic.rbs +3 -0
  302. data/stdlib/tsort/0/tsort.rbs +7 -6
  303. data/stdlib/uri/0/common.rbs +42 -20
  304. data/stdlib/uri/0/file.rbs +3 -3
  305. data/stdlib/uri/0/generic.rbs +26 -18
  306. data/stdlib/uri/0/http.rbs +2 -2
  307. data/stdlib/uri/0/ldap.rbs +2 -2
  308. data/stdlib/uri/0/mailto.rbs +3 -3
  309. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  310. data/stdlib/zlib/0/deflate.rbs +4 -3
  311. data/stdlib/zlib/0/gzip_reader.rbs +6 -6
  312. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  313. data/stdlib/zlib/0/inflate.rbs +1 -1
  314. data/stdlib/zlib/0/need_dict.rbs +1 -1
  315. data/stdlib/zlib/0/zstream.rbs +1 -0
  316. metadata +121 -18
  317. data/ext/rbs_extension/lexer.c +0 -2728
  318. data/ext/rbs_extension/lexer.h +0 -179
  319. data/ext/rbs_extension/lexer.re +0 -147
  320. data/ext/rbs_extension/lexstate.c +0 -175
  321. data/ext/rbs_extension/location.c +0 -325
  322. data/ext/rbs_extension/location.h +0 -85
  323. data/ext/rbs_extension/parser.c +0 -2982
  324. data/ext/rbs_extension/parser.h +0 -18
  325. data/ext/rbs_extension/parserstate.c +0 -411
  326. data/ext/rbs_extension/parserstate.h +0 -163
  327. data/ext/rbs_extension/unescape.c +0 -32
  328. data/include/rbs/ruby_objs.h +0 -72
  329. data/src/constants.c +0 -153
  330. data/src/ruby_objs.c +0 -799
data/sig/environment.rbs CHANGED
@@ -2,81 +2,20 @@ module RBS
2
2
  class Environment
3
3
  type module_decl = AST::Declarations::Class | AST::Declarations::Module
4
4
 
5
- interface _ModuleOrClass
6
- def name: () -> TypeName
7
-
8
- def type_params: () -> Array[AST::TypeParam]
9
- end
10
-
11
- interface _NamedDecl
12
- def name: () -> TypeName
13
- end
14
-
15
- module ContextUtil
16
- def calculate_context: (Array[_NamedDecl]) -> Resolver::context
17
- end
18
-
19
- # Name of object, it's (multiple) declarations with the outer module declarations
20
- #
21
- class MultiEntry[M < _ModuleOrClass]
22
- class D[M < _ModuleOrClass]
23
- attr_reader decl: M
24
- attr_reader outer: Array[module_decl]
25
-
26
- def initialize: (decl: M, outer: Array[module_decl]) -> void
27
-
28
- include ContextUtil
29
-
30
- @context: Resolver::context
31
-
32
- def context: () -> Resolver::context
33
- end
34
-
35
- attr_reader name: TypeName
36
- attr_reader decls: Array[D[M]]
37
-
38
- @primary: D[M]?
39
-
40
- def initialize: (name: TypeName) -> void
41
-
42
- def insert: (decl: M, outer: Array[module_decl]) -> void
43
-
44
- def validate_type_params: () -> void
45
-
46
- def compatible_params?: (Array[AST::TypeParam], Array[AST::TypeParam]) -> boolish
47
-
48
- def type_params: () -> Array[AST::TypeParam]
49
-
50
- def primary: () -> D[M]
51
- end
52
-
53
- class ModuleEntry < MultiEntry[AST::Declarations::Module]
54
- def self_types: () -> Array[AST::Declarations::Module::Self]
55
- end
56
-
57
- class ClassEntry < MultiEntry[AST::Declarations::Class]
58
- end
59
-
60
5
  # Name of object, it's (single) declaration, and the outer module declarations
61
6
  #
62
7
  class SingleEntry[N, D]
63
8
  attr_reader name: N
64
9
  attr_reader decl: D
65
- attr_reader outer: Array[module_decl]
66
-
67
- def initialize: (name: N, decl: D, outer: Array[module_decl]) -> void
10
+ attr_reader context: Resolver::context
68
11
 
69
- include ContextUtil
70
-
71
- @context: Resolver::context
72
-
73
- def context: () -> Resolver::context
12
+ def initialize: (name: N, decl: D, context: Resolver::context) -> void
74
13
  end
75
14
 
76
- class ModuleAliasEntry < SingleEntry[TypeName, AST::Declarations::ModuleAlias]
15
+ class ModuleAliasEntry < SingleEntry[TypeName, AST::Declarations::ModuleAlias | AST::Ruby::Declarations::ClassModuleAliasDecl]
77
16
  end
78
17
 
79
- class ClassAliasEntry < SingleEntry[TypeName, AST::Declarations::ClassAlias]
18
+ class ClassAliasEntry < SingleEntry[TypeName, AST::Declarations::ClassAlias | AST::Ruby::Declarations::ClassModuleAliasDecl]
80
19
  end
81
20
 
82
21
  class InterfaceEntry < SingleEntry[TypeName, AST::Declarations::Interface]
@@ -85,14 +24,18 @@ module RBS
85
24
  class TypeAliasEntry < SingleEntry[TypeName, AST::Declarations::TypeAlias]
86
25
  end
87
26
 
88
- class ConstantEntry < SingleEntry[TypeName, AST::Declarations::Constant]
27
+ class ConstantEntry < SingleEntry[TypeName, AST::Declarations::Constant | AST::Ruby::Declarations::ConstantDecl]
89
28
  end
90
29
 
91
30
  class GlobalEntry < SingleEntry[Symbol, AST::Declarations::Global]
92
31
  end
93
32
 
94
33
  # Top level declarations
95
- attr_reader declarations: Array[AST::Declarations::t]
34
+ def declarations: () -> Array[AST::Ruby::Declarations::t | AST::Declarations::t]
35
+
36
+ # Array of source objects loaded in the environment
37
+ #
38
+ attr_reader sources: Array[Source::t]
96
39
 
97
40
  # Class declarations
98
41
  attr_reader class_decls: Hash[TypeName, ModuleEntry | ClassEntry]
@@ -111,10 +54,6 @@ module RBS
111
54
  # Global declarations
112
55
  attr_reader global_decls: Hash[Symbol, GlobalEntry]
113
56
 
114
- # A hash from Buffer to it's contents
115
- #
116
- attr_reader signatures: Hash[Buffer, [Array[AST::Directives::t], Array[AST::Declarations::t]]]
117
-
118
57
  def initialize: () -> void
119
58
 
120
59
  def initialize_copy: (Environment) -> void
@@ -123,15 +62,21 @@ module RBS
123
62
  #
124
63
  def self.from_loader: (EnvironmentLoader) -> Environment
125
64
 
126
- def add_signature: (buffer: Buffer, directives: Array[AST::Directives::t], decls: Array[AST::Declarations::t]) -> void
65
+ def add_source: (Source::t) -> void
66
+
67
+ def each_rbs_source: () { (Source::RBS) -> void } -> void
68
+ | () -> Enumerator[Source::RBS]
127
69
 
128
- # Insert a toplevel declaration into the environment
70
+ def each_ruby_source: () { (Source::Ruby) -> void } -> void
71
+ | () -> Enumerator[Source::Ruby]
72
+
73
+ # Insert a declaration into the environment
129
74
  #
130
- def <<: (AST::Declarations::t decl) -> self
75
+ private def insert_rbs_decl: (AST::Declarations::t, context: Resolver::context, namespace: Namespace) -> void
131
76
 
132
77
  # Insert a declaration into the environment
133
78
  #
134
- private def insert_decl: (AST::Declarations::t, outer: Array[module_decl], namespace: Namespace) -> void
79
+ private def insert_ruby_decl: (AST::Ruby::Declarations::t, context: Resolver::context, namespace: Namespace) -> void
135
80
 
136
81
  # Resolve all type names in the environment to absolute type names.
137
82
  # Relative type name will be left if absolute type name cannot be found.
@@ -139,9 +84,15 @@ module RBS
139
84
  # When `only` is given, it skips other _top-level_ declarations not included in the collection.
140
85
  # This helps running resolution faster in the case of _partial updates_.
141
86
  #
142
- 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
143
88
 
144
- 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]]
145
96
 
146
97
  def inspect: () -> String
147
98
 
@@ -149,7 +100,8 @@ module RBS
149
100
 
150
101
  # Remove declarations and directives that are loaded from `buffers`
151
102
  #
152
- def unload: (Set[Buffer] buffers) -> Environment
103
+ def unload: (Set[Pathname] paths) -> Environment
104
+ | %a{deprecated: Use pathname version} (Set[Buffer] buffers) -> Environment
153
105
 
154
106
  # Returns true if an interface with the type name is defined
155
107
  #
@@ -190,22 +142,58 @@ module RBS
190
142
  # Returns true if the type name is a class alias
191
143
  def class_alias?: (TypeName) -> bool
192
144
 
193
- 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)
194
156
 
195
157
  # Returns ClassEntry if the class definition is found, normalized in case of alias
196
158
  #
159
+ %a{deprecated: Use `class_entry(type_name, normalized: true)` instead. }
197
160
  def normalized_class_entry: (TypeName) -> ClassEntry?
198
161
 
199
- 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)
200
173
 
201
174
  # Returns ModuleEntry if the module definition is found, normalized in case of alias
202
175
  #
176
+ %a{deprecated: Use `module_entry(type_name, normalized: true)` instead. }
203
177
  def normalized_module_entry: (TypeName) -> ModuleEntry?
204
178
 
205
- 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)
206
188
 
207
- 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)
208
195
 
196
+ %a{deprecated: Use `module_class_entry(type_name, normalized: true)` instead. }
209
197
  def normalized_module_class_entry: (TypeName) -> (ClassEntry | ModuleEntry | nil)
210
198
 
211
199
  @normalize_module_name_cache: Hash[TypeName, TypeName | false | nil]
@@ -216,26 +204,39 @@ module RBS
216
204
  # * Returns `nil` if the rhs name cannot be found
217
205
  # * Returns `false` if the name is cyclic
218
206
  #
207
+ # Note that this method assumes the declarations have resolved type names.
208
+ #
219
209
  def normalize_module_name?: (TypeName) -> (TypeName | nil | false)
220
210
 
221
- # Returns the original module name that is defined with `module` declaration
211
+ # Returns the original module name that is defined with `module`/`class` declaration
222
212
  #
223
- # * Raises an error if given type name is not module
213
+ # * Raises an error if given type name is not module/class
224
214
  # * Calls `#absolute!` for relative module names
225
215
  # * Returns the name itself if the name cannot be normalized to a class/module
226
216
  #
217
+ # Note that this method assumes the declarations have resolved type names.
218
+ #
227
219
  def normalize_module_name: (TypeName) -> TypeName
228
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
+
229
226
  # Returns a normalized module/class name or a type name with a normalized namespace
230
227
  #
231
228
  # * Calls `#absolute!` for relative module names
232
229
  # * Returns `nil` if the typename cannot be found
233
230
  # * Returns `false` if the name is cyclic
234
231
  #
232
+ # Note that this method assumes the declarations have resolved type names.
233
+ #
235
234
  def normalize_type_name?: (TypeName) -> (TypeName | nil | false)
236
235
 
237
236
  # Normalize the type name or raises an error
238
237
  #
238
+ # Note that this method assumes the declarations have resolved type names.
239
+ #
239
240
  def normalize_type_name!: (TypeName) -> TypeName
240
241
 
241
242
  # Returns a normalized module/class name or a type name with a normalized namespace
@@ -243,6 +244,8 @@ module RBS
243
244
  # * Calls `#absolute!` for relative module names
244
245
  # * Returns the typename itself if the name cannot be normalized
245
246
  #
247
+ # Note that this method assumes the declarations have resolved type names.
248
+ #
246
249
  def normalize_type_name: (TypeName) -> TypeName
247
250
 
248
251
  # Returns `true` if given type name is normalized
@@ -264,7 +267,7 @@ module RBS
264
267
 
265
268
  def append_context: (Resolver::context, module_decl) -> Resolver::context
266
269
 
267
- def resolve_declaration: (Resolver::TypeNameResolver resolver, UseMap map, AST::Declarations::t decl, outer: Array[module_decl], prefix: Namespace) -> AST::Declarations::t
270
+ def resolve_declaration: (Resolver::TypeNameResolver resolver, UseMap map, AST::Declarations::t decl, context: Resolver::context, prefix: Namespace) -> AST::Declarations::t
268
271
 
269
272
  def resolve_member: (Resolver::TypeNameResolver, UseMap map, AST::Members::t, context: Resolver::context) -> AST::Members::t
270
273
 
@@ -272,8 +275,12 @@ module RBS
272
275
 
273
276
  def resolve_type_params: (Resolver::TypeNameResolver resolver, UseMap map, Array[AST::TypeParam], context: Resolver::context) -> Array[AST::TypeParam]
274
277
 
275
- def absolute_type: (Resolver::TypeNameResolver, UseMap map, Types::t, context: Resolver::context) -> Types::t
278
+ def resolve_ruby_decl: (Resolver::TypeNameResolver, AST::Ruby::Declarations::t, context: Resolver::context, prefix: Namespace) -> AST::Ruby::Declarations::t
279
+
280
+ def resolve_ruby_member: (Resolver::TypeNameResolver, AST::Ruby::Members::t, context: Resolver::context) -> AST::Ruby::Members::t
281
+
282
+ def absolute_type: (Resolver::TypeNameResolver, UseMap? map, Types::t, context: Resolver::context) -> Types::t
276
283
 
277
- def absolute_type_name: (Resolver::TypeNameResolver, UseMap map, TypeName, context: Resolver::context) -> TypeName
284
+ def absolute_type_name: (Resolver::TypeNameResolver, UseMap? map, TypeName, context: Resolver::context) -> TypeName
278
285
  end
279
286
  end
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
@@ -226,28 +228,35 @@ module RBS
226
228
  class InvalidOverloadMethodError < DefinitionError
227
229
  include DetailedMessageable
228
230
 
231
+ type member = AST::Members::MethodDefinition | AST::Ruby::Members::DefMember
232
+
229
233
  attr_reader type_name: TypeName
230
234
  attr_reader method_name: Symbol
231
235
  attr_reader kind: :instance | :singleton
232
- attr_reader members: Array[AST::Members::MethodDefinition]
236
+ attr_reader members: Array[member]
233
237
 
234
- def initialize: (type_name: TypeName, method_name: Symbol, kind: :instance | :singleton, members: Array[AST::Members::MethodDefinition]) -> void
238
+ def initialize: (type_name: TypeName, method_name: Symbol, kind: :instance | :singleton, members: Array[member]) -> void
235
239
 
236
240
  def location: () -> AST::Members::MethodDefinition::loc?
237
241
  end
238
242
 
239
243
  class GenericParameterMismatchError < LoadingError
244
+ type decl = AST::Declarations::Class | AST::Declarations::Module
245
+ | AST::Ruby::Declarations::ClassDecl | AST::Ruby::Declarations::ModuleDecl
246
+
240
247
  attr_reader name: TypeName
241
- attr_reader decl: AST::Declarations::Class | AST::Declarations::Module
248
+ attr_reader decl: decl
242
249
 
243
- def initialize: (name: TypeName, decl: AST::Declarations::Class | AST::Declarations::Module) -> void
250
+ def initialize: (name: TypeName, decl: decl, ?location: Location) -> void
244
251
  end
245
252
 
246
253
  class DuplicatedDeclarationError < LoadingError
254
+ type declaration = AST::Declarations::t | AST::Ruby::Declarations::t
255
+
247
256
  attr_reader name: TypeName | Symbol
248
- attr_reader decls: Array[AST::Declarations::t]
257
+ attr_reader decls: Array[declaration]
249
258
 
250
- def initialize: (TypeName | Symbol, *AST::Declarations::t) -> void
259
+ def initialize: (TypeName | Symbol, *declaration) -> void
251
260
  end
252
261
 
253
262
  class InvalidVarianceAnnotationError < DefinitionError
@@ -280,6 +289,7 @@ module RBS
280
289
  include DetailedMessageable
281
290
 
282
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
283
293
 
284
294
  attr_reader type_name: TypeName
285
295
  attr_reader member: member
@@ -290,17 +300,21 @@ module RBS
290
300
 
291
301
  def self.check!: (type_name: TypeName, env: Environment, member: member) -> void
292
302
 
303
+ def member_name: (member) -> TypeName
304
+
293
305
  def mixin_name: () -> String
294
306
  end
295
307
 
296
308
  # InheritModuleError is raised if a class definition inherits a module (not a class)
297
309
  #
298
310
  class InheritModuleError < DefinitionError
311
+ type super_class = AST::Declarations::Class::Super | AST::Ruby::Declarations::ClassDecl::SuperClass
312
+
299
313
  include DetailedMessageable
300
314
 
301
- attr_reader super_decl: AST::Declarations::Class::Super
315
+ attr_reader super_decl: super_class
302
316
 
303
- def initialize: (AST::Declarations::Class::Super) -> void
317
+ def initialize: (super_class) -> void
304
318
 
305
319
  def location: () -> Location[untyped, untyped]?
306
320
 
@@ -308,7 +322,7 @@ module RBS
308
322
  #
309
323
  # Automatically normalize the name of super.
310
324
  #
311
- def self.check!: (AST::Declarations::Class::Super, env: Environment) -> void
325
+ def self.check!: (super_class, env: Environment) -> void
312
326
  end
313
327
 
314
328
  class RecursiveTypeAliasError < BaseError
@@ -380,14 +394,6 @@ module RBS
380
394
  def location: () -> AST::Declarations::AliasDecl::loc?
381
395
  end
382
396
 
383
- class WillSyntaxError < BaseError
384
- include RBS::DetailedMessageable
385
-
386
- def initialize: (String message, location: Location[untyped, untyped]?) -> void
387
-
388
- attr_reader location: Location[untyped, untyped]?
389
- end
390
-
391
397
  class TypeParamDefaultReferenceError < BaseError
392
398
  include DetailedMessageable
393
399
 
@@ -0,0 +1,71 @@
1
+ use RBS::AST::Ruby::CommentBlock
2
+
3
+ module RBS
4
+ class InlineParser
5
+ # CommentAssociation manages the association between `Prism::Node` and `CommentBlock`
6
+ #
7
+ class CommentAssociation
8
+ attr_reader blocks: Array[CommentBlock]
9
+
10
+ attr_reader start_line_map: Hash[Integer, CommentBlock]
11
+
12
+ attr_reader end_line_map: Hash[Integer, CommentBlock]
13
+
14
+ # CommentBlocks that are already associated to a node, which cannot be associated to another node again
15
+ #
16
+ attr_reader associated_blocks: Set[CommentBlock]
17
+
18
+ def self.build: (Buffer, Prism::Result) -> instance
19
+
20
+ def initialize: (Array[CommentBlock]) -> void
21
+
22
+ class Reference
23
+ attr_reader block: CommentBlock
24
+
25
+ @associated_blocks: Set[CommentBlock]
26
+
27
+ def initialize: (CommentBlock, Set[CommentBlock]) -> void
28
+
29
+ def associate!: () -> self
30
+
31
+ def associated?: () -> bool
32
+ end
33
+
34
+ # Returns an unassociated CommentBlock that can be associated to given node
35
+ #
36
+ # Automatically updates association status.
37
+ #
38
+ def leading_block!: (Prism::Node) -> CommentBlock?
39
+
40
+ # Returns a Reference that is associated to given node
41
+ #
42
+ # Updates association explicitly through the reference.
43
+ #
44
+ def leading_block: (Prism::Node) -> Reference?
45
+
46
+ # Returns a CommentBlock that is associated to given node, or by its location
47
+ #
48
+ # Update association status.
49
+ #
50
+ def trailing_block!: (Prism::Node | Prism::Location) -> CommentBlock?
51
+
52
+ # Returns a Reference that is associated to given node, or by its location
53
+ #
54
+ # Updates association explicitly through the reference.
55
+ #
56
+ def trailing_block: (Prism::Node | Prism::Location) -> Reference?
57
+
58
+ # Yields leading CommentBlocks that is enclosed in the given node
59
+ #
60
+ # Note that `enclosed_blocks` works only after all of the *leading* blocks inside the node is associated.
61
+ #
62
+ # Update association status.
63
+ #
64
+ def each_enclosed_block: (Prism::Node) { (CommentBlock) -> void } -> void
65
+ | (Prism::Node) -> Enumerator[CommentBlock]
66
+
67
+ def each_unassociated_block: () { (CommentBlock) -> void } -> void
68
+ | () -> Enumerator[CommentBlock]
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,124 @@
1
+ use RBS::AST::Ruby::Declarations
2
+
3
+ module RBS
4
+ class InlineParser
5
+ class Result
6
+ attr_reader buffer: Buffer
7
+ attr_reader prism_result: Prism::ParseResult
8
+ attr_reader declarations: Array[AST::Ruby::Declarations::t]
9
+ attr_reader diagnostics: Array[Diagnostic::t]
10
+
11
+ def initialize: (Buffer, Prism::ParseResult) -> void
12
+
13
+ def type_fingerprint: () -> untyped
14
+ end
15
+
16
+ module Diagnostic
17
+ class Base
18
+ attr_reader message: String
19
+
20
+ attr_reader location: Location
21
+
22
+ def initialize: (Location, String) -> void
23
+ end
24
+
25
+ class NotImplementedYet < Base
26
+ end
27
+
28
+ class NonConstantClassName < Base
29
+ end
30
+
31
+ class NonConstantModuleName < Base
32
+ end
33
+
34
+ class NonConstantSuperClassName < Base
35
+ end
36
+
37
+ class TopLevelMethodDefinition < Base
38
+ end
39
+
40
+ class TopLevelAttributeDefinition < Base
41
+ end
42
+
43
+ class UnusedInlineAnnotation < Base
44
+ end
45
+
46
+ class AnnotationSyntaxError < Base
47
+ end
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
+
64
+ type t = NotImplementedYet
65
+ | NonConstantClassName | NonConstantModuleName | NonConstantSuperClassName
66
+ | TopLevelMethodDefinition | TopLevelAttributeDefinition
67
+ | UnusedInlineAnnotation | AnnotationSyntaxError
68
+ | MixinMultipleArguments | MixinNonConstantModule
69
+ | AttributeNonSymbolName
70
+ | NonConstantConstantDeclaration
71
+ | ClassModuleAliasDeclarationMissingTypeName
72
+ end
73
+
74
+ def self.parse: (Buffer, Prism::ParseResult) -> Result
75
+
76
+ class Parser < Prism::Visitor
77
+ type module_context = Declarations::ClassDecl | Declarations::ModuleDecl
78
+
79
+ include AST::Ruby::Helpers::ConstantHelper
80
+
81
+ include AST::Ruby::Helpers::LocationHelper
82
+
83
+ attr_reader comments: CommentAssociation
84
+
85
+ attr_reader result: Result
86
+
87
+ attr_reader module_nesting: Array[module_context]
88
+
89
+ def initialize: (Result) -> void
90
+
91
+ def buffer: () -> Buffer
92
+
93
+ %a{pure} def current_module: () -> module_context?
94
+
95
+ %a{pure} def current_module!: () -> module_context
96
+
97
+ def diagnostics: () -> Array[Diagnostic::t]
98
+
99
+ def push_module_nesting: [T] (module_context) { () -> T } -> T
100
+
101
+ # Returns `true` if the node is a comment block including `@rbs skip` annotation
102
+ #
103
+ # Doesn't update the `association` flag if returning `false`.
104
+ #
105
+ def skip_node?: (Prism::Node) -> bool
106
+
107
+ def insert_declaration: (module_context) -> void
108
+
109
+ def report_unused_annotation: (*AST::Ruby::Annotations::t | nil | AST::Ruby::CommentBlock::AnnotationSyntaxError) -> void
110
+
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?
122
+ end
123
+ end
124
+ end