raap 0.2.0 → 0.3.0

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: 272cb44584fb297591d356de0c90ecfbcf782951ed4a02432eb4cd87a6849f0f
4
- data.tar.gz: d0776eeeb3f840a1730f16a9df385414e3697631191961b986085773cad49e04
3
+ metadata.gz: 507ed156280ed3e0db1f2eb454bb03c57aa473d537d8c6ea5905ad852eba550d
4
+ data.tar.gz: 3108fa50c664702f79141a3c0b5e83934d6742468d1d51bfb2febb5b64a00b12
5
5
  SHA512:
6
- metadata.gz: '09ace505a4973cac5f075a133fc6e13c8fa34bde72adf522cc095ad3accfccec574b3209aaf4bca8deceb398b5b36f0893672722504895d51413c65877efc167'
7
- data.tar.gz: 1fe3eb4b5695bd69b2a30fdd2035a81aa3be1a289dee120f4664f95bb1d6d9a5ab8849f11acb957e8ac97e8dfb174f49536542fc96f29ecfade076e15b76619e
6
+ metadata.gz: 269e220d72b9861881de860a71a2adff318105595880fe73e86492e255c9bb32fbeff7ac3685b83ea11d792a02b1509eb969d9956483a9415608530a3f8806bd
7
+ data.tar.gz: df4e40973681eb292d7844aa5ed1427b7155f619c6ebea53792149f430ab28e42a0a0f52df9517a3af9af1e08494eaccdd8d4d84313c9d24184f6403a51e1dc5
data/README.md CHANGED
@@ -78,6 +78,21 @@ For example, an Integer with size zero is `0` and an Array is `[]`.
78
78
 
79
79
  RaaP, like other property-based tests, changes the size 100 times from 0 to 99 by default to generate test data.
80
80
 
81
+ ## Symbolic call
82
+
83
+ You may possibly see the following data structure in the debug logs.
84
+
85
+ ```rb
86
+ [:call, Object, :method, [], {}, nil]
87
+ ```
88
+
89
+ This is a data structure of the state of the method call.
90
+
91
+ Symbolic call is a tuple beginning with `:call`, followed by the receiver, method name, positional arguments, keyword arguments, and block arguments, in that order.
92
+ And the receiver and arguments are nestable.
93
+
94
+ It is used in QuickCheck and Proper to keep as much history of method calls as possible.
95
+
81
96
  ## Options
82
97
 
83
98
  ### `-I PATH` or `--include PATH`
data/lib/raap/cli.rb CHANGED
@@ -16,6 +16,7 @@ module RaaP
16
16
  :size_from,
17
17
  :size_to,
18
18
  :size_by,
19
+ :allow_private,
19
20
  keyword_init: true
20
21
  )
21
22
 
@@ -28,6 +29,7 @@ module RaaP
28
29
  size_from: 0,
29
30
  size_to: 99,
30
31
  size_by: 1,
32
+ allow_private: false,
31
33
  )
32
34
 
33
35
  def initialize(argv)
@@ -60,6 +62,9 @@ module RaaP
60
62
  o.on('--size-by int', Integer, "default: #{CLI.option.size_by}") do |arg|
61
63
  CLI.option.size_by = arg
62
64
  end
65
+ o.on('--allow-private', "default: #{CLI.option.allow_private}") do
66
+ CLI.option.allow_private = true
67
+ end
63
68
  end.parse!(@argv)
64
69
 
65
70
  CLI.option.dirs.each do |dir|
@@ -217,6 +222,7 @@ module RaaP
217
222
  ),
218
223
  size_step: CLI.option.size_from.step(to: CLI.option.size_to, by: CLI.option.size_by),
219
224
  timeout: CLI.option.timeout,
225
+ allow_private: true,
220
226
  ).run do |called|
221
227
  case called
222
228
  in Result::Success => s
@@ -225,6 +231,9 @@ module RaaP
225
231
  in Result::Failure => f
226
232
  puts 'F'
227
233
  puts "Failed in case of `#{f.called_str}`"
234
+ if e = f.exception
235
+ RaaP.logger.debug { "Failure: [#{e.class}] #{e.message}" }
236
+ end
228
237
  puts
229
238
  RaaP.logger.debug { PP.pp(f.symbolic_call, ''.dup) }
230
239
  puts "### call stack:"
@@ -236,10 +245,13 @@ module RaaP
236
245
  throw :break
237
246
  in Result::Skip => s
238
247
  print 'S'
239
- RaaP::logger.debug("Skip: [#{s.exception.class}] #{s.exception.message}")
248
+ RaaP.logger.debug { PP.pp(s.symbolic_call, ''.dup) }
249
+ RaaP.logger.debug("Skip: [#{s.exception.class}] #{s.exception.message}")
250
+ RaaP.logger.debug(s.exception.backtrace.join("\n"))
240
251
  in Result::Exception => e
241
252
  print 'E'
242
- RaaP.logger.info("Exception: [#{e.exception.class}] #{e.exception.message}")
253
+ RaaP.logger.debug { PP.pp(e.symbolic_call, ''.dup) }
254
+ RaaP.logger.debug("Exception: [#{e.exception.class}] #{e.exception.message}")
243
255
  RaaP.logger.debug(e.exception.backtrace.join("\n"))
244
256
  end
245
257
  end
@@ -8,18 +8,13 @@ module RaaP
8
8
  end
9
9
  end
10
10
 
11
- attr_reader :receiver_type
12
- attr_reader :method_name
13
- attr_reader :method_type
14
- attr_reader :size_step
15
- attr_reader :timeout
16
-
17
- def initialize(receiver_type:, method_name:, method_type:, size_step:, timeout:)
11
+ def initialize(receiver_type:, method_name:, method_type:, size_step:, timeout:, allow_private: false)
18
12
  @receiver_type = receiver_type
19
13
  @method_name = method_name
20
14
  @method_type = method_type
21
15
  @size_step = size_step
22
16
  @timeout = timeout
17
+ @allow_private = allow_private
23
18
  end
24
19
 
25
20
  def run
@@ -41,52 +36,53 @@ module RaaP
41
36
  private
42
37
 
43
38
  def call(size:, stats:)
44
- receiver_value = receiver_type.pick(size: size, eval: false)
45
- arguments = method_type.pick_arguments(size: size, eval: false)
46
- method_value = MethodValue.new(receiver_value:, arguments:, method_name:, size:)
47
- symbolic_call = method_value.to_symbolic_call
39
+ receiver_value = @receiver_type.pick(size: size, eval: false)
40
+ args, kwargs, block = @method_type.pick_arguments(size: size, eval: false)
41
+ # @type var symbolic_call: symbolic_call
42
+ symbolic_call = [:call, receiver_value, @method_name, args, kwargs, block]
43
+ symbolic_caller = SymbolicCaller.new(symbolic_call, allow_private: @allow_private)
48
44
  begin
49
- # ensure method_value
45
+ # ensure symbolic_call
50
46
  check = false
51
47
  if return_type.instance_of?(::RBS::Types::Bases::Bottom)
52
48
  begin
53
- return_value = SymbolicCaller.new(symbolic_call).eval
54
- rescue => e
49
+ return_value = symbolic_caller.eval
50
+ rescue StandardError, NotImplementedError
55
51
  check = true
56
52
  return_value = Value::Bottom.new
57
53
  end
58
54
  else
59
- return_value = SymbolicCaller.new(symbolic_call).eval
60
- check = check_return(receiver_value:, return_value:, method_type:)
55
+ return_value = symbolic_caller.eval
56
+ check = check_return(receiver_value:, return_value:, method_type: @method_type)
61
57
  end
62
58
  if check
63
59
  stats.success += 1
64
- Result::Success.new(method_value:, return_value:)
60
+ Result::Success.new(symbolic_call:, return_value:)
65
61
  else
66
- Result::Failure.new(method_value:, return_value:, symbolic_call:)
62
+ Result::Failure.new(symbolic_call:, return_value:)
67
63
  end
68
64
  rescue TypeError => exception
69
- Result::Failure.new(method_value:, return_value:, symbolic_call:)
65
+ Result::Failure.new(symbolic_call:, return_value:, exception:)
70
66
  end
71
67
 
72
- # not ensure method_value
68
+ # not ensure symbolic_call
73
69
  rescue NoMethodError => exception
74
70
  stats.skip += 1
75
- Result::Skip.new(method_value:, exception:)
71
+ Result::Skip.new(symbolic_call:, exception:)
76
72
  rescue NameError => e
77
73
  msg = e.name.nil? ? '' : "for `#{BindCall.to_s(e.receiver)}::#{e.name}`"
78
74
  RaaP.logger.error("Implementation is not found #{msg} maybe.")
79
75
  throw :break
80
76
  rescue NotImplementedError => exception
81
77
  stats.skip += 1
82
- Result::Skip.new(method_value:, exception:)
78
+ Result::Skip.new(symbolic_call:, exception:)
83
79
  rescue SystemStackError => exception
84
80
  stats.skip += 1
85
81
  RaaP.logger.warn "Found recursive type definition."
86
- Result::Skip.new(method_value: nil, exception:)
82
+ Result::Skip.new(symbolic_call:, exception:)
87
83
  rescue => exception
88
84
  stats.exception += 1
89
- Result::Exception.new(method_value:, exception:)
85
+ Result::Exception.new(symbolic_call:, exception:)
90
86
  end
91
87
 
92
88
  def check_return(receiver_value:, return_value:, method_type:)
@@ -118,7 +114,7 @@ module RaaP
118
114
  end
119
115
 
120
116
  def return_type
121
- method_type.rbs.type.return_type
117
+ @method_type.rbs.type.return_type
122
118
  end
123
119
  end
124
120
  end
data/lib/raap/result.rb CHANGED
@@ -4,15 +4,20 @@ module RaaP
4
4
  module Result
5
5
  module CalledStr
6
6
  def called_str
7
- "#{method_value.call_str} -> #{return_value.inspect}[#{return_value.class}]"
7
+ scr = SymbolicCaller.new(symbolic_call)
8
+ "#{scr.call_str} -> #{return_value.inspect}[#{return_value.class}]"
8
9
  end
9
10
  end
10
11
 
11
- Success = Data.define(:method_value, :return_value)
12
+ Success = Data.define(:symbolic_call, :return_value)
12
13
  Success.include CalledStr
13
- Failure = Data.define(:method_value, :return_value, :symbolic_call)
14
+ Failure = Data.define(:symbolic_call, :return_value, :exception) do
15
+ def initialize(exception: nil, **)
16
+ super
17
+ end
18
+ end
14
19
  Failure.include CalledStr
15
- Skip = Data.define(:method_value, :exception)
16
- Exception = Data.define(:method_value, :exception)
20
+ Skip = Data.define(:symbolic_call, :exception)
21
+ Exception = Data.define(:symbolic_call, :exception)
17
22
  end
18
23
  end
@@ -32,9 +32,11 @@ module RaaP
32
32
  end
33
33
 
34
34
  attr_reader :symbolic_call
35
+ attr_reader :allow_private
35
36
 
36
- def initialize(symbolic_call)
37
+ def initialize(symbolic_call, allow_private: false)
37
38
  @symbolic_call = symbolic_call
39
+ @allow_private = allow_private
38
40
  end
39
41
 
40
42
  def eval
@@ -43,8 +45,18 @@ module RaaP
43
45
  end
44
46
  end
45
47
 
46
- def walk(&)
47
- _walk(@symbolic_call, &)
48
+ def call_str
49
+ symbolic_call => [:call, receiver, Symbol => method_name, Array => args, Hash => kwargs, b]
50
+ receiver = try_eval(receiver)
51
+ args, kwargs, block = try_eval([args, kwargs, block])
52
+
53
+ a = []
54
+ a << args.map(&:inspect).join(', ') if !args.empty?
55
+ a << kwargs.map { |k ,v| "#{k}: #{BindCall.inspect(v)}" }.join(', ') if !kwargs.empty?
56
+ argument_str = a.join(', ')
57
+ block_str = block ? "{ }" : nil
58
+
59
+ "#{BindCall.inspect(receiver)}.#{method_name}(#{argument_str})#{block_str}"
48
60
  end
49
61
 
50
62
  def to_lines
@@ -69,13 +81,7 @@ module RaaP
69
81
  receiver = receiver_value.name + '.'
70
82
  else
71
83
  var_eq = ""
72
- receiver = if printable?(receiver_value)
73
- var = Var.new(printable(receiver_value))
74
- var + '.'
75
- else
76
- var = Var.new(var_name(receiver_value.class))
77
- var + '.'
78
- end
84
+ receiver = Var.new(printable(receiver_value)) + '.'
79
85
  end
80
86
 
81
87
  arguments = []
@@ -92,6 +98,16 @@ module RaaP
92
98
 
93
99
  private
94
100
 
101
+ def try_eval(symbolic_call)
102
+ SymbolicCaller.new(symbolic_call).eval
103
+ rescue RuntimeError, NotImplementedError
104
+ symbolic_call
105
+ end
106
+
107
+ def walk(&)
108
+ _walk(@symbolic_call, &)
109
+ end
110
+
95
111
  def _walk(symbolic_call, &block)
96
112
  return symbolic_call if BindCall::instance_of?(symbolic_call, BasicObject)
97
113
  return symbolic_call if !BindCall.respond_to?(symbolic_call, :deconstruct) && !BindCall.respond_to?(symbolic_call, :deconstruct_keys)
@@ -115,23 +131,22 @@ module RaaP
115
131
 
116
132
  def eval_one(symbolic_call)
117
133
  symbolic_call => [:call, receiver_value, method_name, args, kwargs, block]
118
- BindCall.public_send(receiver_value, method_name, *args, **kwargs, &block)
134
+ if @allow_private
135
+ receiver_value.__send__(method_name, *args, **kwargs, &block)
136
+ else
137
+ BindCall.public_send(receiver_value, method_name, *args, **kwargs, &block)
138
+ end
119
139
  end
120
140
 
121
141
  def var_name(mod)
122
142
  printable(mod).gsub('::', '_').downcase
123
143
  end
124
144
 
125
- def printable?(obj)
126
- case obj
127
- when Symbol, Integer, Float, Regexp, nil, true, false, String, Module, Var
128
- true
129
- else
130
- false
145
+ def printable(obj)
146
+ if obj in [:call, _, Symbol, Array, Hash, _]
147
+ return _walk(obj)
131
148
  end
132
- end
133
149
 
134
- def printable(obj)
135
150
  case obj
136
151
  when Var
137
152
  obj.name
@@ -140,6 +155,15 @@ module RaaP
140
155
  obj.inspect
141
156
  when String
142
157
  obj.inspect.gsub('"', "'") or raise
158
+ when Hash
159
+ hash_body = obj.map do |k, v|
160
+ ks = printable(k)
161
+ vs = printable(v)
162
+ ks.start_with?(':') ? "#{ks[1..-1]}: #{vs}" : "#{ks} => #{vs}"
163
+ end
164
+ "{#{hash_body.join(', ')}}"
165
+ when Array
166
+ "[#{obj.map { |o| printable(o) }.join(', ')}]"
143
167
  when Module
144
168
  BindCall.name(obj) or raise
145
169
  else
data/lib/raap/type.rb CHANGED
@@ -100,7 +100,17 @@ module RaaP
100
100
  when ::RBS::Types::Union
101
101
  type.types.sample&.then { |t| Type.new(t).pick(size:) }
102
102
  when ::RBS::Types::Intersection
103
- Value::Intersection.new(type, size: size)
103
+ [:call, Value::Intersection, :new, [type], {size:}, nil]
104
+ when ::RBS::Types::Interface
105
+ [:call, Value::Interface, :new, [type], {size:}, nil]
106
+ when ::RBS::Types::Variable
107
+ [:call, Value::Variable, :new, [type], {}, nil]
108
+ when ::RBS::Types::Bases::Void
109
+ [:call, Value::Void, :new, [], {}, nil]
110
+ when ::RBS::Types::Bases::Top
111
+ [:call, Value::Top, :new, [], {}, nil]
112
+ when ::RBS::Types::Bases::Bottom
113
+ [:call, Value::Bottom, :new, [], {}, nil]
104
114
  when ::RBS::Types::Optional
105
115
  case Random.rand(2)
106
116
  in 0 then Type.new(type.type).pick(size:)
@@ -117,10 +127,6 @@ module RaaP
117
127
  raise "cannot resolve `instance` type"
118
128
  when ::RBS::Types::Bases::Self
119
129
  raise "cannot resolve `self` type"
120
- when ::RBS::Types::Interface
121
- Value::Interface.new(type, size: size)
122
- when ::RBS::Types::Variable
123
- Value::Variable.new(type)
124
130
  when ::RBS::Types::ClassSingleton
125
131
  Object.const_get(type.name.to_s)
126
132
  when ::RBS::Types::ClassInstance
@@ -136,16 +142,10 @@ module RaaP
136
142
  type.literal
137
143
  when ::RBS::Types::Bases::Bool
138
144
  bool.pick(size: size)
139
- when ::RBS::Types::Bases::Void
140
- Value::Void.new
141
145
  when ::RBS::Types::Bases::Any
142
146
  untyped.pick(size: size)
143
147
  when ::RBS::Types::Bases::Nil
144
148
  nil
145
- when ::RBS::Types::Bases::Top
146
- Value::Top.new
147
- when ::RBS::Types::Bases::Bottom
148
- Value::Bottom.new
149
149
  else
150
150
  raise "not implemented #{type.to_s}"
151
151
  end
@@ -177,7 +177,7 @@ module RaaP
177
177
  raise
178
178
  end
179
179
  else
180
- Value::Module.new(type)
180
+ [:call, Value::Module, :new, [type], {}, nil]
181
181
  end
182
182
  end
183
183
 
@@ -313,7 +313,7 @@ module RaaP
313
313
  in 5 then symbol
314
314
  in 6 then bool
315
315
  in 7 then encoding
316
- in 8 then sized { BasicObject.new }
316
+ in 8 then sized { [:call, BasicObject, :new, [], {}, nil] }
317
317
  end
318
318
  end
319
319
 
@@ -1,13 +1,14 @@
1
1
  module RaaP
2
2
  module Value
3
3
  # FIXME: consider self_types
4
- class Module < BasicObject
4
+ # HINT: intersection?
5
+ class Module
5
6
  attr_reader :type
6
7
 
7
8
  def initialize(type)
8
9
  @type = type
9
10
  const = ::Object.const_get(type.name.absolute!.to_s)
10
- BindCall.extend(self, const)
11
+ extend(const)
11
12
  end
12
13
 
13
14
  def inspect = "#<module #{@type}>"
data/lib/raap/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RaaP
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.0"
5
5
  end
data/lib/raap.rb CHANGED
@@ -23,7 +23,6 @@ module RaaP
23
23
  autoload :FunctionType, "raap/function_type"
24
24
  autoload :MethodProperty, "raap/method_property"
25
25
  autoload :MethodType, "raap/method_type"
26
- autoload :MethodValue, "raap/method_value"
27
26
  autoload :Minitest, "raap/minitest"
28
27
  autoload :RBS, "raap/rbs"
29
28
  autoload :Result, "raap/result"
data/sig/raap.rbs CHANGED
@@ -19,15 +19,15 @@ module RaaP
19
19
 
20
20
  class CLI
21
21
  class Option < ::Struct[untyped]
22
- def self.new: (?dirs: ::Array[String], ?requires: ::Array[String], ?libraries: ::Array[String], ?timeout: (Integer | Float | nil), ?size_from: ::Integer, ?size_to: ::Integer, ?size_by: ::Integer) -> instance
22
+ def self.new: (?dirs: ::Array[String], ?requires: ::Array[String], ?libraries: ::Array[String], ?timeout: (Integer | Float | nil), ?size_from: ::Integer, ?size_to: ::Integer, ?size_by: ::Integer, ?allow_private: bool) -> instance
23
23
 
24
- def self.[]: (?dirs: ::Array[String], ?requires: ::Array[String], ?libraries: ::Array[String], ?timeout: (Integer | Float | nil), ?size_from: ::Integer, ?size_to: ::Integer, ?size_by: ::Integer) -> instance
24
+ def self.[]: (?dirs: ::Array[String], ?requires: ::Array[String], ?libraries: ::Array[String], ?timeout: (Integer | Float | nil), ?size_from: ::Integer, ?size_to: ::Integer, ?size_by: ::Integer, ?allow_private: bool) -> instance
25
25
 
26
26
  def self.keyword_init?: () -> true
27
27
 
28
- def self.members: () -> [ :dirs, :requires, :library, :timeout, :size_from, :size_to, :size_by]
28
+ def self.members: () -> [ :dirs, :requires, :library, :timeout, :size_from, :size_to, :size_by, :allow_private]
29
29
 
30
- def members: () -> [ :dirs, :requires, :library, :timeout, :size_from, :size_to, :size_by]
30
+ def members: () -> [ :dirs, :requires, :library, :timeout, :size_from, :size_to, :size_by, :allow_private]
31
31
 
32
32
  attr_accessor dirs: ::Array[String]
33
33
 
@@ -42,6 +42,8 @@ module RaaP
42
42
  attr_accessor size_to: ::Integer
43
43
 
44
44
  attr_accessor size_by: ::Integer
45
+
46
+ attr_accessor allow_private: bool
45
47
  end
46
48
 
47
49
  @argv: Array[String]
@@ -81,12 +83,15 @@ module RaaP
81
83
  attr_accessor skip: Integer
82
84
  attr_accessor exception: Integer
83
85
  end
84
- attr_reader receiver_type: Type
85
- attr_reader method_name: Symbol
86
- attr_reader method_type: MethodType
87
- attr_reader size_step: _Each[Integer]
88
- attr_reader timeout: (Integer | Float | nil)
89
- def initialize: (receiver_type: Type, method_name: Symbol, method_type: MethodType, size_step: _Each[Integer], timeout: (Integer | Float | nil)) -> void
86
+
87
+ @receiver_type: Type
88
+ @method_name: Symbol
89
+ @method_type: MethodType
90
+ @size_step: _Each[Integer]
91
+ @timeout: (Integer | Float | nil)
92
+ @allow_private: bool
93
+
94
+ def initialize: (receiver_type: Type, method_name: Symbol, method_type: MethodType, size_step: _Each[Integer], timeout: (Integer | Float | nil), ?allow_private: bool) -> void
90
95
  def run: () { (Result::Success | Result::Failure | Result::Skip | Result::Exception) -> void } -> Stats
91
96
 
92
97
  private
@@ -106,30 +111,6 @@ module RaaP
106
111
  def check_return: (untyped) -> bool
107
112
  end
108
113
 
109
- class MethodValue < Data
110
- def self.new: (untyped receiver_value, [Array[untyped], Hash[Symbol, untyped], ::Proc?] arguments, Symbol method_name, Integer size) -> instance
111
- | (receiver_value: untyped, arguments: [Array[untyped], Hash[Symbol, untyped], ::Proc?], method_name: Symbol, size: Integer) -> instance
112
-
113
- def self.[]: (untyped receiver_value, [Array[untyped], Hash[Symbol, untyped], ::Proc?] arguments, Symbol method_name, Integer size) -> instance
114
- | (receiver_value: untyped, arguments: [Array[untyped], Hash[Symbol, untyped], ::Proc?], method_name: Symbol, size: Integer) -> instance
115
-
116
- def self.members: () -> [ :receiver_value, :arguments, :method_name, :size ]
117
- def members: () -> [ :receiver_value, :arguments, :method_name, :size ]
118
-
119
- attr_reader receiver_value: untyped
120
- attr_reader arguments: [Array[untyped], Hash[Symbol, untyped], ::Proc?]
121
- attr_reader method_name: Symbol
122
- attr_reader size: Integer
123
-
124
- def to_symbolic_call: () -> symbolic_call
125
- def call_str: () -> String
126
-
127
- private
128
-
129
- def argument_str: () -> String
130
- def block_str: () -> String?
131
- end
132
-
133
114
  module Minitest
134
115
  end
135
116
 
@@ -146,33 +127,33 @@ module RaaP
146
127
 
147
128
  module Result
148
129
  interface _MethodValueReturnValue
149
- def method_value: () -> MethodValue
130
+ def symbolic_call: () -> symbolic_call
150
131
  def return_value: () -> untyped
151
132
  end
152
133
  module CalledStr : _MethodValueReturnValue
153
134
  def called_str: () -> String
154
135
  end
155
136
  class Success < Data
156
- def self.new: (method_value: MethodValue, return_value: untyped) -> instance
157
- attr_reader method_value: MethodValue
137
+ def self.new: (symbolic_call: symbolic_call, return_value: untyped) -> instance
138
+ attr_reader symbolic_call: symbolic_call
158
139
  attr_reader return_value: untyped
159
140
  include CalledStr
160
141
  end
161
142
  class Failure < Data
162
- def self.new: (method_value: MethodValue, return_value: untyped, symbolic_call: symbolic_call) -> instance
163
- attr_reader method_value: MethodValue
164
- attr_reader return_value: untyped
143
+ def self.new: (symbolic_call: symbolic_call, return_value: untyped, ?exception: ::Exception?) -> instance
165
144
  attr_reader symbolic_call: symbolic_call
145
+ attr_reader return_value: untyped
146
+ attr_reader exception: ::Exception?
166
147
  include CalledStr
167
148
  end
168
149
  class Skip < Data
169
- def self.new: (method_value: MethodValue?, exception: ::Exception) -> instance
170
- attr_reader method_value: MethodValue?
150
+ def self.new: (symbolic_call: symbolic_call?, exception: ::Exception) -> instance
151
+ attr_reader symbolic_call: symbolic_call?
171
152
  attr_reader exception: ::Exception
172
153
  end
173
154
  class Exception < Data
174
- def self.new: (method_value: MethodValue?, exception: ::Exception) -> instance
175
- attr_reader method_value: MethodValue?
155
+ def self.new: (symbolic_call: symbolic_call?, exception: ::Exception) -> instance
156
+ attr_reader symbolic_call: symbolic_call?
176
157
  attr_reader exception: ::Exception
177
158
  end
178
159
  end
@@ -196,13 +177,17 @@ module RaaP
196
177
  end
197
178
 
198
179
  attr_reader symbolic_call: untyped
199
- def initialize: (untyped) -> void
180
+ attr_reader allow_private: bool
181
+
182
+ def initialize: (untyped, ?allow_private: bool) -> void
200
183
  def eval: () -> untyped
201
- def walk: () ?{ (symbolic_call) -> untyped} -> untyped
184
+ def call_str: () -> String
202
185
  def to_lines: () -> Array[String]
203
186
 
204
187
  private
205
188
 
189
+ def try_eval: (untyped) -> untyped
190
+ def walk: () ?{ (symbolic_call) -> untyped} -> untyped
206
191
  def _walk: (untyped) ?{ (symbolic_call) -> untyped} -> untyped
207
192
  def eval_one: (symbolic_call) -> untyped
208
193
  def var_name: (Module) -> String
@@ -301,7 +286,7 @@ module RaaP
301
286
  def class: () -> class
302
287
  end
303
288
 
304
- class Module < BasicObject
289
+ class Module
305
290
  attr_reader type: ::RBS::Types::ClassInstance
306
291
 
307
292
  def initialize: (::RBS::Types::ClassInstance) -> void
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: raap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ksss
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-03-23 00:00:00.000000000 Z
11
+ date: 2024-03-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rbs
@@ -59,7 +59,6 @@ files:
59
59
  - lib/raap/function_type.rb
60
60
  - lib/raap/method_property.rb
61
61
  - lib/raap/method_type.rb
62
- - lib/raap/method_value.rb
63
62
  - lib/raap/minitest.rb
64
63
  - lib/raap/rbs.rb
65
64
  - lib/raap/result.rb
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RaaP
4
- class MethodValue < Data.define(
5
- :receiver_value,
6
- :arguments,
7
- :method_name,
8
- :size
9
- )
10
- def to_symbolic_call
11
- args, kwargs, block = arguments
12
- [:call, receiver_value, method_name, args, kwargs, block]
13
- end
14
-
15
- def call_str
16
- r = SymbolicCaller.new(receiver_value).eval
17
- "#{BindCall.inspect(r)}.#{method_name}(#{argument_str})#{block_str}"
18
- end
19
-
20
- private
21
-
22
- def argument_str
23
- args, kwargs, _ = SymbolicCaller.new(arguments).eval
24
-
25
- r = []
26
- r << args.map(&:inspect).join(', ') if !args.empty?
27
- r << kwargs.map { |k ,v| "#{k}: #{BindCall.inspect(v)}" }.join(', ') if !kwargs.empty?
28
- r.join(', ')
29
- end
30
-
31
- def block_str
32
- _, _, block = SymbolicCaller.new(arguments).eval
33
- if block
34
- "{ }"
35
- end
36
- end
37
- end
38
- end