Sha256: 87dd38e26c4264aa277c25f0c7fe0beffda5685bb09453b35b9de742aed9ee31

Contents?: true

Size: 1.76 KB

Versions: 2

Compression:

Stored size: 1.76 KB

Contents

# frozen_string_literal: true

module RuboCop
  module Cop
    module Sorbet
      module TargetSorbetVersion
        class << self
          def included(target)
            target.extend(ClassMethods)
          end
        end

        module ClassMethods
          # Sets the version of the Sorbet static type checker required by this cop
          def minimum_target_sorbet_static_version(version)
            @minimum_target_sorbet_static_version = Gem::Version.new(version)
          end

          def supports_target_sorbet_static_version?(version)
            @minimum_target_sorbet_static_version <= Gem::Version.new(version)
          end
        end

        def sorbet_enabled?
          !target_sorbet_static_version_from_bundler_lock_file.nil?
        end

        def enabled_for_sorbet_static_version?
          sorbet_static_version = target_sorbet_static_version_from_bundler_lock_file
          return false unless sorbet_static_version

          self.class.supports_target_sorbet_static_version?(sorbet_static_version)
        end

        def target_sorbet_static_version_from_bundler_lock_file
          # Do memoization with the `defined?` pattern since sorbet-static version might be `nil`
          if defined?(@target_sorbet_static_version_from_bundler_lock_file)
            @target_sorbet_static_version_from_bundler_lock_file
          else
            @target_sorbet_static_version_from_bundler_lock_file = read_sorbet_static_version_from_bundler_lock_file
          end
        end

        def read_sorbet_static_version_from_bundler_lock_file
          require "bundler"
          ::Bundler.locked_gems.specs.find { |spec| spec.name == "sorbet-static" }&.version
        rescue LoadError, ::Bundler::GemfileNotFound
          nil
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rubocop-sorbet-0.8.7 lib/rubocop/cop/sorbet/mixin/target_sorbet_version.rb
rubocop-sorbet-0.8.6 lib/rubocop/cop/sorbet/mixin/target_sorbet_version.rb