rbs 2.5.1 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/comments.yml +1 -1
  3. data/.github/workflows/ruby.yml +3 -3
  4. data/CHANGELOG.md +44 -0
  5. data/Gemfile.lock +5 -5
  6. data/Rakefile +6 -38
  7. data/Steepfile +6 -2
  8. data/core/constants.rbs +1 -1
  9. data/core/env.rbs +1 -1323
  10. data/core/global_variables.rbs +1 -1
  11. data/core/hash.rbs +3 -3
  12. data/core/kernel.rbs +2 -2
  13. data/core/random.rbs +5 -220
  14. data/core/rational.rbs +3 -3
  15. data/core/rbs/unnamed/argf.rbs +965 -0
  16. data/core/rbs/unnamed/env_class.rbs +1325 -0
  17. data/core/rbs/unnamed/random.rbs +270 -0
  18. data/core/regexp.rbs +2 -3
  19. data/docs/CONTRIBUTING.md +2 -2
  20. data/ext/rbs_extension/lexer.c +1343 -1353
  21. data/ext/rbs_extension/lexer.re +2 -2
  22. data/ext/rbs_extension/rbs_extension.h +1 -1
  23. data/ext/rbs_extension/unescape.c +17 -10
  24. data/lib/rbs/ast/members.rb +6 -3
  25. data/lib/rbs/cli.rb +2 -0
  26. data/lib/rbs/factory.rb +2 -0
  27. data/lib/rbs/prototype/helpers.rb +1 -5
  28. data/lib/rbs/prototype/rb.rb +105 -56
  29. data/lib/rbs/prototype/rbi.rb +65 -30
  30. data/lib/rbs/prototype/runtime.rb +4 -3
  31. data/lib/rbs/test/setup_helper.rb +6 -1
  32. data/lib/rbs/version.rb +1 -1
  33. data/schema/members.json +4 -1
  34. data/sig/collection/config.rbs +3 -0
  35. data/sig/factory.rbs +5 -0
  36. data/sig/prototype/helpers.rbs +23 -0
  37. data/sig/prototype/rb.rbs +84 -0
  38. data/sig/prototype/rbi.rbs +73 -0
  39. data/sig/shims/abstract_syntax_tree.rbs +25 -0
  40. data/sig/shims/enumerable.rbs +5 -0
  41. data/sig/shims/pp.rbs +3 -0
  42. data/sig/shims/ripper.rbs +8 -0
  43. data/stdlib/cgi/0/manifest.yaml +2 -0
  44. data/stdlib/date/0/time.rbs +26 -0
  45. data/stdlib/etc/0/etc.rbs +745 -0
  46. data/stdlib/minitest/0/kernel.rbs +42 -0
  47. data/stdlib/minitest/0/manifest.yaml +2 -0
  48. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +49 -0
  49. data/stdlib/minitest/0/minitest/assertion.rbs +16 -0
  50. data/stdlib/minitest/0/minitest/assertions.rbs +545 -0
  51. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +16 -0
  52. data/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
  53. data/stdlib/minitest/0/minitest/benchmark.rbs +258 -0
  54. data/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
  55. data/stdlib/minitest/0/minitest/expectation.rbs +2 -0
  56. data/stdlib/minitest/0/minitest/expectations.rbs +21 -0
  57. data/stdlib/minitest/0/minitest/guard.rbs +64 -0
  58. data/stdlib/minitest/0/minitest/mock.rbs +60 -0
  59. data/stdlib/minitest/0/minitest/parallel/executor.rbs +42 -0
  60. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +6 -0
  61. data/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
  62. data/stdlib/minitest/0/minitest/parallel.rbs +2 -0
  63. data/stdlib/minitest/0/minitest/pride_io.rbs +54 -0
  64. data/stdlib/minitest/0/minitest/pride_lol.rbs +17 -0
  65. data/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
  66. data/stdlib/minitest/0/minitest/reportable.rbs +51 -0
  67. data/stdlib/minitest/0/minitest/reporter.rbs +5 -0
  68. data/stdlib/minitest/0/minitest/result.rbs +28 -0
  69. data/stdlib/minitest/0/minitest/runnable.rbs +131 -0
  70. data/stdlib/minitest/0/minitest/skip.rbs +6 -0
  71. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
  72. data/stdlib/minitest/0/minitest/spec/dsl.rbs +125 -0
  73. data/stdlib/minitest/0/minitest/spec.rbs +11 -0
  74. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +76 -0
  75. data/stdlib/minitest/0/minitest/summary_reporter.rbs +25 -0
  76. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
  77. data/stdlib/minitest/0/minitest/test.rbs +76 -0
  78. data/stdlib/minitest/0/minitest/unexpected_error.rbs +10 -0
  79. data/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
  80. data/stdlib/minitest/0/minitest/unit.rbs +5 -0
  81. data/stdlib/minitest/0/minitest.rbs +966 -0
  82. data/stdlib/rubygems/0/errors.rbs +113 -0
  83. metadata +54 -4
  84. data/lib/rbs/char_scanner.rb +0 -20
@@ -14,17 +14,20 @@ module RBS
14
14
  def parse(string)
15
15
  comments = Ripper.lex(string).yield_self do |tokens|
16
16
  tokens.each.with_object({}) do |token, hash|
17
+ # @type var hash: Hash[Integer, AST::Comment]
18
+
17
19
  if token[1] == :on_comment
18
20
  line = token[0][0]
19
- body = token[2][2..-1]
21
+ body = token[2][2..-1] or raise
20
22
 
21
23
  body = "\n" if body.empty?
22
24
 
23
25
  comment = AST::Comment.new(string: body, location: nil)
24
- if (prev_comment = hash[line - 1])
25
- hash[line - 1] = nil
26
- hash[line] = AST::Comment.new(string: prev_comment.string + comment.string,
27
- location: nil)
26
+ if (prev_comment = hash.delete(line - 1))
27
+ hash[line] = AST::Comment.new(
28
+ string: prev_comment.string + comment.string,
29
+ location: nil
30
+ )
28
31
  else
29
32
  hash[line] = comment
30
33
  end
@@ -45,7 +48,7 @@ module RBS
45
48
  end
46
49
 
47
50
  def push_class(name, super_class, comment:)
48
- modules.push AST::Declarations::Class.new(
51
+ class_decl = AST::Declarations::Class.new(
49
52
  name: nested_name(name),
50
53
  super_class: super_class && AST::Declarations::Class::Super.new(name: const_to_name(super_class), args: [], location: nil),
51
54
  type_params: [],
@@ -55,7 +58,8 @@ module RBS
55
58
  comment: comment
56
59
  )
57
60
 
58
- decls << modules.last
61
+ modules << class_decl
62
+ decls << class_decl
59
63
 
60
64
  yield
61
65
  ensure
@@ -63,7 +67,7 @@ module RBS
63
67
  end
64
68
 
65
69
  def push_module(name, comment:)
66
- modules.push AST::Declarations::Module.new(
70
+ module_decl = AST::Declarations::Module.new(
67
71
  name: nested_name(name),
68
72
  type_params: [],
69
73
  members: [],
@@ -73,7 +77,8 @@ module RBS
73
77
  comment: comment
74
78
  )
75
79
 
76
- decls << modules.last
80
+ modules << module_decl
81
+ decls << module_decl
77
82
 
78
83
  yield
79
84
  ensure
@@ -84,9 +89,16 @@ module RBS
84
89
  modules.last
85
90
  end
86
91
 
92
+ def current_module!
93
+ current_module or raise
94
+ end
95
+
87
96
  def push_sig(node)
88
- @last_sig ||= []
89
- @last_sig << node
97
+ if last_sig = @last_sig
98
+ last_sig << node
99
+ else
100
+ @last_sig = [node]
101
+ end
90
102
  end
91
103
 
92
104
  def pop_sig
@@ -125,7 +137,7 @@ module RBS
125
137
  location: nil,
126
138
  comment: nil
127
139
  )
128
- current_module.members << include_member
140
+ current_module!.members << include_member
129
141
  end
130
142
  end
131
143
  when :extend
@@ -140,15 +152,16 @@ module RBS
140
152
  location: nil,
141
153
  comment: nil
142
154
  )
143
- current_module.members << member
155
+ current_module!.members << member
144
156
  end
145
157
  end
146
158
  end
147
159
  when :sig
148
- push_sig outer.last.children.last.children.last
160
+ out = outer.last or raise
161
+ push_sig out.children.last.children.last
149
162
  when :alias_method
150
163
  new, old = each_arg(node.children[1]).map {|x| x.children[0] }
151
- current_module.members << AST::Members::Alias.new(
164
+ current_module!.members << AST::Members::Alias.new(
152
165
  new_name: new,
153
166
  old_name: old,
154
167
  location: nil,
@@ -164,9 +177,9 @@ module RBS
164
177
  comment = join_comments(sigs, comments)
165
178
 
166
179
  args = node.children[2]
167
- types = sigs.map {|sig| method_type(args, sig, variables: current_module.type_params) }
180
+ types = sigs.map {|sig| method_type(args, sig, variables: current_module!.type_params, overloads: sigs.size) }.compact
168
181
 
169
- current_module.members << AST::Members::MethodDefinition.new(
182
+ current_module!.members << AST::Members::MethodDefinition.new(
170
183
  name: node.children[1],
171
184
  location: nil,
172
185
  annotations: [],
@@ -184,9 +197,9 @@ module RBS
184
197
  comment = join_comments(sigs, comments)
185
198
 
186
199
  args = node.children[1]
187
- types = sigs.map {|sig| method_type(args, sig, variables: current_module.type_params) }
200
+ types = sigs.map {|sig| method_type(args, sig, variables: current_module!.type_params, overloads: sigs.size) }.compact
188
201
 
189
- current_module.members << AST::Members::MethodDefinition.new(
202
+ current_module!.members << AST::Members::MethodDefinition.new(
190
203
  name: node.children[0],
191
204
  location: nil,
192
205
  annotations: [],
@@ -203,7 +216,8 @@ module RBS
203
216
  node.type == :HASH &&
204
217
  each_arg(node.children[0]).each_slice(2).any? {|a, _| a.type == :LIT && a.children[0] == :fixed }
205
218
  }
206
- if (a0 = each_arg(send.children[1]).to_a[0])&.type == :LIT
219
+ # @type var variance: AST::TypeParam::variance?
220
+ if (a0 = each_arg(send.children[1]).to_a[0]) && a0.type == :LIT
207
221
  variance = case a0.children[0]
208
222
  when :out
209
223
  :covariant
@@ -212,7 +226,7 @@ module RBS
212
226
  end
213
227
  end
214
228
 
215
- current_module.type_params << AST::TypeParam.new(
229
+ current_module!.type_params << AST::TypeParam.new(
216
230
  name: node.children[0],
217
231
  variance: variance || :invariant,
218
232
  location: nil,
@@ -242,7 +256,7 @@ module RBS
242
256
  )
243
257
  end
244
258
  when :ALIAS
245
- current_module.members << AST::Members::Alias.new(
259
+ current_module!.members << AST::Members::Alias.new(
246
260
  new_name: node.children[0].children[0],
247
261
  old_name: node.children[1].children[0],
248
262
  location: nil,
@@ -257,10 +271,10 @@ module RBS
257
271
  end
258
272
  end
259
273
 
260
- def method_type(args_node, type_node, variables:)
274
+ def method_type(args_node, type_node, variables:, overloads:)
261
275
  if type_node
262
276
  if type_node.type == :CALL
263
- method_type = method_type(args_node, type_node.children[0], variables: variables)
277
+ method_type = method_type(args_node, type_node.children[0], variables: variables, overloads: overloads) or raise
264
278
  else
265
279
  method_type = MethodType.new(
266
280
  type: Types::Function.empty(Types::Bases::Any.new(location: nil)),
@@ -289,7 +303,7 @@ module RBS
289
303
  method_type.update(type: method_type.type.with_return_type(type_of(return_type, variables: variables)))
290
304
  when :params
291
305
  if args_node
292
- parse_params(args_node, args, method_type, variables: variables)
306
+ parse_params(args_node, args, method_type, variables: variables, overloads: overloads)
293
307
  else
294
308
  vars = (node_to_hash(each_arg(args).to_a[0]) || {}).transform_values {|value| type_of(value, variables: variables) }
295
309
 
@@ -319,15 +333,22 @@ module RBS
319
333
  end
320
334
  end
321
335
 
322
- def parse_params(args_node, args, method_type, variables:)
336
+ def parse_params(args_node, args, method_type, variables:, overloads:)
323
337
  vars = (node_to_hash(each_arg(args).to_a[0]) || {}).transform_values {|value| type_of(value, variables: variables) }
324
338
 
339
+ # @type var required_positionals: Array[Types::Function::Param]
325
340
  required_positionals = []
341
+ # @type var optional_positionals: Array[Types::Function::Param]
326
342
  optional_positionals = []
343
+ # @type var rest_positionals: Types::Function::Param?
327
344
  rest_positionals = nil
345
+ # @type var trailing_positionals: Array[Types::Function::Param]
328
346
  trailing_positionals = []
347
+ # @type var required_keywords: Hash[Symbol, Types::Function::Param]
329
348
  required_keywords = {}
349
+ # @type var optional_keywords: Hash[Symbol, Types::Function::Param]
330
350
  optional_keywords = {}
351
+ # @type var rest_keywords: Types::Function::Param?
331
352
  rest_keywords = nil
332
353
 
333
354
  var_names = args_node.children[0]
@@ -396,8 +417,8 @@ module RBS
396
417
  type: Types::Function.empty(Types::Bases::Any.new(location: nil))
397
418
  )
398
419
  # Handle an optional block like `T.nilable(T.proc.void)`.
399
- elsif type.is_a?(Types::Optional) && type.type.is_a?(Types::Proc)
400
- method_block = Types::Block.new(required: false, type: type.type.type)
420
+ elsif type.is_a?(Types::Optional) && (proc_type = type.type).is_a?(Types::Proc)
421
+ method_block = Types::Block.new(required: false, type: proc_type.type)
401
422
  else
402
423
  STDERR.puts "Unexpected block type: #{type}"
403
424
  PP.pp args_node, STDERR
@@ -406,6 +427,13 @@ module RBS
406
427
  type: Types::Function.empty(Types::Bases::Any.new(location: nil))
407
428
  )
408
429
  end
430
+ else
431
+ if overloads == 1
432
+ method_block = Types::Block.new(
433
+ required: false,
434
+ type: Types::Function.empty(Types::Bases::Any.new(location: nil))
435
+ )
436
+ end
409
437
  end
410
438
  end
411
439
 
@@ -439,7 +467,7 @@ module RBS
439
467
  def type_of0(type_node, variables:)
440
468
  case
441
469
  when type_node.type == :CONST
442
- if variables.each.include?(type_node.children[0])
470
+ if variables.include?(type_node.children[0])
443
471
  Types::Variable.new(name: type_node.children[0], location: nil)
444
472
  else
445
473
  Types::ClassInstance.new(name: const_to_name(type_node), args: [], location: nil)
@@ -447,7 +475,10 @@ module RBS
447
475
  when type_node.type == :COLON2
448
476
  Types::ClassInstance.new(name: const_to_name(type_node), args: [], location: nil)
449
477
  when call_node?(type_node, name: :[], receiver: -> (_) { true })
478
+ # The type_node represents a type application
450
479
  type = type_of(type_node.children[0], variables: variables)
480
+ type.is_a?(Types::ClassInstance) or raise
481
+
451
482
  each_arg(type_node.children[2]) do |arg|
452
483
  type.args << type_of(arg, variables: variables)
453
484
  end
@@ -487,7 +518,8 @@ module RBS
487
518
  Types::Tuple.new(types: types, location: nil)
488
519
  else
489
520
  if proc_type?(type_node)
490
- Types::Proc.new(type: method_type(nil, type_node, variables: variables).type, block: nil, location: nil)
521
+ method_type = method_type(nil, type_node, variables: variables, overloads: 1) or raise
522
+ Types::Proc.new(type: method_type.type, block: nil, location: nil)
491
523
  else
492
524
  STDERR.puts "Unexpected type_node:"
493
525
  PP.pp type_node, STDERR
@@ -572,9 +604,12 @@ module RBS
572
604
 
573
605
  def node_to_hash(node)
574
606
  if node&.type == :HASH
607
+ # @type var hash: Hash[Symbol, untyped]
575
608
  hash = {}
576
609
 
577
610
  each_arg(node.children[0]).each_slice(2) do |var, type|
611
+ var or raise
612
+
578
613
  if var.type == :LIT && type
579
614
  hash[var.children[0]] = type
580
615
  end
@@ -341,7 +341,7 @@ module RBS
341
341
  end
342
342
 
343
343
  decls << AST::Declarations::Constant.new(
344
- name: name,
344
+ name: to_type_name(name.to_s),
345
345
  type: type,
346
346
  location: nil,
347
347
  comment: nil
@@ -470,8 +470,9 @@ module RBS
470
470
  *outer_module_names, _ = const_name(mod).split(/::/) #=> parent = [A, B], mod = C
471
471
  destination = @decls # Copy the entries in ivar @decls, not .dup
472
472
 
473
- outer_module_names&.each do |outer_module_name|
474
- outer_module = @modules.detect { |x| const_name(x) == outer_module_name }
473
+ outer_module_names&.each_with_index do |outer_module_name, i|
474
+ current_name = outer_module_names[0, i + 1].join('::')
475
+ outer_module = @modules.detect { |x| const_name(x) == current_name }
475
476
  outer_decl = destination.detect { |decl| decl.is_a?(outer_module.is_a?(Class) ? AST::Declarations::Class : AST::Declarations::Module) && decl.name.name == outer_module_name.to_sym }
476
477
 
477
478
  # Insert AST::Declarations if declarations are not added previously
@@ -30,7 +30,12 @@ module RBS
30
30
 
31
31
  case double_suite.downcase.strip
32
32
  when 'rspec'
33
- ['::RSpec::Mocks::Double']
33
+ [
34
+ '::RSpec::Mocks::Double',
35
+ '::RSpec::Mocks::InstanceVerifyingDouble',
36
+ '::RSpec::Mocks::ObjectVerifyingDouble',
37
+ '::RSpec::Mocks::ClassVerifyingDouble',
38
+ ]
34
39
  when 'minitest'
35
40
  ['::Minitest::Mock']
36
41
  else
data/lib/rbs/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module RBS
2
- VERSION = "2.5.1"
2
+ VERSION = "2.6.0"
3
3
  end
data/schema/members.json CHANGED
@@ -202,9 +202,12 @@
202
202
  },
203
203
  "location": {
204
204
  "$ref": "location.json"
205
+ },
206
+ "visibility": {
207
+ "enum": ["public", "private", null]
205
208
  }
206
209
  },
207
- "required": ["member", "name", "ivar_name", "type", "annotations", "kind", "comment", "location"]
210
+ "required": ["member", "name", "ivar_name", "type", "annotations", "kind", "comment", "location", "visibility"]
208
211
  },
209
212
  "visibility": {
210
213
  "title": "Visibility specifier",
@@ -2,6 +2,9 @@ module RBS
2
2
  module Collection
3
3
  # This class represent the configration file.
4
4
  class Config
5
+ class CollectionNotAvailable < StandardError
6
+ end
7
+
5
8
  class LockfileGenerator
6
9
  attr_reader config: Config
7
10
  attr_reader lock: Config?
data/sig/factory.rbs ADDED
@@ -0,0 +1,5 @@
1
+ module RBS
2
+ class Factory
3
+ def type_name: (String) -> TypeName
4
+ end
5
+ end
@@ -0,0 +1,23 @@
1
+ module RBS
2
+ module Prototype
3
+ module Helpers
4
+ type node = RubyVM::AbstractSyntaxTree::Node
5
+
6
+ def block_from_body: (node) -> Types::Block?
7
+
8
+ def each_node: (Array[untyped] nodes) { (node) -> void } -> void
9
+
10
+ def each_child: (node) { (node child) -> void } -> void
11
+
12
+ def any_node?: (node, ?nodes: Array[node]) { (node) -> bool } -> Array[node]?
13
+
14
+ def keyword_hash?: (node) -> bool
15
+
16
+ def args_from_node: (node?) -> Array[untyped]
17
+
18
+ def untyped: () -> Types::Bases::Any
19
+
20
+ @untyped: Types::Bases::Any
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,84 @@
1
+ module RBS
2
+ module Prototype
3
+ class RB
4
+ include Helpers
5
+
6
+ class Context
7
+ type method_kind = :singleton | :singleton_instance | :instance
8
+
9
+ attr_accessor module_function: bool
10
+
11
+ attr_accessor singleton: bool
12
+
13
+ attr_accessor namespace: Namespace
14
+
15
+ def initialize: (module_function: bool, singleton: bool, namespace: Namespace) -> void
16
+
17
+ def method_kind: () -> method_kind
18
+
19
+ def attribute_kind: () -> (:singleton | :instance)
20
+
21
+ def self.initial: (?namespace: Namespace) -> Context
22
+ end
23
+
24
+ type decl = AST::Declarations::t | AST::Members::t
25
+
26
+ attr_reader source_decls: Array[decl]
27
+
28
+ def initialize: () -> void
29
+
30
+ def decls: () -> Array[AST::Declarations::t]
31
+
32
+ def parse: (String) -> void
33
+
34
+ def process: (untyped node, decls: Array[AST::Declarations::t | AST::Members::t], comments: Hash[Integer, AST::Comment], context: Context) -> void
35
+
36
+ def process_children: (RubyVM::AbstractSyntaxTree::Node node, decls: Array[decl], comments: Hash[Integer, AST::Comment], context: Context) -> void
37
+
38
+ # Returns a type name that represents the name of the constant.
39
+ # `node` must be _constant_ node, `CONST`, `COLON2`, or `COLON3` node.
40
+ #
41
+ def const_to_name!: (RubyVM::AbstractSyntaxTree::Node node) -> TypeName
42
+
43
+ # Returns a type name that represents the name of the constant.
44
+ # `node` can be `SELF` for `extend self` pattern.
45
+ #
46
+ def const_to_name: (RubyVM::AbstractSyntaxTree::Node? node, context: Context) -> TypeName?
47
+
48
+ def literal_to_symbol: (RubyVM::AbstractSyntaxTree::Node node) -> Symbol?
49
+
50
+ def function_type_from_body: (RubyVM::AbstractSyntaxTree::Node node, Symbol def_name) -> Types::Function
51
+
52
+ def function_return_type_from_body: (RubyVM::AbstractSyntaxTree::Node node) -> Types::t
53
+
54
+ def body_type: (RubyVM::AbstractSyntaxTree::Node node) -> Types::t
55
+
56
+ def if_unless_type: (RubyVM::AbstractSyntaxTree::Node node) -> Types::t
57
+
58
+ def block_type: (RubyVM::AbstractSyntaxTree::Node node) -> Types::t
59
+
60
+ def literal_to_type: (RubyVM::AbstractSyntaxTree::Node node) -> Types::t
61
+
62
+ def types_to_union_type: (Array[Types::t] types) -> Types::t
63
+
64
+ def range_element_type: (Array[Types::t] types) -> Types::t
65
+
66
+ def param_type: (RubyVM::AbstractSyntaxTree::Node node, ?default: Types::Bases::Any) -> Types::t
67
+
68
+ # backward compatible
69
+ alias node_type param_type
70
+
71
+ def private: () -> AST::Members::Private
72
+
73
+ def public: () -> AST::Members::Public
74
+
75
+ def current_accessibility: (Array[decl] decls, ?Integer index) -> (AST::Members::Private | AST::Members::Public)
76
+
77
+ def remove_unnecessary_accessibility_methods!: (Array[decl]) -> void
78
+
79
+ def is_accessibility?: (decl) -> bool
80
+
81
+ def find_def_index_by_name: (Array[decl] decls, Symbol name) -> [Integer, AST::Members::MethodDefinition | AST::Members::AttrReader | AST::Members::AttrWriter]?
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,73 @@
1
+ module RBS
2
+ module Prototype
3
+ class RBI
4
+ attr_reader decls: Array[AST::Declarations::t]
5
+
6
+ type module_decl = AST::Declarations::Class | AST::Declarations::Module
7
+
8
+ # A stack representing the module nesting structure in the Ruby code
9
+ attr_reader modules: Array[module_decl]
10
+
11
+ # Last subsequent `sig` calls
12
+ attr_reader last_sig: Array[RubyVM::AbstractSyntaxTree::Node]?
13
+
14
+ def initialize: () -> void
15
+
16
+ def parse: (String) -> void
17
+
18
+ def nested_name: (RubyVM::AbstractSyntaxTree::Node name) -> TypeName
19
+
20
+ def current_namespace: () -> Namespace
21
+
22
+ def push_class: (
23
+ RubyVM::AbstractSyntaxTree::Node name,
24
+ RubyVM::AbstractSyntaxTree::Node super_class,
25
+ comment: AST::Comment?
26
+ ) { () -> void } -> void
27
+
28
+ def push_module: (RubyVM::AbstractSyntaxTree::Node name, comment: AST::Comment?) { () -> void } -> void
29
+
30
+ # The inner most module/class definition, returns `nil` on toplevel
31
+ def current_module: () -> module_decl?
32
+
33
+ # The inner most module/class definition, raises on toplevel
34
+ def current_module!: () -> module_decl
35
+
36
+ # Put a `sig` call to current list.
37
+ def push_sig: (RubyVM::AbstractSyntaxTree::Node node) -> void
38
+
39
+ # Clear the `sig` call list
40
+ def pop_sig: () -> Array[RubyVM::AbstractSyntaxTree::Node]?
41
+
42
+ def join_comments: (Array[RubyVM::AbstractSyntaxTree::Node] nodes, Hash[Integer, AST::Comment] comments) -> AST::Comment
43
+
44
+ def process: (RubyVM::AbstractSyntaxTree::Node node, comments: Hash[Integer, AST::Comment], ?outer: Array[RubyVM::AbstractSyntaxTree::Node]) -> void
45
+
46
+ def method_type: (RubyVM::AbstractSyntaxTree::Node? args_node, RubyVM::AbstractSyntaxTree::Node? type_node, variables: Array[AST::TypeParam], overloads: Integer) -> MethodType?
47
+
48
+ def parse_params: (RubyVM::AbstractSyntaxTree::Node args_node, RubyVM::AbstractSyntaxTree::Node args, MethodType method_type, variables: Array[AST::TypeParam], overloads: Integer) -> MethodType
49
+
50
+ def type_of: (RubyVM::AbstractSyntaxTree::Node type_node, variables: Array[AST::TypeParam]) -> Types::t
51
+
52
+ def type_of0: (RubyVM::AbstractSyntaxTree::Node type_node, variables: Array[AST::TypeParam]) -> Types::t
53
+
54
+ def proc_type?: (RubyVM::AbstractSyntaxTree::Node type_node) -> bool
55
+
56
+ def call_node?: (RubyVM::AbstractSyntaxTree::Node node, name: Symbol, ?receiver: ^(RubyVM::AbstractSyntaxTree::Node) -> bool, ?args: ^(RubyVM::AbstractSyntaxTree::Node) -> bool) -> bool
57
+
58
+ # Receives a constant node and returns `TypeName` instance
59
+ def const_to_name: (RubyVM::AbstractSyntaxTree::Node node) -> TypeName
60
+
61
+ # Receives `:ARRAY` or `:LIST` node and yields the child nodes.
62
+ def each_arg: (RubyVM::AbstractSyntaxTree::Node array) { (RubyVM::AbstractSyntaxTree::Node) -> void } -> void
63
+ | (RubyVM::AbstractSyntaxTree::Node array) -> Enumerator[RubyVM::AbstractSyntaxTree::Node, void]
64
+
65
+ # Receives node and yields the child nodes.
66
+ def each_child: (RubyVM::AbstractSyntaxTree::Node node) { (RubyVM::AbstractSyntaxTree::Node) -> void } -> void
67
+ | (RubyVM::AbstractSyntaxTree::Node node) -> Enumerator[RubyVM::AbstractSyntaxTree::Node, void]
68
+
69
+ # Receives a keyword `:HASH` node and returns hash instance.
70
+ def node_to_hash: (RubyVM::AbstractSyntaxTree::Node node) -> Hash[Symbol, RubyVM::AbstractSyntaxTree::Node]?
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,25 @@
1
+ class RubyVM
2
+ module AbstractSyntaxTree
3
+ def self.parse: (String src) -> Node
4
+
5
+ def self.parse_file: (String pathname) -> Node
6
+
7
+ def self.of: (untyped proc) -> Node
8
+
9
+ class Node
10
+ attr_reader children (): Array[untyped]
11
+
12
+ attr_reader first_column (): Integer
13
+
14
+ attr_reader first_lineno (): Integer
15
+
16
+ attr_reader last_column (): Integer
17
+
18
+ attr_reader last_lineno (): Integer
19
+
20
+ attr_reader type (): Symbol
21
+
22
+ def inspect: () -> String
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,5 @@
1
+ module Enumerable[unchecked out Elem] : _Each[Elem]
2
+ def each_slice: (2) { ([Elem, Elem]) -> void } -> void
3
+ | (2) -> Enumerator[[Elem, Elem], void]
4
+ | ...
5
+ end
data/sig/shims/pp.rbs ADDED
@@ -0,0 +1,3 @@
1
+ class PP
2
+ def self.pp: (untyped obj, IO out, ?Integer width) -> void
3
+ end
@@ -0,0 +1,8 @@
1
+ class Ripper
2
+ def self.lex: (String src, ?String filename, ?Integer lineno, ?raise_errors: bool) -> Array[[[Integer, Integer], Symbol, String, Lexer::State]]
3
+
4
+ class Lexer
5
+ class State
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,2 @@
1
+ dependencies:
2
+ - name: tempfile
@@ -0,0 +1,26 @@
1
+ %a{annotate:rdoc:skip}
2
+ class Time
3
+ # <!--
4
+ # rdoc-file=ext/date/date_core.c
5
+ # - t.to_time -> time
6
+ # -->
7
+ # Returns self.
8
+ #
9
+ def to_time: () -> Time
10
+
11
+ # <!--
12
+ # rdoc-file=ext/date/date_core.c
13
+ # - t.to_date -> date
14
+ # -->
15
+ # Returns a Date object which denotes self.
16
+ #
17
+ def to_date: () -> Date
18
+
19
+ # <!--
20
+ # rdoc-file=ext/date/date_core.c
21
+ # - t.to_datetime -> datetime
22
+ # -->
23
+ # Returns a DateTime object which denotes self.
24
+ #
25
+ def to_datetime: () -> DateTime
26
+ end