rbs 3.6.1 → 3.9.5

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 (268) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/comments.yml +2 -2
  3. data/.github/workflows/dependabot.yml +1 -1
  4. data/.github/workflows/ruby.yml +34 -10
  5. data/.github/workflows/windows.yml +20 -3
  6. data/.gitignore +1 -0
  7. data/.rubocop.yml +26 -1
  8. data/CHANGELOG.md +241 -0
  9. data/Rakefile +54 -4
  10. data/config.yml +317 -0
  11. data/core/array.rbs +1756 -1591
  12. data/core/basic_object.rbs +38 -35
  13. data/core/comparable.rbs +1 -1
  14. data/core/complex.rbs +166 -94
  15. data/core/data.rbs +2 -2
  16. data/core/dir.rbs +2 -18
  17. data/core/encoding.rbs +12 -32
  18. data/core/enumerable.rbs +270 -266
  19. data/core/enumerator.rbs +14 -4
  20. data/core/env.rbs +1 -1
  21. data/core/errno.rbs +33 -16
  22. data/core/errors.rbs +6 -2
  23. data/core/exception.rbs +342 -167
  24. data/core/fiber.rbs +3 -2
  25. data/core/file.rbs +26 -75
  26. data/core/float.rbs +125 -72
  27. data/core/gc.rbs +158 -42
  28. data/core/hash.rbs +122 -143
  29. data/core/integer.rbs +79 -50
  30. data/core/io/buffer.rbs +49 -43
  31. data/core/io.rbs +108 -151
  32. data/core/kernel.rbs +341 -209
  33. data/core/match_data.rbs +76 -2
  34. data/core/math.rbs +0 -36
  35. data/core/method.rbs +2 -2
  36. data/core/module.rbs +32 -27
  37. data/core/nil_class.rbs +2 -2
  38. data/core/numeric.rbs +101 -104
  39. data/core/object.rbs +1 -5
  40. data/core/object_space/weak_key_map.rbs +3 -4
  41. data/core/object_space.rbs +3 -3
  42. data/core/proc.rbs +82 -14
  43. data/core/process.rbs +110 -58
  44. data/core/ractor.rbs +57 -4
  45. data/core/range.rbs +114 -87
  46. data/core/rational.rbs +0 -2
  47. data/core/rbs/unnamed/argf.rbs +237 -36
  48. data/core/rbs/unnamed/env_class.rbs +35 -53
  49. data/core/rbs/unnamed/random.rbs +1 -2
  50. data/core/regexp.rbs +10 -56
  51. data/core/ruby_vm.rbs +88 -9
  52. data/core/rubygems/config_file.rbs +3 -0
  53. data/core/rubygems/errors.rbs +3 -6
  54. data/core/rubygems/platform.rbs +0 -9
  55. data/core/rubygems/rubygems.rbs +3 -6
  56. data/core/rubygems/version.rbs +8 -8
  57. data/core/set.rbs +4 -16
  58. data/core/string.rbs +271 -264
  59. data/core/struct.rbs +6 -18
  60. data/core/symbol.rbs +14 -21
  61. data/core/thread.rbs +32 -35
  62. data/core/time.rbs +131 -50
  63. data/core/trace_point.rbs +124 -113
  64. data/core/true_class.rbs +0 -1
  65. data/core/unbound_method.rbs +1 -1
  66. data/core/warning.rbs +9 -2
  67. data/docs/architecture.md +1 -1
  68. data/docs/syntax.md +17 -10
  69. data/ext/rbs_extension/extconf.rb +11 -0
  70. data/ext/rbs_extension/location.c +61 -29
  71. data/ext/rbs_extension/location.h +4 -3
  72. data/ext/rbs_extension/main.c +23 -1
  73. data/ext/rbs_extension/parser.c +506 -517
  74. data/ext/rbs_extension/parserstate.c +109 -30
  75. data/ext/rbs_extension/parserstate.h +6 -4
  76. data/ext/rbs_extension/rbs_extension.h +1 -10
  77. data/{ext/rbs_extension → include/rbs}/constants.h +21 -19
  78. data/include/rbs/ruby_objs.h +72 -0
  79. data/include/rbs/util/rbs_constant_pool.h +219 -0
  80. data/include/rbs.h +7 -0
  81. data/lib/rbs/annotate/annotations.rb +3 -3
  82. data/lib/rbs/annotate/rdoc_source.rb +2 -2
  83. data/lib/rbs/ast/declarations.rb +9 -4
  84. data/lib/rbs/ast/directives.rb +10 -0
  85. data/lib/rbs/ast/members.rb +2 -0
  86. data/lib/rbs/ast/type_param.rb +2 -12
  87. data/lib/rbs/cli/diff.rb +3 -3
  88. data/lib/rbs/cli/validate.rb +2 -1
  89. data/lib/rbs/cli.rb +16 -16
  90. data/lib/rbs/collection/config/lockfile_generator.rb +58 -8
  91. data/lib/rbs/collection/config.rb +5 -3
  92. data/lib/rbs/collection/sources/rubygems.rb +1 -1
  93. data/lib/rbs/collection.rb +1 -0
  94. data/lib/rbs/definition.rb +51 -34
  95. data/lib/rbs/definition_builder/ancestor_builder.rb +5 -3
  96. data/lib/rbs/definition_builder.rb +83 -24
  97. data/lib/rbs/environment.rb +33 -18
  98. data/lib/rbs/environment_loader.rb +6 -1
  99. data/lib/rbs/errors.rb +24 -0
  100. data/lib/rbs/locator.rb +2 -0
  101. data/lib/rbs/method_type.rb +2 -0
  102. data/lib/rbs/namespace.rb +1 -0
  103. data/lib/rbs/parser_aux.rb +40 -3
  104. data/lib/rbs/prototype/rb.rb +20 -12
  105. data/lib/rbs/prototype/rbi.rb +11 -6
  106. data/lib/rbs/prototype/runtime/value_object_generator.rb +7 -5
  107. data/lib/rbs/prototype/runtime.rb +7 -5
  108. data/lib/rbs/subtractor.rb +3 -3
  109. data/lib/rbs/test/hook.rb +47 -42
  110. data/lib/rbs/test/type_check.rb +7 -5
  111. data/lib/rbs/type_name.rb +14 -9
  112. data/lib/rbs/types.rb +63 -14
  113. data/lib/rbs/unit_test/spy.rb +4 -2
  114. data/lib/rbs/unit_test/type_assertions.rb +19 -13
  115. data/lib/rbs/unit_test/with_aliases.rb +3 -1
  116. data/lib/rbs/validator.rb +7 -1
  117. data/lib/rbs/version.rb +1 -1
  118. data/lib/rbs/writer.rb +10 -5
  119. data/lib/rbs.rb +1 -0
  120. data/lib/rdoc_plugin/parser.rb +2 -2
  121. data/rbs.gemspec +6 -2
  122. data/sig/ancestor_graph.rbs +5 -5
  123. data/sig/annotate/rdoc_source.rbs +2 -0
  124. data/sig/cli.rbs +2 -0
  125. data/sig/collection/config/lockfile_generator.rbs +9 -1
  126. data/sig/declarations.rbs +10 -3
  127. data/sig/definition.rbs +80 -12
  128. data/sig/definition_builder.rbs +18 -4
  129. data/sig/directives.rbs +17 -1
  130. data/sig/environment.rbs +3 -1
  131. data/sig/errors.rbs +19 -0
  132. data/sig/namespace.rbs +2 -3
  133. data/sig/parser.rbs +5 -1
  134. data/sig/prototype/rb.rbs +1 -1
  135. data/sig/resolver/constant_resolver.rbs +2 -2
  136. data/sig/resolver/context.rbs +1 -1
  137. data/sig/subtractor.rbs +1 -1
  138. data/sig/test/type_check.rbs +2 -2
  139. data/sig/type_alias_dependency.rbs +2 -2
  140. data/sig/type_alias_regularity.rbs +6 -6
  141. data/sig/type_param.rbs +4 -4
  142. data/sig/typename.rbs +8 -5
  143. data/sig/types.rbs +1 -1
  144. data/sig/unit_test/spy.rbs +2 -0
  145. data/sig/unit_test/type_assertions.rbs +2 -0
  146. data/sig/use_map.rbs +1 -1
  147. data/sig/validator.rbs +6 -2
  148. data/sig/vendorer.rbs +1 -1
  149. data/sig/writer.rbs +1 -1
  150. data/{ext/rbs_extension → src}/constants.c +35 -36
  151. data/src/ruby_objs.c +799 -0
  152. data/src/util/rbs_constant_pool.c +342 -0
  153. data/stdlib/base64/0/base64.rbs +0 -9
  154. data/stdlib/benchmark/0/benchmark.rbs +11 -2
  155. data/stdlib/bigdecimal/0/big_decimal.rbs +26 -182
  156. data/stdlib/cgi/0/core.rbs +60 -3
  157. data/stdlib/cgi/0/manifest.yaml +1 -0
  158. data/stdlib/coverage/0/coverage.rbs +0 -3
  159. data/stdlib/csv/0/csv.rbs +18 -58
  160. data/stdlib/csv/0/manifest.yaml +1 -0
  161. data/stdlib/date/0/date.rbs +27 -42
  162. data/stdlib/did_you_mean/0/did_you_mean.rbs +1 -6
  163. data/stdlib/digest/0/digest.rbs +25 -2
  164. data/stdlib/erb/0/erb.rbs +0 -1
  165. data/stdlib/etc/0/etc.rbs +51 -34
  166. data/stdlib/fileutils/0/fileutils.rbs +3 -44
  167. data/stdlib/io-console/0/io-console.rbs +69 -15
  168. data/stdlib/ipaddr/0/ipaddr.rbs +16 -4
  169. data/stdlib/json/0/json.rbs +107 -120
  170. data/stdlib/logger/0/log_device.rbs +1 -1
  171. data/stdlib/logger/0/logger.rbs +3 -18
  172. data/stdlib/minitest/0/kernel.rbs +2 -2
  173. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +4 -1
  174. data/stdlib/minitest/0/minitest/assertion.rbs +1 -0
  175. data/stdlib/minitest/0/minitest/assertions.rbs +58 -13
  176. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +7 -0
  177. data/stdlib/minitest/0/minitest/bench_spec.rbs +8 -8
  178. data/stdlib/minitest/0/minitest/benchmark.rbs +17 -16
  179. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  180. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  181. data/stdlib/minitest/0/minitest/mock.rbs +9 -5
  182. data/stdlib/minitest/0/minitest/parallel/executor.rbs +4 -0
  183. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +0 -1
  184. data/stdlib/minitest/0/minitest/pride_io.rbs +8 -0
  185. data/stdlib/minitest/0/minitest/pride_lol.rbs +2 -0
  186. data/stdlib/minitest/0/minitest/progress_reporter.rbs +1 -1
  187. data/stdlib/minitest/0/minitest/reportable.rbs +2 -0
  188. data/stdlib/minitest/0/minitest/runnable.rbs +33 -1
  189. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +1 -1
  190. data/stdlib/minitest/0/minitest/spec/dsl.rbs +10 -6
  191. data/stdlib/minitest/0/minitest/spec.rbs +1 -1
  192. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +5 -0
  193. data/stdlib/minitest/0/minitest/summary_reporter.rbs +0 -7
  194. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +1 -1
  195. data/stdlib/minitest/0/minitest/test.rbs +7 -14
  196. data/stdlib/minitest/0/minitest/unexpected_error.rbs +2 -0
  197. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  198. data/stdlib/minitest/0/minitest/unit.rbs +1 -2
  199. data/stdlib/minitest/0/minitest.rbs +41 -892
  200. data/stdlib/monitor/0/monitor.rbs +13 -4
  201. data/stdlib/net-http/0/net-http.rbs +42 -109
  202. data/stdlib/nkf/0/nkf.rbs +30 -0
  203. data/stdlib/objspace/0/objspace.rbs +1 -2
  204. data/stdlib/observable/0/observable.rbs +1 -1
  205. data/stdlib/open-uri/0/manifest.yaml +1 -0
  206. data/stdlib/open-uri/0/open-uri.rbs +52 -0
  207. data/stdlib/open3/0/open3.rbs +0 -8
  208. data/stdlib/openssl/0/manifest.yaml +1 -0
  209. data/stdlib/openssl/0/openssl.rbs +235 -143
  210. data/stdlib/optparse/0/optparse.rbs +58 -18
  211. data/stdlib/pathname/0/pathname.rbs +2 -8
  212. data/stdlib/pp/0/pp.rbs +3 -1
  213. data/stdlib/prettyprint/0/prettyprint.rbs +0 -4
  214. data/stdlib/pstore/0/pstore.rbs +0 -6
  215. data/stdlib/psych/0/core_ext.rbs +12 -0
  216. data/stdlib/psych/0/psych.rbs +15 -4
  217. data/stdlib/pty/0/pty.rbs +46 -4
  218. data/stdlib/rdoc/0/code_object.rbs +0 -4
  219. data/stdlib/rdoc/0/markup.rbs +10 -12
  220. data/stdlib/rdoc/0/rdoc.rbs +13 -8
  221. data/stdlib/resolv/0/resolv.rbs +21 -12
  222. data/stdlib/ripper/0/ripper.rbs +0 -2
  223. data/stdlib/securerandom/0/securerandom.rbs +7 -2
  224. data/stdlib/shellwords/0/shellwords.rbs +11 -12
  225. data/stdlib/singleton/0/singleton.rbs +0 -1
  226. data/stdlib/socket/0/addrinfo.rbs +1 -2
  227. data/stdlib/socket/0/basic_socket.rbs +0 -5
  228. data/stdlib/socket/0/socket.rbs +32 -27
  229. data/stdlib/socket/0/tcp_server.rbs +0 -3
  230. data/stdlib/socket/0/tcp_socket.rbs +36 -3
  231. data/stdlib/socket/0/udp_socket.rbs +0 -1
  232. data/stdlib/socket/0/unix_server.rbs +0 -3
  233. data/stdlib/socket/0/unix_socket.rbs +4 -2
  234. data/{core/string_io.rbs → stdlib/stringio/0/stringio.rbs} +1 -1
  235. data/stdlib/strscan/0/string_scanner.rbs +1265 -422
  236. data/stdlib/tempfile/0/tempfile.rbs +135 -28
  237. data/stdlib/time/0/time.rbs +48 -35
  238. data/stdlib/timeout/0/timeout.rbs +11 -8
  239. data/stdlib/tmpdir/0/tmpdir.rbs +10 -3
  240. data/stdlib/tsort/0/tsort.rbs +0 -4
  241. data/stdlib/uri/0/common.rbs +28 -30
  242. data/stdlib/uri/0/ftp.rbs +1 -1
  243. data/stdlib/uri/0/generic.rbs +22 -18
  244. data/stdlib/uri/0/http.rbs +2 -2
  245. data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
  246. data/stdlib/zlib/0/buf_error.rbs +1 -70
  247. data/stdlib/zlib/0/data_error.rbs +1 -70
  248. data/stdlib/zlib/0/deflate.rbs +8 -72
  249. data/stdlib/zlib/0/error.rbs +1 -70
  250. data/stdlib/zlib/0/gzip_file/crc_error.rbs +2 -105
  251. data/stdlib/zlib/0/gzip_file/error.rbs +2 -105
  252. data/stdlib/zlib/0/gzip_file/length_error.rbs +2 -105
  253. data/stdlib/zlib/0/gzip_file/no_footer.rbs +2 -105
  254. data/stdlib/zlib/0/gzip_file.rbs +1 -71
  255. data/stdlib/zlib/0/gzip_reader.rbs +3 -74
  256. data/stdlib/zlib/0/gzip_writer.rbs +1 -70
  257. data/stdlib/zlib/0/inflate.rbs +4 -71
  258. data/stdlib/zlib/0/mem_error.rbs +1 -70
  259. data/stdlib/zlib/0/need_dict.rbs +1 -70
  260. data/stdlib/zlib/0/stream_end.rbs +1 -70
  261. data/stdlib/zlib/0/stream_error.rbs +1 -70
  262. data/stdlib/zlib/0/version_error.rbs +1 -70
  263. data/stdlib/zlib/0/zlib.rbs +0 -2
  264. data/stdlib/zlib/0/zstream.rbs +4 -72
  265. metadata +17 -13
  266. data/ext/rbs_extension/ruby_objs.c +0 -602
  267. data/ext/rbs_extension/ruby_objs.h +0 -51
  268. data/stdlib/minitest/0/manifest.yaml +0 -2
@@ -1,49 +1,44 @@
1
1
  # <!-- rdoc-file=object.c -->
2
- # BasicObject is the parent class of all classes in Ruby. It's an explicit
3
- # blank class.
2
+ # `BasicObject` is the parent class of all classes in Ruby. In particular,
3
+ # `BasicObject` is the parent class of class Object, which is itself the default
4
+ # parent class of every Ruby class:
4
5
  #
5
- # BasicObject can be used for creating object hierarchies independent of Ruby's
6
- # object hierarchy, proxy objects like the Delegator class, or other uses where
7
- # namespace pollution from Ruby's methods and classes must be avoided.
6
+ # class Foo; end
7
+ # Foo.superclass # => Object
8
+ # Object.superclass # => BasicObject
8
9
  #
9
- # To avoid polluting BasicObject for other users an appropriately named subclass
10
- # of BasicObject should be created instead of directly modifying BasicObject:
10
+ # `BasicObject` is the only class that has no parent:
11
11
  #
12
- # class MyObjectSystem < BasicObject
13
- # end
12
+ # BasicObject.superclass # => nil
14
13
  #
15
- # BasicObject does not include Kernel (for methods like `puts`) and BasicObject
16
- # is outside of the namespace of the standard library so common classes will not
17
- # be found without using a full class path.
14
+ # Class `BasicObject` can be used to create an object hierarchy (e.g., class
15
+ # Delegator) that is independent of Ruby's object hierarchy. Such objects:
18
16
  #
19
- # A variety of strategies can be used to provide useful portions of the standard
20
- # library to subclasses of BasicObject. A subclass could `include Kernel` to
21
- # obtain `puts`, `exit`, etc. A custom Kernel-like module could be created and
22
- # included or delegation can be used via #method_missing:
17
+ # * Do not have namespace "pollution" from the many methods provided in class
18
+ # Object and its included module Kernel.
19
+ # * Do not have definitions of common classes, and so references to such
20
+ # common classes must be fully qualified (`::String`, not `String`).
23
21
  #
24
- # class MyObjectSystem < BasicObject
25
- # DELEGATE = [:puts, :p]
22
+ # A variety of strategies can be used to provide useful portions of the Standard
23
+ # Library in subclasses of `BasicObject`:
26
24
  #
27
- # def method_missing(name, *args, &block)
28
- # return super unless DELEGATE.include? name
29
- # ::Kernel.send(name, *args, &block)
30
- # end
25
+ # * The immediate subclass could `include Kernel`, which would define methods
26
+ # such as `puts`, `exit`, etc.
27
+ # * A custom Kernel-like module could be created and included.
28
+ # * Delegation can be used via #method_missing:
31
29
  #
32
- # def respond_to_missing?(name, include_private = false)
33
- # DELEGATE.include?(name) or super
34
- # end
35
- # end
30
+ # class MyObjectSystem < BasicObject
31
+ # DELEGATE = [:puts, :p]
36
32
  #
37
- # Access to classes and modules from the Ruby standard library can be obtained
38
- # in a BasicObject subclass by referencing the desired constant from the root
39
- # like `::File` or `::Enumerator`. Like #method_missing, #const_missing can be
40
- # used to delegate constant lookup to `Object`:
33
+ # def method_missing(name, *args, &block)
34
+ # return super unless DELEGATE.include? name
35
+ # ::Kernel.send(name, *args, &block)
36
+ # end
41
37
  #
42
- # class MyObjectSystem < BasicObject
43
- # def self.const_missing(name)
44
- # ::Object.const_get(name)
45
- # end
46
- # end
38
+ # def respond_to_missing?(name, include_private = false)
39
+ # DELEGATE.include?(name)
40
+ # end
41
+ # end
47
42
  #
48
43
  # ### What's Here
49
44
  #
@@ -60,6 +55,14 @@
60
55
  # `self`.
61
56
  # * #instance_exec: Executes the given block in the context of `self`, passing
62
57
  # the given arguments.
58
+ # * #method_missing: Called when `self` is called with a method it does not
59
+ # define.
60
+ # * #singleton_method_added: Called when a singleton method is added to
61
+ # `self`.
62
+ # * #singleton_method_removed: Called when a singleton method is removed from
63
+ # `self`.
64
+ # * #singleton_method_undefined: Called when a singleton method is undefined
65
+ # in `self`.
63
66
  #
64
67
  class BasicObject
65
68
  # <!--
data/core/comparable.rbs CHANGED
@@ -38,7 +38,7 @@
38
38
  #
39
39
  # ## What's Here
40
40
  #
41
- # Module Comparable provides these methods, all of which use method `<=>`:
41
+ # Module Comparable provides these methods, all of which use method `#<=>`:
42
42
  #
43
43
  # * #<: Returns whether `self` is less than the given object.
44
44
  # * #<=: Returns whether `self` is less than or equal to the given object.
data/core/complex.rbs CHANGED
@@ -6,35 +6,33 @@
6
6
  #
7
7
  # The rectangular coordinates of a complex number are called the *real* and
8
8
  # *imaginary* parts; see [Complex number
9
- # definition](https://en.wikipedia.org/wiki/Complex_number#Definition).
9
+ # definition](https://en.wikipedia.org/wiki/Complex_number#Definition_and_basic_
10
+ # operations).
10
11
  #
11
12
  # You can create a Complex object from rectangular coordinates with:
12
13
  #
13
- # * A [complex literal](rdoc-ref:doc/syntax/literals.rdoc@Complex+Literals).
14
+ # * A [complex literal](rdoc-ref:syntax/literals.rdoc@Complex+Literals).
14
15
  # * Method Complex.rect.
15
16
  # * Method Kernel#Complex, either with numeric arguments or with certain
16
17
  # string arguments.
17
18
  # * Method String#to_c, for certain strings.
18
19
  #
19
- #
20
20
  # Note that each of the stored parts may be a an instance one of the classes
21
21
  # Complex, Float, Integer, or Rational; they may be retrieved:
22
22
  #
23
23
  # * Separately, with methods Complex#real and Complex#imaginary.
24
24
  # * Together, with method Complex#rect.
25
25
  #
26
- #
27
26
  # The corresponding (computed) polar values may be retrieved:
28
27
  #
29
28
  # * Separately, with methods Complex#abs and Complex#arg.
30
29
  # * Together, with method Complex#polar.
31
30
  #
32
- #
33
31
  # ## Polar Coordinates
34
32
  #
35
33
  # The polar coordinates of a complex number are called the *absolute* and
36
34
  # *argument* parts; see [Complex polar
37
- # plane](https://en.wikipedia.org/wiki/Complex_number#Polar_complex_plane).
35
+ # plane](https://en.wikipedia.org/wiki/Complex_number#Polar_form).
38
36
  #
39
37
  # In this class, the argument part in expressed
40
38
  # [radians](https://en.wikipedia.org/wiki/Radian) (not
@@ -46,19 +44,94 @@
46
44
  # * Method Kernel#Complex, with certain string arguments.
47
45
  # * Method String#to_c, for certain strings.
48
46
  #
49
- #
50
47
  # Note that each of the stored parts may be a an instance one of the classes
51
48
  # Complex, Float, Integer, or Rational; they may be retrieved:
52
49
  #
53
50
  # * Separately, with methods Complex#abs and Complex#arg.
54
51
  # * Together, with method Complex#polar.
55
52
  #
56
- #
57
53
  # The corresponding (computed) rectangular values may be retrieved:
58
54
  #
59
55
  # * Separately, with methods Complex#real and Complex#imag.
60
56
  # * Together, with method Complex#rect.
61
57
  #
58
+ # ## What's Here
59
+ #
60
+ # First, what's elsewhere:
61
+ #
62
+ # * Class Complex inherits (directly or indirectly) from classes
63
+ # [Numeric](rdoc-ref:Numeric@What-27s+Here) and
64
+ # [Object](rdoc-ref:Object@What-27s+Here).
65
+ # * Includes (indirectly) module
66
+ # [Comparable](rdoc-ref:Comparable@What-27s+Here).
67
+ #
68
+ # Here, class Complex has methods for:
69
+ #
70
+ # ### Creating Complex Objects
71
+ #
72
+ # * ::polar: Returns a new Complex object based on given polar coordinates.
73
+ # * ::rect (and its alias ::rectangular): Returns a new Complex object based
74
+ # on given rectangular coordinates.
75
+ #
76
+ # ### Querying
77
+ #
78
+ # * #abs (and its alias #magnitude): Returns the absolute value for `self`.
79
+ # * #arg (and its aliases #angle and #phase): Returns the argument (angle) for
80
+ # `self` in radians.
81
+ # * #denominator: Returns the denominator of `self`.
82
+ # * #finite?: Returns whether both `self.real` and `self.image` are finite.
83
+ # * #hash: Returns the integer hash value for `self`.
84
+ # * #imag (and its alias #imaginary): Returns the imaginary value for `self`.
85
+ # * #infinite?: Returns whether `self.real` or `self.image` is infinite.
86
+ # * #numerator: Returns the numerator of `self`.
87
+ # * #polar: Returns the array `[self.abs, self.arg]`.
88
+ # * #inspect: Returns a string representation of `self`.
89
+ # * #real: Returns the real value for `self`.
90
+ # * #real?: Returns `false`; for compatibility with Numeric#real?.
91
+ # * #rect (and its alias #rectangular): Returns the array `[self.real,
92
+ # self.imag]`.
93
+ #
94
+ # ### Comparing
95
+ #
96
+ # * #<=>: Returns whether `self` is less than, equal to, or greater than the
97
+ # given argument.
98
+ # * #==: Returns whether `self` is equal to the given argument.
99
+ #
100
+ # ### Converting
101
+ #
102
+ # * #rationalize: Returns a Rational object whose value is exactly or
103
+ # approximately equivalent to that of `self.real`.
104
+ # * #to_c: Returns `self`.
105
+ # * #to_d: Returns the value as a BigDecimal object.
106
+ # * #to_f: Returns the value of `self.real` as a Float, if possible.
107
+ # * #to_i: Returns the value of `self.real` as an Integer, if possible.
108
+ # * #to_r: Returns the value of `self.real` as a Rational, if possible.
109
+ # * #to_s: Returns a string representation of `self`.
110
+ #
111
+ # ### Performing Complex Arithmetic
112
+ #
113
+ # * #*: Returns the product of `self` and the given numeric.
114
+ # * #**: Returns `self` raised to power of the given numeric.
115
+ # * #+: Returns the sum of `self` and the given numeric.
116
+ # * #-: Returns the difference of `self` and the given numeric.
117
+ # * #-@: Returns the negation of `self`.
118
+ # * #/: Returns the quotient of `self` and the given numeric.
119
+ # * #abs2: Returns square of the absolute value (magnitude) for `self`.
120
+ # * #conj (and its alias #conjugate): Returns the conjugate of `self`.
121
+ # * #fdiv: Returns `Complex.rect(self.real/numeric, self.imag/numeric)`.
122
+ #
123
+ # ### Working with JSON
124
+ #
125
+ # * ::json_create: Returns a new Complex object, deserialized from the given
126
+ # serialized hash.
127
+ # * #as_json: Returns a serialized hash constructed from `self`.
128
+ # * #to_json: Returns a JSON string representing `self`.
129
+ #
130
+ # These methods are provided by the [JSON gem](https://github.com/ruby/json). To
131
+ # make these methods available:
132
+ #
133
+ # require 'json/add/complex'
134
+ #
62
135
  class Complex < Numeric
63
136
  # <!--
64
137
  # rdoc-file=complex.c
@@ -115,11 +188,11 @@ class Complex < Numeric
115
188
  # -->
116
189
  # Returns the product of `self` and `numeric`:
117
190
  #
118
- # Complex(2, 3) * Complex(2, 3) # => (-5+12i)
119
- # Complex(900) * Complex(1) # => (900+0i)
120
- # Complex(-2, 9) * Complex(-9, 2) # => (0-85i)
121
- # Complex(9, 8) * 4 # => (36+32i)
122
- # Complex(20, 9) * 9.8 # => (196.0+88.2i)
191
+ # Complex.rect(2, 3) * Complex.rect(2, 3) # => (-5+12i)
192
+ # Complex.rect(900) * Complex.rect(1) # => (900+0i)
193
+ # Complex.rect(-2, 9) * Complex.rect(-9, 2) # => (0-85i)
194
+ # Complex.rect(9, 8) * 4 # => (36+32i)
195
+ # Complex.rect(20, 9) * 9.8 # => (196.0+88.2i)
123
196
  #
124
197
  def *: (Numeric) -> Complex
125
198
 
@@ -129,8 +202,8 @@ class Complex < Numeric
129
202
  # -->
130
203
  # Returns `self` raised to power `numeric`:
131
204
  #
132
- # Complex('i') ** 2 # => (-1+0i)
133
- # Complex(-8) ** Rational(1, 3) # => (1.0000000000000002+1.7320508075688772i)
205
+ # Complex.rect(0, 1) ** 2 # => (-1+0i)
206
+ # Complex.rect(-8) ** Rational(1, 3) # => (1.0000000000000002+1.7320508075688772i)
134
207
  #
135
208
  def **: (Numeric) -> Complex
136
209
 
@@ -140,11 +213,11 @@ class Complex < Numeric
140
213
  # -->
141
214
  # Returns the sum of `self` and `numeric`:
142
215
  #
143
- # Complex(2, 3) + Complex(2, 3) # => (4+6i)
144
- # Complex(900) + Complex(1) # => (901+0i)
145
- # Complex(-2, 9) + Complex(-9, 2) # => (-11+11i)
146
- # Complex(9, 8) + 4 # => (13+8i)
147
- # Complex(20, 9) + 9.8 # => (29.8+9i)
216
+ # Complex.rect(2, 3) + Complex.rect(2, 3) # => (4+6i)
217
+ # Complex.rect(900) + Complex.rect(1) # => (901+0i)
218
+ # Complex.rect(-2, 9) + Complex.rect(-9, 2) # => (-11+11i)
219
+ # Complex.rect(9, 8) + 4 # => (13+8i)
220
+ # Complex.rect(20, 9) + 9.8 # => (29.8+9i)
148
221
  #
149
222
  def +: (Numeric) -> Complex
150
223
 
@@ -156,11 +229,11 @@ class Complex < Numeric
156
229
  # -->
157
230
  # Returns the difference of `self` and `numeric`:
158
231
  #
159
- # Complex(2, 3) - Complex(2, 3) # => (0+0i)
160
- # Complex(900) - Complex(1) # => (899+0i)
161
- # Complex(-2, 9) - Complex(-9, 2) # => (7+7i)
162
- # Complex(9, 8) - 4 # => (5+8i)
163
- # Complex(20, 9) - 9.8 # => (10.2+9i)
232
+ # Complex.rect(2, 3) - Complex.rect(2, 3) # => (0+0i)
233
+ # Complex.rect(900) - Complex.rect(1) # => (899+0i)
234
+ # Complex.rect(-2, 9) - Complex.rect(-9, 2) # => (7+7i)
235
+ # Complex.rect(9, 8) - 4 # => (5+8i)
236
+ # Complex.rect(20, 9) - 9.8 # => (10.2+9i)
164
237
  #
165
238
  def -: (Numeric) -> Complex
166
239
 
@@ -170,8 +243,8 @@ class Complex < Numeric
170
243
  # -->
171
244
  # Returns the negation of `self`, which is the negation of each of its parts:
172
245
  #
173
- # -Complex(1, 2) # => (-1-2i)
174
- # -Complex(-1, -2) # => (1+2i)
246
+ # -Complex.rect(1, 2) # => (-1-2i)
247
+ # -Complex.rect(-1, -2) # => (1+2i)
175
248
  #
176
249
  def -@: () -> Complex
177
250
 
@@ -181,11 +254,11 @@ class Complex < Numeric
181
254
  # -->
182
255
  # Returns the quotient of `self` and `numeric`:
183
256
  #
184
- # Complex(2, 3) / Complex(2, 3) # => ((1/1)+(0/1)*i)
185
- # Complex(900) / Complex(1) # => ((900/1)+(0/1)*i)
186
- # Complex(-2, 9) / Complex(-9, 2) # => ((36/85)-(77/85)*i)
187
- # Complex(9, 8) / 4 # => ((9/4)+(2/1)*i)
188
- # Complex(20, 9) / 9.8 # => (2.0408163265306123+0.9183673469387754i)
257
+ # Complex.rect(2, 3) / Complex.rect(2, 3) # => (1+0i)
258
+ # Complex.rect(900) / Complex.rect(1) # => (900+0i)
259
+ # Complex.rect(-2, 9) / Complex.rect(-9, 2) # => ((36/85)-(77/85)*i)
260
+ # Complex.rect(9, 8) / 4 # => ((9/4)+2i)
261
+ # Complex.rect(20, 9) / 9.8 # => (2.0408163265306123+0.9183673469387754i)
189
262
  #
190
263
  def /: (Numeric) -> Complex
191
264
 
@@ -205,18 +278,16 @@ class Complex < Numeric
205
278
  # * `object.imag == 0`. # Always true if object is numeric but not
206
279
  # complex.
207
280
  #
208
- #
209
281
  # * `nil` otherwise.
210
282
  #
211
- #
212
283
  # Examples:
213
284
  #
214
- # Complex(2) <=> 3 # => -1
215
- # Complex(2) <=> 2 # => 0
216
- # Complex(2) <=> 1 # => 1
217
- # Complex(2, 1) <=> 1 # => nil # self.imag not zero.
218
- # Complex(1) <=> Complex(1, 1) # => nil # object.imag not zero.
219
- # Complex(1) <=> 'Foo' # => nil # object.imag not defined.
285
+ # Complex.rect(2) <=> 3 # => -1
286
+ # Complex.rect(2) <=> 2 # => 0
287
+ # Complex.rect(2) <=> 1 # => 1
288
+ # Complex.rect(2, 1) <=> 1 # => nil # self.imag not zero.
289
+ # Complex.rect(1) <=> Complex.rect(1, 1) # => nil # object.imag not zero.
290
+ # Complex.rect(1) <=> 'Foo' # => nil # object.imag not defined.
220
291
  #
221
292
  def <=>: (untyped) -> Integer?
222
293
 
@@ -226,7 +297,7 @@ class Complex < Numeric
226
297
  # -->
227
298
  # Returns `true` if `self.real == object.real` and `self.imag == object.imag`:
228
299
  #
229
- # Complex(2, 3) == Complex(2.0, 3.0) # => true
300
+ # Complex.rect(2, 3) == Complex.rect(2.0, 3.0) # => true
230
301
  #
231
302
  def ==: (untyped) -> bool
232
303
 
@@ -348,9 +419,9 @@ class Complex < Numeric
348
419
  # rdoc-file=complex.c
349
420
  # - fdiv(numeric) -> new_complex
350
421
  # -->
351
- # Returns `Complex(self.real/numeric, self.imag/numeric)`:
422
+ # Returns `Complex.rect(self.real/numeric, self.imag/numeric)`:
352
423
  #
353
- # Complex(11, 22).fdiv(3) # => (3.6666666666666665+7.333333333333333i)
424
+ # Complex.rect(11, 22).fdiv(3) # => (3.6666666666666665+7.333333333333333i)
354
425
  #
355
426
  def fdiv: (Numeric) -> Complex
356
427
 
@@ -361,8 +432,8 @@ class Complex < Numeric
361
432
  # Returns `true` if both `self.real.finite?` and `self.imag.finite?` are true,
362
433
  # `false` otherwise:
363
434
  #
364
- # Complex(1, 1).finite? # => true
365
- # Complex(Float::INFINITY, 0).finite? # => false
435
+ # Complex.rect(1, 1).finite? # => true
436
+ # Complex.rect(Float::INFINITY, 0).finite? # => false
366
437
  #
367
438
  # Related: Numeric#finite?, Float#finite?.
368
439
  #
@@ -379,7 +450,7 @@ class Complex < Numeric
379
450
  # Two Complex objects created from the same values will have the same hash value
380
451
  # (and will compare using #eql?):
381
452
  #
382
- # Complex(1, 2).hash == Complex(1, 2).hash # => true
453
+ # Complex.rect(1, 2).hash == Complex.rect(1, 2).hash # => true
383
454
  #
384
455
  def hash: () -> Integer
385
456
 
@@ -388,8 +459,8 @@ class Complex < Numeric
388
459
  # <!-- rdoc-file=complex.c -->
389
460
  # Returns the imaginary value for `self`:
390
461
  #
391
- # Complex(7).imaginary #=> 0
392
- # Complex(9, -4).imaginary #=> -4
462
+ # Complex.rect(7).imag # => 0
463
+ # Complex.rect(9, -4).imag # => -4
393
464
  #
394
465
  # If `self` was created with [polar
395
466
  # coordinates](rdoc-ref:Complex@Polar+Coordinates), the returned value is
@@ -405,8 +476,8 @@ class Complex < Numeric
405
476
  # -->
406
477
  # Returns the imaginary value for `self`:
407
478
  #
408
- # Complex(7).imaginary #=> 0
409
- # Complex(9, -4).imaginary #=> -4
479
+ # Complex.rect(7).imag # => 0
480
+ # Complex.rect(9, -4).imag # => -4
410
481
  #
411
482
  # If `self` was created with [polar
412
483
  # coordinates](rdoc-ref:Complex@Polar+Coordinates), the returned value is
@@ -423,8 +494,8 @@ class Complex < Numeric
423
494
  # Returns `1` if either `self.real.infinite?` or `self.imag.infinite?` is true,
424
495
  # `nil` otherwise:
425
496
  #
426
- # Complex(Float::INFINITY, 0).infinite? # => 1
427
- # Complex(1, 1).infinite? # => nil
497
+ # Complex.rect(Float::INFINITY, 0).infinite? # => 1
498
+ # Complex.rect(1, 1).infinite? # => nil
428
499
  #
429
500
  # Related: Numeric#infinite?, Float#infinite?.
430
501
  #
@@ -436,11 +507,11 @@ class Complex < Numeric
436
507
  # -->
437
508
  # Returns a string representation of `self`:
438
509
  #
439
- # Complex(2).inspect # => "(2+0i)"
440
- # Complex('-8/6').inspect # => "((-4/3)+0i)"
441
- # Complex('1/2i').inspect # => "(0+(1/2)*i)"
442
- # Complex(0, Float::INFINITY).inspect # => "(0+Infinity*i)"
443
- # Complex(Float::NAN, Float::NAN).inspect # => "(NaN+NaN*i)"
510
+ # Complex.rect(2).inspect # => "(2+0i)"
511
+ # Complex.rect(-8, 6).inspect # => "(-8+6i)"
512
+ # Complex.rect(0, Rational(1, 2)).inspect # => "(0+(1/2)*i)"
513
+ # Complex.rect(0, Float::INFINITY).inspect # => "(0+Infinity*i)"
514
+ # Complex.rect(Float::NAN, Float::NAN).inspect # => "(NaN+NaN*i)"
444
515
  #
445
516
  def inspect: () -> String
446
517
 
@@ -475,13 +546,13 @@ class Complex < Numeric
475
546
  # denominator](https://en.wikipedia.org/wiki/Lowest_common_denominator) of the
476
547
  # two:
477
548
  #
478
- # c = Complex(Rational(2, 3), Rational(3, 4)) # => ((2/3)+(3/4)*i)
479
- # c.numerator # => (8+9i)
549
+ # c = Complex.rect(Rational(2, 3), Rational(3, 4)) # => ((2/3)+(3/4)*i)
550
+ # c.numerator # => (8+9i)
480
551
  #
481
552
  # In this example, the lowest common denominator of the two parts is 12; the two
482
553
  # converted parts may be thought of as Rational(8, 12) and Rational(9, 12),
483
554
  # whose numerators, respectively, are 8 and 9; so the returned value of
484
- # `c.numerator` is `Complex(8, 9)`.
555
+ # `c.numerator` is `Complex.rect(8, 9)`.
485
556
  #
486
557
  # Related: Complex#denominator.
487
558
  #
@@ -527,11 +598,11 @@ class Complex < Numeric
527
598
  # -->
528
599
  # Returns the quotient of `self` and `numeric`:
529
600
  #
530
- # Complex(2, 3) / Complex(2, 3) # => ((1/1)+(0/1)*i)
531
- # Complex(900) / Complex(1) # => ((900/1)+(0/1)*i)
532
- # Complex(-2, 9) / Complex(-9, 2) # => ((36/85)-(77/85)*i)
533
- # Complex(9, 8) / 4 # => ((9/4)+(2/1)*i)
534
- # Complex(20, 9) / 9.8 # => (2.0408163265306123+0.9183673469387754i)
601
+ # Complex.rect(2, 3) / Complex.rect(2, 3) # => (1+0i)
602
+ # Complex.rect(900) / Complex.rect(1) # => (900+0i)
603
+ # Complex.rect(-2, 9) / Complex.rect(-9, 2) # => ((36/85)-(77/85)*i)
604
+ # Complex.rect(9, 8) / 4 # => ((9/4)+2i)
605
+ # Complex.rect(20, 9) / 9.8 # => (2.0408163265306123+0.9183673469387754i)
535
606
  #
536
607
  def quo: (Numeric) -> Complex
537
608
 
@@ -545,24 +616,24 @@ class Complex < Numeric
545
616
  # With no argument `epsilon` given, returns a Rational object whose value is
546
617
  # exactly equal to that of `self.real.rationalize`:
547
618
  #
548
- # Complex(1, 0).rationalize # => (1/1)
549
- # Complex(1, Rational(0, 1)).rationalize # => (1/1)
550
- # Complex(3.14159, 0).rationalize # => (314159/100000)
619
+ # Complex.rect(1, 0).rationalize # => (1/1)
620
+ # Complex.rect(1, Rational(0, 1)).rationalize # => (1/1)
621
+ # Complex.rect(3.14159, 0).rationalize # => (314159/100000)
551
622
  #
552
623
  # With argument `epsilon` given, returns a Rational object whose value is
553
624
  # exactly or approximately equal to that of `self.real` to the given precision:
554
625
  #
555
- # Complex(3.14159, 0).rationalize(0.1) # => (16/5)
556
- # Complex(3.14159, 0).rationalize(0.01) # => (22/7)
557
- # Complex(3.14159, 0).rationalize(0.001) # => (201/64)
558
- # Complex(3.14159, 0).rationalize(0.0001) # => (333/106)
559
- # Complex(3.14159, 0).rationalize(0.00001) # => (355/113)
560
- # Complex(3.14159, 0).rationalize(0.000001) # => (7433/2366)
561
- # Complex(3.14159, 0).rationalize(0.0000001) # => (9208/2931)
562
- # Complex(3.14159, 0).rationalize(0.00000001) # => (47460/15107)
563
- # Complex(3.14159, 0).rationalize(0.000000001) # => (76149/24239)
564
- # Complex(3.14159, 0).rationalize(0.0000000001) # => (314159/100000)
565
- # Complex(3.14159, 0).rationalize(0.0) # => (3537115888337719/1125899906842624)
626
+ # Complex.rect(3.14159, 0).rationalize(0.1) # => (16/5)
627
+ # Complex.rect(3.14159, 0).rationalize(0.01) # => (22/7)
628
+ # Complex.rect(3.14159, 0).rationalize(0.001) # => (201/64)
629
+ # Complex.rect(3.14159, 0).rationalize(0.0001) # => (333/106)
630
+ # Complex.rect(3.14159, 0).rationalize(0.00001) # => (355/113)
631
+ # Complex.rect(3.14159, 0).rationalize(0.000001) # => (7433/2366)
632
+ # Complex.rect(3.14159, 0).rationalize(0.0000001) # => (9208/2931)
633
+ # Complex.rect(3.14159, 0).rationalize(0.00000001) # => (47460/15107)
634
+ # Complex.rect(3.14159, 0).rationalize(0.000000001) # => (76149/24239)
635
+ # Complex.rect(3.14159, 0).rationalize(0.0000000001) # => (314159/100000)
636
+ # Complex.rect(3.14159, 0).rationalize(0.0) # => (3537115888337719/1125899906842624)
566
637
  #
567
638
  # Related: Complex#to_r.
568
639
  #
@@ -574,8 +645,8 @@ class Complex < Numeric
574
645
  # -->
575
646
  # Returns the real value for `self`:
576
647
  #
577
- # Complex(7).real #=> 7
578
- # Complex(9, -4).real #=> 9
648
+ # Complex.rect(7).real # => 7
649
+ # Complex.rect(9, -4).real # => 9
579
650
  #
580
651
  # If `self` was created with [polar
581
652
  # coordinates](rdoc-ref:Complex@Polar+Coordinates), the returned value is
@@ -647,8 +718,8 @@ class Complex < Numeric
647
718
  # -->
648
719
  # Returns the value of `self.real` as a Float, if possible:
649
720
  #
650
- # Complex(1, 0).to_f # => 1.0
651
- # Complex(1, Rational(0, 1)).to_f # => 1.0
721
+ # Complex.rect(1, 0).to_f # => 1.0
722
+ # Complex.rect(1, Rational(0, 1)).to_f # => 1.0
652
723
  #
653
724
  # Raises RangeError if `self.imag` is not exactly zero (either `Integer(0)` or
654
725
  # `Rational(0, *n*)`).
@@ -661,8 +732,8 @@ class Complex < Numeric
661
732
  # -->
662
733
  # Returns the value of `self.real` as an Integer, if possible:
663
734
  #
664
- # Complex(1, 0).to_i # => 1
665
- # Complex(1, Rational(0, 1)).to_i # => 1
735
+ # Complex.rect(1, 0).to_i # => 1
736
+ # Complex.rect(1, Rational(0, 1)).to_i # => 1
666
737
  #
667
738
  # Raises RangeError if `self.imag` is not exactly zero (either `Integer(0)` or
668
739
  # `Rational(0, *n*)`).
@@ -677,11 +748,12 @@ class Complex < Numeric
677
748
  # -->
678
749
  # Returns the value of `self.real` as a Rational, if possible:
679
750
  #
680
- # Complex(1, 0).to_r # => (1/1)
681
- # Complex(1, Rational(0, 1)).to_r # => (1/1)
751
+ # Complex.rect(1, 0).to_r # => (1/1)
752
+ # Complex.rect(1, Rational(0, 1)).to_r # => (1/1)
753
+ # Complex.rect(1, 0.0).to_r # => (1/1)
682
754
  #
683
755
  # Raises RangeError if `self.imag` is not exactly zero (either `Integer(0)` or
684
- # `Rational(0, *n*)`).
756
+ # `Rational(0, *n*)`) and `self.imag.to_r` is not exactly zero.
685
757
  #
686
758
  # Related: Complex#rationalize.
687
759
  #
@@ -693,11 +765,11 @@ class Complex < Numeric
693
765
  # -->
694
766
  # Returns a string representation of `self`:
695
767
  #
696
- # Complex(2).to_s # => "2+0i"
697
- # Complex('-8/6').to_s # => "-4/3+0i"
698
- # Complex('1/2i').to_s # => "0+1/2i"
699
- # Complex(0, Float::INFINITY).to_s # => "0+Infinity*i"
700
- # Complex(Float::NAN, Float::NAN).to_s # => "NaN+NaN*i"
768
+ # Complex.rect(2).to_s # => "2+0i"
769
+ # Complex.rect(-8, 6).to_s # => "-8+6i"
770
+ # Complex.rect(0, Rational(1, 2)).to_s # => "0+1/2i"
771
+ # Complex.rect(0, Float::INFINITY).to_s # => "0+Infinity*i"
772
+ # Complex.rect(Float::NAN, Float::NAN).to_s # => "NaN+NaN*i"
701
773
  #
702
774
  def to_s: () -> String
703
775
 
@@ -707,7 +779,7 @@ class Complex < Numeric
707
779
  end
708
780
 
709
781
  # <!-- rdoc-file=complex.c -->
710
- # Equivalent to `Complex(0, 1)`:
782
+ # Equivalent to `Complex.rect(0, 1)`:
711
783
  #
712
784
  # Complex::I # => (0+1i)
713
785
  #
data/core/data.rbs CHANGED
@@ -83,7 +83,7 @@ class Data
83
83
  # #=> #<data Measure amount=1, unit="km">
84
84
  #
85
85
  # Note that member-less Data is acceptable and might be a useful technique for
86
- # defining several homogenous data classes, like
86
+ # defining several homogeneous data classes, like
87
87
  #
88
88
  # class HTTPFetcher
89
89
  # Response = Data.define(:body)
@@ -411,5 +411,5 @@ class Data
411
411
  # out = origin.with(z: 1) # ArgumentError: unknown keyword: :z
412
412
  # some_point = origin.with(1, 2) # ArgumentError: expected keyword arguments, got positional arguments
413
413
  #
414
- def with: (**untyped) -> instance
414
+ def with: (**untyped) -> self
415
415
  end