rbs 3.0.2 → 3.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9649673f547b364e4d635ab3f65b32a6edbf4e27c066672d07fbcd448c5d4117
4
- data.tar.gz: fdc3a315e87664045ac17752441f387626125645e9f1919d5bf7b6f1e74268d8
3
+ metadata.gz: 7a5d2a9cd76c2802e303f61813f418c15a2fc131b23f1eb8e90a92f409efcf37
4
+ data.tar.gz: d008724c5628a0c21b153a6ae99dadf7604ee90ad4caa210e07bbad974f91894
5
5
  SHA512:
6
- metadata.gz: 9f918e0459212a3c8d4b405955e62e14f21e99eb6fb71215feb22353ebb1aa1f2f1863bc7acb8b216ae7db5f98c975001dc45e45bc069354b2362f0a0f9064be
7
- data.tar.gz: 18f89a600eefa6de24f4daa699f101fa773ae116ea68c2924b2e2eac52d3b4b373018bf14c33c8fed2bb97e291d3cb998b42ca1d3355c5be92e50414662f9d20
6
+ metadata.gz: 4c903cc9f9b536281e0632aff0cae6d520856152bdf33b1d8fc34b2dd8e5caab93af6aaa1387eb7433b430d2d90dafcd5557c7aeba0b043d6ab340bc22d36dcb
7
+ data.tar.gz: 1913b79a1bb5b6510734aaca4aee8fa1759dae851486662ee5055040b8d70554b9466d061cc53c971ade8d76d75312486fe39cea5b1f4c7d3bfa333501fb56da
data/CHANGELOG.md CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 3.0.3 (2023-03-07)
6
+
7
+ ### Library changes
8
+
9
+ * Fix `DefinitionBuilder` ([\#1268](https://github.com/ruby/rbs/pull/1268))
10
+
11
+ #### rbs collection
12
+
13
+ * Skip dependencies not included in `Gemfile.lock` ([\#1266](https://github.com/ruby/rbs/pull/1266))
14
+
15
+ ### Miscellaneous
16
+
17
+ * Skip RBS validation on Ruby CI ([\#1264](https://github.com/ruby/rbs/pull/1264), [\#1263](https://github.com/ruby/rbs/pull/1263))
18
+
5
19
  ## 3.0.2 (2023-03-01)
6
20
 
7
21
  ### Library changes
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rbs (3.0.2)
4
+ rbs (3.0.3)
5
5
 
6
6
  PATH
7
7
  remote: test/assets/test-gem
@@ -115,4 +115,4 @@ DEPENDENCIES
115
115
  test-unit
116
116
 
117
117
  BUNDLED WITH
118
- 2.4.6
118
+ 2.4.7
data/Rakefile CHANGED
@@ -59,7 +59,17 @@ task :validate => :compile do
59
59
  sh "#{ruby} #{rbs} validate --silent"
60
60
 
61
61
  libs = FileList["stdlib/*"].map {|path| File.basename(path).to_s }
62
- libs << "rbs"
62
+
63
+ # Skip RBS validation because Ruby CI runs without rubygems
64
+ case skip_rbs_validation = ENV["SKIP_RBS_VALIDATION"]
65
+ when nil
66
+ libs << "rbs"
67
+ when "true"
68
+ # Skip
69
+ else
70
+ STDERR.puts "🚨🚨🚨🚨 SKIP_RBS_VALIDATION is expected to be `true` or unset, given `#{skip_rbs_validation}` 🚨🚨🚨🚨"
71
+ libs << "rbs"
72
+ end
63
73
 
64
74
  libs.each do |lib|
65
75
  sh "#{ruby} #{rbs} -r #{lib} validate --silent"
@@ -75,8 +75,9 @@ module RBS
75
75
  next
76
76
  end
77
77
 
78
- spec = gem_hash[dep.name] or raise "Cannot find `#{dep.name}` in bundler context"
79
- assign_gem(name: dep.name, version: spec.version, ignored_gems: ignored_gems, src_data: nil)
78
+ if spec = gem_hash[dep.name]
79
+ assign_gem(name: dep.name, version: spec.version, ignored_gems: ignored_gems, src_data: nil)
80
+ end
80
81
  end
81
82
 
82
83
  lockfile.lockfile_path.write(YAML.dump(lockfile.to_lockfile))
@@ -131,8 +132,9 @@ module RBS
131
132
  end
132
133
 
133
134
  gem_hash[name].dependencies.each do |dep|
134
- spec = gem_hash[dep.name]
135
- assign_gem(name: dep.name, version: spec.version, src_data: nil, ignored_gems: ignored_gems)
135
+ if spec = gem_hash[dep.name]
136
+ assign_gem(name: dep.name, version: spec.version, src_data: nil, ignored_gems: ignored_gems)
137
+ end
136
138
  end
137
139
  end
138
140
 
@@ -432,8 +432,9 @@ module RBS
432
432
  super_name = super_class.name
433
433
  super_args = super_class.args
434
434
 
435
- super_ancestors = instance_ancestors(super_name, building_ancestors: building_ancestors)
436
- ancestors.unshift(*super_ancestors.apply(super_args, location: entry.primary.decl.location))
435
+ super_ancestors = instance_ancestors(super_name, building_ancestors: building_ancestors).apply(super_args, location: entry.primary.decl.location)
436
+ super_ancestors.map! {|ancestor| fill_ancestor_source(ancestor, name: super_name, source: :super) }
437
+ ancestors.unshift(*super_ancestors)
437
438
  end
438
439
  end
439
440
 
@@ -450,8 +451,9 @@ module RBS
450
451
  included_modules.each do |mod|
451
452
  name = mod.name
452
453
  arg_types = mod.args
453
- mod_ancestors = instance_ancestors(name, building_ancestors: building_ancestors)
454
- ancestors.unshift(*mod_ancestors.apply(arg_types, location: entry.primary.decl.location))
454
+ mod_ancestors = instance_ancestors(name, building_ancestors: building_ancestors).apply(arg_types, location: entry.primary.decl.location)
455
+ mod_ancestors.map! {|ancestor| fill_ancestor_source(ancestor, name: name, source: mod.source) }
456
+ ancestors.unshift(*mod_ancestors)
455
457
  end
456
458
  end
457
459
 
@@ -461,8 +463,9 @@ module RBS
461
463
  prepended_modules.each do |mod|
462
464
  name = mod.name
463
465
  arg_types = mod.args
464
- mod_ancestors = instance_ancestors(name, building_ancestors: building_ancestors)
465
- ancestors.unshift(*mod_ancestors.apply(arg_types, location: entry.primary.decl.location))
466
+ mod_ancestors = instance_ancestors(name, building_ancestors: building_ancestors).apply(arg_types, location: entry.primary.decl.location)
467
+ mod_ancestors.map! {|ancestor| fill_ancestor_source(ancestor, name: name, source: mod.source) }
468
+ ancestors.unshift(*mod_ancestors)
466
469
  end
467
470
  end
468
471
 
@@ -495,8 +498,9 @@ module RBS
495
498
  super_name = super_class.name
496
499
  super_args = super_class.args
497
500
 
498
- super_ancestors = instance_ancestors(super_name, building_ancestors: building_ancestors)
499
- ancestors.unshift(*super_ancestors.apply(super_args, location: entry.primary.decl.location))
501
+ super_ancestors = instance_ancestors(super_name, building_ancestors: building_ancestors).apply(super_args, location: entry.primary.decl.location)
502
+ super_ancestors.map! {|ancestor| fill_ancestor_source(ancestor, name: super_name, source: :super) }
503
+ ancestors.unshift(*super_ancestors)
500
504
 
501
505
  when Definition::Ancestor::Singleton
502
506
  super_name = super_class.name
@@ -509,8 +513,9 @@ module RBS
509
513
  extended_modules.each do |mod|
510
514
  name = mod.name
511
515
  args = mod.args
512
- mod_ancestors = instance_ancestors(name, building_ancestors: building_ancestors)
513
- ancestors.unshift(*mod_ancestors.apply(args, location: entry.primary.decl.location))
516
+ mod_ancestors = instance_ancestors(name, building_ancestors: building_ancestors).apply(args, location: entry.primary.decl.location)
517
+ mod_ancestors.map! {|ancestor| fill_ancestor_source(ancestor, name: name, source: mod.source) }
518
+ ancestors.unshift(*mod_ancestors)
514
519
  end
515
520
 
516
521
  ancestors.unshift(self_ancestor)
@@ -541,9 +546,9 @@ module RBS
541
546
 
542
547
  included_interfaces = one_ancestors.included_interfaces or raise
543
548
  included_interfaces.each do |a|
544
- included_ancestors = interface_ancestors(a.name, building_ancestors: building_ancestors)
545
-
546
- ancestors.unshift(*included_ancestors.apply(a.args, location: entry.decl.location))
549
+ included_ancestors = interface_ancestors(a.name, building_ancestors: building_ancestors).apply(a.args, location: entry.decl.location)
550
+ included_ancestors.map! {|ancestor| fill_ancestor_source(ancestor, name: a.name, source: a.source) }
551
+ ancestors.unshift(*included_ancestors)
547
552
  end
548
553
 
549
554
  ancestors.unshift(self_ancestor)
@@ -555,6 +560,19 @@ module RBS
555
560
  ancestors: ancestors
556
561
  )
557
562
  end
563
+
564
+ def fill_ancestor_source(ancestor, name:, source:, &block)
565
+ case ancestor
566
+ when Definition::Ancestor::Instance
567
+ if ancestor.name == name && !ancestor.source
568
+ Definition::Ancestor::Instance.new(name: ancestor.name, args: ancestor.args, source: source)
569
+ else
570
+ ancestor
571
+ end
572
+ else
573
+ ancestor
574
+ end
575
+ end
558
576
  end
559
577
  end
560
578
  end
@@ -31,9 +31,10 @@ module RBS
31
31
  end
32
32
 
33
33
  def define_interface(definition, type_name, subst)
34
- included_interfaces = ancestor_builder.one_interface_ancestors(type_name).included_interfaces or raise
35
- interface_methods = interface_methods(included_interfaces)
34
+ included_interfaces = ancestor_builder.interface_ancestors(type_name).ancestors #: Array[Definition::Ancestor::Instance]
35
+ included_interfaces = included_interfaces.reject {|ancestor| ancestor.source == nil }
36
36
 
37
+ interface_methods = interface_methods(included_interfaces)
37
38
  methods = method_builder.build_interface(type_name)
38
39
 
39
40
  import_methods(definition, type_name, methods, interface_methods, subst)
@@ -55,7 +56,6 @@ module RBS
55
56
  Definition.new(type_name: type_name, entry: entry, self_type: self_type, ancestors: ancestors).tap do |definition|
56
57
  methods = method_builder.build_interface(type_name)
57
58
  one_ancestors = ancestor_builder.one_interface_ancestors(type_name)
58
-
59
59
  validate_type_params(definition, methods: methods, ancestors: one_ancestors)
60
60
 
61
61
  define_interface(definition, type_name, subst)
@@ -94,7 +94,12 @@ module RBS
94
94
  define_instance(definition, mod.name, subst + tapp_subst(mod.name, mod.args))
95
95
  end
96
96
 
97
- interface_methods = interface_methods(one_ancestors.each_included_interface.to_a)
97
+ all_interfaces = one_ancestors.each_included_interface.flat_map do |interface|
98
+ other_interfaces = ancestor_builder.interface_ancestors(interface.name).ancestors #: Array[Definition::Ancestor::Instance]
99
+ other_interfaces = other_interfaces.select {|ancestor| ancestor.source }
100
+ [interface, *other_interfaces]
101
+ end
102
+ interface_methods = interface_methods(all_interfaces)
98
103
  import_methods(definition, type_name, methods, interface_methods, subst)
99
104
 
100
105
  one_ancestors.each_prepended_module do |mod|
@@ -219,6 +224,7 @@ module RBS
219
224
 
220
225
  Definition.new(type_name: type_name, entry: entry, self_type: self_type, ancestors: ancestors).tap do |definition|
221
226
  one_ancestors = ancestor_builder.one_singleton_ancestors(type_name)
227
+ methods = method_builder.build_singleton(type_name)
222
228
 
223
229
  if super_class = one_ancestors.super_class
224
230
  case super_class
@@ -233,8 +239,13 @@ module RBS
233
239
  definition.class_variables.merge!(defn.class_variables)
234
240
  end
235
241
 
236
- one_ancestors = ancestor_builder.one_singleton_ancestors(type_name)
237
- methods = method_builder.build_singleton(type_name)
242
+ all_interfaces = one_ancestors.each_extended_interface.flat_map do |interface|
243
+ other_interfaces = ancestor_builder.interface_ancestors(interface.name).ancestors #: Array[Definition::Ancestor::Instance]
244
+ other_interfaces = other_interfaces.select {|ancestor| ancestor.source }
245
+ [interface, *other_interfaces]
246
+ end
247
+ interface_methods = interface_methods(all_interfaces)
248
+ import_methods(definition, type_name, methods, interface_methods, Substitution.new)
238
249
 
239
250
  one_ancestors.each_extended_module do |mod|
240
251
  mod.args.each do |arg|
@@ -279,7 +290,7 @@ module RBS
279
290
 
280
291
  def build_singleton(type_name)
281
292
  type_name = env.normalize_module_name(type_name)
282
-
293
+
283
294
  try_cache type_name, cache: singleton_cache do
284
295
  entry = env.class_decls[type_name] or raise "Unknown name for build_singleton: #{type_name}"
285
296
  ensure_namespace!(type_name.namespace, location: entry.decls[0].decl.location)
@@ -683,8 +694,8 @@ module RBS
683
694
  Definition::Method::TypeDef.new(
684
695
  type: method_type,
685
696
  member: original,
686
- defined_in: definition.type_name,
687
- implemented_in: definition.type_name
697
+ defined_in: defined_in,
698
+ implemented_in: implemented_in
688
699
  )
689
700
  ],
690
701
  accessibility: method.accessibility,
@@ -713,7 +724,7 @@ module RBS
713
724
  method_definition = Definition::Method.new(
714
725
  super_method: super_method,
715
726
  defs: existing_method.defs.map do |defn|
716
- defn.update(implemented_in: definition.type_name)
727
+ defn.update(implemented_in: implemented_in)
717
728
  end,
718
729
  accessibility: existing_method.accessibility,
719
730
  alias_of: existing_method.alias_of
@@ -725,8 +736,8 @@ module RBS
725
736
  type_def = Definition::Method::TypeDef.new(
726
737
  type: subst.empty? ? overload.method_type : overload.method_type.sub(subst),
727
738
  member: overloading_def,
728
- defined_in: definition.type_name,
729
- implemented_in: definition.type_name
739
+ defined_in: defined_in,
740
+ implemented_in: implemented_in
730
741
  )
731
742
 
732
743
  method_definition.defs.unshift(type_def)
data/lib/rbs/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RBS
4
- VERSION = "3.0.2"
4
+ VERSION = "3.0.3"
5
5
  end
@@ -154,6 +154,10 @@ module RBS
154
154
  prepended_modules: Array[Definition::Ancestor::Instance]?,
155
155
  extended_modules: Array[Definition::Ancestor::Instance]?,
156
156
  extended_interfaces: Array[Definition::Ancestor::Instance]?) -> void
157
+
158
+ # Fill `#source` of instance ancestor if `ancestor.name == name` and its `source` is `nil`
159
+ #
160
+ def fill_ancestor_source: (Definition::Ancestor::t, name: TypeName, source: Definition::Ancestor::Instance::source) -> Definition::Ancestor::t
157
161
  end
158
162
  end
159
163
  end
data/sig/definition.rbs CHANGED
@@ -83,8 +83,9 @@ module RBS
83
83
  type t = Instance | Singleton
84
84
 
85
85
  class Instance
86
- type source = :super | nil
87
- | AST::Members::Include | AST::Members::Extend | AST::Members::Prepend
86
+ type source = :super # Inheritance
87
+ | nil # Itself
88
+ | AST::Members::Include | AST::Members::Extend | AST::Members::Prepend # AST
88
89
  | AST::Declarations::Module::Self
89
90
 
90
91
  attr_reader name: TypeName
@@ -142,6 +142,10 @@ module RBS
142
142
  #
143
143
  def define_instance: (Definition definition, TypeName type_name, Substitution subst) -> void
144
144
 
145
+ # Updates `definition` with methods defined in an interface `type_name`
146
+ #
147
+ # It processes includes recursively
148
+ #
145
149
  def define_interface: (Definition definition, TypeName type_name, Substitution subst) -> void
146
150
 
147
151
  # Returns a substitution that corresponds to type application
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbs
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.2
4
+ version: 3.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Soutaro Matsumoto
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-03-01 00:00:00.000000000 Z
11
+ date: 2023-03-07 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: RBS is the language for type signatures for Ruby and standard library
14
14
  definitions.