steep 0.11.1 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (299) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +27 -0
  3. data/.gitmodules +3 -0
  4. data/CHANGELOG.md +5 -0
  5. data/README.md +48 -90
  6. data/Rakefile +10 -6
  7. data/Steepfile +1 -0
  8. data/bin/setup +1 -0
  9. data/bin/smoke_runner.rb +9 -14
  10. data/exe/rbs +3 -0
  11. data/exe/ruby-signature +3 -0
  12. data/exe/steep +1 -0
  13. data/lib/steep.rb +32 -26
  14. data/lib/steep/annotation_parser.rb +167 -0
  15. data/lib/steep/ast/annotation/collection.rb +7 -7
  16. data/lib/steep/ast/types.rb +60 -0
  17. data/lib/steep/ast/types/any.rb +1 -1
  18. data/lib/steep/ast/types/factory.rb +535 -0
  19. data/lib/steep/ast/types/name.rb +3 -3
  20. data/lib/steep/ast/types/var.rb +1 -1
  21. data/lib/steep/cli.rb +56 -240
  22. data/lib/steep/drivers/annotations.rb +36 -19
  23. data/lib/steep/drivers/check.rb +55 -91
  24. data/lib/steep/drivers/init.rb +54 -0
  25. data/lib/steep/drivers/langserver.rb +241 -150
  26. data/lib/steep/drivers/print_project.rb +56 -0
  27. data/lib/steep/drivers/signature_error_printer.rb +25 -0
  28. data/lib/steep/drivers/trace_printer.rb +25 -0
  29. data/lib/steep/drivers/utils/driver_helper.rb +26 -0
  30. data/lib/steep/drivers/validate.rb +18 -38
  31. data/lib/steep/drivers/vendor.rb +46 -0
  32. data/lib/steep/drivers/watch.rb +78 -140
  33. data/lib/steep/errors.rb +22 -13
  34. data/lib/steep/interface/interface.rb +91 -0
  35. data/lib/steep/interface/method.rb +0 -4
  36. data/lib/steep/interface/method_type.rb +362 -2
  37. data/lib/steep/interface/substitution.rb +22 -0
  38. data/lib/steep/project.rb +25 -233
  39. data/lib/steep/project/dsl.rb +132 -0
  40. data/lib/steep/project/file.rb +93 -76
  41. data/lib/steep/project/file_loader.rb +63 -0
  42. data/lib/steep/project/options.rb +7 -0
  43. data/lib/steep/project/target.rb +190 -0
  44. data/lib/steep/signature/errors.rb +25 -77
  45. data/lib/steep/signature/validator.rb +122 -0
  46. data/lib/steep/source.rb +12 -7
  47. data/lib/steep/subtyping/check.rb +357 -633
  48. data/lib/steep/subtyping/constraints.rb +2 -2
  49. data/lib/steep/subtyping/trace.rb +23 -0
  50. data/lib/steep/type_construction.rb +509 -455
  51. data/lib/steep/type_inference/constant_env.rb +16 -24
  52. data/lib/steep/type_inference/type_env.rb +26 -18
  53. data/lib/steep/version.rb +1 -1
  54. data/sample/Steepfile +6 -0
  55. data/sample/lib/conference.rb +12 -0
  56. data/sample/sig/conference.rbs +6 -0
  57. data/smoke/alias/Steepfile +4 -0
  58. data/smoke/alias/a.rb +2 -2
  59. data/smoke/alias/{a.rbi → a.rbs} +1 -1
  60. data/smoke/and/Steepfile +4 -0
  61. data/smoke/array/Steepfile +4 -0
  62. data/smoke/array/a.rb +2 -2
  63. data/smoke/array/b.rb +4 -4
  64. data/smoke/array/c.rb +2 -2
  65. data/smoke/block/Steepfile +5 -0
  66. data/smoke/block/{a.rbi → a.rbs} +1 -1
  67. data/smoke/block/{c.rbi → c.rbs} +0 -0
  68. data/smoke/block/d.rb +6 -6
  69. data/smoke/case/Steepfile +4 -0
  70. data/smoke/case/a.rb +4 -3
  71. data/smoke/class/Steepfile +4 -0
  72. data/smoke/class/a.rb +1 -4
  73. data/smoke/class/a.rbs +24 -0
  74. data/smoke/class/h.rb +6 -2
  75. data/smoke/class/{h.rbi → h.rbs} +1 -2
  76. data/smoke/class/i.rb +1 -2
  77. data/smoke/class/i.rbs +9 -0
  78. data/smoke/const/Steepfile +4 -0
  79. data/smoke/dstr/Steepfile +4 -0
  80. data/smoke/ensure/Steepfile +4 -0
  81. data/smoke/ensure/a.rb +1 -1
  82. data/smoke/enumerator/Steepfile +4 -0
  83. data/smoke/enumerator/a.rb +7 -7
  84. data/smoke/enumerator/b.rb +6 -6
  85. data/smoke/extension/Steepfile +4 -0
  86. data/smoke/extension/{a.rbi → a.rbs} +2 -2
  87. data/smoke/extension/{e.rbi → e.rbs} +2 -2
  88. data/smoke/hash/Steepfile +4 -0
  89. data/smoke/hash/{a.rbi → a.rbs} +0 -0
  90. data/smoke/hash/b.rb +2 -2
  91. data/smoke/hash/c.rb +1 -1
  92. data/smoke/hash/e.rbs +3 -0
  93. data/smoke/hash/f.rb +1 -1
  94. data/smoke/hello/Steepfile +4 -0
  95. data/smoke/hello/hello.rbs +7 -0
  96. data/smoke/if/Steepfile +4 -0
  97. data/smoke/implements/Steepfile +4 -0
  98. data/smoke/implements/a.rbs +6 -0
  99. data/smoke/initialize/Steepfile +4 -0
  100. data/smoke/initialize/a.rbs +3 -0
  101. data/smoke/integer/Steepfile +4 -0
  102. data/smoke/integer/a.rb +5 -3
  103. data/smoke/interface/Steepfile +4 -0
  104. data/smoke/interface/{a.rbi → a.rbs} +0 -0
  105. data/smoke/kwbegin/Steepfile +4 -0
  106. data/smoke/lambda/Steepfile +4 -0
  107. data/smoke/lambda/a.rb +9 -2
  108. data/smoke/literal/Steepfile +4 -0
  109. data/smoke/literal/{literal_methods.rbi → literal_methods.rbs} +0 -0
  110. data/smoke/map/Steepfile +4 -0
  111. data/smoke/map/a.rb +1 -1
  112. data/smoke/method/Steepfile +4 -0
  113. data/smoke/method/{a.rbi → a.rbs} +0 -0
  114. data/smoke/method/b.rb +1 -4
  115. data/smoke/method/d.rb +1 -0
  116. data/smoke/method/d.rbs +3 -0
  117. data/smoke/module/Steepfile +4 -0
  118. data/smoke/module/a.rb +1 -1
  119. data/smoke/module/a.rbs +16 -0
  120. data/smoke/module/c.rb +1 -1
  121. data/smoke/regexp/Steepfile +4 -0
  122. data/smoke/regexp/a.rb +2 -2
  123. data/smoke/regexp/b.rb +16 -16
  124. data/smoke/regression/Steepfile +5 -0
  125. data/smoke/regression/array.rb +2 -2
  126. data/smoke/regression/hash.rb +2 -2
  127. data/smoke/regression/poly_new.rb +2 -0
  128. data/smoke/regression/poly_new.rbs +4 -0
  129. data/smoke/regression/set_divide.rb +2 -2
  130. data/smoke/rescue/Steepfile +4 -0
  131. data/smoke/rescue/a.rb +1 -1
  132. data/smoke/self/Steepfile +4 -0
  133. data/smoke/self/a.rbs +4 -0
  134. data/smoke/skip/Steepfile +4 -0
  135. data/smoke/stdout/Steepfile +4 -0
  136. data/smoke/stdout/{a.rbi → a.rbs} +1 -1
  137. data/smoke/super/Steepfile +4 -0
  138. data/smoke/super/a.rbs +10 -0
  139. data/smoke/type_case/Steepfile +4 -0
  140. data/smoke/type_case/a.rb +1 -1
  141. data/smoke/yield/Steepfile +4 -0
  142. data/smoke/yield/a.rb +2 -2
  143. data/steep.gemspec +14 -7
  144. data/vendor/ruby-signature/.github/workflows/ruby.yml +27 -0
  145. data/vendor/ruby-signature/.gitignore +12 -0
  146. data/vendor/ruby-signature/.rubocop.yml +15 -0
  147. data/vendor/ruby-signature/BSDL +22 -0
  148. data/vendor/ruby-signature/COPYING +56 -0
  149. data/vendor/ruby-signature/Gemfile +6 -0
  150. data/vendor/ruby-signature/README.md +93 -0
  151. data/vendor/ruby-signature/Rakefile +66 -0
  152. data/vendor/ruby-signature/bin/annotate-with-rdoc +156 -0
  153. data/vendor/ruby-signature/bin/console +14 -0
  154. data/vendor/ruby-signature/bin/query-rdoc +103 -0
  155. data/vendor/ruby-signature/bin/setup +10 -0
  156. data/vendor/ruby-signature/bin/sort +88 -0
  157. data/vendor/ruby-signature/bin/test_runner.rb +17 -0
  158. data/vendor/ruby-signature/docs/CONTRIBUTING.md +97 -0
  159. data/vendor/ruby-signature/docs/sigs.md +148 -0
  160. data/vendor/ruby-signature/docs/stdlib.md +152 -0
  161. data/vendor/ruby-signature/docs/syntax.md +528 -0
  162. data/vendor/ruby-signature/exe/rbs +3 -0
  163. data/vendor/ruby-signature/exe/ruby-signature +7 -0
  164. data/vendor/ruby-signature/lib/ruby/signature.rb +64 -0
  165. data/vendor/ruby-signature/lib/ruby/signature/ast/annotation.rb +29 -0
  166. data/vendor/ruby-signature/lib/ruby/signature/ast/comment.rb +29 -0
  167. data/vendor/ruby-signature/lib/ruby/signature/ast/declarations.rb +391 -0
  168. data/vendor/ruby-signature/lib/ruby/signature/ast/members.rb +364 -0
  169. data/vendor/ruby-signature/lib/ruby/signature/buffer.rb +52 -0
  170. data/vendor/ruby-signature/lib/ruby/signature/builtin_names.rb +54 -0
  171. data/vendor/ruby-signature/lib/ruby/signature/cli.rb +534 -0
  172. data/vendor/ruby-signature/lib/ruby/signature/constant.rb +28 -0
  173. data/vendor/ruby-signature/lib/ruby/signature/constant_table.rb +152 -0
  174. data/vendor/ruby-signature/lib/ruby/signature/definition.rb +172 -0
  175. data/vendor/ruby-signature/lib/ruby/signature/definition_builder.rb +921 -0
  176. data/vendor/ruby-signature/lib/ruby/signature/environment.rb +283 -0
  177. data/vendor/ruby-signature/lib/ruby/signature/environment_loader.rb +138 -0
  178. data/vendor/ruby-signature/lib/ruby/signature/environment_walker.rb +126 -0
  179. data/vendor/ruby-signature/lib/ruby/signature/errors.rb +189 -0
  180. data/vendor/ruby-signature/lib/ruby/signature/location.rb +104 -0
  181. data/vendor/ruby-signature/lib/ruby/signature/method_type.rb +125 -0
  182. data/vendor/ruby-signature/lib/ruby/signature/namespace.rb +93 -0
  183. data/vendor/ruby-signature/lib/ruby/signature/parser.y +1343 -0
  184. data/vendor/ruby-signature/lib/ruby/signature/prototype/rb.rb +441 -0
  185. data/vendor/ruby-signature/lib/ruby/signature/prototype/rbi.rb +579 -0
  186. data/vendor/ruby-signature/lib/ruby/signature/prototype/runtime.rb +383 -0
  187. data/vendor/ruby-signature/lib/ruby/signature/substitution.rb +48 -0
  188. data/vendor/ruby-signature/lib/ruby/signature/test.rb +28 -0
  189. data/vendor/ruby-signature/lib/ruby/signature/test/errors.rb +63 -0
  190. data/vendor/ruby-signature/lib/ruby/signature/test/hook.rb +290 -0
  191. data/vendor/ruby-signature/lib/ruby/signature/test/setup.rb +58 -0
  192. data/vendor/ruby-signature/lib/ruby/signature/test/spy.rb +324 -0
  193. data/vendor/ruby-signature/lib/ruby/signature/test/test_helper.rb +185 -0
  194. data/vendor/ruby-signature/lib/ruby/signature/test/type_check.rb +256 -0
  195. data/vendor/ruby-signature/lib/ruby/signature/type_name.rb +72 -0
  196. data/vendor/ruby-signature/lib/ruby/signature/types.rb +932 -0
  197. data/vendor/ruby-signature/lib/ruby/signature/variance_calculator.rb +140 -0
  198. data/vendor/ruby-signature/lib/ruby/signature/vendorer.rb +49 -0
  199. data/vendor/ruby-signature/lib/ruby/signature/version.rb +5 -0
  200. data/vendor/ruby-signature/lib/ruby/signature/writer.rb +271 -0
  201. data/vendor/ruby-signature/ruby-signature.gemspec +45 -0
  202. data/vendor/ruby-signature/stdlib/abbrev/abbrev.rbs +3 -0
  203. data/vendor/ruby-signature/stdlib/base64/base64.rbs +15 -0
  204. data/vendor/ruby-signature/stdlib/builtin/array.rbs +1997 -0
  205. data/vendor/ruby-signature/stdlib/builtin/basic_object.rbs +280 -0
  206. data/vendor/ruby-signature/stdlib/builtin/binding.rbs +177 -0
  207. data/vendor/ruby-signature/stdlib/builtin/builtin.rbs +35 -0
  208. data/vendor/ruby-signature/stdlib/builtin/class.rbs +145 -0
  209. data/vendor/ruby-signature/stdlib/builtin/comparable.rbs +116 -0
  210. data/vendor/ruby-signature/stdlib/builtin/complex.rbs +400 -0
  211. data/vendor/ruby-signature/stdlib/builtin/constants.rbs +37 -0
  212. data/vendor/ruby-signature/stdlib/builtin/data.rbs +5 -0
  213. data/vendor/ruby-signature/stdlib/builtin/deprecated.rbs +2 -0
  214. data/vendor/ruby-signature/stdlib/builtin/dir.rbs +419 -0
  215. data/vendor/ruby-signature/stdlib/builtin/encoding.rbs +606 -0
  216. data/vendor/ruby-signature/stdlib/builtin/enumerable.rbs +404 -0
  217. data/vendor/ruby-signature/stdlib/builtin/enumerator.rbs +260 -0
  218. data/vendor/ruby-signature/stdlib/builtin/errno.rbs +781 -0
  219. data/vendor/ruby-signature/stdlib/builtin/errors.rbs +582 -0
  220. data/vendor/ruby-signature/stdlib/builtin/exception.rbs +193 -0
  221. data/vendor/ruby-signature/stdlib/builtin/false_class.rbs +40 -0
  222. data/vendor/ruby-signature/stdlib/builtin/fiber.rbs +68 -0
  223. data/vendor/ruby-signature/stdlib/builtin/fiber_error.rbs +12 -0
  224. data/vendor/ruby-signature/stdlib/builtin/file.rbs +476 -0
  225. data/vendor/ruby-signature/stdlib/builtin/file_test.rbs +59 -0
  226. data/vendor/ruby-signature/stdlib/builtin/float.rbs +696 -0
  227. data/vendor/ruby-signature/stdlib/builtin/gc.rbs +121 -0
  228. data/vendor/ruby-signature/stdlib/builtin/hash.rbs +1029 -0
  229. data/vendor/ruby-signature/stdlib/builtin/integer.rbs +710 -0
  230. data/vendor/ruby-signature/stdlib/builtin/io.rbs +683 -0
  231. data/vendor/ruby-signature/stdlib/builtin/kernel.rbs +574 -0
  232. data/vendor/ruby-signature/stdlib/builtin/marshal.rbs +135 -0
  233. data/vendor/ruby-signature/stdlib/builtin/match_data.rbs +141 -0
  234. data/vendor/ruby-signature/stdlib/builtin/math.rbs +66 -0
  235. data/vendor/ruby-signature/stdlib/builtin/method.rbs +182 -0
  236. data/vendor/ruby-signature/stdlib/builtin/module.rbs +248 -0
  237. data/vendor/ruby-signature/stdlib/builtin/nil_class.rbs +82 -0
  238. data/vendor/ruby-signature/stdlib/builtin/numeric.rbs +409 -0
  239. data/vendor/ruby-signature/stdlib/builtin/object.rbs +824 -0
  240. data/vendor/ruby-signature/stdlib/builtin/proc.rbs +426 -0
  241. data/vendor/ruby-signature/stdlib/builtin/process.rbs +354 -0
  242. data/vendor/ruby-signature/stdlib/builtin/random.rbs +93 -0
  243. data/vendor/ruby-signature/stdlib/builtin/range.rbs +226 -0
  244. data/vendor/ruby-signature/stdlib/builtin/rational.rbs +424 -0
  245. data/vendor/ruby-signature/stdlib/builtin/rb_config.rbs +10 -0
  246. data/vendor/ruby-signature/stdlib/builtin/regexp.rbs +131 -0
  247. data/vendor/ruby-signature/stdlib/builtin/ruby_vm.rbs +14 -0
  248. data/vendor/ruby-signature/stdlib/builtin/signal.rbs +55 -0
  249. data/vendor/ruby-signature/stdlib/builtin/string.rbs +770 -0
  250. data/vendor/ruby-signature/stdlib/builtin/string_io.rbs +13 -0
  251. data/vendor/ruby-signature/stdlib/builtin/struct.rbs +40 -0
  252. data/vendor/ruby-signature/stdlib/builtin/symbol.rbs +230 -0
  253. data/vendor/ruby-signature/stdlib/builtin/thread.rbs +1112 -0
  254. data/vendor/ruby-signature/stdlib/builtin/thread_group.rbs +23 -0
  255. data/vendor/ruby-signature/stdlib/builtin/time.rbs +739 -0
  256. data/vendor/ruby-signature/stdlib/builtin/trace_point.rbs +91 -0
  257. data/vendor/ruby-signature/stdlib/builtin/true_class.rbs +46 -0
  258. data/vendor/ruby-signature/stdlib/builtin/unbound_method.rbs +159 -0
  259. data/vendor/ruby-signature/stdlib/builtin/warning.rbs +17 -0
  260. data/vendor/ruby-signature/stdlib/erb/erb.rbs +18 -0
  261. data/vendor/ruby-signature/stdlib/find/find.rbs +44 -0
  262. data/vendor/ruby-signature/stdlib/pathname/pathname.rbs +21 -0
  263. data/vendor/ruby-signature/stdlib/prime/integer-extension.rbs +23 -0
  264. data/vendor/ruby-signature/stdlib/prime/prime.rbs +188 -0
  265. data/vendor/ruby-signature/stdlib/securerandom/securerandom.rbs +9 -0
  266. data/vendor/ruby-signature/stdlib/set/set.rbs +77 -0
  267. data/vendor/ruby-signature/stdlib/tmpdir/tmpdir.rbs +53 -0
  268. metadata +244 -54
  269. data/.travis.yml +0 -7
  270. data/lib/steep/ast/signature/alias.rb +0 -19
  271. data/lib/steep/ast/signature/class.rb +0 -33
  272. data/lib/steep/ast/signature/const.rb +0 -17
  273. data/lib/steep/ast/signature/env.rb +0 -138
  274. data/lib/steep/ast/signature/extension.rb +0 -21
  275. data/lib/steep/ast/signature/gvar.rb +0 -17
  276. data/lib/steep/ast/signature/interface.rb +0 -31
  277. data/lib/steep/ast/signature/members.rb +0 -115
  278. data/lib/steep/ast/signature/module.rb +0 -21
  279. data/lib/steep/drivers/print_interface.rb +0 -94
  280. data/lib/steep/drivers/scaffold.rb +0 -321
  281. data/lib/steep/drivers/utils/each_signature.rb +0 -31
  282. data/lib/steep/interface/abstract.rb +0 -68
  283. data/lib/steep/interface/builder.rb +0 -637
  284. data/lib/steep/interface/instantiated.rb +0 -163
  285. data/lib/steep/interface/ivar_chain.rb +0 -26
  286. data/lib/steep/parser.y +0 -1278
  287. data/lib/steep/project/listener.rb +0 -53
  288. data/smoke/class/a.rbi +0 -24
  289. data/smoke/class/d.rb +0 -9
  290. data/smoke/class/e.rb +0 -12
  291. data/smoke/class/i.rbi +0 -9
  292. data/smoke/hash/e.rbi +0 -3
  293. data/smoke/hello/hello.rbi +0 -7
  294. data/smoke/implements/a.rbi +0 -6
  295. data/smoke/initialize/a.rbi +0 -3
  296. data/smoke/module/a.rbi +0 -16
  297. data/smoke/self/a.rbi +0 -4
  298. data/smoke/super/a.rbi +0 -10
  299. data/stdlib/builtin.rbi +0 -787
@@ -0,0 +1,91 @@
1
+ class TracePoint < Object
2
+ def initialize: (*Symbol events) { (TracePoint tp) -> void } -> void
3
+
4
+ # Returns internal information of
5
+ # [TracePoint](TracePoint.downloaded.ruby_doc).
6
+ #
7
+ # The contents of the returned value are implementation specific. It may
8
+ # be changed in future.
9
+ #
10
+ # This method is only for debugging
11
+ # [TracePoint](TracePoint.downloaded.ruby_doc) itself.
12
+ def self.stat: () -> untyped
13
+
14
+ def self.trace: (*Symbol events) { (TracePoint tp) -> void } -> TracePoint
15
+
16
+ # Return the generated binding object from event
17
+ def binding: () -> Binding
18
+
19
+ # Return the called name of the method being called
20
+ def callee_id: () -> Symbol
21
+
22
+ def `defined_class`: () -> Module
23
+
24
+ # Deactivates the trace
25
+ #
26
+ # Return true if trace was enabled. Return false if trace was disabled.
27
+ #
28
+ # ```ruby
29
+ # trace.enabled? #=> true
30
+ # trace.disable #=> true (previous status)
31
+ # trace.enabled? #=> false
32
+ # trace.disable #=> false
33
+ # ```
34
+ #
35
+ # If a block is given, the trace will only be disable within the scope of
36
+ # the block.
37
+ #
38
+ # ```ruby
39
+ # trace.enabled?
40
+ # #=> true
41
+ #
42
+ # trace.disable do
43
+ # trace.enabled?
44
+ # # only disabled for this block
45
+ # end
46
+ #
47
+ # trace.enabled?
48
+ # #=> true
49
+ # ```
50
+ #
51
+ # Note: You cannot access event hooks within the block.
52
+ #
53
+ # ```ruby
54
+ # trace.disable { p tp.lineno }
55
+ # #=> RuntimeError: access from outside
56
+ # ```
57
+ def disable: () -> bool
58
+ | () { () -> void } -> void
59
+
60
+ def enable: () -> bool
61
+ | () { () -> void } -> void
62
+
63
+ # The current status of the trace
64
+ def enabled?: () -> bool
65
+
66
+ def inspect: () -> String
67
+
68
+ # Line number of the event
69
+ def lineno: () -> Integer
70
+
71
+ # Return the name at the definition of the method being called
72
+ def method_id: () -> Symbol
73
+
74
+ # Path of the file being run
75
+ def path: () -> String
76
+
77
+ # Value from exception raised on the `:raise` event
78
+ def raised_exception: () -> untyped
79
+
80
+ # Return value from `:return`, `c_return`, and `b_return` event
81
+ def return_value: () -> untyped
82
+
83
+ # Return the trace object during event
84
+ #
85
+ # Same as [\#binding](TracePoint.downloaded.ruby_doc#method-i-binding):
86
+ #
87
+ # ```ruby
88
+ # trace.binding.eval('self')
89
+ # ```
90
+ def `self`: () -> Binding
91
+ end
@@ -0,0 +1,46 @@
1
+ # The global value `true` is the only instance of class TrueClass and represents
2
+ # a logically true value in boolean expressions. The class provides operators
3
+ # allowing `true` to be used in logical expressions.
4
+ #
5
+ class TrueClass
6
+ public
7
+
8
+ def !: () -> bool
9
+
10
+ # And---Returns `false` if *obj* is `nil` or `false`, `true` otherwise.
11
+ #
12
+ def &: (nil) -> false
13
+ | (false) -> false
14
+ | (untyped obj) -> bool
15
+
16
+ # Case Equality -- For class Object, effectively the same as calling `#==`, but
17
+ # typically overridden by descendants to provide meaningful semantics in `case`
18
+ # statements.
19
+ #
20
+ def ===: (true) -> true
21
+ | (untyped obj) -> bool
22
+
23
+ # Exclusive Or---Returns `true` if *obj* is `nil` or `false`, `false` otherwise.
24
+ #
25
+ def ^: (nil) -> true
26
+ | (false) -> true
27
+ | (untyped obj) -> bool
28
+
29
+ alias inspect to_s
30
+
31
+ # The string representation of `true` is "true".
32
+ #
33
+ def to_s: () -> "true"
34
+
35
+ # Or---Returns `true`. As *obj* is an argument to a method call, it is always
36
+ # evaluated; there is no short-circuit evaluation in this case.
37
+ #
38
+ # true | puts("or")
39
+ # true || puts("logical or")
40
+ #
41
+ # *produces:*
42
+ #
43
+ # or
44
+ #
45
+ def |: (bool obj) -> bool
46
+ end
@@ -0,0 +1,159 @@
1
+ # Ruby supports two forms of objectified methods.
2
+ # [Class](https://ruby-doc.org/core-2.6.3/Class.html) `Method` is used to
3
+ # represent methods that are associated with a particular object: these
4
+ # method objects are bound to that object. Bound method objects for an
5
+ # object can be created using `Object#method` .
6
+ #
7
+ # Ruby also supports unbound methods; methods objects that are not
8
+ # associated with a particular object. These can be created either by
9
+ # calling `Module#instance_method` or by calling `unbind` on a bound
10
+ # method object. The result of both of these is an `UnboundMethod` object.
11
+ #
12
+ # Unbound methods can only be called after they are bound to an object.
13
+ # That object must be a kind\_of? the method's original class.
14
+ #
15
+ # ```ruby
16
+ # class Square
17
+ # def area
18
+ # @side * @side
19
+ # end
20
+ # def initialize(side)
21
+ # @side = side
22
+ # end
23
+ # end
24
+ #
25
+ # area_un = Square.instance_method(:area)
26
+ #
27
+ # s = Square.new(12)
28
+ # area = area_un.bind(s)
29
+ # area.call #=> 144
30
+ # ```
31
+ #
32
+ # Unbound methods are a reference to the method at the time it was
33
+ # objectified: subsequent changes to the underlying class will not affect
34
+ # the unbound method.
35
+ #
36
+ # ```ruby
37
+ # class Test
38
+ # def test
39
+ # :original
40
+ # end
41
+ # end
42
+ # um = Test.instance_method(:test)
43
+ # class Test
44
+ # def test
45
+ # :modified
46
+ # end
47
+ # end
48
+ # t = Test.new
49
+ # t.test #=> :modified
50
+ # um.bind(t).call #=> :original
51
+ # ```
52
+ class UnboundMethod
53
+ # Returns an indication of the number of arguments accepted by a method.
54
+ # Returns a nonnegative integer for methods that take a fixed number of
55
+ # arguments. For Ruby methods that take a variable number of arguments,
56
+ # returns -n-1, where n is the number of required arguments. Keyword
57
+ # arguments will be considered as a single additional argument, that
58
+ # argument being mandatory if any keyword argument is mandatory. For
59
+ # methods written in C, returns -1 if the call takes a variable number of
60
+ # arguments.
61
+ #
62
+ # class C
63
+ # def one; end
64
+ # def two(a); end
65
+ # def three(*a); end
66
+ # def four(a, b); end
67
+ # def five(a, b, *c); end
68
+ # def six(a, b, *c, &d); end
69
+ # def seven(a, b, x:0); end
70
+ # def eight(x:, y:); end
71
+ # def nine(x:, y:, **z); end
72
+ # def ten(*a, x:, y:); end
73
+ # end
74
+ # c = C.new
75
+ # c.method(:one).arity #=> 0
76
+ # c.method(:two).arity #=> 1
77
+ # c.method(:three).arity #=> -1
78
+ # c.method(:four).arity #=> 2
79
+ # c.method(:five).arity #=> -3
80
+ # c.method(:six).arity #=> -3
81
+ # c.method(:seven).arity #=> -3
82
+ # c.method(:eight).arity #=> 1
83
+ # c.method(:nine).arity #=> 1
84
+ # c.method(:ten).arity #=> -2
85
+ #
86
+ # "cat".method(:size).arity #=> 0
87
+ # "cat".method(:replace).arity #=> 1
88
+ # "cat".method(:squeeze).arity #=> -1
89
+ # "cat".method(:count).arity #=> -1
90
+ def arity: () -> Integer
91
+
92
+ # Bind *umeth* to *obj* . If `Klass` was the class from which *umeth* was
93
+ # obtained, `obj.kind_of?(Klass)` must be true.
94
+ #
95
+ # ```ruby
96
+ # class A
97
+ # def test
98
+ # puts "In test, class = #{self.class}"
99
+ # end
100
+ # end
101
+ # class B < A
102
+ # end
103
+ # class C < B
104
+ # end
105
+ #
106
+ # um = B.instance_method(:test)
107
+ # bm = um.bind(C.new)
108
+ # bm.call
109
+ # bm = um.bind(B.new)
110
+ # bm.call
111
+ # bm = um.bind(A.new)
112
+ # bm.call
113
+ # ```
114
+ #
115
+ # *produces:*
116
+ #
117
+ # In test, class = C
118
+ # In test, class = B
119
+ # prog.rb:16:in `bind': bind argument must be an instance of B (TypeError)
120
+ # from prog.rb:16
121
+ def bind: (untyped obj) -> Method
122
+
123
+ # Returns the name of the method.
124
+ def name: () -> Symbol
125
+
126
+ # Returns the class or module that defines the method. See also receiver.
127
+ #
128
+ # ```ruby
129
+ # (1..3).method(:map).owner #=> Enumerable
130
+ # ```
131
+ def owner: () -> Module
132
+
133
+ # Returns the parameter information of this method.
134
+ #
135
+ # ```ruby
136
+ # def foo(bar); end
137
+ # method(:foo).parameters #=> [[:req, :bar]]
138
+ #
139
+ # def foo(bar, baz, bat, &blk); end
140
+ # method(:foo).parameters #=> [[:req, :bar], [:req, :baz], [:req, :bat], [:block, :blk]]
141
+ #
142
+ # def foo(bar, *args); end
143
+ # method(:foo).parameters #=> [[:req, :bar], [:rest, :args]]
144
+ #
145
+ # def foo(bar, baz, *args, &blk); end
146
+ # method(:foo).parameters #=> [[:req, :bar], [:req, :baz], [:rest, :args], [:block, :blk]]
147
+ # ```
148
+ def parameters: () -> ::Array[[ Symbol, Symbol ]]
149
+ | () -> ::Array[[ Symbol ]]
150
+
151
+ # Returns the Ruby source filename and line number containing this method
152
+ # or nil if this method was not defined in Ruby (i.e. native).
153
+ def source_location: () -> [ String, Integer ]?
154
+
155
+ # Returns a [Method](https://ruby-doc.org/core-2.6.3/Method.html) of
156
+ # superclass which would be called when super is used or nil if there is
157
+ # no method on superclass.
158
+ def super_method: () -> UnboundMethod?
159
+ end
@@ -0,0 +1,17 @@
1
+ # The [Warning](Warning) module contains a single
2
+ # method named [warn](Warning#method-i-warn), and the
3
+ # module extends itself, making `Warning.warn` available.
4
+ # [\#warn](Warning#method-i-warn) is called for all
5
+ # warnings issued by Ruby. By default, warnings are printed to $stderr.
6
+ #
7
+ # By overriding [\#warn](Warning#method-i-warn), you
8
+ # can change how warnings are handled by Ruby, either filtering some
9
+ # warnings, and/or outputting warnings somewhere other than $stderr. When
10
+ # [\#warn](Warning#method-i-warn) is overridden, super
11
+ # can be called to get the default behavior of printing the warning to
12
+ # $stderr.
13
+ module Warning
14
+ # Writes warning message msg to $stderr, followed by a newline if the message does not end in a newline.
15
+ # This method is called by Ruby for all emitted warnings.
16
+ def warn: (String) -> nil
17
+ end
@@ -0,0 +1,18 @@
1
+ class ERB
2
+ def self.version: () -> String
3
+
4
+ def initialize: (String, ?trim_mode: Integer | String | NilClass, ?eoutvar: String) -> untyped
5
+ def src: () -> String
6
+ def encoding: () -> Encoding
7
+ def filename: () -> (String | NilClass)
8
+ def filename=: (String | NilClass) -> untyped
9
+ def lineno: () -> Integer
10
+ def lineno=: (Integer) -> untyped
11
+ def location=: (Array[String | Integer]) -> untyped
12
+ def run: (?Binding) -> untyped
13
+ def result: (?Binding) -> String
14
+ def result_with_hash: (Hash[untyped, untyped]) -> String
15
+ def def_method: (Module, String, ?String) -> untyped
16
+ def def_module: (?String) -> Module
17
+ def def_class: (?Class, ?String) -> Class
18
+ end
@@ -0,0 +1,44 @@
1
+ # The `Find` module supports the top-down traversal of a set of file paths.
2
+ #
3
+ # For example, to total the size of all files under your home directory,
4
+ # ignoring anything in a "dot" directory (e.g. $HOME/.ssh):
5
+ #
6
+ # require 'find'
7
+ #
8
+ # total_size = 0
9
+ #
10
+ # Find.find(ENV["HOME"]) do |path|
11
+ # if FileTest.directory?(path)
12
+ # if File.basename(path).start_with?('.')
13
+ # Find.prune # Don't look any further into this directory.
14
+ # else
15
+ # next
16
+ # end
17
+ # else
18
+ # total_size += FileTest.size(path)
19
+ # end
20
+ # end
21
+ #
22
+ module Find
23
+ # Calls the associated block with the name of every file and directory listed as
24
+ # arguments, then recursively on their subdirectories, and so on.
25
+ #
26
+ # Returns an enumerator if no block is given.
27
+ #
28
+ # See the `Find` module documentation for an example.
29
+ #
30
+ def self?.find: (*String | _ToPath paths, ?ignore_error: bool) -> Enumerator[String, nil]
31
+ | (*String | _ToPath paths, ?ignore_error: bool) { (String arg0) -> void } -> nil
32
+
33
+ # Skips the current file or directory, restarting the loop with the next entry.
34
+ # If the current file is a directory, that directory will not be recursively
35
+ # entered. Meaningful only within the block associated with Find::find.
36
+ #
37
+ # See the `Find` module documentation for an example.
38
+ #
39
+ def self?.prune: () -> void
40
+ end
41
+
42
+ interface _ToPath
43
+ def to_path: () -> String
44
+ end
@@ -0,0 +1,21 @@
1
+ class Pathname
2
+ def self.glob: (Pathname, ?Integer) -> Array[Pathname]
3
+ def `+`: (Pathname) -> Pathname
4
+ | (String) -> Pathname
5
+ def file?: -> bool
6
+ def relative_path_from: (Pathname) -> Pathname
7
+ def open: [X] (?String) { (IO) -> X } -> X
8
+ def join: (String) -> self
9
+ def realpath: -> self
10
+ def directory?: -> bool
11
+ def relative?: -> bool
12
+ def cleanpath: -> self
13
+ def read: -> String
14
+ def mkpath: -> void
15
+ def write: (String) -> void
16
+ def sub_ext: (String) -> self
17
+ end
18
+
19
+ extension Kernel (Pathname)
20
+ def Pathname: (String) -> Pathname
21
+ end
@@ -0,0 +1,23 @@
1
+ extension Integer (Prime)
2
+ # Iterates the given block over all prime numbers.
3
+ #
4
+ # See Prime#each for more details.
5
+ #
6
+ def self.each_prime: (Integer) { (Integer) -> void } -> void
7
+
8
+ # Re-composes a prime factorization and returns the product.
9
+ #
10
+ # See Prime#int_from_prime_division for more details.
11
+ #
12
+ def self.from_prime_division: (Array[[ String ]]) -> Integer
13
+
14
+ # Returns the factorization of `self`.
15
+ #
16
+ # See Prime#prime_division for more details.
17
+ #
18
+ def prime_division: (?Prime::PseudoPrimeGenerator) -> Array[[ Integer, Integer ]]
19
+
20
+ # Returns true if `self` is a prime number, else returns false.
21
+ #
22
+ def prime?: () -> bool
23
+ end
@@ -0,0 +1,188 @@
1
+ # The set of all prime numbers.
2
+ #
3
+ # ## Example
4
+ #
5
+ # Prime.each(100) do |prime|
6
+ # p prime #=> 2, 3, 5, 7, 11, ...., 97
7
+ # end
8
+ #
9
+ # Prime is Enumerable:
10
+ #
11
+ # Prime.first 5 # => [2, 3, 5, 7, 11]
12
+ #
13
+ # ## Retrieving the instance
14
+ #
15
+ # For convenience, each instance method of `Prime`.instance can be accessed as a
16
+ # class method of `Prime`.
17
+ #
18
+ # e.g.
19
+ # Prime.instance.prime?(2) #=> true
20
+ # Prime.prime?(2) #=> true
21
+ #
22
+ # ## Generators
23
+ #
24
+ # A "generator" provides an implementation of enumerating pseudo-prime numbers
25
+ # and it remembers the position of enumeration and upper bound. Furthermore, it
26
+ # is an external iterator of prime enumeration which is compatible with an
27
+ # Enumerator.
28
+ #
29
+ # `Prime`::`PseudoPrimeGenerator` is the base class for generators. There are
30
+ # few implementations of generator.
31
+ #
32
+ # `Prime`::`EratosthenesGenerator`
33
+ # : Uses eratosthenes' sieve.
34
+ # `Prime`::`TrialDivisionGenerator`
35
+ # : Uses the trial division method.
36
+ # `Prime`::`Generator23`
37
+ # : Generates all positive integers which are not divisible by either 2 or 3.
38
+ # This sequence is very bad as a pseudo-prime sequence. But this is faster
39
+ # and uses much less memory than the other generators. So, it is suitable
40
+ # for factorizing an integer which is not large but has many prime factors.
41
+ # e.g. for Prime#prime? .
42
+ #
43
+ #
44
+ class Prime
45
+ # Iterates the given block over all prime numbers.
46
+ #
47
+ # ## Parameters
48
+ #
49
+ # `ubound`
50
+ # : Optional. An arbitrary positive number. The upper bound of enumeration.
51
+ # The method enumerates prime numbers infinitely if `ubound` is nil.
52
+ # `generator`
53
+ # : Optional. An implementation of pseudo-prime generator.
54
+ #
55
+ #
56
+ # ## Return value
57
+ #
58
+ # An evaluated value of the given block at the last time. Or an enumerator which
59
+ # is compatible to an `Enumerator` if no block given.
60
+ #
61
+ # ## Description
62
+ #
63
+ # Calls `block` once for each prime number, passing the prime as a parameter.
64
+ #
65
+ # `ubound`
66
+ # : Upper bound of prime numbers. The iterator stops after it yields all prime
67
+ # numbers p <= `ubound`.
68
+ #
69
+ def self?.each: (?Integer? ubound, ?PseudoPrimeGenerator generator) { (Integer) -> void } -> void
70
+ | (?Integer? ubound, ?PseudoPrimeGenerator generator) -> PseudoPrimeGenerator
71
+
72
+ # Re-composes a prime factorization and returns the product.
73
+ #
74
+ # ## Parameters
75
+ # `pd`
76
+ # : Array of pairs of integers. The each internal pair consists of a prime
77
+ # number -- a prime factor -- and a natural number -- an exponent.
78
+ #
79
+ #
80
+ # ## Example
81
+ # For `[[p_1, e_1], [p_2, e_2], ...., [p_n, e_n]]`, it returns:
82
+ #
83
+ # p_1**e_1 * p_2**e_2 * .... * p_n**e_n.
84
+ #
85
+ # Prime.int_from_prime_division([[2,2], [3,1]]) #=> 12
86
+ #
87
+ def self?.int_from_prime_division: (Array[[ Integer, Integer ]]) -> Integer
88
+
89
+ # Returns true if `value` is a prime number, else returns false.
90
+ #
91
+ # ## Parameters
92
+ #
93
+ # `value`
94
+ # : an arbitrary integer to be checked.
95
+ # `generator`
96
+ # : optional. A pseudo-prime generator.
97
+ #
98
+ def self?.prime?: (Integer value, ?PseudoPrimeGenerator generator) -> bool
99
+
100
+ # Returns the factorization of `value`.
101
+ #
102
+ # ## Parameters
103
+ # `value`
104
+ # : An arbitrary integer.
105
+ # `generator`
106
+ # : Optional. A pseudo-prime generator. `generator`.succ must return the next
107
+ # pseudo-prime number in the ascending order. It must generate all prime
108
+ # numbers, but may also generate non prime numbers too.
109
+ #
110
+ #
111
+ # ### Exceptions
112
+ # `ZeroDivisionError`
113
+ # : when `value` is zero.
114
+ #
115
+ #
116
+ # ## Example
117
+ # For an arbitrary integer:
118
+ #
119
+ # n = p_1**e_1 * p_2**e_2 * .... * p_n**e_n,
120
+ #
121
+ # prime_division(n) returns:
122
+ #
123
+ # [[p_1, e_1], [p_2, e_2], ...., [p_n, e_n]].
124
+ #
125
+ # Prime.prime_division(12) #=> [[2,2], [3,1]]
126
+ #
127
+ def self?.prime_division: (Integer, ?PseudoPrimeGenerator generator) -> Array[[ Integer, Integer ]]
128
+
129
+ # Returns the singleton instance.
130
+ #
131
+ def self.instance: () -> Prime
132
+ end
133
+
134
+ # An abstract class for enumerating pseudo-prime numbers.
135
+ #
136
+ # Concrete subclasses should override succ, next, rewind.
137
+ #
138
+ class Prime::PseudoPrimeGenerator
139
+ def initialize: (?Integer?) -> void
140
+
141
+ include Enumerable[Integer, void]
142
+
143
+ attr_accessor upper_bound (): Integer?
144
+
145
+ # Iterates the given block for each prime number.
146
+ #
147
+ def each: () { (Integer) -> void } -> void
148
+
149
+ # alias of `succ`.
150
+ #
151
+ def next: () -> Integer
152
+
153
+ # Rewinds the internal position for enumeration.
154
+ #
155
+ # See `Enumerator`#rewind.
156
+ #
157
+ def rewind: () -> void
158
+
159
+ def size: () -> Float
160
+
161
+ # returns the next pseudo-prime number, and move the internal position forward.
162
+ #
163
+ # `PseudoPrimeGenerator`#succ raises `NotImplementedError`.
164
+ #
165
+ def succ: () -> Integer
166
+ end
167
+
168
+ # An implementation of `PseudoPrimeGenerator`.
169
+ #
170
+ # Uses `EratosthenesSieve`.
171
+ #
172
+ class Prime::EratosthenesGenerator < PseudoPrimeGenerator
173
+ end
174
+
175
+ # An implementation of `PseudoPrimeGenerator` which uses a prime table generated
176
+ # by trial division.
177
+ #
178
+ class Prime::TrialDivisionGenerator < PseudoPrimeGenerator
179
+ end
180
+
181
+ # Generates all integers which are greater than 2 and are not divisible by
182
+ # either 2 or 3.
183
+ #
184
+ # This is a pseudo-prime generator, suitable on checking primality of an integer
185
+ # by brute force method.
186
+ #
187
+ class Prime::Generator23 < PseudoPrimeGenerator
188
+ end