rbs 0.2.0 → 0.6.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.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +7 -1
  3. data/.gitignore +1 -1
  4. data/CHANGELOG.md +35 -0
  5. data/COPYING +1 -1
  6. data/Gemfile +16 -2
  7. data/README.md +87 -48
  8. data/Rakefile +54 -22
  9. data/bin/rbs-prof +9 -0
  10. data/bin/run_in_md.rb +49 -0
  11. data/bin/test_runner.rb +0 -2
  12. data/docs/sigs.md +6 -6
  13. data/docs/stdlib.md +3 -5
  14. data/docs/syntax.md +6 -3
  15. data/goodcheck.yml +65 -0
  16. data/lib/rbs.rb +3 -0
  17. data/lib/rbs/ast/declarations.rb +115 -14
  18. data/lib/rbs/ast/members.rb +41 -17
  19. data/lib/rbs/cli.rb +301 -123
  20. data/lib/rbs/constant.rb +4 -4
  21. data/lib/rbs/constant_table.rb +64 -53
  22. data/lib/rbs/definition.rb +175 -59
  23. data/lib/rbs/definition_builder.rb +646 -603
  24. data/lib/rbs/environment.rb +352 -210
  25. data/lib/rbs/environment_walker.rb +14 -23
  26. data/lib/rbs/errors.rb +159 -3
  27. data/lib/rbs/factory.rb +14 -0
  28. data/lib/rbs/namespace.rb +18 -0
  29. data/lib/rbs/parser.y +75 -21
  30. data/lib/rbs/prototype/rb.rb +119 -117
  31. data/lib/rbs/prototype/rbi.rb +5 -3
  32. data/lib/rbs/prototype/runtime.rb +34 -7
  33. data/lib/rbs/substitution.rb +8 -1
  34. data/lib/rbs/test.rb +81 -3
  35. data/lib/rbs/test/errors.rb +1 -1
  36. data/lib/rbs/test/hook.rb +133 -259
  37. data/lib/rbs/test/observer.rb +17 -0
  38. data/lib/rbs/test/setup.rb +13 -14
  39. data/lib/rbs/test/spy.rb +0 -321
  40. data/lib/rbs/test/tester.rb +116 -0
  41. data/lib/rbs/test/type_check.rb +44 -7
  42. data/lib/rbs/type_name_resolver.rb +58 -0
  43. data/lib/rbs/types.rb +94 -2
  44. data/lib/rbs/validator.rb +51 -0
  45. data/lib/rbs/variance_calculator.rb +12 -2
  46. data/lib/rbs/version.rb +1 -1
  47. data/lib/rbs/writer.rb +127 -91
  48. data/rbs.gemspec +0 -9
  49. data/schema/annotation.json +14 -0
  50. data/schema/comment.json +26 -0
  51. data/schema/decls.json +353 -0
  52. data/schema/function.json +87 -0
  53. data/schema/location.json +56 -0
  54. data/schema/members.json +248 -0
  55. data/schema/methodType.json +44 -0
  56. data/schema/types.json +299 -0
  57. data/stdlib/benchmark/benchmark.rbs +151 -151
  58. data/stdlib/builtin/encoding.rbs +2 -0
  59. data/stdlib/builtin/enumerable.rbs +2 -2
  60. data/stdlib/builtin/enumerator.rbs +3 -1
  61. data/stdlib/builtin/fiber.rbs +5 -1
  62. data/stdlib/builtin/file.rbs +0 -3
  63. data/stdlib/builtin/io.rbs +4 -4
  64. data/stdlib/builtin/proc.rbs +1 -2
  65. data/stdlib/builtin/symbol.rbs +1 -1
  66. data/stdlib/builtin/thread.rbs +2 -2
  67. data/stdlib/csv/csv.rbs +4 -6
  68. data/stdlib/fiber/fiber.rbs +117 -0
  69. data/stdlib/json/json.rbs +1 -1
  70. data/stdlib/logger/formatter.rbs +23 -0
  71. data/stdlib/logger/log_device.rbs +39 -0
  72. data/stdlib/logger/logger.rbs +507 -0
  73. data/stdlib/logger/period.rbs +7 -0
  74. data/stdlib/logger/severity.rbs +8 -0
  75. data/stdlib/mutex_m/mutex_m.rbs +77 -0
  76. data/stdlib/pathname/pathname.rbs +6 -6
  77. data/stdlib/prime/integer-extension.rbs +1 -1
  78. data/stdlib/prime/prime.rbs +44 -44
  79. data/stdlib/tmpdir/tmpdir.rbs +1 -1
  80. metadata +26 -116
  81. data/lib/rbs/test/test_helper.rb +0 -183
@@ -0,0 +1,7 @@
1
+ module Logger::Period
2
+ def self?.next_rotate_time: (Time now, String shift_age) -> untyped
3
+
4
+ def self?.previous_period_end: (Time now, String shift_age) -> untyped
5
+
6
+ SiD: Integer
7
+ end
@@ -0,0 +1,8 @@
1
+ module Logger::Severity
2
+ DEBUG: 0
3
+ INFO: 1
4
+ WARN: 2
5
+ ERROR: 3
6
+ FATAL: 4
7
+ UNKNOWN: 5
8
+ end
@@ -0,0 +1,77 @@
1
+ # # mutex_m.rb
2
+ #
3
+ # When 'mutex_m' is required, any object that extends or includes Mutex_m will
4
+ # be treated like a Mutex.
5
+ #
6
+ # Start by requiring the standard library Mutex_m:
7
+ #
8
+ # require "mutex_m.rb"
9
+ #
10
+ # From here you can extend an object with Mutex instance methods:
11
+ #
12
+ # obj = Object.new
13
+ # obj.extend Mutex_m
14
+ #
15
+ # Or mixin Mutex_m into your module to your class inherit Mutex instance methods
16
+ # --- remember to call super() in your class initialize method.
17
+ #
18
+ # class Foo
19
+ # include Mutex_m
20
+ # def initialize
21
+ # # ...
22
+ # super()
23
+ # end
24
+ # # ...
25
+ # end
26
+ # obj = Foo.new
27
+ # # this obj can be handled like Mutex
28
+ #
29
+ module Mutex_m
30
+ def self.append_features: (Module cl) -> untyped
31
+
32
+ def self.define_aliases: (Module cl) -> untyped
33
+
34
+ def self.extend_object: (Object obj) -> untyped
35
+
36
+ public
37
+
38
+ def mu_extended: () -> untyped
39
+
40
+ # See Mutex#lock
41
+ #
42
+ def mu_lock: () -> Thread::Mutex
43
+
44
+ # See Mutex#locked?
45
+ #
46
+ def mu_locked?: () -> bool
47
+
48
+ # See Mutex#synchronize
49
+ #
50
+ def mu_synchronize: [T] () { () -> T } -> T
51
+
52
+ # See Mutex#try_lock
53
+ #
54
+ def mu_try_lock: () -> bool
55
+
56
+ # See Mutex#unlock
57
+ #
58
+ def mu_unlock: () -> Thread::Mutex
59
+
60
+ # See Mutex#sleep
61
+ #
62
+ def sleep: (?Numeric timeout) -> Integer
63
+
64
+ alias locked? mu_locked?
65
+ alias lock mu_lock
66
+ alias unlock mu_unlock
67
+ alias try_lock mu_try_lock
68
+ alias synchronize mu_synchronize
69
+
70
+ private
71
+
72
+ def initialize: (*untyped args) -> untyped
73
+
74
+ def mu_initialize: () -> untyped
75
+ end
76
+
77
+ Mutex_m::VERSION: String
@@ -1066,17 +1066,17 @@ class Pathname
1066
1066
  def prepend_prefix: (untyped prefix, untyped relpath) -> untyped
1067
1067
 
1068
1068
  def split_names: (untyped path) -> untyped
1069
- end
1070
1069
 
1071
- Pathname::SAME_PATHS: Proc
1070
+ SAME_PATHS: Proc
1072
1071
 
1073
- Pathname::SEPARATOR_LIST: String
1072
+ SEPARATOR_LIST: String
1074
1073
 
1075
- Pathname::SEPARATOR_PAT: Regexp
1074
+ SEPARATOR_PAT: Regexp
1076
1075
 
1077
- Pathname::TO_PATH: Symbol
1076
+ TO_PATH: Symbol
1077
+ end
1078
1078
 
1079
- extension Kernel (Pathname)
1079
+ module Kernel
1080
1080
  # Creates a new Pathname object from the given string, `path`, and returns
1081
1081
  # pathname object.
1082
1082
  #
@@ -1,4 +1,4 @@
1
- extension Integer (Prime)
1
+ class Integer
2
2
  # Iterates the given block over all prime numbers.
3
3
  #
4
4
  # See Prime#each for more details.
@@ -129,60 +129,60 @@ class Prime
129
129
  # Returns the singleton instance.
130
130
  #
131
131
  def self.instance: () -> Prime
132
- end
133
132
 
134
- # An abstract class for enumerating pseudo-prime numbers.
135
- #
136
- # Concrete subclasses should override succ, next, rewind.
137
- #
138
- class Prime::PseudoPrimeGenerator
139
- def initialize: (?Integer?) -> void
133
+ # An abstract class for enumerating pseudo-prime numbers.
134
+ #
135
+ # Concrete subclasses should override succ, next, rewind.
136
+ #
137
+ class PseudoPrimeGenerator
138
+ def initialize: (?Integer?) -> void
140
139
 
141
- include Enumerable[Integer, void]
140
+ include Enumerable[Integer, void]
142
141
 
143
- attr_accessor upper_bound (): Integer?
142
+ attr_accessor upper_bound (): Integer?
144
143
 
145
- # Iterates the given block for each prime number.
146
- #
147
- def each: () { (Integer) -> void } -> void
144
+ # Iterates the given block for each prime number.
145
+ #
146
+ def each: () { (Integer) -> void } -> void
148
147
 
149
- # alias of `succ`.
150
- #
151
- def next: () -> Integer
148
+ # alias of `succ`.
149
+ #
150
+ def next: () -> Integer
152
151
 
153
- # Rewinds the internal position for enumeration.
154
- #
155
- # See `Enumerator`#rewind.
156
- #
157
- def rewind: () -> void
152
+ # Rewinds the internal position for enumeration.
153
+ #
154
+ # See `Enumerator`#rewind.
155
+ #
156
+ def rewind: () -> void
158
157
 
159
- def size: () -> Float
158
+ def size: () -> Float
160
159
 
161
- # returns the next pseudo-prime number, and move the internal position forward.
160
+ # returns the next pseudo-prime number, and move the internal position forward.
161
+ #
162
+ # `PseudoPrimeGenerator`#succ raises `NotImplementedError`.
163
+ #
164
+ def succ: () -> Integer
165
+ end
166
+
167
+ # An implementation of `PseudoPrimeGenerator`.
162
168
  #
163
- # `PseudoPrimeGenerator`#succ raises `NotImplementedError`.
169
+ # Uses `EratosthenesSieve`.
164
170
  #
165
- def succ: () -> Integer
166
- end
167
-
168
- # An implementation of `PseudoPrimeGenerator`.
169
- #
170
- # Uses `EratosthenesSieve`.
171
- #
172
- class Prime::EratosthenesGenerator < PseudoPrimeGenerator
173
- end
171
+ class EratosthenesGenerator < PseudoPrimeGenerator
172
+ end
174
173
 
175
- # An implementation of `PseudoPrimeGenerator` which uses a prime table generated
176
- # by trial division.
177
- #
178
- class Prime::TrialDivisionGenerator < PseudoPrimeGenerator
179
- end
174
+ # An implementation of `PseudoPrimeGenerator` which uses a prime table generated
175
+ # by trial division.
176
+ #
177
+ class TrialDivisionGenerator < PseudoPrimeGenerator
178
+ end
180
179
 
181
- # Generates all integers which are greater than 2 and are not divisible by
182
- # either 2 or 3.
183
- #
184
- # This is a pseudo-prime generator, suitable on checking primality of an integer
185
- # by brute force method.
186
- #
187
- class Prime::Generator23 < PseudoPrimeGenerator
180
+ # Generates all integers which are greater than 2 and are not divisible by
181
+ # either 2 or 3.
182
+ #
183
+ # This is a pseudo-prime generator, suitable on checking primality of an integer
184
+ # by brute force method.
185
+ #
186
+ class Generator23 < PseudoPrimeGenerator
187
+ end
188
188
  end
@@ -1,4 +1,4 @@
1
- extension Dir (tmpdir)
1
+ class Dir
2
2
  # Returns the operating system's temporary file path.
3
3
  #
4
4
  def self.tmpdir: () -> String
metadata CHANGED
@@ -1,127 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.6.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-05-19 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '13.0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '13.0'
41
- - !ruby/object:Gem::Dependency
42
- name: minitest
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '5.0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '5.0'
55
- - !ruby/object:Gem::Dependency
56
- name: racc
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: 1.4.16
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: 1.4.16
69
- - !ruby/object:Gem::Dependency
70
- name: rubocop
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: rubocop-rubycw
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: minitest-reporters
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: 1.3.6
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: 1.3.6
111
- - !ruby/object:Gem::Dependency
112
- name: json
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: 2.3.0
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: 2.3.0
11
+ date: 2020-07-12 00:00:00.000000000 Z
12
+ dependencies: []
125
13
  description: RBS is the language for type signatures for Ruby and standard library
126
14
  definitions.
127
15
  email:
@@ -143,6 +31,8 @@ files:
143
31
  - bin/annotate-with-rdoc
144
32
  - bin/console
145
33
  - bin/query-rdoc
34
+ - bin/rbs-prof
35
+ - bin/run_in_md.rb
146
36
  - bin/setup
147
37
  - bin/sort
148
38
  - bin/test_runner.rb
@@ -151,6 +41,7 @@ files:
151
41
  - docs/stdlib.md
152
42
  - docs/syntax.md
153
43
  - exe/rbs
44
+ - goodcheck.yml
154
45
  - lib/rbs.rb
155
46
  - lib/rbs/ast/annotation.rb
156
47
  - lib/rbs/ast/comment.rb
@@ -167,6 +58,7 @@ files:
167
58
  - lib/rbs/environment_loader.rb
168
59
  - lib/rbs/environment_walker.rb
169
60
  - lib/rbs/errors.rb
61
+ - lib/rbs/factory.rb
170
62
  - lib/rbs/location.rb
171
63
  - lib/rbs/method_type.rb
172
64
  - lib/rbs/namespace.rb
@@ -179,18 +71,29 @@ files:
179
71
  - lib/rbs/test.rb
180
72
  - lib/rbs/test/errors.rb
181
73
  - lib/rbs/test/hook.rb
74
+ - lib/rbs/test/observer.rb
182
75
  - lib/rbs/test/setup.rb
183
76
  - lib/rbs/test/spy.rb
184
- - lib/rbs/test/test_helper.rb
77
+ - lib/rbs/test/tester.rb
185
78
  - lib/rbs/test/type_check.rb
186
79
  - lib/rbs/type_name.rb
80
+ - lib/rbs/type_name_resolver.rb
187
81
  - lib/rbs/types.rb
82
+ - lib/rbs/validator.rb
188
83
  - lib/rbs/variance_calculator.rb
189
84
  - lib/rbs/vendorer.rb
190
85
  - lib/rbs/version.rb
191
86
  - lib/rbs/writer.rb
192
87
  - lib/ruby/signature.rb
193
88
  - rbs.gemspec
89
+ - schema/annotation.json
90
+ - schema/comment.json
91
+ - schema/decls.json
92
+ - schema/function.json
93
+ - schema/location.json
94
+ - schema/members.json
95
+ - schema/methodType.json
96
+ - schema/types.json
194
97
  - stdlib/abbrev/abbrev.rbs
195
98
  - stdlib/base64/base64.rbs
196
99
  - stdlib/benchmark/benchmark.rbs
@@ -253,9 +156,16 @@ files:
253
156
  - stdlib/coverage/coverage.rbs
254
157
  - stdlib/csv/csv.rbs
255
158
  - stdlib/erb/erb.rbs
159
+ - stdlib/fiber/fiber.rbs
256
160
  - stdlib/find/find.rbs
257
161
  - stdlib/ipaddr/ipaddr.rbs
258
162
  - stdlib/json/json.rbs
163
+ - stdlib/logger/formatter.rbs
164
+ - stdlib/logger/log_device.rbs
165
+ - stdlib/logger/logger.rbs
166
+ - stdlib/logger/period.rbs
167
+ - stdlib/logger/severity.rbs
168
+ - stdlib/mutex_m/mutex_m.rbs
259
169
  - stdlib/pathname/pathname.rbs
260
170
  - stdlib/prime/integer-extension.rbs
261
171
  - stdlib/prime/prime.rbs
@@ -1,183 +0,0 @@
1
- module RBS
2
- module Test
3
- module TypeAssertions
4
- module ClassMethods
5
- attr_reader :target
6
-
7
- def library(*libs)
8
- @libs = libs
9
- @env = nil
10
- @target = nil
11
- end
12
-
13
- def env
14
- @env ||= begin
15
- loader = RBS::EnvironmentLoader.new
16
- (@libs || []).each do |lib|
17
- loader.add library: lib
18
- end
19
-
20
- RBS::Environment.new.tap do |env|
21
- loader.load(env: env)
22
- end
23
- end
24
- end
25
-
26
- def builder
27
- @builder ||= DefinitionBuilder.new(env: env)
28
- end
29
-
30
- def testing(type_or_string)
31
- type = case type_or_string
32
- when String
33
- RBS::Parser.parse_type(type_or_string, variables: [])
34
- else
35
- type_or_string
36
- end
37
-
38
- definition = case type
39
- when Types::ClassInstance
40
- builder.build_instance(type.name)
41
- when Types::ClassSingleton
42
- builder.build_singleton(type.name)
43
- else
44
- raise "Test target should be class instance or class singleton: #{type}"
45
- end
46
-
47
- @target = [type, definition]
48
- end
49
- end
50
-
51
- def self.included(base)
52
- base.extend ClassMethods
53
- end
54
-
55
- def env
56
- self.class.env
57
- end
58
-
59
- def builder
60
- self.class.builder
61
- end
62
-
63
- def targets
64
- @targets ||= []
65
- end
66
-
67
- def target
68
- targets.last || self.class.target
69
- end
70
-
71
- def testing(type_or_string)
72
- type = case type_or_string
73
- when String
74
- RBS::Parser.parse_type(type_or_string, variables: [])
75
- else
76
- type_or_string
77
- end
78
-
79
- definition = case type
80
- when Types::ClassInstance
81
- builder.build_instance(type.name)
82
- when Types::ClassSingleton
83
- builder.build_singleton(type.name)
84
- else
85
- raise "Test target should be class instance or class singleton: #{type}"
86
- end
87
-
88
- targets.push [type, definition]
89
-
90
- if block_given?
91
- begin
92
- yield
93
- ensure
94
- targets.pop
95
- end
96
- else
97
- [type, definition]
98
- end
99
- end
100
-
101
- ruby2_keywords def assert_send_type(method_type, receiver, method, *args, &block)
102
- trace = []
103
- spy = Spy.wrap(receiver, method)
104
- spy.callback = -> (result) { trace << result }
105
-
106
- exception = nil
107
-
108
- begin
109
- spy.wrapped_object.__send__(method, *args, &block)
110
- rescue => exn
111
- exception = exn
112
- end
113
-
114
- mt = case method_type
115
- when String
116
- RBS::Parser.parse_method_type(method_type, variables: [])
117
- when RBS::MethodType
118
- method_type
119
- end
120
-
121
- typecheck = TypeCheck.new(self_class: receiver.class, builder: builder)
122
- errors = typecheck.method_call(method, mt, trace.last, errors: [])
123
-
124
- assert_empty errors.map {|x| RBS::Test::Errors.to_string(x) }, "Call trace does not match with given method type: #{trace.last.inspect}"
125
-
126
- type, definition = target
127
- method_types = case
128
- when definition.instance_type?
129
- subst = Substitution.build(definition.declaration.type_params.each.map(&:name),
130
- type.args)
131
- definition.methods[method].method_types.map do |method_type|
132
- method_type.sub(subst)
133
- end
134
- when definition.class_type?
135
- definition.methods[method].method_types
136
- end
137
-
138
- all_errors = method_types.map {|t| typecheck.method_call(method, t, trace.last, errors: []) }
139
- assert all_errors.any? {|es| es.empty? }, "Call trace does not match one of method definitions:\n #{trace.last.inspect}\n #{method_types.join(" | ")}"
140
-
141
- if exception
142
- raise exception
143
- end
144
- end
145
-
146
- ruby2_keywords def refute_send_type(method_type, receiver, method, *args, &block)
147
- trace = []
148
- spy = Spy.wrap(receiver, method)
149
- spy.callback = -> (result) { trace << result }
150
-
151
- exception = nil
152
- begin
153
- spy.wrapped_object.__send__(method, *args, &block)
154
- rescue Exception => exn
155
- exception = exn
156
- end
157
-
158
- mt = case method_type
159
- when String
160
- RBS::Parser.parse_method_type(method_type, variables: [])
161
- when RBS::MethodType
162
- method_type
163
- end
164
-
165
- mt = mt.update(block: if mt.block
166
- MethodType::Block.new(
167
- type: mt.block.type.with_return_type(Types::Bases::Any.new(location: nil)),
168
- required: mt.block.required
169
- )
170
- end,
171
- type: mt.type.with_return_type(Types::Bases::Any.new(location: nil)))
172
-
173
- typecheck = TypeCheck.new(self_class: receiver.class, builder: builder)
174
- errors = typecheck.method_call(method, mt, trace.last, errors: [])
175
-
176
- assert_operator exception, :is_a?, ::Exception
177
- assert_empty errors.map {|x| RBS::Test::Errors.to_string(x) }
178
-
179
- exception
180
- end
181
- end
182
- end
183
- end