46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | # typed: strict | ||
|  | # frozen_string_literal: true | ||
|  | 
 | ||
|  | require "rubocop/cop/style/mutable_constant" | ||
|  | 
 | ||
|  | module RuboCop | ||
|  |   module Cop | ||
|  |     module Sorbet | ||
|  |       # TODO: delete this file when https://github.com/Shopify/rubocop-sorbet/pull/256 is available | ||
|  |       module MutableConstantExcludeUnfreezable | ||
|  |         class << self | ||
|  |           sig { params(base: RuboCop::AST::NodePattern::Macros).void } | ||
|  |           def prepended(base) | ||
|  |             base.def_node_matcher(:t_let, <<~PATTERN) | ||
|  |               (send (const nil? :T) :let $_constant _type) | ||
|  |             PATTERN | ||
|  | 
 | ||
|  |             base.def_node_matcher(:t_type_alias?, <<~PATTERN) | ||
|  |               (block (send (const {nil? cbase} :T) :type_alias ...) ...) | ||
|  |             PATTERN | ||
|  | 
 | ||
|  |             base.def_node_matcher(:type_member?, <<~PATTERN) | ||
|  |               (block (send nil? :type_member ...) ...) | ||
|  |             PATTERN | ||
|  |           end | ||
|  |         end | ||
|  | 
 | ||
|  |         sig { params(value: RuboCop::AST::Node).void } | ||
|  |         def on_assignment(value) | ||
|  |           T.unsafe(self).t_let(value) do |constant| | ||
|  |             value = T.let(constant, RuboCop::AST::Node) | ||
|  |           end | ||
|  |           return if T.unsafe(self).t_type_alias?(value) | ||
|  |           return if T.unsafe(self).type_member?(value) | ||
|  | 
 | ||
|  |           super | ||
|  |         end | ||
|  |       end | ||
|  |     end | ||
|  |   end | ||
|  | end | ||
|  | 
 | ||
|  | RuboCop::Cop::Style::MutableConstant.prepend( | ||
|  |   RuboCop::Cop::Sorbet::MutableConstantExcludeUnfreezable, | ||
|  | ) |