rbs 2.8.4 → 3.0.0.dev.2

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 (95) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +0 -3
  3. data/Gemfile +1 -1
  4. data/Gemfile.lock +17 -17
  5. data/README.md +1 -0
  6. data/Rakefile +66 -0
  7. data/core/array.rbs +1 -1
  8. data/core/builtin.rbs +1 -1
  9. data/core/hash.rbs +1 -1
  10. data/core/module.rbs +1 -1
  11. data/ext/rbs_extension/constants.c +18 -2
  12. data/ext/rbs_extension/constants.h +9 -1
  13. data/ext/rbs_extension/lexer.c +834 -777
  14. data/ext/rbs_extension/lexer.h +3 -1
  15. data/ext/rbs_extension/lexer.re +3 -1
  16. data/ext/rbs_extension/lexstate.c +4 -2
  17. data/ext/rbs_extension/parser.c +287 -57
  18. data/ext/rbs_extension/ruby_objs.c +71 -5
  19. data/ext/rbs_extension/ruby_objs.h +9 -2
  20. data/lib/rbs/annotate/rdoc_annotator.rb +1 -1
  21. data/lib/rbs/ast/declarations.rb +49 -2
  22. data/lib/rbs/ast/directives.rb +39 -0
  23. data/lib/rbs/ast/members.rb +49 -15
  24. data/lib/rbs/cli.rb +38 -19
  25. data/lib/rbs/collection/config/lockfile.rb +115 -0
  26. data/lib/rbs/collection/config/lockfile_generator.rb +99 -53
  27. data/lib/rbs/collection/config.rb +12 -40
  28. data/lib/rbs/collection/installer.rb +9 -13
  29. data/lib/rbs/collection/sources/base.rb +2 -2
  30. data/lib/rbs/collection/sources/git.rb +135 -62
  31. data/lib/rbs/collection/sources/rubygems.rb +10 -12
  32. data/lib/rbs/collection/sources/stdlib.rb +10 -13
  33. data/lib/rbs/collection/sources.rb +7 -1
  34. data/lib/rbs/collection.rb +1 -0
  35. data/lib/rbs/definition.rb +1 -1
  36. data/lib/rbs/definition_builder/ancestor_builder.rb +24 -8
  37. data/lib/rbs/definition_builder/method_builder.rb +3 -3
  38. data/lib/rbs/definition_builder.rb +456 -579
  39. data/lib/rbs/environment/use_map.rb +77 -0
  40. data/lib/rbs/environment.rb +356 -85
  41. data/lib/rbs/environment_loader.rb +20 -17
  42. data/lib/rbs/environment_walker.rb +1 -1
  43. data/lib/rbs/errors.rb +34 -37
  44. data/lib/rbs/locator.rb +3 -3
  45. data/lib/rbs/parser_aux.rb +8 -6
  46. data/lib/rbs/prototype/helpers.rb +29 -13
  47. data/lib/rbs/prototype/node_usage.rb +99 -0
  48. data/lib/rbs/prototype/rb.rb +3 -2
  49. data/lib/rbs/prototype/rbi.rb +6 -4
  50. data/lib/rbs/prototype/runtime.rb +25 -12
  51. data/lib/rbs/resolver/constant_resolver.rb +23 -7
  52. data/lib/rbs/resolver/type_name_resolver.rb +2 -1
  53. data/lib/rbs/sorter.rb +3 -3
  54. data/lib/rbs/substitution.rb +19 -0
  55. data/lib/rbs/test/setup.rb +1 -1
  56. data/lib/rbs/type_alias_dependency.rb +1 -1
  57. data/lib/rbs/type_alias_regularity.rb +3 -3
  58. data/lib/rbs/types.rb +1 -5
  59. data/lib/rbs/validator.rb +25 -3
  60. data/lib/rbs/variance_calculator.rb +2 -2
  61. data/lib/rbs/version.rb +1 -1
  62. data/lib/rbs/writer.rb +54 -19
  63. data/lib/rbs.rb +3 -2
  64. data/lib/rdoc_plugin/parser.rb +3 -3
  65. data/schema/members.json +15 -10
  66. data/sig/ancestor_graph.rbs +22 -2
  67. data/sig/collection/config/lockfile.rbs +80 -0
  68. data/sig/collection/config/lockfile_generator.rbs +53 -0
  69. data/sig/collection/config.rbs +5 -48
  70. data/sig/collection/installer.rbs +1 -1
  71. data/sig/collection/sources.rbs +76 -33
  72. data/sig/constant.rbs +1 -1
  73. data/sig/declarations.rbs +36 -3
  74. data/sig/definition.rbs +1 -1
  75. data/sig/definition_builder.rbs +94 -82
  76. data/sig/directives.rbs +61 -0
  77. data/sig/environment.rbs +150 -28
  78. data/sig/environment_loader.rbs +2 -2
  79. data/sig/errors.rbs +42 -0
  80. data/sig/members.rbs +31 -7
  81. data/sig/parser.rbs +8 -15
  82. data/sig/prototype/node_usage.rbs +20 -0
  83. data/sig/resolver/constant_resolver.rbs +1 -2
  84. data/sig/shims/bundler.rbs +31 -0
  85. data/sig/shims/rubygems.rbs +15 -0
  86. data/sig/shims.rbs +0 -22
  87. data/sig/substitution.rbs +6 -0
  88. data/sig/use_map.rbs +35 -0
  89. data/sig/validator.rbs +12 -5
  90. data/sig/writer.rbs +6 -2
  91. metadata +16 -9
  92. data/lib/rbs/constant_table.rb +0 -167
  93. data/lib/rbs/type_name_resolver.rb +0 -67
  94. data/sig/constant_table.rbs +0 -30
  95. data/sig/type_name_resolver.rbs +0 -26
@@ -12,25 +12,22 @@ module RBS
12
12
 
13
13
  REPO = Repository.default
14
14
 
15
- def has?(config_entry)
16
- lookup(config_entry)
15
+ def has?(name, version)
16
+ lookup(name, version)
17
17
  end
18
18
 
19
- def versions(config_entry)
20
- REPO.gems[config_entry['name']].versions.keys.map(&:to_s)
19
+ def versions(name)
20
+ REPO.gems[name].versions.keys.map(&:to_s)
21
21
  end
22
22
 
23
- def install(dest:, config_entry:, stdout:)
23
+ def install(dest:, name:, version:, stdout:)
24
24
  # Do nothing because stdlib RBS is available by default
25
- name = config_entry['name']
26
- version = config_entry['version'] or raise
27
- from = lookup(config_entry)
25
+ from = lookup(name, version)
28
26
  stdout.puts "Using #{name}:#{version} (#{from})"
29
27
  end
30
28
 
31
- def manifest_of(config_entry)
32
- config_entry['version'] or raise
33
- manifest_path = (lookup(config_entry) or raise).join('manifest.yaml')
29
+ def manifest_of(name, version)
30
+ manifest_path = (lookup(name, version) or raise).join('manifest.yaml')
34
31
  YAML.safe_load(manifest_path.read) if manifest_path.exist?
35
32
  end
36
33
 
@@ -40,8 +37,8 @@ module RBS
40
37
  }
41
38
  end
42
39
 
43
- private def lookup(config_entry)
44
- REPO.lookup(config_entry['name'], config_entry['version'])
40
+ private def lookup(name, version)
41
+ REPO.lookup(name, version)
45
42
  end
46
43
  end
47
44
  end
@@ -11,7 +11,13 @@ module RBS
11
11
  def self.from_config_entry(source_entry)
12
12
  case source_entry['type']
13
13
  when 'git', nil # git source by default
14
- __skip__ = Git.new(**source_entry.slice('name', 'revision', 'remote', 'repo_dir').transform_keys(&:to_sym))
14
+ # @type var source_entry: Git::source_entry
15
+ Git.new(
16
+ name: source_entry["name"],
17
+ revision: source_entry["revision"],
18
+ remote: source_entry["remote"],
19
+ repo_dir: source_entry["repo_dir"]
20
+ )
15
21
  when 'stdlib'
16
22
  Stdlib.instance
17
23
  when 'rubygems'
@@ -5,6 +5,7 @@ require 'bundler'
5
5
 
6
6
  require_relative './collection/sources'
7
7
  require_relative './collection/config'
8
+ require_relative './collection/config/lockfile'
8
9
  require_relative './collection/config/lockfile_generator'
9
10
  require_relative './collection/installer'
10
11
  require_relative './collection/cleaner'
@@ -65,7 +65,7 @@ module RBS
65
65
  def overload?
66
66
  case mem = member
67
67
  when AST::Members::MethodDefinition
68
- mem.overload?
68
+ mem.overloading?
69
69
  else
70
70
  false
71
71
  end
@@ -190,6 +190,8 @@ module RBS
190
190
  end
191
191
 
192
192
  def one_instance_ancestors(type_name)
193
+ type_name = env.normalize_module_name(type_name)
194
+
193
195
  as = one_instance_ancestors_cache[type_name] and return as
194
196
 
195
197
  entry = env.class_decls[type_name] or raise "Unknown name for one_instance_ancestors: #{type_name}"
@@ -210,6 +212,8 @@ module RBS
210
212
  super_args = []
211
213
  end
212
214
 
215
+ super_name = env.normalize_module_name(super_name)
216
+
213
217
  NoSuperclassFoundError.check!(super_name, env: env, location: primary.decl.location)
214
218
  if super_class
215
219
  InheritModuleError.check!(super_class, env: env)
@@ -236,7 +240,12 @@ module RBS
236
240
  else
237
241
  entry.self_types.each do |module_self|
238
242
  NoSelfTypeFoundError.check!(module_self, env: env)
239
- self_types.push Definition::Ancestor::Instance.new(name: module_self.name, args: module_self.args, source: module_self)
243
+
244
+ module_name = module_self.name
245
+ if module_name.class?
246
+ module_name = env.normalize_module_name(module_name)
247
+ end
248
+ self_types.push Definition::Ancestor::Instance.new(name: module_name, args: module_self.args, source: module_self)
240
249
  end
241
250
  end
242
251
  end
@@ -253,6 +262,7 @@ module RBS
253
262
  end
254
263
 
255
264
  def one_singleton_ancestors(type_name)
265
+ type_name = env.normalize_module_name(type_name)
256
266
  as = one_singleton_ancestors_cache[type_name] and return as
257
267
 
258
268
  entry = env.class_decls[type_name] or raise "Unknown name for one_singleton_ancestors: #{type_name}"
@@ -270,6 +280,8 @@ module RBS
270
280
  super_name = BuiltinNames::Object.name
271
281
  end
272
282
 
283
+ super_name = env.normalize_module_name(super_name)
284
+
273
285
  NoSuperclassFoundError.check!(super_name, env: env, location: primary.decl.location)
274
286
  if super_class
275
287
  InheritModuleError.check!(super_class, env: env)
@@ -328,16 +340,18 @@ module RBS
328
340
  when AST::Members::Include
329
341
  module_name = member.name
330
342
  module_args = member.args.map {|type| align_params ? type.sub(align_params) : type }
331
- ancestor = Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
332
343
 
333
344
  case
334
345
  when member.name.class? && included_modules
335
346
  MixinClassError.check!(type_name: type_name, env: env, member: member)
336
347
  NoMixinFoundError.check!(member.name, env: env, member: member)
337
- included_modules << ancestor
348
+
349
+ module_name = env.normalize_module_name(module_name)
350
+ included_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
338
351
  when member.name.interface? && included_interfaces
339
352
  NoMixinFoundError.check!(member.name, env: env, member: member)
340
- included_interfaces << ancestor
353
+
354
+ included_interfaces << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
341
355
  end
342
356
 
343
357
  when AST::Members::Prepend
@@ -345,7 +359,7 @@ module RBS
345
359
  MixinClassError.check!(type_name: type_name, env: env, member: member)
346
360
  NoMixinFoundError.check!(member.name, env: env, member: member)
347
361
 
348
- module_name = member.name
362
+ module_name = env.normalize_module_name(member.name)
349
363
  module_args = member.args.map {|type| align_params ? type.sub(align_params) : type }
350
364
 
351
365
  prepended_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
@@ -354,16 +368,18 @@ module RBS
354
368
  when AST::Members::Extend
355
369
  module_name = member.name
356
370
  module_args = member.args
357
- ancestor = Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
358
371
 
359
372
  case
360
373
  when member.name.class? && extended_modules
361
374
  MixinClassError.check!(type_name: type_name, env: env, member: member)
362
375
  NoMixinFoundError.check!(member.name, env: env, member: member)
363
- extended_modules << ancestor
376
+
377
+ module_name = env.normalize_module_name(module_name)
378
+ extended_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
364
379
  when member.name.interface? && extended_interfaces
365
380
  NoMixinFoundError.check!(member.name, env: env, member: member)
366
- extended_interfaces << ancestor
381
+
382
+ extended_interfaces << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
367
383
  end
368
384
  end
369
385
  end
@@ -113,14 +113,14 @@ module RBS
113
113
  build_method(
114
114
  methods,
115
115
  type,
116
- member: member.update(types: member.types.map {|type| type.sub(subst) }),
116
+ member: member.update(overloads: member.overloads.map {|overload| overload.sub(subst) }),
117
117
  accessibility: member.visibility || accessibility
118
118
  )
119
119
  when :singleton_instance
120
120
  build_method(
121
121
  methods,
122
122
  type,
123
- member: member.update(types: member.types.map {|type| type.sub(subst) }),
123
+ member: member.update(overloads: member.overloads.map {|overload| overload.sub(subst) }),
124
124
  accessibility: :private
125
125
  )
126
126
  end
@@ -215,7 +215,7 @@ module RBS
215
215
  def build_method(methods, type, member:, accessibility:)
216
216
  defn = methods.methods[member.name] ||= Methods::Definition.empty(type: type, name: member.name)
217
217
 
218
- if member.overload?
218
+ if member.overloading?
219
219
  defn.overloads << member
220
220
  else
221
221
  defn.accessibilities << accessibility