class RuboCop::Cop::Style::YAMLFileRead


YAML.safe_load_file(path) # Ruby 3.0 and newer
# good
YAML.safe_load(File.read(path)) # Ruby 3.0 and newer
# bad
YAML.parse_file(path)
YAML.load_file(path)
# good
YAML.parse(File.read(path))
YAML.load(File.read(path))
# bad
@example
NOTE: ‘YAML.safe_load_file` was introduced in Ruby 3.0.
`File.read` argument.
Checks for the use of `YAML.load`, `YAML.safe_load`, and `YAML.parse` with

def offense_range(node)

def offense_range(node)
  node.loc.selector.join(node.source_range.end)
end

def on_send(node)

def on_send(node)
  return if node.method?(:safe_load) && target_ruby_version <= 2.7
  return unless (file_path, rest_arguments = yaml_file_read?(node))
  range = offense_range(node)
  rest_arguments = if rest_arguments.empty?
                     ''
                   else
                     ", #{rest_arguments.map(&:source).join(', ')}"
                   end
  prefer = "#{node.method_name}_file(#{file_path.source}#{rest_arguments})"
  add_offense(range, message: format(MSG, prefer: prefer)) do |corrector|
    corrector.replace(range, prefer)
  end
end