class RuboCop::Cop::Sorbet::ConstantsFromStrings
{ “User” => User }.fetch(class_name)
# good
end
raise ArgumentError
else
User
when “User”
case class_name
# good
const_get(class_name)
# bad
constants.detect { |c| c.name == “User” }
# bad
class_name.constantize
# bad
@example
expresses which values the constant can have.
more IDE-friendly, and more predictable. It leads to code that clearly
The goal of this cop is to make the code easier to statically analyze,
such as constantize
, const_get
, and constants
.
This cop disallows the calls that are used to get constants fom Strings
def on_send(node)
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