# Copyright (c) 2009 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Makes sure that the chrome/ code is cpplint clean."""

INCLUDE_CPP_FILES_ONLY = (
  r'.*\.cc$', r'.*\.h$'
)

EXCLUDE = (
  # Objective C confuses everything.
  r'.*cocoa.*',
  r'.*_mac\.(cc|h)$',
  r'.*_mac_.*',
  # All the messages files do weird multiple include trickery
  r'.*_messages_internal\.h$',
  r'render_messages.h$',
  # Autogenerated window resources files are off limits
  r'.*resource.h$',
  # GTK macros in C-ish header code cause false positives
  r'gtk_.*\.h$',
  # Header trickery
  r'.*-inl\.h$',
  # Templates
  r'sigslotrepeater\.h$',
  # GCC attribute trickery
  r'sel_main\.cc$',
  # Mozilla code
  r'mork_reader\.h$',
  r'mork_reader\.cc$',
  r'nss_decryptor_linux\.cc$',
  # Has safe printf usage that cpplint complains about
  r'safe_browsing_util\.cc$',
  # Too much math on one line?
  r'bloom_filter\.cc$',
  # Bogus ifdef tricks
  r'renderer_webkitclient_impl\.cc$',
  r'temp_scaffolding_stubs\.h$',
  # Lines > 100 chars
  r'gcapi\.cc$',
)

def CheckChangeOnUpload(input_api, output_api):
  results = []
  black_list = input_api.DEFAULT_BLACK_LIST + EXCLUDE
  sources = lambda x: input_api.FilterSourceFile(
    x, white_list=INCLUDE_CPP_FILES_ONLY, black_list=black_list)
  results.extend(input_api.canned_checks.CheckChangeLintsClean(
      input_api, output_api, sources))
  return results

Call the new presubmit checks from chrome/ code, with a blacklist.