im-lost 1.0.1 → 1.0.2

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: 5f3add8daa7364ab1a0f1a5058a09b529e448db9bfeda20c9f35e9e69fccbc90
4
- data.tar.gz: 8bfad384dc5dfd659bb5a49eda611e90b9ee090d0bfa5dfbfd9979289591bac8
3
+ metadata.gz: 8b3508c022462842507ce749828e2c74c4db9e9097496e68cedc758018017cb5
4
+ data.tar.gz: 93ac54d98ae6474d4f7144b116cf0e2784c88babf57ff592a317b463caa7ee13
5
5
  SHA512:
6
- metadata.gz: a2fa68b037ca862fc7754b9f613743e6c358aaf9ec2c299a3dc0b3fc8612ab9537696d21c2212e292530e258470db970f4e6bd2e724c38f1fea22f7b22af3376
7
- data.tar.gz: 6c47d670e625de3a386cf1412278bb5e6382e8b3809a7bb0678ee7f4ef99983cddfd805655198ad931bb735a336343837c3b4b4e9887ba7bc6dd0064dd168bfc
6
+ metadata.gz: 4d45f27c98a6ed477ce4e696f4c41286ca24c105de1668889bf64fc0d57d3947e04c026b40fa7f5f79e2ce5016fcc8327e3c9a8b20a1e6ae0561900efae4f5f3
7
+ data.tar.gz: 1502147a826924c39988f9272d62e3c0274dc8cdb961f25c405a229cf6273142579ad136af1972c06874d13af110486b79db45907c219bd3082a91cd507220ab
data/README.md CHANGED
@@ -20,14 +20,14 @@ File.open('test.txt', 'w') do |file|
20
20
  end
21
21
  end
22
22
  # output will look like
23
- # > IO#<<(?)
24
- # /projects/test.rb:1
25
- # > IO#write(*)
26
- # /projects/test.rb:1
27
- # > IO#puts(*)
28
- # /projects/test.rb:2
29
- # > IO#write(*)
30
- # /projects/test.rb:2
23
+ # > IO#<<(?)
24
+ # /projects/test.rb:1
25
+ # > IO#write(*)
26
+ # /projects/test.rb:1
27
+ # > IO#puts(*)
28
+ # /projects/test.rb:2
29
+ # > IO#write(*)
30
+ # /projects/test.rb:2
31
31
  ```
32
32
 
33
33
  When you need to know if exceptions are raised and handled you can use `ImLost.trace_exceptions`:
@@ -39,12 +39,12 @@ rescue SystemCallError
39
39
  raise('something went wrong!')
40
40
  end
41
41
  # output will look like
42
- # x Errno::EEXIST: File exists @ rb_sysopen - /
43
- # /projects/test.rb:2
44
- # ! Errno::EEXIST: File exists @ rb_sysopen - /
45
- # /projects/test.rb:3
46
- # x RuntimeError: something went wrong!
47
- # /projects/test.rb:4
42
+ # x Errno::EEXIST: File exists @ rb_sysopen - /
43
+ # /projects/test.rb:2
44
+ # ! Errno::EEXIST: File exists @ rb_sysopen - /
45
+ # /projects/test.rb:3
46
+ # x RuntimeError: something went wrong!
47
+ # /projects/test.rb:4
48
48
  ```
49
49
 
50
50
  When you like to know if and when a code point is reached, `ImLost.here` will help:
@@ -108,31 +108,48 @@ my_foo.foo(3) { puts _1 }
108
108
  ImLost.vars(my_foo)
109
109
 
110
110
  # output will look like
111
- # > Foo.create(:foo!)
112
- # /projects/foo.rb25
113
- # > Foo.new(*)
114
- # /projects/foo.rb6
115
- # < Foo.new(*)
116
- # = #<Foo:0x0000000100ab1188 @value=:foo!>
117
- # < Foo.create(:foo!)
118
- # = #<Foo:0x0000000100ab1188 @value=:foo!>
119
- # > Foo#foo(1, *[], :none, **{}, &nil)
120
- # /projects/foo.rb28
121
- # > Foo#bar()
122
- # /projects/foo.rb15
123
- # < Foo#bar()
124
- # = :bar
125
- # < Foo#foo(1, *[], :none, **{}, &nil)
126
- # = "1-none-[]-{}-bar"
127
- # = /projects/foo.rb29
128
- # instance variables:
129
- # @value: "1-none-[]-{}-bar"
130
- # = /projects/foo.rb32
131
- # instance variables:
132
- # @value: "2-some-[a,b,c]-{:name=>:value}-bar"
133
- # = /projects/foo.rb35
134
- # instance variables:
135
- # @value: "3--[]-{}-bar"
111
+ # > Foo.create(:foo!)
112
+ # /projects/foo.rb:25
113
+ # > Foo.new(*)
114
+ # /projects/foo.rb:6
115
+ # < Foo.new(*)
116
+ # = #<Foo:0x00000001030810c0 @value=:foo!>
117
+ # < Foo.create(:foo!)
118
+ # = #<Foo:0x00000001030810c0 @value=:foo!>
119
+ # > Foo#foo(1, *[], :none, **{}, &nil)
120
+ # /projects/foo.rb:28
121
+ # > Foo#bar()
122
+ # /projects/foo.rb:15
123
+ # < Foo#bar()
124
+ # = :bar
125
+ # < Foo#foo(1, *[], :none, **{}, &nil)
126
+ # = "1-none-[]-{}-bar"
127
+ # = /projects/foo.rb:29
128
+ # instance variables:
129
+ # @value: "1-none-[]-{}-bar"
130
+ # > Foo#foo(2, *[:a, :b, :c], :some, **{:name=>:value}, &nil)
131
+ # /projects/foo.rb:31
132
+ # > Foo#bar()
133
+ # /projects/foo.rb:15
134
+ # < Foo#bar()
135
+ # = :bar
136
+ # < Foo#foo(2, *[:a, :b, :c], :some, **{:name=>:value}, &nil)
137
+ # = "2-some-[a,b,c]-{:name=>:value}-bar"
138
+ # = /projects/foo.rb:32
139
+ # instance variables:
140
+ # @value: "2-some-[a,b,c]-{:name=>:value}-bar"
141
+ # > Foo#foo(3, *[], nil, **{}, &#<Proc:0x00000001030aee30 /projects/foo.rb:34>)
142
+ # /projects/foo.rb:34
143
+ # > Foo#bar()
144
+ # /projects/foo.rb:15
145
+ # < Foo#bar()
146
+ # = :bar
147
+ # 3--[]-{}-bar
148
+ # < Foo#foo(3, *[], nil, **{}, &#<Proc:0x00000001030aee30 /projects/foo.rb:34>)
149
+ # = nil
150
+ # = /projects/foo.rb:35
151
+ # instance variables:
152
+ # @value: "3--[]-{}-bar"
136
153
  ```
137
154
 
138
155
  See [examples dir](./examples) for more…
data/examples/foo.rb CHANGED
@@ -35,28 +35,45 @@ my_foo.foo(3) { puts _1 }
35
35
  ImLost.vars(my_foo)
36
36
 
37
37
  # output will look like
38
- # > Foo.create(:foo!)
39
- # /projects/foo.rb25
40
- # > Foo.new(*)
41
- # /projects/foo.rb6
42
- # < Foo.new(*)
43
- # = #<Foo:0x0000000100ab1188 @value=:foo!>
44
- # < Foo.create(:foo!)
45
- # = #<Foo:0x0000000100ab1188 @value=:foo!>
46
- # > Foo#foo(1, *[], :none, **{}, &nil)
47
- # /projects/foo.rb28
48
- # > Foo#bar()
49
- # /projects/foo.rb15
50
- # < Foo#bar()
51
- # = :bar
52
- # < Foo#foo(1, *[], :none, **{}, &nil)
53
- # = "1-none-[]-{}-bar"
54
- # = /projects/foo.rb29
55
- # instance variables:
56
- # @value: "1-none-[]-{}-bar"
57
- # = /projects/foo.rb32
58
- # instance variables:
59
- # @value: "2-some-[a,b,c]-{:name=>:value}-bar"
60
- # = /projects/foo.rb35
61
- # instance variables:
62
- # @value: "3--[]-{}-bar"
38
+ # > Foo.create(:foo!)
39
+ # /projects/foo.rb:25
40
+ # > Foo.new(*)
41
+ # /projects/foo.rb:6
42
+ # < Foo.new(*)
43
+ # = #<Foo:0x00000001030810c0 @value=:foo!>
44
+ # < Foo.create(:foo!)
45
+ # = #<Foo:0x00000001030810c0 @value=:foo!>
46
+ # > Foo#foo(1, *[], :none, **{}, &nil)
47
+ # /projects/foo.rb:28
48
+ # > Foo#bar()
49
+ # /projects/foo.rb:15
50
+ # < Foo#bar()
51
+ # = :bar
52
+ # < Foo#foo(1, *[], :none, **{}, &nil)
53
+ # = "1-none-[]-{}-bar"
54
+ # = /projects/foo.rb:29
55
+ # instance variables:
56
+ # @value: "1-none-[]-{}-bar"
57
+ # > Foo#foo(2, *[:a, :b, :c], :some, **{:name=>:value}, &nil)
58
+ # /projects/foo.rb:31
59
+ # > Foo#bar()
60
+ # /projects/foo.rb:15
61
+ # < Foo#bar()
62
+ # = :bar
63
+ # < Foo#foo(2, *[:a, :b, :c], :some, **{:name=>:value}, &nil)
64
+ # = "2-some-[a,b,c]-{:name=>:value}-bar"
65
+ # = /projects/foo.rb:32
66
+ # instance variables:
67
+ # @value: "2-some-[a,b,c]-{:name=>:value}-bar"
68
+ # > Foo#foo(3, *[], nil, **{}, &#<Proc:0x00000001030aee30 /projects/foo.rb:34>)
69
+ # /projects/foo.rb:34
70
+ # > Foo#bar()
71
+ # /projects/foo.rb:15
72
+ # < Foo#bar()
73
+ # = :bar
74
+ # 3--[]-{}-bar
75
+ # < Foo#foo(3, *[], nil, **{}, &#<Proc:0x00000001030aee30 /projects/foo.rb:34>)
76
+ # = nil
77
+ # = /projects/foo.rb:35
78
+ # instance variables:
79
+ # @value: "3--[]-{}-bar"
@@ -2,5 +2,5 @@
2
2
 
3
3
  module ImLost
4
4
  # The version number of the gem.
5
- VERSION = '1.0.1'
5
+ VERSION = '1.0.2'
6
6
  end
data/lib/im-lost.rb CHANGED
@@ -254,7 +254,7 @@ module ImLost
254
254
  return unless object.respond_to?(:instance_variables)
255
255
  _vars(object, Kernel.caller_locations(1, 1)[0])
256
256
  ensure
257
- @trace[traced] = 1 if traced
257
+ @trace[traced] = traced if traced
258
258
  end
259
259
 
260
260
  protected
@@ -272,30 +272,35 @@ module ImLost
272
272
  private
273
273
 
274
274
  def _trace(arg)
275
- @trace[arg.__id__] = 1 if self != arg && @output != arg
275
+ id = arg.__id__
276
+ @trace[id] = id if __id__ != id && @output.__id__ != id
276
277
  arg
277
278
  end
278
279
 
279
280
  def _trace_all(args)
280
281
  args.each do |arg|
281
- @trace[arg.__id__] = 1 if arg != self && @output != arg
282
+ arg = arg.__id__
283
+ @trace[arg] = arg if __id__ != arg && @output.__id__ != arg
282
284
  end
283
285
  args
284
286
  end
285
287
 
286
288
  def _trace_b(arg)
287
- @trace[id = arg.__id__] = 1 if self != arg && @output != arg
288
- yield(arg)
289
- ensure
290
- @trace.delete(id) if id
289
+ id = arg.__id__
290
+ return yield(arg) if __id__ == id || @output.__id__ == id
291
+ begin
292
+ @trace[id] = id
293
+ yield(arg)
294
+ ensure
295
+ @trace.delete(id) if id
296
+ end
291
297
  end
292
298
 
293
299
  def _trace_all_b(args)
294
300
  ids =
295
301
  args.filter_map do |arg|
296
- next if self == arg || @output == arg
297
- @trace[id = arg.__id__] = 1
298
- id
302
+ arg = arg.__id__
303
+ @trace[arg] = arg if __id__ != arg && @output.__id__ != arg
299
304
  end
300
305
  yield(args)
301
306
  ensure
@@ -332,9 +337,8 @@ module ImLost
332
337
  end
333
338
 
334
339
  ARG_SIG = { rest: '*', keyrest: '**', block: '&' }.compare_by_identity.freeze
335
- NO_NAME = %i[* ** &].freeze
336
- EX_PREFIX = { raise: 'x', rescue: '!' }.freeze
337
- private_constant :ARG_SIG, :NO_NAME, :EX_PREFIX
340
+ NO_NAME = { :* => 1, :** => 1, :& => 1 }.compare_by_identity.freeze
341
+ private_constant :ARG_SIG, :NO_NAME
338
342
 
339
343
  @trace = {}.compare_by_identity
340
344
  @caller_locations = true
@@ -354,7 +358,7 @@ module ImLost
354
358
  '>',
355
359
  tp,
356
360
  tp.parameters.map do |kind, name|
357
- next name if NO_NAME.include?(name)
361
+ next name if NO_NAME.key?(name)
358
362
  "#{ARG_SIG[kind]}#{ctx.local_variable_get(name).inspect}"
359
363
  end
360
364
  )
@@ -392,7 +396,9 @@ module ImLost
392
396
  @trace_exceptions =
393
397
  TracePoint.new(*supported) do |tp|
394
398
  ex = tp.raised_exception.inspect
395
- @output.puts("#{EX_PREFIX[tp.event]} #{ex[0] == '#' ? ex[2..-2] : ex}")
399
+ @output.puts(
400
+ "#{tp.event == :raise ? 'x' : '!'} #{ex[0] == '#' ? ex[2..-2] : ex}"
401
+ )
396
402
  @output.puts(" #{tp.path}:#{tp.lineno}") if @exception_locations
397
403
  end
398
404
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: im-lost
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Blumtritt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-05-12 00:00:00.000000000 Z
11
+ date: 2024-05-13 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |
14
14
  If you have overlooked something again and don't really understand what
@@ -56,7 +56,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
56
56
  - !ruby/object:Gem::Version
57
57
  version: '0'
58
58
  requirements: []
59
- rubygems_version: 3.2.33
59
+ rubygems_version: 3.5.10
60
60
  signing_key:
61
61
  specification_version: 4
62
62
  summary: Your debugging helper.