class RuboCop::Cop::Style::GlobalStdStream


end
out.puts(‘hello’)
def m(out = $stdout)
hash = { out: $stdout, key: value }
$stdout.puts(‘hello’)
# good
end
out.puts(‘hello’)
def m(out = STDOUT)
hash = { out: STDOUT, key: value }
STDOUT.puts(‘hello’)
# bad
@example
objects, for example.
Autocorrection is unsafe because ‘STDOUT` and `$stdout` may point to different
@safety
an interpreter warning if you do so.
reassign (possibly to redirect some stream) constants in Ruby, you’ll get
`STDOUT/STDERR/STDIN` are constants, and while you can actually
This cop enforces the use of ‘$stdout/$stderr/$stdin` instead of `STDOUT/STDERR/STDIN`.

def gvar_name(const_name)

def gvar_name(const_name)
  "$#{const_name.to_s.downcase}"
end

def message(const_name)

def message(const_name)
  format(MSG, gvar_name: gvar_name(const_name), const_name: const_name)
end

def on_const(node)

def on_const(node)
  const_name = node.children[1]
  return unless STD_STREAMS.include?(const_name)
  gvar_name = gvar_name(const_name).to_sym
  return if const_to_gvar_assignment?(node.parent, gvar_name)
  add_offense(node, message: message(const_name)) do |corrector|
    corrector.replace(node, gvar_name)
  end
end