brew/Library/Homebrew/rubocops/extend/mutable_constant_exclude_unfreezable.rb
2024-09-20 10:45:26 -07:00

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,
)