lib/rubocop/cop/sorbet/mixin/target_sorbet_version.rb
# 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