class Rubocop::Cop::Cop

def self.inherited(subclass)

def self.inherited(subclass)
  all << subclass
end

def add_offence(severity, line_number, message)

def add_offence(severity, line_number, message)
  @offences << Offence.new(severity, line_number, message)
end

def all_positions(sexp)

def all_positions(sexp)
  return [sexp[2]] if sexp[0] =~ /^@/
  sexp.grep(Array).reduce([]) { |memo, s| memo + all_positions(s) }
end

def each(sym, sexp)

def each(sym, sexp)
  yield sexp if sexp[0] == sym
  sexp.each do |elem|
    each(sym, elem) { |s| yield s } if Array === elem
  end
end

def each_parent_of(sym, sexp)

def each_parent_of(sym, sexp)
  parents = []
  sexp.each do |elem|
    if Array === elem
      if elem[0] == sym
        parents << sexp unless parents.include?(sexp)
        elem = elem[1..-1]
      end
      each_parent_of(sym, elem) do |parent|
        parents << parent unless parents.include?(parent)
      end
    end
  end
  parents.each { |parent| yield parent }
end

def has_report?

def has_report?
  !@offences.empty?
end

def initialize

def initialize
  @offences = []
end

def whitespace?(token)

def whitespace?(token)
  [:on_sp, :on_ignored_nl, :on_nl].include?(token.type)
end