raap 0.2.0 → 0.3.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: 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