tracer 0.2.2 → 0.2.3
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 +4 -4
- data/README.md +27 -1
- data/lib/tracer/base.rb +1 -0
- data/lib/tracer/exception_tracer.rb +24 -8
- data/lib/tracer/ivar_tracer.rb +49 -0
- data/lib/tracer/version.rb +1 -1
- data/lib/tracer.rb +1 -0
- metadata +4 -7
- data/Gemfile +0 -11
- data/Gemfile.lock +0 -31
- data/Rakefile +0 -12
- data/tracer.gemspec +0 -43
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 2384a62a824cb7906cd027700d16844a6b666e5dc7b04749fcb2d69ece9a2a85
         | 
| 4 | 
            +
              data.tar.gz: 762568e03d81d9dafa2ad6735f9901d53507aaeaa350aac53ef3989325136757
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: bbdccfb4cf5054d554a76e22f9bbffd21aa8f3e9a13e366cbfb41d076803c4de4b019697b81d8dd1278655390f7c1949190e7d7c72b2fcdc7ffa83622b89a71d
         | 
| 7 | 
            +
              data.tar.gz: b0a8142e250b24964d9fbcbc674d052107061725b6673b7d573553faf55afc722559396c0b878f3639c051dcfd1a9794e285116ba38e2f493d4be9b8d17c11ae
         | 
    
        data/README.md
    CHANGED
    
    | @@ -8,6 +8,7 @@ The `tracer` gem provides helpful tracing utilities to help users observe their | |
| 8 8 | 
             
            The currently supported tracers are:
         | 
| 9 9 |  | 
| 10 10 | 
             
            - [`ObjectTracer`](#objecttracer)
         | 
| 11 | 
            +
            - [`IvarTracer`](#ivartracer)
         | 
| 11 12 | 
             
            - [`CallTracer`](#calltracer)
         | 
| 12 13 | 
             
            - [`ExceptionTracer`](#exceptiontracer)
         | 
| 13 14 | 
             
            - [`LineTracer`](#linetracer)
         | 
| @@ -103,6 +104,30 @@ end | |
| 103 104 | 
             
             #depth:4  #<User:0x000000010696cad8 @name="John"> receives #name (User#name) at test.rb:8:in `authorized?'
         | 
| 104 105 | 
             
            ```
         | 
| 105 106 |  | 
| 107 | 
            +
            #### IvarTracer
         | 
| 108 | 
            +
             | 
| 109 | 
            +
            > **Note**
         | 
| 110 | 
            +
            > Ruby 3.0 and below's accessor calls don't trigger TracePoint properly so the result may be inaccurate with those versions.
         | 
| 111 | 
            +
             | 
| 112 | 
            +
            ```rb
         | 
| 113 | 
            +
            require "tracer"
         | 
| 114 | 
            +
             | 
| 115 | 
            +
            class Cat
         | 
| 116 | 
            +
              attr_accessor :name
         | 
| 117 | 
            +
            end
         | 
| 118 | 
            +
             | 
| 119 | 
            +
            cat = Cat.new
         | 
| 120 | 
            +
             | 
| 121 | 
            +
            tracer = IvarTracer.new(cat, :@name)
         | 
| 122 | 
            +
            tracer.start do
         | 
| 123 | 
            +
              cat.name = "Kitty"
         | 
| 124 | 
            +
              cat.instance_variable_set(:@name, "Ketty")
         | 
| 125 | 
            +
            end
         | 
| 126 | 
            +
             | 
| 127 | 
            +
            #depth:3 Cat#name= sets @name = "Kitty" at test.rb:11
         | 
| 128 | 
            +
            #depth:3 Kernel#instance_variable_set sets @name = "Ketty" at test.rb:12
         | 
| 129 | 
            +
            ```
         | 
| 130 | 
            +
             | 
| 106 131 | 
             
            #### ExceptionTracer
         | 
| 107 132 |  | 
| 108 133 | 
             
            ```rb
         | 
| @@ -114,7 +139,8 @@ rescue StandardError | |
| 114 139 | 
             
              nil
         | 
| 115 140 | 
             
            end
         | 
| 116 141 |  | 
| 117 | 
            -
             | 
| 142 | 
            +
            #depth:0  #<RuntimeError: boom> raised at test.rb:4
         | 
| 143 | 
            +
            #depth:1  #<RuntimeError: boom> rescued at test.rb:6
         | 
| 118 144 | 
             
            ```
         | 
| 119 145 |  | 
| 120 146 | 
             
            #### CallTracer
         | 
    
        data/lib/tracer/base.rb
    CHANGED
    
    | @@ -10,6 +10,7 @@ module Tracer | |
| 10 10 | 
             
                M_INSPECT = Object.instance_method(:inspect)
         | 
| 11 11 | 
             
                M_CLASS = Object.instance_method(:class)
         | 
| 12 12 | 
             
                M_IS_A = Object.instance_method(:is_a?)
         | 
| 13 | 
            +
                M_INSTANCE_VARIABLE_GET = Object.instance_method(:instance_variable_get)
         | 
| 13 14 | 
             
                HOME = ENV["HOME"] ? (ENV["HOME"] + "/") : nil
         | 
| 14 15 |  | 
| 15 16 | 
             
                include Color
         | 
| @@ -4,16 +4,32 @@ require_relative "base" | |
| 4 4 |  | 
| 5 5 | 
             
            class ExceptionTracer < Tracer::Base
         | 
| 6 6 | 
             
              def setup_tp
         | 
| 7 | 
            -
                 | 
| 8 | 
            -
                   | 
| 7 | 
            +
                if RUBY_VERSION >= "3.3.0"
         | 
| 8 | 
            +
                  TracePoint.new(:raise, :rescue) do |tp|
         | 
| 9 | 
            +
                    next if skip?(tp)
         | 
| 9 10 |  | 
| 10 | 
            -
             | 
| 11 | 
            +
                    exc = tp.raised_exception
         | 
| 11 12 |  | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 13 | 
            +
                    action = tp.event == :raise ? "raised" : "rescued"
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    out tp,
         | 
| 16 | 
            +
                        " #{colorize_magenta(exc.inspect)} #{action}",
         | 
| 17 | 
            +
                        depth: caller.size - (1 + @depth_offset)
         | 
| 18 | 
            +
                  rescue Exception => e
         | 
| 19 | 
            +
                    p e
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
                else
         | 
| 22 | 
            +
                  TracePoint.new(:raise) do |tp|
         | 
| 23 | 
            +
                    next if skip?(tp)
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    exc = tp.raised_exception
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                    out tp,
         | 
| 28 | 
            +
                        " #{colorize_magenta(exc.inspect)} raised",
         | 
| 29 | 
            +
                        depth: caller.size - (1 + @depth_offset)
         | 
| 30 | 
            +
                  rescue Exception => e
         | 
| 31 | 
            +
                    p e
         | 
| 32 | 
            +
                  end
         | 
| 17 33 | 
             
                end
         | 
| 18 34 | 
             
              end
         | 
| 19 35 |  | 
| @@ -0,0 +1,49 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require_relative "base"
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class IvarTracer < Tracer::Base
         | 
| 6 | 
            +
              def initialize(target, var_name, **kw)
         | 
| 7 | 
            +
                @target = target
         | 
| 8 | 
            +
                @var_name = var_name
         | 
| 9 | 
            +
                @original_value = M_INSTANCE_VARIABLE_GET.bind_call(target, var_name)
         | 
| 10 | 
            +
                super(**kw)
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              def key
         | 
| 14 | 
            +
                [@type, @target, @var_name, @pattern, @into].freeze
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              def description
         | 
| 18 | 
            +
                "for #{@var_name} of #{@target} #{super}"
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              def setup_tp
         | 
| 22 | 
            +
                TracePoint.new(:a_return) do |tp|
         | 
| 23 | 
            +
                  next if skip?(tp)
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  if tp.self == @target &&
         | 
| 26 | 
            +
                       value = M_INSTANCE_VARIABLE_GET.bind_call(@target, @var_name)
         | 
| 27 | 
            +
                    if tp.event == :c_return
         | 
| 28 | 
            +
                      location = nil
         | 
| 29 | 
            +
                    else
         | 
| 30 | 
            +
                      location = caller_locations(2, 1).first.to_s
         | 
| 31 | 
            +
                      next if location.match?(DIR) || location.match?(/<internal:/)
         | 
| 32 | 
            +
                    end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                    depth = caller.size
         | 
| 35 | 
            +
                    call_identifier_str = (tp.defined_class ? minfo(tp) : "block")
         | 
| 36 | 
            +
                    call_identifier_str = colorize_blue(call_identifier_str)
         | 
| 37 | 
            +
                    depth += 1 if tp.event == :c_return
         | 
| 38 | 
            +
                    value = safe_inspect(value)
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                    if value != @original_value
         | 
| 41 | 
            +
                      out tp,
         | 
| 42 | 
            +
                          "#{call_identifier_str} sets #{colorize_cyan(@var_name)} = #{colorize_magenta(value)}",
         | 
| 43 | 
            +
                          depth: depth - 2 - @depth_offset,
         | 
| 44 | 
            +
                          location: location
         | 
| 45 | 
            +
                    end
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
            end
         | 
    
        data/lib/tracer/version.rb
    CHANGED
    
    
    
        data/lib/tracer.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: tracer
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.2. | 
| 4 | 
            +
              version: 0.2.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Stan Lo
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire:
         | 
| 10 10 | 
             
            bindir: exe
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date:  | 
| 12 | 
            +
            date: 2024-03-22 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies: []
         | 
| 14 14 | 
             
            description: A Ruby tracer
         | 
| 15 15 | 
             
            email:
         | 
| @@ -21,11 +21,8 @@ extra_rdoc_files: [] | |
| 21 21 | 
             
            files:
         | 
| 22 22 | 
             
            - CHANGELOG.md
         | 
| 23 23 | 
             
            - CODE_OF_CONDUCT.md
         | 
| 24 | 
            -
            - Gemfile
         | 
| 25 | 
            -
            - Gemfile.lock
         | 
| 26 24 | 
             
            - LICENSE.txt
         | 
| 27 25 | 
             
            - README.md
         | 
| 28 | 
            -
            - Rakefile
         | 
| 29 26 | 
             
            - lib/tracer.rb
         | 
| 30 27 | 
             
            - lib/tracer/base.rb
         | 
| 31 28 | 
             
            - lib/tracer/call_tracer.rb
         | 
| @@ -33,10 +30,10 @@ files: | |
| 33 30 | 
             
            - lib/tracer/exception_tracer.rb
         | 
| 34 31 | 
             
            - lib/tracer/helper.rb
         | 
| 35 32 | 
             
            - lib/tracer/irb.rb
         | 
| 33 | 
            +
            - lib/tracer/ivar_tracer.rb
         | 
| 36 34 | 
             
            - lib/tracer/line_tracer.rb
         | 
| 37 35 | 
             
            - lib/tracer/object_tracer.rb
         | 
| 38 36 | 
             
            - lib/tracer/version.rb
         | 
| 39 | 
            -
            - tracer.gemspec
         | 
| 40 37 | 
             
            homepage: https://github.com/ruby/tracer
         | 
| 41 38 | 
             
            licenses:
         | 
| 42 39 | 
             
            - Ruby
         | 
| @@ -60,7 +57,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 60 57 | 
             
                - !ruby/object:Gem::Version
         | 
| 61 58 | 
             
                  version: '0'
         | 
| 62 59 | 
             
            requirements: []
         | 
| 63 | 
            -
            rubygems_version: 3.4 | 
| 60 | 
            +
            rubygems_version: 3.5.4
         | 
| 64 61 | 
             
            signing_key:
         | 
| 65 62 | 
             
            specification_version: 4
         | 
| 66 63 | 
             
            summary: A Ruby tracer
         | 
    
        data/Gemfile
    DELETED
    
    
    
        data/Gemfile.lock
    DELETED
    
    | @@ -1,31 +0,0 @@ | |
| 1 | 
            -
            PATH
         | 
| 2 | 
            -
              remote: .
         | 
| 3 | 
            -
              specs:
         | 
| 4 | 
            -
                tracer (0.2.2)
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            GEM
         | 
| 7 | 
            -
              remote: https://rubygems.org/
         | 
| 8 | 
            -
              specs:
         | 
| 9 | 
            -
                io-console (0.6.0)
         | 
| 10 | 
            -
                irb (1.6.2)
         | 
| 11 | 
            -
                  reline (>= 0.3.0)
         | 
| 12 | 
            -
                power_assert (2.0.2)
         | 
| 13 | 
            -
                rake (13.0.6)
         | 
| 14 | 
            -
                reline (0.3.2)
         | 
| 15 | 
            -
                  io-console (~> 0.5)
         | 
| 16 | 
            -
                test-unit (3.5.5)
         | 
| 17 | 
            -
                  power_assert
         | 
| 18 | 
            -
             | 
| 19 | 
            -
            PLATFORMS
         | 
| 20 | 
            -
              arm64-darwin-21
         | 
| 21 | 
            -
              arm64-darwin-22
         | 
| 22 | 
            -
              x86_64-linux
         | 
| 23 | 
            -
             | 
| 24 | 
            -
            DEPENDENCIES
         | 
| 25 | 
            -
              irb
         | 
| 26 | 
            -
              rake (~> 13.0)
         | 
| 27 | 
            -
              test-unit (~> 3.0)
         | 
| 28 | 
            -
              tracer!
         | 
| 29 | 
            -
             | 
| 30 | 
            -
            BUNDLED WITH
         | 
| 31 | 
            -
               2.4.2
         | 
    
        data/Rakefile
    DELETED
    
    
    
        data/tracer.gemspec
    DELETED
    
    | @@ -1,43 +0,0 @@ | |
| 1 | 
            -
            # frozen_string_literal: true
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            require_relative "lib/tracer/version"
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            Gem::Specification.new do |spec|
         | 
| 6 | 
            -
              spec.name = "tracer"
         | 
| 7 | 
            -
              spec.version = Tracer::VERSION
         | 
| 8 | 
            -
              spec.authors = ["Stan Lo", "Keiju ISHITSUKA"]
         | 
| 9 | 
            -
              spec.email = %w[stan001212@gmail.com keiju@ruby-lang.org]
         | 
| 10 | 
            -
             | 
| 11 | 
            -
              spec.summary = "A Ruby tracer"
         | 
| 12 | 
            -
              spec.description = "A Ruby tracer"
         | 
| 13 | 
            -
              spec.homepage = "https://github.com/ruby/tracer"
         | 
| 14 | 
            -
              spec.licenses = %w[Ruby BSD-2-Clause]
         | 
| 15 | 
            -
              spec.required_ruby_version = ">= 2.7.0"
         | 
| 16 | 
            -
             | 
| 17 | 
            -
              spec.metadata["homepage_uri"] = spec.homepage
         | 
| 18 | 
            -
              spec.metadata["source_code_uri"] = "https://github.com/ruby/tracer"
         | 
| 19 | 
            -
              spec.metadata[
         | 
| 20 | 
            -
                "changelog_uri"
         | 
| 21 | 
            -
              ] = "https://github.com/ruby/tracer/blob/main/CHANGELOG.md"
         | 
| 22 | 
            -
             | 
| 23 | 
            -
              # Specify which files should be added to the gem when it is released.
         | 
| 24 | 
            -
              # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
         | 
| 25 | 
            -
              spec.files =
         | 
| 26 | 
            -
                Dir.chdir(__dir__) do
         | 
| 27 | 
            -
                  `git ls-files -z`.split("\x0")
         | 
| 28 | 
            -
                    .reject do |f|
         | 
| 29 | 
            -
                      (f == __FILE__) ||
         | 
| 30 | 
            -
                        f.match(
         | 
| 31 | 
            -
                          %r{\A(?:(?:bin|test|spec|features)/|\.(?:git|circleci)|appveyor)}
         | 
| 32 | 
            -
                        )
         | 
| 33 | 
            -
                    end
         | 
| 34 | 
            -
                end
         | 
| 35 | 
            -
              spec.bindir = "exe"
         | 
| 36 | 
            -
              spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
         | 
| 37 | 
            -
              spec.require_paths = ["lib"]
         | 
| 38 | 
            -
             | 
| 39 | 
            -
              # Uncomment to register a new dependency of your gem
         | 
| 40 | 
            -
             | 
| 41 | 
            -
              # For more information and examples about making a new gem, check out our
         | 
| 42 | 
            -
              # guide at: https://bundler.io/guides/creating_gem.html
         | 
| 43 | 
            -
            end
         |