rbs 0.8.0 → 0.9.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a2e86d5e87d89f97eed8e2674aa5f5035413179ba104a5cb265ab748268c51fe
4
- data.tar.gz: 9d58fa00413d5a334496ee688bbc72520e1911558f39ad2d01b180b790e5d894
3
+ metadata.gz: cbe5937993dd712f397e9008911a67bea344277222c45f94f09d1fe6e30399d8
4
+ data.tar.gz: 914834d0f1bcb1d5e13dd8bb8446f8bfd544625ed8bf49d673fce5d47063b20c
5
5
  SHA512:
6
- metadata.gz: 328850c1f912cd7cc45e1c210140c098206f668c0400a817cde00e36dec1591ec235b5b6a1255b0e66d585745d4f6f7effeb09f28ae2a7536091852f9ba8bc89
7
- data.tar.gz: 96bc5adc81b98d723a98d20dcbeef13424fb0a4267272ff1ad6daaab5ef310f24c038f4e23793253beade1e55a00a6eece457697a3a4ec62413f08b7c42ace99
6
+ metadata.gz: 7ab09d820f4254c7be5648c64c43fd349414393eaecc7875fea580442f34f88b6284d4af360bcc3a9c4181cf6c0c041f39cf58b49c81ce913fe2051872517719
7
+ data.tar.gz: e27fd8bd3df37c73efeb6e56c355b76c6f12aa3ff538e4b6dacf5d627a9894947decd5edcdb76715fc3bb94bff42bb6ef286f6c1cfc69aeab20ae2db3a8f7ddc
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 0.9.0 (2020-08-03)
6
+
7
+ * Fix signature validation [#351](https://github.com/ruby/rbs/pull/351), [#352](https://github.com/ruby/rbs/pull/352)
8
+ * Parsing performance improvement [#350](https://github.com/ruby/rbs/pull/350)
9
+
5
10
  ## 0.8.0 (2020-08-01)
6
11
 
7
12
  * Signature updates for `Enumerator` and `PTY`
@@ -22,6 +22,12 @@ module RBS
22
22
  def to_json(*a)
23
23
  { string: string, location: location }.to_json(*a)
24
24
  end
25
+
26
+ def concat(string:, location:)
27
+ @string.concat string
28
+ @location.concat location
29
+ self
30
+ end
25
31
  end
26
32
  end
27
33
  end
@@ -413,6 +413,7 @@ EOU
413
413
  env.constant_decls.each do |name, const|
414
414
  stdout.puts "Validating constant: `#{name}`..."
415
415
  validator.validate_type const.decl.type, context: const.context
416
+ builder.ensure_namespace!(name.namespace, location: const.decl.location)
416
417
  end
417
418
 
418
419
  env.global_decls.each do |name, global|
@@ -422,7 +423,9 @@ EOU
422
423
 
423
424
  env.alias_decls.each do |name, decl|
424
425
  stdout.puts "Validating alias: `#{name}`..."
425
- validator.validate_type decl.decl.type, context: decl.context
426
+ builder.expand_alias(name).tap do |type|
427
+ validator.validate_type type, context: [Namespace.root]
428
+ end
426
429
  end
427
430
  end
428
431
 
@@ -385,9 +385,18 @@ module RBS
385
385
  end
386
386
  end
387
387
 
388
+ def ensure_namespace!(namespace, location:)
389
+ namespace.ascend do |ns|
390
+ unless ns.empty?
391
+ NoTypeFoundError.check!(ns.to_type_name, env: env, location: location)
392
+ end
393
+ end
394
+ end
395
+
388
396
  def build_instance(type_name)
389
397
  try_cache type_name, cache: instance_cache do
390
398
  entry = env.class_decls[type_name] or raise "Unknown name for build_instance: #{type_name}"
399
+ ensure_namespace!(type_name.namespace, location: entry.decls[0].decl.location)
391
400
 
392
401
  case entry
393
402
  when Environment::ClassEntry, Environment::ModuleEntry
@@ -434,6 +443,7 @@ module RBS
434
443
  def build_singleton(type_name)
435
444
  try_cache type_name, cache: singleton_cache do
436
445
  entry = env.class_decls[type_name] or raise "Unknown name for build_singleton: #{type_name}"
446
+ ensure_namespace!(type_name.namespace, location: entry.decls[0].decl.location)
437
447
 
438
448
  case entry
439
449
  when Environment::ClassEntry, Environment::ModuleEntry
@@ -1020,6 +1030,7 @@ module RBS
1020
1030
  try_cache(type_name, cache: interface_cache) do
1021
1031
  entry = env.interface_decls[type_name] or raise "Unknown name for build_interface: #{type_name}"
1022
1032
  declaration = entry.decl
1033
+ ensure_namespace!(type_name.namespace, location: declaration.location)
1023
1034
 
1024
1035
  self_type = Types::Interface.new(
1025
1036
  name: type_name,
@@ -1111,6 +1122,7 @@ module RBS
1111
1122
 
1112
1123
  def expand_alias(type_name)
1113
1124
  entry = env.alias_decls[type_name] or raise "Unknown name for expand_alias: #{type_name}"
1125
+ ensure_namespace!(type_name.namespace, location: entry.decl.location)
1114
1126
  entry.decl.type
1115
1127
  end
1116
1128
  end
@@ -77,6 +77,21 @@ module RBS
77
77
  locations.inject {|l1, l2| l1 + l2 }
78
78
  end
79
79
 
80
+ def concat(*others)
81
+ others.each { |other| self << other }
82
+ self
83
+ end
84
+
85
+ def <<(other)
86
+ if other
87
+ raise "Invalid concat: buffer=#{buffer.name}, other.buffer=#{other.buffer.name}" unless other.buffer == buffer
88
+ @end_pos = other.end_pos
89
+ @source = nil
90
+ @end_loc = nil
91
+ end
92
+ self
93
+ end
94
+
80
95
  def pred?(loc)
81
96
  loc.is_a?(Location) &&
82
97
  loc.name == name &&
@@ -1164,15 +1164,13 @@ def leading_comment(location)
1164
1164
  end
1165
1165
 
1166
1166
  def push_comment(string, location)
1167
- new_comment = AST::Comment.new(string: string+"\n", location: location)
1168
-
1169
- if (prev_comment = leading_comment(location)) && prev_comment.location.start_column == location.start_column
1170
- @comments.delete prev_comment.location.end_line
1171
- new_comment = AST::Comment.new(string: prev_comment.string + new_comment.string,
1172
- location: prev_comment.location + new_comment.location)
1167
+ if (comment = leading_comment(location)) && comment.location.start_column == location.start_column
1168
+ comment.concat(string: "#{string}\n", location: location)
1169
+ @comments[comment.location.end_line] = comment
1170
+ else
1171
+ new_comment = AST::Comment.new(string: "#{string}\n", location: location)
1172
+ @comments[new_comment.location.end_line] = new_comment
1173
1173
  end
1174
-
1175
- @comments[new_comment.location.end_line] = new_comment
1176
1174
  end
1177
1175
 
1178
1176
  def new_token(type, value = input.matched)
@@ -41,6 +41,10 @@ module RBS
41
41
  params: type_params.each.map(&:name),
42
42
  location: type.location
43
43
  )
44
+
45
+ when Types::Alias, Types::ClassSingleton
46
+ type = absolute_type(type, context: context) { type.name.absolute! }
47
+ NoTypeFoundError.check!(type.name, env: env, location: type.location)
44
48
  end
45
49
 
46
50
  type.each_type do |type|
@@ -1,3 +1,3 @@
1
1
  module RBS
2
- VERSION = "0.8.0"
2
+ VERSION = "0.9.0"
3
3
  end
@@ -42,6 +42,9 @@ end
42
42
  class JSON::Ext::Generator::State
43
43
  end
44
44
 
45
+ class JSON::Ext::Parser
46
+ end
47
+
45
48
  module JSON::Pure
46
49
  end
47
50
 
@@ -51,6 +54,9 @@ end
51
54
  class JSON::Pure::Generator::State
52
55
  end
53
56
 
57
+ class JSON::Pure::Parser
58
+ end
59
+
54
60
  type json_generator = singleton(::JSON::Ext::Generator) | singleton(::JSON::Pure::Generator)
55
61
  type json_parser = singleton(::JSON::Ext::Parser) | singleton(::JSON::Pure::Parser)
56
62
  type json_state = singleton(JSON::Ext::Generator::State) | singleton(JSON::Pure::Generator::State)
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: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Soutaro Matsumoto
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-08-01 00:00:00.000000000 Z
11
+ date: 2020-08-02 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.