class RuboCop::Cop::Style::SpecialGlobalVars

This cop looks for uses of Perl-style global variables.

def autocorrect(node)

def autocorrect(node)
  lambda do |corrector|
    global_var, = *node
    parent_type = node.parent ? node.parent.type : nil
    if [:dstr, :xstr, :regexp].include?(parent_type)
      corrector.replace(node.loc.expression,
                        "{#{PREFERRED_VARS[global_var].first}}")
    else
      corrector.replace(node.loc.expression,
                        PREFERRED_VARS[global_var].first)
    end
  end
end

def message(node)

def message(node)
  global_var, = *node
  regular, english = PREFERRED_VARS[global_var].partition do |var|
    NON_ENGLISH_VARS.include? var
  end
  # For now, we assume that lists are 2 items or less. Easy grammar!
  regular_msg = regular.join('` or `')
  english_msg = english.join('` or `')
  if regular.length > 0 && english.length > 0
    format(MSG_BOTH, english_msg, regular_msg, global_var)
  elsif regular.length > 0
    format(MSG_REGULAR, regular_msg, global_var)
  elsif english.length > 0
    format(MSG_ENGLISH, english_msg, global_var)
  else
    fail 'Bug in SpecialGlobalVars - global var w/o preferred vars!'
  end
end

def on_gvar(node)

def on_gvar(node)
  global_var, = *node
  add_offense(node, :expression) if PREFERRED_VARS[global_var]
end