class RuboCop::Cop::Lint::DeprecatedClassMethods
Addrinfo.tcp(host, port).getnameinfo
Addrinfo.getaddrinfo(nodename, service)
ENV.to_h # ‘ENV.dup` cannot dup `ENV`, use `ENV.to_h` to get a copy of `ENV` as a hash.
ENV.to_h
ENV # `ENV.freeze` cannot prohibit changes to environment variables.
attr_reader :name
attr_accessor :name
block_given?
Dir.exist?(some_path)
File.exist?(some_path)
# good
Socket.gethostbyaddr(host)
Socket.gethostbyname(host)
ENV.dup # Calling `Env.dup` raises `TypeError` since Ruby 3.1.
ENV.clone
ENV.freeze # Calling `Env.freeze` raises `TypeError` since Ruby 2.7.
attr :name, false
attr :name, true
iterator?
Dir.exists?(some_path)
File.exists?(some_path)
# bad
@example
Checks for uses of the deprecated class method usages.
def dir_env_file_const?(node)
def dir_env_file_const?(node) DIR_ENV_FILE_CONSTANTS.include?(node&.short_name) end
def offense_range(node)
def offense_range(node) if socket_const?(node.receiver) || dir_env_file_const?(node.receiver) node.source_range.begin.join(node.loc.selector.end) elsif node.method?(:attr) node else node.loc.selector end end
def on_send(node)
def on_send(node) return unless deprecated_class_method?(node) offense_range = offense_range(node) prefer = preferred_method(node) message = format(MSG, current: offense_range.source, prefer: prefer) add_offense(offense_range, message: message) do |corrector| next if socket_const?(node.receiver) if node.method?(:freeze) corrector.replace(node, 'ENV') else corrector.replace(offense_range, prefer) end end end
def preferred_method(node)
def preferred_method(node) if node.method?(:attr) boolean_argument = node.arguments[1].source preferred_attr_method = boolean_argument == 'true' ? 'attr_accessor' : 'attr_reader' "#{preferred_attr_method} #{node.first_argument.source}" elsif dir_env_file_const?(node.receiver) prefer = PREFERRED_METHODS[node.method_name] prefer ? "#{node.receiver.source}.#{prefer}" : 'ENV' else PREFERRED_METHODS[node.method_name] end end
def socket_const?(node)
def socket_const?(node) node&.short_name == :Socket end