rbs 3.3.2 → 3.4.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/comments.yml +2 -5
  3. data/.github/workflows/ruby.yml +7 -8
  4. data/.github/workflows/typecheck.yml +37 -0
  5. data/CHANGELOG.md +50 -0
  6. data/Gemfile +1 -1
  7. data/Gemfile.lock +11 -11
  8. data/Steepfile +2 -2
  9. data/core/array.rbs +19 -49
  10. data/core/basic_object.rbs +2 -2
  11. data/core/comparable.rbs +17 -8
  12. data/core/complex.rbs +82 -43
  13. data/core/data.rbs +2 -4
  14. data/core/dir.rbs +635 -295
  15. data/core/enumerable.rbs +11 -18
  16. data/core/enumerator.rbs +37 -31
  17. data/core/errors.rbs +4 -0
  18. data/core/false_class.rbs +34 -15
  19. data/core/fiber.rbs +23 -0
  20. data/core/file.rbs +329 -120
  21. data/core/float.rbs +17 -32
  22. data/core/gc.rbs +17 -11
  23. data/core/hash.rbs +22 -44
  24. data/core/integer.rbs +82 -113
  25. data/core/io/buffer.rbs +90 -47
  26. data/core/io.rbs +39 -116
  27. data/core/kernel.rbs +442 -489
  28. data/core/match_data.rbs +55 -56
  29. data/core/module.rbs +45 -1
  30. data/core/nil_class.rbs +98 -35
  31. data/core/numeric.rbs +22 -32
  32. data/core/object_space/weak_key_map.rbs +102 -0
  33. data/core/process.rbs +1242 -655
  34. data/core/ractor.rbs +139 -120
  35. data/core/range.rbs +100 -4
  36. data/core/rational.rbs +0 -4
  37. data/core/rbs/unnamed/argf.rbs +16 -8
  38. data/core/rbs/unnamed/env_class.rbs +0 -24
  39. data/core/refinement.rbs +8 -0
  40. data/core/regexp.rbs +1149 -598
  41. data/core/ruby_vm.rbs +126 -12
  42. data/core/rubygems/platform.rbs +9 -0
  43. data/core/rubygems/rubygems.rbs +1 -1
  44. data/core/rubygems/version.rbs +5 -1
  45. data/core/set.rbs +20 -22
  46. data/core/signal.rbs +4 -4
  47. data/core/string.rbs +283 -230
  48. data/core/string_io.rbs +2 -14
  49. data/core/struct.rbs +404 -24
  50. data/core/symbol.rbs +1 -19
  51. data/core/thread.rbs +29 -12
  52. data/core/time.rbs +227 -104
  53. data/core/trace_point.rbs +2 -5
  54. data/core/true_class.rbs +54 -21
  55. data/core/warning.rbs +14 -11
  56. data/docs/data_and_struct.md +29 -0
  57. data/docs/syntax.md +3 -5
  58. data/docs/tools.md +1 -0
  59. data/ext/rbs_extension/lexer.c +643 -559
  60. data/ext/rbs_extension/lexer.re +5 -1
  61. data/ext/rbs_extension/parser.c +12 -3
  62. data/ext/rbs_extension/unescape.c +7 -47
  63. data/lib/rbs/cli/diff.rb +4 -1
  64. data/lib/rbs/cli/validate.rb +280 -0
  65. data/lib/rbs/cli.rb +2 -194
  66. data/lib/rbs/collection/config.rb +5 -6
  67. data/lib/rbs/collection/sources/git.rb +1 -1
  68. data/lib/rbs/collection.rb +1 -0
  69. data/lib/rbs/diff.rb +7 -4
  70. data/lib/rbs/errors.rb +11 -0
  71. data/lib/rbs/test/errors.rb +4 -1
  72. data/lib/rbs/test/guaranteed.rb +2 -3
  73. data/lib/rbs/test/type_check.rb +15 -10
  74. data/lib/rbs/test.rb +3 -3
  75. data/lib/rbs/types.rb +29 -0
  76. data/lib/rbs/unit_test/convertibles.rb +176 -0
  77. data/lib/rbs/unit_test/spy.rb +136 -0
  78. data/lib/rbs/unit_test/type_assertions.rb +341 -0
  79. data/lib/rbs/unit_test/with_aliases.rb +143 -0
  80. data/lib/rbs/unit_test.rb +6 -0
  81. data/lib/rbs/version.rb +1 -1
  82. data/sig/cli/validate.rbs +43 -0
  83. data/sig/diff.rbs +3 -1
  84. data/sig/errors.rbs +8 -0
  85. data/sig/rbs.rbs +1 -1
  86. data/sig/test/errors.rbs +52 -0
  87. data/sig/test/guranteed.rbs +9 -0
  88. data/sig/test/type_check.rbs +19 -0
  89. data/sig/test.rbs +82 -0
  90. data/sig/types.rbs +6 -1
  91. data/sig/unit_test/convertibles.rbs +154 -0
  92. data/sig/unit_test/spy.rbs +28 -0
  93. data/sig/unit_test/type_assertions.rbs +194 -0
  94. data/sig/unit_test/with_aliases.rbs +136 -0
  95. data/stdlib/base64/0/base64.rbs +307 -45
  96. data/stdlib/bigdecimal/0/big_decimal.rbs +35 -15
  97. data/stdlib/coverage/0/coverage.rbs +2 -2
  98. data/stdlib/csv/0/csv.rbs +25 -55
  99. data/stdlib/date/0/date.rbs +1 -43
  100. data/stdlib/date/0/date_time.rbs +1 -13
  101. data/stdlib/delegate/0/delegator.rbs +186 -0
  102. data/stdlib/delegate/0/kernel.rbs +47 -0
  103. data/stdlib/delegate/0/simple_delegator.rbs +98 -0
  104. data/stdlib/did_you_mean/0/did_you_mean.rbs +1 -1
  105. data/stdlib/erb/0/erb.rbs +2 -2
  106. data/stdlib/fileutils/0/fileutils.rbs +0 -19
  107. data/stdlib/io-console/0/io-console.rbs +12 -1
  108. data/stdlib/ipaddr/0/ipaddr.rbs +2 -1
  109. data/stdlib/json/0/json.rbs +320 -81
  110. data/stdlib/logger/0/logger.rbs +9 -5
  111. data/stdlib/monitor/0/monitor.rbs +78 -0
  112. data/stdlib/net-http/0/net-http.rbs +1880 -543
  113. data/stdlib/objspace/0/objspace.rbs +19 -13
  114. data/stdlib/openssl/0/openssl.rbs +508 -127
  115. data/stdlib/optparse/0/optparse.rbs +25 -11
  116. data/stdlib/pathname/0/pathname.rbs +1 -1
  117. data/stdlib/pp/0/pp.rbs +2 -5
  118. data/stdlib/prettyprint/0/prettyprint.rbs +2 -2
  119. data/stdlib/pstore/0/pstore.rbs +2 -4
  120. data/stdlib/rdoc/0/comment.rbs +1 -2
  121. data/stdlib/resolv/0/resolv.rbs +4 -2
  122. data/stdlib/socket/0/socket.rbs +2 -2
  123. data/stdlib/socket/0/unix_socket.rbs +2 -2
  124. data/stdlib/strscan/0/string_scanner.rbs +3 -2
  125. data/stdlib/tempfile/0/tempfile.rbs +1 -1
  126. data/stdlib/uri/0/common.rbs +245 -123
  127. metadata +23 -4
  128. data/lib/rbs/test/spy.rb +0 -6
data/core/trace_point.rbs CHANGED
@@ -1,6 +1,4 @@
1
1
  # <!-- rdoc-file=trace_point.rb -->
2
- # Document-class: TracePoint
3
- #
4
2
  # A class that provides the functionality of Kernel#set_trace_func in a nice
5
3
  # Object-Oriented API.
6
4
  #
@@ -207,9 +205,8 @@ class TracePoint < Object
207
205
  # -->
208
206
  # Return the generated binding object from event.
209
207
  #
210
- # Note that for `c_call` and `c_return` events, the binding returned is the
211
- # binding of the nearest Ruby method calling the C method, since C methods
212
- # themselves do not have bindings.
208
+ # Note that for `c_call` and `c_return` events, the method will return `nil`,
209
+ # since C methods themselves do not have bindings.
213
210
  #
214
211
  def binding: () -> Binding?
215
212
 
data/core/true_class.rbs CHANGED
@@ -1,66 +1,99 @@
1
1
  # <!-- rdoc-file=object.c -->
2
- # The global value `true` is the only instance of class TrueClass and represents
3
- # a logically true value in boolean expressions. The class provides operators
4
- # allowing `true` to be used in logical expressions.
2
+ # The class of the singleton object `true`.
3
+ #
4
+ # Several of its methods act as operators:
5
+ #
6
+ # * #&
7
+ # * #|
8
+ # * #===
9
+ # * #^
10
+ #
11
+ #
12
+ # One other method:
13
+ #
14
+ # * #to_s and its alias #inspect.
5
15
  #
6
16
  class TrueClass
7
17
  def !: () -> false
8
18
 
9
19
  # <!--
10
20
  # rdoc-file=object.c
11
- # - true & obj -> true or false
21
+ # - true & object -> true or false
12
22
  # -->
13
- # And---Returns `false` if *obj* is `nil` or `false`, `true` otherwise.
23
+ # Returns `false` if `object` is `false` or `nil`, `true` otherwise:
24
+ #
25
+ # true & Object.new # => true true & false # => false true & nil #
26
+ # => false
14
27
  #
15
28
  def &: (false | nil) -> false
16
29
  | (untyped obj) -> bool
17
30
 
18
31
  # <!--
19
32
  # rdoc-file=object.c
20
- # - obj === other -> true or false
33
+ # - true === other -> true or false
34
+ # - false === other -> true or false
35
+ # - nil === other -> true or false
21
36
  # -->
22
- # Case Equality -- For class Object, effectively the same as calling `#==`, but
23
- # typically overridden by descendants to provide meaningful semantics in `case`
24
- # statements.
37
+ # Returns `true` or `false`.
38
+ #
39
+ # Like Object#==, if `object` is an instance of Object (and not an instance of
40
+ # one of its many subclasses).
41
+ #
42
+ # This method is commonly overridden by those subclasses, to provide meaningful
43
+ # semantics in `case` statements.
25
44
  #
26
45
  def ===: (true) -> true
27
46
  | (untyped obj) -> bool
28
47
 
29
48
  # <!--
30
49
  # rdoc-file=object.c
31
- # - true ^ obj -> !obj
50
+ # - true ^ object -> !object
32
51
  # -->
33
- # Exclusive Or---Returns `true` if *obj* is `nil` or `false`, `false` otherwise.
52
+ # Returns `true` if `object` is `false` or `nil`, `false` otherwise:
53
+ #
54
+ # true ^ Object.new # => false
55
+ # true ^ false # => true
56
+ # true ^ nil # => true
34
57
  #
35
58
  def ^: (false | nil) -> true
36
59
  | (untyped obj) -> bool
37
60
 
38
61
  # <!-- rdoc-file=object.c -->
39
- # The string representation of `true` is "true".
62
+ # Returns string `'true'`:
63
+ #
64
+ # true.to_s # => "true"
65
+ #
66
+ # TrueClass#inspect is an alias for TrueClass#to_s.
40
67
  #
41
68
  alias inspect to_s
42
69
 
43
70
  # <!--
44
71
  # rdoc-file=object.c
45
- # - true.to_s -> "true"
72
+ # - true.to_s -> 'true'
46
73
  # -->
47
- # The string representation of `true` is "true".
74
+ # Returns string `'true'`:
75
+ #
76
+ # true.to_s # => "true"
77
+ #
78
+ # TrueClass#inspect is an alias for TrueClass#to_s.
48
79
  #
49
80
  def to_s: () -> "true"
50
81
 
51
82
  # <!--
52
83
  # rdoc-file=object.c
53
- # - true | obj -> true
84
+ # - true | object -> true
54
85
  # -->
55
- # Or---Returns `true`. As *obj* is an argument to a method call, it is always
56
- # evaluated; there is no short-circuit evaluation in this case.
86
+ # Returns `true`:
57
87
  #
58
- # true | puts("or")
59
- # true || puts("logical or")
88
+ # true | Object.new # => true
89
+ # true | false # => true
90
+ # true | nil # => true
60
91
  #
61
- # *produces:*
92
+ # Argument `object` is evaluated. This is different from `true` with the
93
+ # short-circuit operator, whose operand is evaluated only if necessary:
62
94
  #
63
- # or
95
+ # true | raise # => Raises RuntimeError.
96
+ # true || raise # => true
64
97
  #
65
98
  def |: (untyped obj) -> true
66
99
  end
data/core/warning.rbs CHANGED
@@ -5,11 +5,11 @@
5
5
  #
6
6
  # Changing the behavior of Warning.warn is useful to customize how warnings are
7
7
  # handled by Ruby, for instance by filtering some warnings, and/or outputting
8
- # warnings somewhere other than $stderr.
8
+ # warnings somewhere other than `$stderr`.
9
9
  #
10
10
  # If you want to change the behavior of Warning.warn you should use
11
- # +Warning.extend(MyNewModuleWithWarnMethod)+ and you can use `super` to get the
12
- # default behavior of printing the warning to $stderr.
11
+ # `Warning.extend(MyNewModuleWithWarnMethod)` and you can use `super` to get the
12
+ # default behavior of printing the warning to `$stderr`.
13
13
  #
14
14
  # Example:
15
15
  # module MyWarningFilter
@@ -26,12 +26,13 @@
26
26
  # You should never redefine Warning#warn (the instance method), as that will
27
27
  # then no longer provide a way to use the default behavior.
28
28
  #
29
- # The `warning` gem provides convenient ways to customize Warning.warn.
29
+ # The [warning](https://rubygems.org/gems/warning) gem provides convenient ways
30
+ # to customize Warning.warn.
30
31
  #
31
32
  module Warning
32
33
  # The types of categories the `Warning` module understands.
33
34
  #
34
- type category = :deprecated | :experimental
35
+ type category = :deprecated | :experimental | :performance
35
36
 
36
37
  # <!--
37
38
  # rdoc-file=error.c
@@ -42,17 +43,19 @@ module Warning
42
43
  #
43
44
  # `:deprecated`
44
45
  # : deprecation warnings
46
+ # * assignment of non-nil value to `$,` and `$;`
47
+ # * keyword arguments
45
48
  #
46
- # * assignment of non-nil value to `$,` and `$;`
47
- # * keyword arguments
48
- # * proc/lambda without block
49
- #
50
- # etc.
49
+ # etc.
51
50
  #
52
51
  # `:experimental`
53
52
  # : experimental features
53
+ # * Pattern matching
54
+ #
54
55
  #
55
- # * Pattern matching
56
+ # `:performance`
57
+ # : performance hints
58
+ # * Shape variation limit
56
59
  #
57
60
  def self.[]: (category) -> bool
58
61
 
@@ -55,3 +55,32 @@ Measure.ancestors #=> [Measure, #<Class:0xOOF>, Data, ...]
55
55
  ```
56
56
 
57
57
  [^1]: [Shannon Skipper](https://github.com/havenwood) told me it in Discord
58
+
59
+ ## Generate prototype for `Data` and `Struct`
60
+
61
+ RBS prototypes for classes using `Data` and `Struct` can be generated by `rbs prototype runtime`.
62
+
63
+ ```rb
64
+ # t.rb
65
+ class Measure < Data.define(:amount, :unit)
66
+ end
67
+ ```
68
+
69
+ ```
70
+ $ bundle exec rbs prototype runtime -R t.rb Measure
71
+ class Measure < ::Data
72
+ def self.new: (untyped amount, untyped unit) -> instance
73
+ | (amount: untyped, unit: untyped) -> instance
74
+
75
+ def self.[]: (untyped amount, untyped unit) -> instance
76
+ | (amount: untyped, unit: untyped) -> instance
77
+
78
+ def self.members: () -> [ :amount, :unit ]
79
+
80
+ def members: () -> [ :amount, :unit ]
81
+
82
+ attr_reader amount: untyped
83
+
84
+ attr_reader unit: untyped
85
+ end
86
+ ```
data/docs/syntax.md CHANGED
@@ -44,7 +44,7 @@ _literal_ ::= _string-literal_
44
44
  | `true`
45
45
  | `false`
46
46
 
47
- _proc_ ::= _parameters?_ _self-type-binding?_ _block?_ `->` _type_
47
+ _proc_ ::= `^` _parameters?_ _self-type-binding?_ _block?_ `->` _type_
48
48
  ```
49
49
 
50
50
  ### Class instance type
@@ -311,8 +311,6 @@ end
311
311
  ```markdown
312
312
  _method-type_ ::= _parameters?_ _block?_ `->` _type_ # Method type
313
313
 
314
- _proc_ ::= `^` _parameters?_ _self-type-binding?_ _block?_ `->` _type_ # Proc type
315
-
316
314
  _parameters?_ ::= (Empty)
317
315
  | _parameters_ (Parameters)
318
316
 
@@ -435,8 +433,8 @@ _visibility-member_ ::= _visibility_
435
433
 
436
434
  _ivar-name_ ::= /@\w+/
437
435
  _cvar-name_ ::= /@@\w+/
438
- _method-name_ ::= ...
439
- | /`[^`]+`/
436
+ _method-name_ ::= _most of the possible ruby method names_
437
+ | /`[^`]+`/ # Quoted method names
440
438
  ```
441
439
 
442
440
  ### Ivar definition
data/docs/tools.md CHANGED
@@ -14,3 +14,4 @@ This documentation describes major tools related to RBS. They are listed alphabe
14
14
  * Sublime Text: [sublime-rbs-plugin](https://github.com/soutaro/sublime-rbs-plugin)
15
15
  * Vim: [rbs.vim](https://github.com/pocke/rbs.vim)
16
16
  * Visual Studio Code: [vscode-rbs-syntax](https://github.com/soutaro/vscode-rbs-syntax)
17
+ * NeoVim: [tree-sitter-rbs](https://github.com/joker1007/tree-sitter-rbs)