rbs 3.9.4 → 4.1.1

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 (348) hide show
  1. checksums.yaml +4 -4
  2. data/.clang-format +75 -0
  3. data/.clangd +2 -0
  4. data/.dockerignore +37 -0
  5. data/.github/dependabot.yml +16 -14
  6. data/.github/workflows/bundle-update.yml +63 -0
  7. data/.github/workflows/c-check.yml +66 -0
  8. data/.github/workflows/comments.yml +5 -3
  9. data/.github/workflows/dependabot.yml +2 -2
  10. data/.github/workflows/jruby.yml +79 -0
  11. data/.github/workflows/release-gems.yml +164 -0
  12. data/.github/workflows/ruby.yml +84 -30
  13. data/.github/workflows/rust.yml +186 -0
  14. data/.github/workflows/truffleruby.yml +54 -0
  15. data/.github/workflows/typecheck.yml +5 -2
  16. data/.github/workflows/wasm.yml +55 -0
  17. data/.github/workflows/windows.yml +9 -3
  18. data/.gitignore +16 -0
  19. data/.rubocop.yml +2 -2
  20. data/CHANGELOG.md +430 -0
  21. data/Dockerfile.jruby +53 -0
  22. data/README.md +41 -4
  23. data/Rakefile +777 -60
  24. data/Steepfile +11 -0
  25. data/config.yml +660 -62
  26. data/core/array.rbs +541 -398
  27. data/core/basic_object.rbs +9 -8
  28. data/core/binding.rbs +0 -2
  29. data/core/builtin.rbs +9 -8
  30. data/core/class.rbs +11 -8
  31. data/core/comparable.rbs +55 -34
  32. data/core/complex.rbs +104 -78
  33. data/core/dir.rbs +61 -49
  34. data/core/encoding.rbs +12 -15
  35. data/core/enumerable.rbs +297 -196
  36. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  37. data/core/enumerator/product.rbs +5 -5
  38. data/core/enumerator.rbs +91 -28
  39. data/core/errno.rbs +11 -2
  40. data/core/errors.rbs +58 -29
  41. data/core/exception.rbs +13 -13
  42. data/core/fiber.rbs +74 -54
  43. data/core/file.rbs +260 -1151
  44. data/core/file_constants.rbs +463 -0
  45. data/core/file_stat.rbs +534 -0
  46. data/core/file_test.rbs +3 -3
  47. data/core/float.rbs +257 -116
  48. data/core/gc.rbs +425 -281
  49. data/core/hash.rbs +1151 -829
  50. data/core/integer.rbs +156 -195
  51. data/core/io/buffer.rbs +53 -42
  52. data/core/io/wait.rbs +13 -35
  53. data/core/io.rbs +220 -154
  54. data/core/kernel.rbs +239 -163
  55. data/core/marshal.rbs +4 -4
  56. data/core/match_data.rbs +16 -14
  57. data/core/math.rbs +107 -66
  58. data/core/method.rbs +69 -33
  59. data/core/module.rbs +302 -150
  60. data/core/nil_class.rbs +7 -6
  61. data/core/numeric.rbs +77 -63
  62. data/core/object.rbs +9 -11
  63. data/core/object_space/weak_key_map.rbs +7 -7
  64. data/core/object_space.rbs +30 -23
  65. data/core/pathname.rbs +1312 -0
  66. data/core/proc.rbs +95 -58
  67. data/core/process.rbs +222 -202
  68. data/core/ractor.rbs +364 -518
  69. data/core/random.rbs +21 -3
  70. data/core/range.rbs +181 -79
  71. data/core/rational.rbs +60 -89
  72. data/core/rbs/ops.rbs +154 -0
  73. data/core/rbs/unnamed/argf.rbs +63 -56
  74. data/core/rbs/unnamed/env_class.rbs +19 -14
  75. data/core/rbs/unnamed/main_class.rbs +123 -0
  76. data/core/rbs/unnamed/random.rbs +11 -118
  77. data/core/regexp.rbs +258 -214
  78. data/core/ruby.rbs +53 -0
  79. data/core/ruby_vm.rbs +78 -34
  80. data/core/rubygems/config_file.rbs +5 -5
  81. data/core/rubygems/errors.rbs +6 -70
  82. data/core/rubygems/requirement.rbs +5 -15
  83. data/core/rubygems/rubygems.rbs +18 -81
  84. data/core/rubygems/specification.rbs +8 -0
  85. data/core/rubygems/version.rbs +2 -163
  86. data/core/set.rbs +493 -363
  87. data/core/signal.rbs +26 -16
  88. data/core/string.rbs +3234 -1285
  89. data/core/struct.rbs +43 -42
  90. data/core/symbol.rbs +41 -34
  91. data/core/thread.rbs +139 -83
  92. data/core/time.rbs +81 -50
  93. data/core/trace_point.rbs +41 -35
  94. data/core/true_class.rbs +2 -2
  95. data/core/unbound_method.rbs +24 -16
  96. data/core/warning.rbs +7 -7
  97. data/docs/CONTRIBUTING.md +2 -1
  98. data/docs/aliases.md +79 -0
  99. data/docs/collection.md +3 -3
  100. data/docs/config.md +171 -0
  101. data/docs/encoding.md +56 -0
  102. data/docs/gem.md +0 -1
  103. data/docs/inline.md +634 -0
  104. data/docs/rbs_by_example.md +20 -20
  105. data/docs/release.md +151 -0
  106. data/docs/rust.md +96 -0
  107. data/docs/sigs.md +3 -3
  108. data/docs/syntax.md +48 -18
  109. data/docs/type_fingerprint.md +21 -0
  110. data/docs/wasm_serialization.md +80 -0
  111. data/exe/rbs +1 -1
  112. data/ext/rbs_extension/ast_translation.c +1855 -0
  113. data/ext/rbs_extension/ast_translation.h +41 -0
  114. data/ext/rbs_extension/class_constants.c +187 -0
  115. data/{include/rbs/constants.h → ext/rbs_extension/class_constants.h} +23 -1
  116. data/ext/rbs_extension/compat.h +10 -0
  117. data/ext/rbs_extension/extconf.rb +26 -1
  118. data/ext/rbs_extension/legacy_location.c +299 -0
  119. data/ext/rbs_extension/legacy_location.h +82 -0
  120. data/ext/rbs_extension/main.c +603 -23
  121. data/ext/rbs_extension/rbs_extension.h +6 -21
  122. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  123. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  124. data/include/rbs/ast.h +1047 -0
  125. data/include/rbs/defines.h +99 -0
  126. data/include/rbs/lexer.h +207 -0
  127. data/include/rbs/location.h +40 -0
  128. data/include/rbs/parser.h +153 -0
  129. data/include/rbs/serialize.h +39 -0
  130. data/include/rbs/string.h +47 -0
  131. data/include/rbs/util/rbs_allocator.h +59 -0
  132. data/include/rbs/util/rbs_assert.h +20 -0
  133. data/include/rbs/util/rbs_buffer.h +83 -0
  134. data/include/rbs/util/rbs_constant_pool.h +6 -70
  135. data/include/rbs/util/rbs_encoding.h +282 -0
  136. data/include/rbs/util/rbs_unescape.h +24 -0
  137. data/include/rbs.h +9 -2
  138. data/lib/rbs/annotate/formatter.rb +3 -13
  139. data/lib/rbs/annotate/rdoc_annotator.rb +30 -32
  140. data/lib/rbs/annotate/rdoc_source.rb +1 -1
  141. data/lib/rbs/ast/annotation.rb +1 -1
  142. data/lib/rbs/ast/comment.rb +1 -1
  143. data/lib/rbs/ast/declarations.rb +10 -10
  144. data/lib/rbs/ast/members.rb +14 -14
  145. data/lib/rbs/ast/ruby/annotations.rb +451 -0
  146. data/lib/rbs/ast/ruby/comment_block.rb +247 -0
  147. data/lib/rbs/ast/ruby/declarations.rb +291 -0
  148. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  149. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  150. data/lib/rbs/ast/ruby/members.rb +762 -0
  151. data/lib/rbs/ast/type_param.rb +24 -4
  152. data/lib/rbs/buffer.rb +142 -20
  153. data/lib/rbs/cli/diff.rb +16 -15
  154. data/lib/rbs/cli/validate.rb +63 -126
  155. data/lib/rbs/cli.rb +59 -29
  156. data/lib/rbs/collection/config/lockfile_generator.rb +28 -3
  157. data/lib/rbs/collection/sources/git.rb +7 -0
  158. data/lib/rbs/definition.rb +6 -1
  159. data/lib/rbs/definition_builder/ancestor_builder.rb +121 -65
  160. data/lib/rbs/definition_builder/method_builder.rb +74 -33
  161. data/lib/rbs/definition_builder.rb +177 -20
  162. data/lib/rbs/diff.rb +7 -1
  163. data/lib/rbs/environment/class_entry.rb +69 -0
  164. data/lib/rbs/environment/module_entry.rb +66 -0
  165. data/lib/rbs/environment.rb +410 -215
  166. data/lib/rbs/environment_loader.rb +2 -8
  167. data/lib/rbs/errors.rb +31 -21
  168. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  169. data/lib/rbs/inline_parser.rb +568 -0
  170. data/lib/rbs/location_aux.rb +36 -4
  171. data/lib/rbs/locator.rb +5 -1
  172. data/lib/rbs/method_type.rb +5 -3
  173. data/lib/rbs/namespace.rb +47 -18
  174. data/lib/rbs/parser_aux.rb +37 -7
  175. data/lib/rbs/prototype/helpers.rb +57 -0
  176. data/lib/rbs/prototype/rb.rb +3 -28
  177. data/lib/rbs/prototype/rbi.rb +196 -45
  178. data/lib/rbs/prototype/runtime.rb +12 -2
  179. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  180. data/lib/rbs/resolver/type_name_resolver.rb +120 -44
  181. data/lib/rbs/rewriter.rb +70 -0
  182. data/lib/rbs/source.rb +99 -0
  183. data/lib/rbs/subtractor.rb +7 -4
  184. data/lib/rbs/test/type_check.rb +25 -3
  185. data/lib/rbs/type_name.rb +34 -21
  186. data/lib/rbs/types.rb +91 -79
  187. data/lib/rbs/unit_test/convertibles.rb +1 -0
  188. data/lib/rbs/unit_test/type_assertions.rb +44 -8
  189. data/lib/rbs/validator.rb +2 -2
  190. data/lib/rbs/version.rb +1 -1
  191. data/lib/rbs/wasm/deserializer.rb +213 -0
  192. data/lib/rbs/wasm/location.rb +61 -0
  193. data/lib/rbs/wasm/parser.rb +137 -0
  194. data/lib/rbs/wasm/runtime.rb +196 -0
  195. data/lib/rbs/wasm/serialization_schema.rb +110 -0
  196. data/lib/rbs.rb +25 -2
  197. data/lib/rbs_jars.rb +39 -0
  198. data/lib/rdoc/discover.rb +1 -1
  199. data/lib/rdoc_plugin/parser.rb +8 -3
  200. data/rbs.gemspec +37 -5
  201. data/schema/typeParam.json +17 -1
  202. data/sig/ancestor_builder.rbs +1 -1
  203. data/sig/annotate/formatter.rbs +2 -2
  204. data/sig/annotate/rdoc_annotater.rbs +13 -10
  205. data/sig/ast/ruby/annotations.rbs +470 -0
  206. data/sig/ast/ruby/comment_block.rbs +127 -0
  207. data/sig/ast/ruby/declarations.rbs +158 -0
  208. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  209. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  210. data/sig/ast/ruby/members.rbs +198 -0
  211. data/sig/buffer.rbs +81 -5
  212. data/sig/cli/diff.rbs +5 -11
  213. data/sig/cli/validate.rbs +12 -8
  214. data/sig/cli.rbs +18 -18
  215. data/sig/collection/config/lockfile_generator.rbs +2 -0
  216. data/sig/definition.rbs +6 -0
  217. data/sig/definition_builder.rbs +3 -1
  218. data/sig/environment/class_entry.rbs +50 -0
  219. data/sig/environment/module_entry.rbs +50 -0
  220. data/sig/environment.rbs +94 -87
  221. data/sig/errors.rbs +26 -20
  222. data/sig/inline_parser/comment_association.rbs +71 -0
  223. data/sig/inline_parser.rbs +126 -0
  224. data/sig/location.rbs +32 -7
  225. data/sig/locator.rbs +0 -2
  226. data/sig/manifest.yaml +0 -2
  227. data/sig/method_builder.rbs +9 -4
  228. data/sig/namespace.rbs +20 -5
  229. data/sig/parser.rbs +77 -13
  230. data/sig/prototype/helpers.rbs +2 -0
  231. data/sig/prototype/rbi.rbs +33 -4
  232. data/sig/resolver/type_name_resolver.rbs +36 -10
  233. data/sig/rewriter.rbs +45 -0
  234. data/sig/source.rbs +48 -0
  235. data/sig/type_param.rbs +13 -8
  236. data/sig/typename.rbs +15 -5
  237. data/sig/types.rbs +10 -8
  238. data/sig/unit_test/spy.rbs +0 -8
  239. data/sig/unit_test/type_assertions.rbs +15 -0
  240. data/sig/wasm/deserializer.rbs +66 -0
  241. data/sig/wasm/serialization_schema.rbs +13 -0
  242. data/src/ast.c +1628 -0
  243. data/src/lexer.c +3221 -0
  244. data/src/lexer.re +155 -0
  245. data/src/lexstate.c +221 -0
  246. data/src/location.c +31 -0
  247. data/src/parser.c +4258 -0
  248. data/src/serialize.c +958 -0
  249. data/src/string.c +41 -0
  250. data/src/util/rbs_allocator.c +171 -0
  251. data/src/util/rbs_assert.c +19 -0
  252. data/src/util/rbs_buffer.c +54 -0
  253. data/src/util/rbs_constant_pool.c +18 -92
  254. data/src/util/rbs_encoding.c +21308 -0
  255. data/src/util/rbs_unescape.c +167 -0
  256. data/stdlib/abbrev/0/array.rbs +1 -1
  257. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  258. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  259. data/stdlib/cgi/0/core.rbs +9 -393
  260. data/stdlib/cgi/0/manifest.yaml +1 -0
  261. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  262. data/stdlib/coverage/0/coverage.rbs +7 -4
  263. data/stdlib/csv/0/csv.rbs +5 -5
  264. data/stdlib/date/0/date.rbs +92 -79
  265. data/stdlib/date/0/date_time.rbs +25 -24
  266. data/stdlib/delegate/0/delegator.rbs +11 -7
  267. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  268. data/stdlib/digest/0/digest.rbs +117 -1
  269. data/stdlib/erb/0/erb.rbs +748 -347
  270. data/stdlib/etc/0/etc.rbs +73 -54
  271. data/stdlib/fileutils/0/fileutils.rbs +179 -160
  272. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  273. data/stdlib/io-console/0/io-console.rbs +2 -2
  274. data/stdlib/ipaddr/0/ipaddr.rbs +0 -5
  275. data/stdlib/json/0/json.rbs +232 -185
  276. data/stdlib/monitor/0/monitor.rbs +5 -5
  277. data/stdlib/net-http/0/net-http.rbs +162 -134
  278. data/stdlib/objspace/0/objspace.rbs +17 -34
  279. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  280. data/stdlib/open3/0/open3.rbs +469 -10
  281. data/stdlib/openssl/0/openssl.rbs +521 -397
  282. data/stdlib/optparse/0/optparse.rbs +26 -17
  283. data/stdlib/pathname/0/pathname.rbs +11 -1381
  284. data/stdlib/pp/0/pp.rbs +9 -8
  285. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  286. data/stdlib/pstore/0/pstore.rbs +35 -30
  287. data/stdlib/psych/0/psych.rbs +65 -12
  288. data/stdlib/psych/0/store.rbs +2 -4
  289. data/stdlib/pty/0/pty.rbs +9 -6
  290. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  291. data/stdlib/rdoc/0/code_object.rbs +4 -3
  292. data/stdlib/rdoc/0/comment.rbs +2 -0
  293. data/stdlib/rdoc/0/options.rbs +76 -0
  294. data/stdlib/rdoc/0/parser.rbs +1 -1
  295. data/stdlib/rdoc/0/rdoc.rbs +7 -5
  296. data/stdlib/rdoc/0/store.rbs +2 -2
  297. data/stdlib/resolv/0/resolv.rbs +26 -69
  298. data/stdlib/ripper/0/ripper.rbs +25 -19
  299. data/stdlib/securerandom/0/manifest.yaml +2 -0
  300. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  301. data/stdlib/shellwords/0/shellwords.rbs +3 -3
  302. data/stdlib/singleton/0/singleton.rbs +3 -0
  303. data/stdlib/socket/0/addrinfo.rbs +9 -9
  304. data/stdlib/socket/0/basic_socket.rbs +3 -3
  305. data/stdlib/socket/0/ip_socket.rbs +10 -8
  306. data/stdlib/socket/0/socket.rbs +23 -10
  307. data/stdlib/socket/0/tcp_server.rbs +1 -1
  308. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  309. data/stdlib/socket/0/udp_socket.rbs +1 -1
  310. data/stdlib/socket/0/unix_server.rbs +1 -1
  311. data/stdlib/stringio/0/stringio.rbs +1209 -95
  312. data/stdlib/strscan/0/string_scanner.rbs +101 -80
  313. data/stdlib/tempfile/0/manifest.yaml +3 -0
  314. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  315. data/stdlib/time/0/time.rbs +8 -6
  316. data/stdlib/timeout/0/timeout.rbs +58 -7
  317. data/stdlib/tsort/0/cyclic.rbs +4 -1
  318. data/stdlib/tsort/0/interfaces.rbs +8 -8
  319. data/stdlib/tsort/0/tsort.rbs +16 -15
  320. data/stdlib/uri/0/common.rbs +42 -20
  321. data/stdlib/uri/0/file.rbs +3 -3
  322. data/stdlib/uri/0/generic.rbs +21 -18
  323. data/stdlib/uri/0/http.rbs +2 -2
  324. data/stdlib/uri/0/ldap.rbs +2 -2
  325. data/stdlib/uri/0/mailto.rbs +3 -3
  326. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  327. data/stdlib/zlib/0/deflate.rbs +4 -3
  328. data/stdlib/zlib/0/gzip_reader.rbs +8 -8
  329. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  330. data/stdlib/zlib/0/inflate.rbs +1 -1
  331. data/stdlib/zlib/0/need_dict.rbs +1 -1
  332. data/wasm/README.md +60 -0
  333. data/wasm/rbs_wasm.c +423 -0
  334. metadata +131 -19
  335. data/ext/rbs_extension/lexer.c +0 -2728
  336. data/ext/rbs_extension/lexer.h +0 -179
  337. data/ext/rbs_extension/lexer.re +0 -147
  338. data/ext/rbs_extension/lexstate.c +0 -175
  339. data/ext/rbs_extension/location.c +0 -325
  340. data/ext/rbs_extension/location.h +0 -85
  341. data/ext/rbs_extension/parser.c +0 -2982
  342. data/ext/rbs_extension/parser.h +0 -18
  343. data/ext/rbs_extension/parserstate.c +0 -411
  344. data/ext/rbs_extension/parserstate.h +0 -163
  345. data/ext/rbs_extension/unescape.c +0 -32
  346. data/include/rbs/ruby_objs.h +0 -72
  347. data/src/constants.c +0 -153
  348. data/src/ruby_objs.c +0 -799
@@ -4,36 +4,33 @@ module RBS
4
4
  class CLI
5
5
  class Validate
6
6
  class Errors
7
- def initialize(limit:, exit_error:)
7
+ def initialize(limit:)
8
8
  @limit = limit
9
- @exit_error = exit_error
10
9
  @errors = []
11
- @has_syntax_error = false
12
10
  end
13
11
 
14
12
  def add(error)
15
- if error.instance_of?(WillSyntaxError)
16
- RBS.logger.warn(build_message(error))
17
- @has_syntax_error = true
18
- else
19
- @errors << error
20
- end
13
+ @errors << error
21
14
  finish if @limit == 1
22
15
  end
23
16
 
17
+ def try(&block)
18
+ catch(:finish) do |tag|
19
+ @tag = tag
20
+ yield
21
+ finish()
22
+ end
23
+ end
24
+
24
25
  def finish
25
- if @errors.empty?
26
- if @exit_error && @has_syntax_error
27
- exit 1
28
- else
29
- # success
30
- end
31
- else
26
+ unless @errors.empty?
32
27
  @errors.each do |error|
33
28
  RBS.logger.error(build_message(error))
34
29
  end
35
- exit 1
30
+ throw @tag, 1
36
31
  end
32
+
33
+ 0
37
34
  end
38
35
 
39
36
  private
@@ -53,7 +50,6 @@ module RBS
53
50
  @env = Environment.from_loader(loader).resolve_type_names
54
51
  @builder = DefinitionBuilder.new(env: @env)
55
52
  @validator = Validator.new(env: @env)
56
- exit_error = false
57
53
  limit = nil #: Integer?
58
54
  OptionParser.new do |opts|
59
55
  opts.banner = <<EOU
@@ -70,25 +66,25 @@ EOU
70
66
  RBS.print_warning { "`--silent` option is deprecated because it's silent by default. You can use --log-level option of rbs command to display more information." }
71
67
  end
72
68
  opts.on("--[no-]exit-error-on-syntax-error", "exit(1) if syntax error is detected") {|bool|
73
- exit_error = bool
69
+ RBS.print_warning { "`--exit-error-on-syntax-error` option is deprecated because it's validated during parsing.." }
74
70
  }
75
71
  opts.on("--fail-fast", "Exit immediately as soon as a validation error is found.") do |arg|
76
72
  limit = 1
77
73
  end
78
74
  end.parse!(args)
79
75
 
80
- @errors = Errors.new(limit: limit, exit_error: exit_error)
76
+ @errors = Errors.new(limit: limit)
81
77
  end
82
78
 
83
79
  def run
84
- validate_class_module_definition
85
- validate_class_module_alias_definition
86
- validate_interface
87
- validate_constant
88
- validate_global
89
- validate_type_alias
90
-
91
- @errors.finish
80
+ @errors.try do
81
+ validate_class_module_definition
82
+ validate_class_module_alias_definition
83
+ validate_interface
84
+ validate_constant
85
+ validate_global
86
+ validate_type_alias
87
+ end
92
88
  end
93
89
 
94
90
  private
@@ -109,29 +105,23 @@ EOU
109
105
 
110
106
  case entry
111
107
  when Environment::ClassEntry
112
- entry.decls.each do |decl|
113
- if super_class = decl.decl.super_class
108
+ entry.each_decl do |decl|
109
+ if super_class = decl.super_class
114
110
  super_class.args.each do |arg|
115
- void_type_context_validator(arg, true)
116
- no_self_type_validator(arg)
117
- no_classish_type_validator(arg)
118
111
  @validator.validate_type(arg, context: nil)
119
112
  end
120
113
  end
121
114
  end
122
115
  when Environment::ModuleEntry
123
- entry.decls.each do |decl|
124
- decl.decl.self_types.each do |self_type|
116
+ entry.each_decl do |decl|
117
+ decl.self_types.each do |self_type|
125
118
  self_type.args.each do |arg|
126
- void_type_context_validator(arg, true)
127
- no_self_type_validator(arg)
128
- no_classish_type_validator(arg)
129
119
  @validator.validate_type(arg, context: nil)
130
120
  end
131
121
 
132
122
  self_params =
133
123
  if self_type.name.class?
134
- @env.normalized_module_entry(self_type.name)&.type_params
124
+ @env.module_entry(self_type.name, normalized: true)&.type_params
135
125
  else
136
126
  @env.interface_decls[self_type.name]&.decl&.type_params
137
127
  end
@@ -143,7 +133,7 @@ EOU
143
133
  end
144
134
  end
145
135
 
146
- d = entry.primary.decl
136
+ d = entry.primary_decl
147
137
 
148
138
  @validator.validate_type_params(
149
139
  d.type_params,
@@ -153,55 +143,43 @@ EOU
153
143
 
154
144
  d.type_params.each do |param|
155
145
  if ub = param.upper_bound_type
156
- void_type_context_validator(ub)
157
- no_self_type_validator(ub)
158
- no_classish_type_validator(ub)
159
146
  @validator.validate_type(ub, context: nil)
160
147
  end
161
148
 
149
+ if lb = param.lower_bound_type
150
+ @validator.validate_type(lb, context: nil)
151
+ end
152
+
162
153
  if dt = param.default_type
163
- void_type_context_validator(dt, true)
164
- no_self_type_validator(dt)
165
- no_classish_type_validator(dt)
166
154
  @validator.validate_type(dt, context: nil)
167
155
  end
168
156
  end
169
157
 
170
158
  TypeParamDefaultReferenceError.check!(d.type_params)
171
159
 
172
- entry.decls.each do |d|
173
- d.decl.each_member do |member|
174
- case member
175
- when AST::Members::MethodDefinition
176
- @validator.validate_method_definition(member, type_name: name)
177
- member.overloads.each do |ov|
178
- void_type_context_validator(ov.method_type)
179
- end
180
- when AST::Members::Attribute
181
- void_type_context_validator(member.type)
182
- when AST::Members::Mixin
183
- member.args.each do |arg|
184
- no_self_type_validator(arg)
185
- unless arg.is_a?(Types::Bases::Void)
186
- void_type_context_validator(arg, true)
187
- end
188
- end
189
- params =
190
- if member.name.class?
191
- module_decl = @env.normalized_module_entry(member.name) or raise
192
- module_decl.type_params
193
- else
194
- interface_decl = @env.interface_decls.fetch(member.name)
195
- interface_decl.decl.type_params
196
- end
197
- InvalidTypeApplicationError.check!(type_name: member.name, params: params, args: member.args, location: member.location)
198
- when AST::Members::Var
199
- @validator.validate_variable(member)
200
- void_type_context_validator(member.type)
201
- if member.is_a?(AST::Members::ClassVariable)
202
- no_self_type_validator(member.type)
160
+ entry.each_decl do |decl|
161
+ case decl
162
+ when AST::Declarations::Base
163
+ decl.each_member do |member|
164
+ case member
165
+ when AST::Members::MethodDefinition
166
+ @validator.validate_method_definition(member, type_name: name)
167
+ when AST::Members::Mixin
168
+ params =
169
+ if member.name.class?
170
+ module_decl = @env.module_entry(member.name, normalized: true) or raise
171
+ module_decl.type_params
172
+ else
173
+ interface_decl = @env.interface_decls.fetch(member.name)
174
+ interface_decl.decl.type_params
175
+ end
176
+ InvalidTypeApplicationError.check!(type_name: member.name, params: params, args: member.args, location: member.location)
177
+ when AST::Members::Var
178
+ @validator.validate_variable(member)
203
179
  end
204
180
  end
181
+ else
182
+ raise "Unknown declaration: #{decl.class}"
205
183
  end
206
184
  end
207
185
  rescue BaseError => error
@@ -233,16 +211,14 @@ EOU
233
211
 
234
212
  decl.decl.type_params.each do |param|
235
213
  if ub = param.upper_bound_type
236
- void_type_context_validator(ub)
237
- no_self_type_validator(ub)
238
- no_classish_type_validator(ub)
239
214
  @validator.validate_type(ub, context: nil)
240
215
  end
241
216
 
217
+ if lb = param.lower_bound_type
218
+ @validator.validate_type(lb, context: nil)
219
+ end
220
+
242
221
  if dt = param.default_type
243
- void_type_context_validator(dt, true)
244
- no_self_type_validator(dt)
245
- no_classish_type_validator(dt)
246
222
  @validator.validate_type(dt, context: nil)
247
223
  end
248
224
  end
@@ -253,10 +229,6 @@ EOU
253
229
  case member
254
230
  when AST::Members::MethodDefinition
255
231
  @validator.validate_method_definition(member, type_name: name)
256
- member.overloads.each do |ov|
257
- void_type_context_validator(ov.method_type)
258
- no_classish_type_validator(ov.method_type)
259
- end
260
232
  end
261
233
  end
262
234
  rescue BaseError => error
@@ -269,9 +241,6 @@ EOU
269
241
  RBS.logger.info "Validating constant: `#{name}`..."
270
242
  @validator.validate_type const.decl.type, context: const.context
271
243
  @builder.ensure_namespace!(name.namespace, location: const.decl.location)
272
- no_self_type_validator(const.decl.type)
273
- no_classish_type_validator(const.decl.type)
274
- void_type_context_validator(const.decl.type)
275
244
  rescue BaseError => error
276
245
  @errors.add(error)
277
246
  end
@@ -281,9 +250,6 @@ EOU
281
250
  @env.global_decls.each do |name, global|
282
251
  RBS.logger.info "Validating global: `#{name}`..."
283
252
  @validator.validate_type global.decl.type, context: nil
284
- no_self_type_validator(global.decl.type)
285
- no_classish_type_validator(global.decl.type)
286
- void_type_context_validator(global.decl.type)
287
253
  rescue BaseError => error
288
254
  @errors.add(error)
289
255
  end
@@ -306,52 +272,23 @@ EOU
306
272
 
307
273
  decl.decl.type_params.each do |param|
308
274
  if ub = param.upper_bound_type
309
- void_type_context_validator(ub)
310
- no_self_type_validator(ub)
311
- no_classish_type_validator(ub)
312
275
  @validator.validate_type(ub, context: nil)
313
276
  end
314
277
 
278
+ if lb = param.lower_bound_type
279
+ @validator.validate_type(lb, context: nil)
280
+ end
281
+
315
282
  if dt = param.default_type
316
- void_type_context_validator(dt, true)
317
- no_self_type_validator(dt)
318
- no_classish_type_validator(dt)
319
283
  @validator.validate_type(dt, context: nil)
320
284
  end
321
285
  end
322
286
 
323
287
  TypeParamDefaultReferenceError.check!(decl.decl.type_params)
324
-
325
- no_self_type_validator(decl.decl.type)
326
- no_classish_type_validator(decl.decl.type)
327
- void_type_context_validator(decl.decl.type)
328
288
  rescue BaseError => error
329
289
  @errors.add(error)
330
290
  end
331
291
  end
332
-
333
- private
334
-
335
- def no_self_type_validator(type)
336
- if type.has_self_type?
337
- @errors.add WillSyntaxError.new("`self` type is not allowed in this context", location: type.location)
338
- end
339
- end
340
-
341
- def no_classish_type_validator(type)
342
- if type.has_classish_type?
343
- @errors.add WillSyntaxError.new("`instance` or `class` type is not allowed in this context", location: type.location)
344
- end
345
- end
346
-
347
- def void_type_context_validator(type, allowed_here = false)
348
- if allowed_here
349
- return if type.is_a?(Types::Bases::Void)
350
- end
351
- if type.with_nonreturn_void?
352
- @errors.add WillSyntaxError.new("`void` type is only allowed in return type or generics parameter", location: type.location)
353
- end
354
- end
355
292
  end
356
293
  end
357
294
  end
data/lib/rbs/cli.rb CHANGED
@@ -136,10 +136,12 @@ module RBS
136
136
  case command
137
137
  when :version
138
138
  stdout.puts opts.ver
139
+ 0
139
140
  when *COMMANDS
140
141
  __send__ :"run_#{command}", args, options
141
142
  else
142
143
  stdout.puts opts.help
144
+ 0
143
145
  end
144
146
  end
145
147
 
@@ -175,10 +177,9 @@ EOB
175
177
 
176
178
  env = Environment.from_loader(loader).resolve_type_names
177
179
 
178
- decls = env.declarations.select do |decl|
179
- loc = decl.location or raise
180
+ decls = env.sources.select do |source|
180
181
  # @type var name: String
181
- name = loc.buffer.name
182
+ name = source.buffer.name.to_s
182
183
 
183
184
  patterns.empty? || patterns.any? do |pat|
184
185
  case pat
@@ -188,10 +189,12 @@ EOB
188
189
  name.end_with?(pat) || File.fnmatch(pat, name, File::FNM_EXTGLOB)
189
190
  end
190
191
  end
191
- end
192
+ end.flat_map { _1.declarations }
192
193
 
193
194
  stdout.print JSON.generate(decls)
194
195
  stdout.flush
196
+
197
+ 0
195
198
  end
196
199
 
197
200
  def run_list(args, options)
@@ -255,6 +258,8 @@ EOB
255
258
  stdout.puts "#{name} (interface)"
256
259
  end
257
260
  end
261
+
262
+ 0
258
263
  end
259
264
 
260
265
  def run_ancestors(args, options)
@@ -280,7 +285,7 @@ EOU
280
285
 
281
286
  unless args.size == 1
282
287
  stdout.puts "Expected one argument."
283
- return
288
+ return 1
284
289
  end
285
290
 
286
291
  loader = options.loader()
@@ -318,6 +323,8 @@ EOU
318
323
  else
319
324
  stdout.puts "Cannot find class: #{type_name}"
320
325
  end
326
+
327
+ 0
321
328
  end
322
329
 
323
330
  def run_methods(args, options)
@@ -345,7 +352,7 @@ EOU
345
352
 
346
353
  unless args.size == 1
347
354
  stdout.puts "Expected one argument."
348
- return
355
+ return 1
349
356
  end
350
357
 
351
358
  loader = options.loader()
@@ -374,6 +381,8 @@ EOU
374
381
  else
375
382
  stdout.puts "Cannot find class: #{type_name}"
376
383
  end
384
+
385
+ 0
377
386
  end
378
387
 
379
388
  def run_method(args, options)
@@ -399,7 +408,7 @@ EOU
399
408
 
400
409
  unless args.size == 2
401
410
  stdout.puts "Expected two arguments, but given #{args.size}."
402
- return
411
+ return 1
403
412
  end
404
413
 
405
414
  loader = options.loader()
@@ -411,7 +420,7 @@ EOU
411
420
 
412
421
  unless env.module_name?(type_name)
413
422
  stdout.puts "Cannot find class: #{type_name}"
414
- return
423
+ return 1
415
424
  end
416
425
 
417
426
  definition = case kind
@@ -427,7 +436,7 @@ EOU
427
436
 
428
437
  unless method
429
438
  stdout.puts "Cannot find method: #{method_name}"
430
- return
439
+ return 1
431
440
  end
432
441
 
433
442
  stdout.puts "#{type_name}#{kind == :instance ? "#" : "."}#{method_name}"
@@ -441,6 +450,8 @@ EOU
441
450
  stdout.puts format(" %s %-#{length_max}s at %s", separator, type, type.location)
442
451
  separator = "|"
443
452
  end
453
+
454
+ 0
444
455
  end
445
456
 
446
457
  def run_validate(args, options)
@@ -470,7 +481,7 @@ EOU
470
481
 
471
482
  unless args.size == 1
472
483
  stdout.puts "Expected one argument."
473
- return
484
+ return 1
474
485
  end
475
486
 
476
487
  loader = options.loader()
@@ -503,6 +514,8 @@ EOU
503
514
  else
504
515
  stdout.puts " => [no constant]"
505
516
  end
517
+
518
+ 0
506
519
  end
507
520
 
508
521
  def run_paths(args, options)
@@ -545,6 +558,8 @@ EOU
545
558
  stdout.puts "#{dir} (#{kind_of[dir]}, library, name=#{source.name})"
546
559
  end
547
560
  end
561
+
562
+ 0
548
563
  end
549
564
 
550
565
  def run_prototype(args, options)
@@ -648,6 +663,8 @@ EOU
648
663
 
649
664
  writer = Writer.new(out: stdout)
650
665
  writer.write decls
666
+
667
+ 0
651
668
  else
652
669
  stdout.puts <<EOU
653
670
  Usage: rbs prototype [generator...] [args...]
@@ -661,7 +678,7 @@ Examples:
661
678
  $ rbs prototype rbi foo.rbi
662
679
  $ rbs prototype runtime String
663
680
  EOU
664
- exit 1
681
+ 1
665
682
  end
666
683
  end
667
684
 
@@ -713,12 +730,12 @@ EOU
713
730
 
714
731
  unless has_parser?
715
732
  stdout.puts "Not supported on this interpreter (#{RUBY_ENGINE})."
716
- exit 1
733
+ return 1
717
734
  end
718
735
 
719
736
  if args.empty?
720
737
  stdout.puts opts
721
- return nil
738
+ return 1
722
739
  end
723
740
 
724
741
  new_parser = -> do
@@ -828,6 +845,8 @@ EOU
828
845
  writer = Writer.new(out: stdout)
829
846
  writer.write parser.decls
830
847
  end
848
+
849
+ 0
831
850
  end
832
851
 
833
852
  def run_vendor(args, options)
@@ -881,6 +900,8 @@ Options:
881
900
 
882
901
  stdout.puts " Copying RBS files..."
883
902
  vendorer.copy!
903
+
904
+ 0
884
905
  end
885
906
 
886
907
  def run_parse(args, options)
@@ -913,7 +934,7 @@ Options:
913
934
  Buffer.new(content: file_path.read, name: file_path)
914
935
  end
915
936
  end
916
- bufs << Buffer.new(content: e_code, name: '-e') if e_code
937
+ bufs << Buffer.new(content: e_code, name: Pathname('-e')) if e_code
917
938
 
918
939
  bufs.each do |buf|
919
940
  RBS.logger.info "Parsing #{buf.name}..."
@@ -928,7 +949,11 @@ Options:
928
949
  syntax_error = true
929
950
  end
930
951
 
931
- exit 1 if syntax_error
952
+ if syntax_error
953
+ 1
954
+ else
955
+ 0
956
+ end
932
957
  end
933
958
 
934
959
  def run_annotate(args, options)
@@ -937,8 +962,6 @@ Options:
937
962
  source = RBS::Annotate::RDocSource.new()
938
963
  annotator = RBS::Annotate::RDocAnnotator.new(source: source)
939
964
 
940
- preserve = true
941
-
942
965
  OptionParser.new do |opts|
943
966
  opts.banner = <<-EOB
944
967
  Usage: rbs annotate [options...] [files...]
@@ -947,7 +970,7 @@ Import documents from RDoc and update RBS files.
947
970
 
948
971
  Examples:
949
972
 
950
- $ rbs annotate stdlib/pathname/**/*.rbs
973
+ $ rbs annotate stdlib/logger/**/*.rbs
951
974
 
952
975
  Options:
953
976
  EOB
@@ -959,7 +982,7 @@ Options:
959
982
  opts.on("-d", "--dir DIRNAME", "Load RDoc from DIRNAME") {|d| source.extra_dirs << Pathname(d) }
960
983
  opts.on("--[no-]arglists", "Generate arglists section (defaults to true)") {|b| annotator.include_arg_lists = b }
961
984
  opts.on("--[no-]filename", "Include source file name in the documentation (defaults to true)") {|b| annotator.include_filename = b }
962
- opts.on("--[no-]preserve", "Try preserve the format of the original file (defaults to true)") {|b| preserve = b }
985
+ opts.on("--[no-]preserve", "[Deprecated] It always preserves the format") { stdout.puts "The `--preserve` option is deprecated. The tool always preserves the format of RBS files." }
963
986
  end.parse!(args)
964
987
 
965
988
  source.load()
@@ -969,13 +992,15 @@ Options:
969
992
  if path.directory?
970
993
  Pathname.glob((path + "**/*.rbs").to_s).each do |path|
971
994
  stdout.puts "Processing #{path}..."
972
- annotator.annotate_file(path, preserve: preserve)
995
+ annotator.annotate_file(path)
973
996
  end
974
997
  else
975
998
  stdout.puts "Processing #{path}..."
976
- annotator.annotate_file(path, preserve: preserve)
999
+ annotator.annotate_file(path)
977
1000
  end
978
1001
  end
1002
+
1003
+ 0
979
1004
  end
980
1005
 
981
1006
  def test_opt options
@@ -1029,7 +1054,7 @@ EOB
1029
1054
 
1030
1055
  if args.length.zero?
1031
1056
  stdout.puts opts.help
1032
- exit 1
1057
+ return 1
1033
1058
  end
1034
1059
 
1035
1060
  # @type var env_hash: Hash[String, String?]
@@ -1045,11 +1070,12 @@ EOB
1045
1070
 
1046
1071
  # @type var out: String
1047
1072
  # @type var err: String
1073
+ # @type var status: Process::Status
1048
1074
  out, err, status = __skip__ = Open3.capture3(env_hash, *args)
1049
1075
  stdout.print(out)
1050
1076
  stderr.print(err)
1051
1077
 
1052
- status
1078
+ status.to_i
1053
1079
  end
1054
1080
 
1055
1081
  def run_collection(args, options)
@@ -1074,7 +1100,7 @@ EOB
1074
1100
  when 'init'
1075
1101
  if config_path.exist?
1076
1102
  puts "#{config_path} already exists"
1077
- exit 1
1103
+ return 1
1078
1104
  end
1079
1105
 
1080
1106
  config_path.write(<<~'YAML')
@@ -1102,15 +1128,17 @@ EOB
1102
1128
  when 'clean'
1103
1129
  unless lock_path.exist?
1104
1130
  puts "#{lock_path} should exist to clean"
1105
- exit 1
1131
+ return 1
1106
1132
  end
1107
1133
  Collection::Cleaner.new(lockfile_path: lock_path)
1108
1134
  when 'help', 'hel', 'he', 'h'
1109
1135
  puts opts.help
1110
1136
  else
1111
1137
  puts opts.help
1112
- exit 1
1138
+ return 1
1113
1139
  end
1140
+
1141
+ 0
1114
1142
  end
1115
1143
 
1116
1144
  def collection_options(args)
@@ -1172,7 +1200,7 @@ EOB
1172
1200
  *minuend_paths, subtrahend_path = args
1173
1201
  unless subtrahend_path
1174
1202
  stdout.puts opts.help
1175
- exit 1
1203
+ return 1
1176
1204
  end
1177
1205
  subtrahend_paths << subtrahend_path
1178
1206
  else
@@ -1181,7 +1209,7 @@ EOB
1181
1209
 
1182
1210
  if minuend_paths.empty?
1183
1211
  stdout.puts opts.help
1184
- exit 1
1212
+ return 1
1185
1213
  end
1186
1214
 
1187
1215
  subtrahend = Environment.new.tap do |env|
@@ -1214,10 +1242,12 @@ EOB
1214
1242
  end
1215
1243
  end
1216
1244
  end
1245
+
1246
+ 0
1217
1247
  end
1218
1248
 
1219
1249
  def run_diff(argv, library_options)
1220
- Diff.new(argv: argv, library_options: library_options, stdout: stdout, stderr: stderr).run
1250
+ Diff.new(stdout: stdout, stderr: stderr).run(argv: argv, library_options: library_options)
1221
1251
  end
1222
1252
  end
1223
1253
  end