Sha256: 8eb927b08f0a46c39fec37f8752bbcc98a5113f5076dd0a08d09079c5aa87ef0

Contents?: true

Size: 1.68 KB

Versions: 38

Compression:

Stored size: 1.68 KB

Contents

# typed: true
# frozen_string_literal: true

require "tapioca/runtime/trackers/tracker"

module Tapioca
  module Runtime
    module Trackers
      extend T::Sig

      @trackers = T.let([], T::Array[Tracker])

      class << self
        extend T::Sig

        sig do
          type_parameters(:Return)
            .params(blk: T.proc.returns(T.type_parameter(:Return)))
            .returns(T.type_parameter(:Return))
        end
        def with_trackers_enabled(&blk)
          # Currently this is a dirty hack to ensure disabling trackers
          # doesn't work while in the block passed to this method.
          disable_all_method = method(:disable_all!)
          define_singleton_method(:disable_all!) {}
          blk.call
        ensure
          if disable_all_method
            define_singleton_method(:disable_all!, disable_all_method)
          end
        end

        sig { void }
        def disable_all!
          @trackers.each(&:disable!)
        end

        sig { params(tracker: Tracker).void }
        def register_tracker(tracker)
          @trackers << tracker
        end
      end
    end
  end
end

# The load order below is important:
# ----------------------------------
# We want the mixin tracker to be the first thing that is
# loaded because other trackers might apply their own mixins
# into core types (like `Module` and `Kernel`). In order to
# catch and filter those mixins as coming from Tapioca, we need
# the mixin tracker to be in place, before any mixin operations
# are performed.
require "tapioca/runtime/trackers/mixin"
require "tapioca/runtime/trackers/constant_definition"
require "tapioca/runtime/trackers/autoload"
require "tapioca/runtime/trackers/required_ancestor"

Version data entries

38 entries across 38 versions & 2 rubygems

Version Path
tapioca-0.16.8 lib/tapioca/runtime/trackers.rb
tapioca-0.16.7 lib/tapioca/runtime/trackers.rb
tapioca-0.16.6 lib/tapioca/runtime/trackers.rb
tapioca-0.16.5 lib/tapioca/runtime/trackers.rb
tapioca-0.16.4 lib/tapioca/runtime/trackers.rb
tapioca-0.16.3 lib/tapioca/runtime/trackers.rb
tapioca-0.16.2 lib/tapioca/runtime/trackers.rb
tapioca-0.16.1 lib/tapioca/runtime/trackers.rb
tapioca-0.16.0 lib/tapioca/runtime/trackers.rb
tapioca-0.15.1 lib/tapioca/runtime/trackers.rb
tapioca-0.15.0 lib/tapioca/runtime/trackers.rb
tapioca-0.14.4 lib/tapioca/runtime/trackers.rb
tapioca-0.14.3 lib/tapioca/runtime/trackers.rb
tapioca-0.13.3 lib/tapioca/runtime/trackers.rb
tapioca-0.13.2 lib/tapioca/runtime/trackers.rb
tapioca-0.13.1 lib/tapioca/runtime/trackers.rb
tapioca-0.13.0 lib/tapioca/runtime/trackers.rb
tapioca-0.12.0 lib/tapioca/runtime/trackers.rb
tapioca-0.11.17 lib/tapioca/runtime/trackers.rb
tapioca-0.11.16 lib/tapioca/runtime/trackers.rb