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