appmap 0.84.0 → 0.85.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: bc5d48a877bd0953d1d374fcabfa23bf584ac81bd4f303d4f759fb531a778b22
4
- data.tar.gz: 6fe7282152760a910275176ea36987747671e4d06d3983b41ac04edfc217d22c
3
+ metadata.gz: 002b026a3ee8b2e89a073906212e694f296dcc0666db8450c9051bab372550b2
4
+ data.tar.gz: 743adc87f3f3ae044c7da5d3040be48f79db21bf5d9861b60ec32f84ba39bc19
5
5
  SHA512:
6
- metadata.gz: 3385416af1ca8318f5e08fe8edc242be03e7e40b8c15a5a68e6ec0678915cd3ca37a3948bf2651db20f2d56dc3b9ba93dda777a5d21ebcd134de252c78d5af91
7
- data.tar.gz: 67ee12c6708a5e29e86462d086b0509db2d4c0b05643182b9ea5209d4acfe792d52532bb3314a48911c07e7d1891a2a32868a55feb13455172e7571c1b7a3570
6
+ metadata.gz: 6af49c4b8155df95b38edf948217eedfa785151c7d3b6997cee8f0ba5971444c755a1e189a12fffdd640e1ec7e12316bd3a5e70d82e047d1dba4c2873040e5a1
7
+ data.tar.gz: e5af21dd5198c5291cdcd8da036b54c31c59178c17ccda863e4653aab7efb9a5392325226f90ef973f99107d8a44d24870dab3417d6b50c001ae4d325f50f30a
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # [0.85.0](https://github.com/applandinc/appmap-ruby/compare/v0.84.0...v0.85.0) (2022-08-08)
2
+
3
+
4
+ ### Features
5
+
6
+ * Tune method parameters ([4a7b575](https://github.com/applandinc/appmap-ruby/commit/4a7b575e6f9684adaac4b592adc1ad2c832e900d))
7
+
1
8
  # [0.84.0](https://github.com/applandinc/appmap-ruby/compare/v0.83.6...v0.84.0) (2022-08-04)
2
9
 
3
10
 
@@ -11,7 +11,9 @@
11
11
  require_name: active_support/security_utils
12
12
  force: true
13
13
  - method: ActiveSupport.run_load_hooks
14
- label: deserialize.safe
14
+ labels:
15
+ - deserialize.safe
16
+ - lang.eval.safe
15
17
  require_name: active_support/lazy_load_hooks
16
18
  force: true
17
19
  - method: ActiveSupport::MessageEncryptor#encrypt_and_sign
@@ -2,6 +2,7 @@
2
2
  - Marshal#load
3
3
  - Marshal#restore
4
4
  require_name: ruby
5
+ handler_class: AppMap::Handler::MarshalLoadHandler
5
6
  label: deserialize.unsafe
6
7
  - method: Marshal#dump
7
8
  require_name: ruby
@@ -29,3 +30,6 @@
29
30
  - Process#spawn
30
31
  require_name: ruby
31
32
  label: system.exec
33
+ - methods:
34
+ - ERB#result
35
+ require_name: ruby
data/lib/appmap/event.rb CHANGED
@@ -193,7 +193,7 @@ module AppMap
193
193
 
194
194
  public
195
195
 
196
- def build_from_invocation(defined_class, method, receiver, arguments, event: MethodCall.new)
196
+ def build_from_invocation(defined_class, method, receiver, arguments, parameters: method.parameters, event: MethodCall.new)
197
197
  event ||= MethodCall.new
198
198
  defined_class ||= 'Class'
199
199
 
@@ -208,10 +208,10 @@ module AppMap
208
208
 
209
209
  # Check if the method has key parameters. If there are any they'll always be last.
210
210
  # If yes, then extract it from arguments.
211
- has_key = [[:dummy], *method.parameters].last.first.to_s.start_with?('key') && arguments[-1].is_a?(Hash)
211
+ has_key = [[:dummy], *parameters].last.first.to_s.start_with?('key') && arguments[-1].is_a?(Hash)
212
212
  kwargs = has_key && arguments[-1].dup || {}
213
213
 
214
- event.parameters = method.parameters.map.with_index do |method_param, idx|
214
+ event.parameters = parameters.map.with_index do |method_param, idx|
215
215
  param_type, param_name = method_param
216
216
  param_name ||= 'arg'
217
217
  value = case param_type
@@ -23,6 +23,21 @@ module AppMap
23
23
  # To avoid this, we explicitly substitute the correct execution
24
24
  # context, up several stack frames.
25
25
  class EvalHandler < FunctionHandler
26
+ # Kernel#eval reports the method parameters as :rest, instead of what you might expect from
27
+ # the documented signature: eval(string [, binding [, filename [,lineno]]])
28
+ # In the C code, it's defined as rb_f_eval(int argc, const VALUE *argv, VALUE self),
29
+ # so maybe that's why the parameters are reported as :rest.
30
+ #
31
+ # In any case, reporting the parameters as :rest means that the code string, binding, etc
32
+ # are reported in the AppMap as members of an Array, without individual object ids or types.
33
+ #
34
+ # To make eval easier to analyze, fake the hook_method parameters to better match
35
+ # the documentation.
36
+ PARAMETERS= [
37
+ [ :req, :string ],
38
+ [ :rest ],
39
+ ]
40
+
26
41
  # The depth of the frame we need to pluck out:
27
42
  # 1. Hook::Method#do_call
28
43
  # 2. Hook::Method#trace_call
@@ -31,6 +46,10 @@ module AppMap
31
46
  # 5. the (intended) frame of the original eval that we hooked
32
47
  # Note it needs to be adjusted if this call sequence changes.
33
48
  FRAME_DEPTH = 5
49
+
50
+ def handle_call(receiver, args)
51
+ AppMap::Event::MethodCall.build_from_invocation(defined_class, hook_method, receiver, args, parameters: PARAMETERS)
52
+ end
34
53
 
35
54
  def do_call(receiver, src = nil, context = nil, *rest)
36
55
  context ||= AppMap.caller_binding FRAME_DEPTH
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'appmap/handler/function_handler'
4
+
5
+ module AppMap
6
+ module Handler
7
+ class MarshalLoadHandler < FunctionHandler
8
+ PARAMETERS= [
9
+ [ :req, :source ],
10
+ [ :rest ],
11
+ ]
12
+
13
+ def handle_call(receiver, args)
14
+ AppMap::Event::MethodCall.build_from_invocation(defined_class, hook_method, receiver, args, parameters: PARAMETERS)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -3,7 +3,7 @@
3
3
  module AppMap
4
4
  URL = 'https://github.com/applandinc/appmap-ruby'
5
5
 
6
- VERSION = '0.84.0'
6
+ VERSION = '0.85.0'
7
7
 
8
8
  APPMAP_FORMAT_VERSION = '1.7.0'
9
9
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appmap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.84.0
4
+ version: 0.85.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Gilpin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-04 00:00:00.000000000 Z
11
+ date: 2022-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: method_source
@@ -396,6 +396,7 @@ files:
396
396
  - lib/appmap/handler.rb
397
397
  - lib/appmap/handler/eval_handler.rb
398
398
  - lib/appmap/handler/function_handler.rb
399
+ - lib/appmap/handler/marshal_load_handler.rb
399
400
  - lib/appmap/handler/net_http_handler.rb
400
401
  - lib/appmap/handler/open_ssl_handler.rb
401
402
  - lib/appmap/handler/rails/render_handler.rb