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