class RuboCop::Cop::Sorbet::ConstantsFromStrings

This cop 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)

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/sorbet/constants_from_strings.rb, line 41
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