rbs 2.5.1 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
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