Sha256: 907826bca6be45208c98da2a50ef2f95e16d38c6f72834dd02414ccafdcaeff8
Contents?: true
Size: 1.57 KB
Versions: 9
Compression:
Stored size: 1.57 KB
Contents
# frozen_string_literal: true require "rubocop" module RuboCop module Cop module Sorbet # Disallows the calls that are used to get constants fom Strings # such as +constantize+, +const_get+, and +constants+. # # The goal of this cop is to make the code easier to statically analyze, # more IDE-friendly, and more predictable. It leads to code that clearly # expresses which values the constant can have. # # @example # # # bad # class_name.constantize # # # bad # constants.detect { |c| c.name == "User" } # # # bad # const_get(class_name) # # # good # case class_name # when "User" # User # else # raise ArgumentError # end # # # good # { "User" => User }.fetch(class_name) class ConstantsFromStrings < ::RuboCop::Cop::Cop # rubocop:todo InternalAffairs/InheritDeprecatedCopClass # @!method constant_from_string?(node) def_node_matcher(:constant_from_string?, <<-PATTERN) (send _ {:constantize :constants :const_get} ...) PATTERN def on_send(node) return unless constant_from_string?(node) add_offense( node, location: :selector, message: "Don't use `#{node.method_name}`, it makes the code harder to understand, less editor-friendly, " \ "and impossible to analyze. Replace `#{node.method_name}` with a case/when or a hash.", ) end end end end end
Version data entries
9 entries across 9 versions & 1 rubygems