rbs 1.8.0 → 1.8.1

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: 9b12d92ea4eeeb5dbd6de6c5d58351b0306bdcd017d0f1e51a36599766bfded3
4
- data.tar.gz: d60cfb836027441a5bb3f85fbebb0e2ab9bc03c49a21f00c3f10d4ab8dd1de65
3
+ metadata.gz: df1527cdbc750871d430d1c69bd4c9188b8814af7f3163d62adc5f9c1297e0dc
4
+ data.tar.gz: 3d0cc66c78d043e5fd98b86b342a7e8944c1cee8bf31f8f876530caba4cd9bc9
5
5
  SHA512:
6
- metadata.gz: 9ef926a62415189173d41204d1a16674a4a8331e3fdefafe00a4e52c9cbf0f3eb84281194a5b5c43027455334c13ea0ab14e1b3f0a6b8d5f5644cb80733a246b
7
- data.tar.gz: ce07016eee6b4142a66a28d8c7ffc356b3d4fdd747027f2dd521b347efcb6ac791385e903a1e3b9f8d468ec66e13995e341516137ceba990db511982c6d0d206
6
+ metadata.gz: 5c7f150ac87495a3ef064b5b499a5ef72c13eeb23985b84def107c111c6973a02ce6c3984bf22d1389882adf6d02f70fc82773d78383dd3992a2d7dbe58a7e59
7
+ data.tar.gz: f99bd7edbf1b4cf1cb5f018538345fe8ea50653ad6fa908aa3cd98c46d45b095aabb0cc2314cfae064997c0db2c6a31c6f9ab4fda1b15d2890a6b9be8dc8244a
data/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 1.8.1 (2021-12-13)
6
+
7
+ ### Library changes
8
+
9
+ * Validate `extend` arguments ([\#840](https://github.com/ruby/rbs/pull/840))
10
+ * Allow a relative path as git remote in collection ([\#839](https://github.com/ruby/rbs/pull/839))
11
+
5
12
  ## 1.8.0 (2021-12-02)
6
13
 
7
14
  RBS 1.8.0 ships with a language feature enchancement, _generic type alias_.
@@ -104,9 +104,9 @@ module RBS
104
104
  else
105
105
  begin
106
106
  # git v2.27.0 or greater
107
- git 'clone', '--filter=blob:none', remote, git_dir.to_s
107
+ git 'clone', '--filter=blob:none', remote, git_dir.to_s, chdir: nil
108
108
  rescue CommandError
109
- git 'clone', remote, git_dir.to_s
109
+ git 'clone', remote, git_dir.to_s, chdir: nil
110
110
  end
111
111
  end
112
112
 
@@ -131,7 +131,8 @@ module RBS
131
131
  private def git_dir
132
132
  @git_dir ||= (
133
133
  base = Pathname(ENV['XDG_CACHE_HOME'] || File.expand_path("~/.cache"))
134
- dir = base.join('rbs', Digest::SHA256.hexdigest(remote))
134
+ cache_key = remote.start_with?('.') ? "#{remote}\0#{Dir.pwd}" : remote
135
+ dir = base.join('rbs', Digest::SHA256.hexdigest(cache_key))
135
136
  dir.mkpath
136
137
  dir
137
138
  )
@@ -149,13 +150,14 @@ module RBS
149
150
  git('rev-parse', 'HEAD').chomp
150
151
  end
151
152
 
152
- private def git(*cmd)
153
- sh! 'git', *cmd
153
+ private def git(*cmd, **opt)
154
+ sh! 'git', *cmd, **opt
154
155
  end
155
156
 
156
- private def sh!(*cmd)
157
+ private def sh!(*cmd, **opt)
157
158
  RBS.logger.debug "$ #{cmd.join(' ')}"
158
- (__skip__ = Open3.capture3(*cmd, chdir: git_dir)).then do |out, err, status|
159
+ opt = { chdir: git_dir }.merge(opt).compact
160
+ (__skip__ = Open3.capture3(*cmd, **opt)).then do |out, err, status|
159
161
  raise CommandError, "Unexpected status #{status.exitstatus}\n\n#{err}" unless status.success?
160
162
 
161
163
  out
@@ -291,6 +291,10 @@ module RBS
291
291
  end
292
292
 
293
293
  one_ancestors.each_extended_module do |mod|
294
+ mod.args.each do |arg|
295
+ validate_type_presence(arg)
296
+ end
297
+
294
298
  mod_defn = build_instance(mod.name, no_self_types: true)
295
299
  merge_definition(src: mod_defn,
296
300
  dest: definition,
@@ -299,6 +303,10 @@ module RBS
299
303
 
300
304
  interface_methods = {}
301
305
  one_ancestors.each_extended_interface do |mod|
306
+ mod.args.each do |arg|
307
+ validate_type_presence(arg)
308
+ end
309
+
302
310
  mod_defn = build_interface(mod.name)
303
311
  subst = Substitution.build(mod_defn.type_params, mod.args)
304
312
 
@@ -831,5 +839,26 @@ module RBS
831
839
  end
832
840
  end
833
841
  end
842
+
843
+ def validate_type_presence(type)
844
+ case type
845
+ when Types::ClassInstance, Types::ClassSingleton, Types::Interface, Types::Alias
846
+ validate_type_name(type.name, type.location)
847
+ end
848
+
849
+ type.each_type do |type|
850
+ validate_type_presence(type)
851
+ end
852
+ end
853
+
854
+ def validate_type_name(name, location)
855
+ name = name.absolute!
856
+
857
+ return if name.class? && env.class_decls.key?(name)
858
+ return if name.interface? && env.interface_decls.key?(name)
859
+ return if name.alias? && env.alias_decls.key?(name)
860
+
861
+ raise NoTypeFoundError.new(type_name: name, location: location)
862
+ end
834
863
  end
835
864
  end
data/lib/rbs/validator.rb CHANGED
@@ -27,19 +27,17 @@ module RBS
27
27
  end
28
28
  end
29
29
 
30
+ definition_builder.validate_type_name(type.name, type.location)
31
+
30
32
  type_params = case type
31
33
  when Types::ClassInstance
32
- env.class_decls[type.name]&.type_params
34
+ env.class_decls[type.name].type_params
33
35
  when Types::Interface
34
- env.interface_decls[type.name]&.decl&.type_params
36
+ env.interface_decls[type.name].decl.type_params
35
37
  when Types::Alias
36
- env.alias_decls[type.name]&.decl&.type_params
38
+ env.alias_decls[type.name].decl.type_params
37
39
  end
38
40
 
39
- unless type_params
40
- raise NoTypeFoundError.new(type_name: type.name, location: type.location)
41
- end
42
-
43
41
  InvalidTypeApplicationError.check!(
44
42
  type_name: type.name,
45
43
  args: type.args,
@@ -48,9 +46,7 @@ module RBS
48
46
  )
49
47
 
50
48
  when Types::ClassSingleton
51
- # @type var type: Types::ClassSingleton
52
- type = _ = absolute_type(type, context: context) { type.name.absolute! }
53
- NoTypeFoundError.check!(type.name, env: env, location: type.location)
49
+ definition_builder.validate_type_presence(type)
54
50
  end
55
51
 
56
52
  type.each_type do |type|
data/lib/rbs/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module RBS
2
- VERSION = "1.8.0"
2
+ VERSION = "1.8.1"
3
3
  end
@@ -62,9 +62,9 @@ module RBS
62
62
 
63
63
  def resolve_revision: () -> String
64
64
 
65
- def git: (*String cmd) -> String
65
+ def git: (*String cmd, **untyped opt) -> String
66
66
 
67
- def sh!: (*String cmd) -> String
67
+ def sh!: (*String cmd, **untyped opt) -> String
68
68
 
69
69
  def format_config_entry: (Config::gem_entry) -> String
70
70
  end
@@ -43,6 +43,13 @@ module RBS
43
43
 
44
44
  def define_methods: (Definition, interface_methods: Hash[Symbol, Definition::Method], methods: MethodBuilder::Methods, super_interface_method: bool) -> void
45
45
 
46
+ # Validates presence of type names recursively.
47
+ # Assumes the type names are already resolved.
48
+ #
49
+ def validate_type_presence: (Types::t) -> void
50
+
51
+ def validate_type_name: (TypeName, Location[untyped, untyped]?) -> void
52
+
46
53
  # Expand a type alias of given name without type arguments.
47
54
  # Raises an error if the type alias requires arguments.
48
55
  #
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: 1.8.0
4
+ version: 1.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Soutaro Matsumoto
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-12-02 00:00:00.000000000 Z
11
+ date: 2021-12-13 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.