class RuboCop::Cop::Style::HashSyntax

A separate offense is registered for each problematic pair.
the use of the newer Ruby 1.9 syntax (when applicable).
It can enforce either the use of the class hash rocket syntax or
This cop checks hash literal syntax.

def autocorrect(node)

def autocorrect(node)
  key = node.children.first.loc.expression
  op = node.loc.operator
  @corrections << lambda do |corrector|
    if style == :ruby19
      range = Parser::Source::Range.new(key.source_buffer,
                                        key.begin_pos, op.end_pos)
      range = range_with_surrounding_space(range, :right)
      corrector.replace(range,
                        range.source.sub(/^:(.*\S)\s*=>\s*$/, '\1: '))
    else
      corrector.insert_after(key, ' => ')
      corrector.insert_before(key, ':')
      corrector.remove(range_with_surrounding_space(op))
    end
  end
end

def check(pairs, delim, msg)

def check(pairs, delim, msg)
  pairs.each do |pair|
    if pair.loc.operator && pair.loc.operator.is?(delim)
      add_offense(pair,
                  pair.loc.expression.begin.join(pair.loc.operator),
                  msg) do
        opposite_style_detected
      end
    else
      correct_style_detected
    end
  end
end

def hash_rockets_check(node)

def hash_rockets_check(node)
  pairs = *node
  check(pairs, ':', MSG_HASH_ROCKETS)
end

def on_hash(node)

def on_hash(node)
  style == :ruby19 ? ruby19_check(node) : hash_rockets_check(node)
end

def ruby19_check(node)

def ruby19_check(node)
  pairs = *node
  sym_indices = pairs.all? { |p| word_symbol_pair?(p) }
  check(pairs, '=>', MSG_19) if sym_indices
end

def space_before_operator?(op, key)

def space_before_operator?(op, key)
  op.begin_pos - key.begin_pos - key.source.length > 0
end

def word_symbol_pair?(pair)

def word_symbol_pair?(pair)
  key, _value = *pair
  if key.type == :sym
    sym_name = key.to_a[0]
    sym_name =~ /\A[A-Za-z_]\w*\z/
  else
    false
  end
end