Sha256: 50624923973a0de0c8e636f9be14a9f2ff84ced8659ef9fb2b7d902a7f9dee1f
Contents?: true
Size: 1.53 KB
Versions: 2
Compression:
Stored size: 1.53 KB
Contents
# frozen_string_literal: true module RuboCop module Cop module Style # This cop checks whether some constant value isn't a # mutable literal (e.g. array or hash). # # @example # # bad # CONST = [1, 2, 3] # # # good # CONST = [1, 2, 3].freeze class MutableConstant < Cop include FrozenStringLiteral MSG = 'Freeze mutable objects assigned to constants.'.freeze def on_casgn(node) _scope, _const_name, value = *node on_assignment(value) end def on_or_asgn(node) lhs, value = *node return unless lhs && lhs.casgn_type? on_assignment(value) end private def on_assignment(value) value = splat_value(value) if splat_value(value) return unless value && value.mutable_literal? return if FROZEN_STRING_LITERAL_TYPES.include?(value.type) && frozen_string_literals_enabled? add_offense(value, :expression) end def autocorrect(node) expr = node.source_range lambda do |corrector| if node.array_type? && !node.square_brackets? corrector.insert_before(expr, '[') corrector.insert_after(expr, '].freeze') else corrector.insert_after(expr, '.freeze') end end end def_node_matcher :splat_value, <<-PATTERN (array (splat $_)) PATTERN end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
rubocop-0.47.1 | lib/rubocop/cop/style/mutable_constant.rb |
rubocop-0.47.0 | lib/rubocop/cop/style/mutable_constant.rb |