# Copyright 2015 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.

"""Presubmit script for pdfium.

See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
for more details about the presubmit API built into depot_tools.
"""

LINT_FILTERS = [
  '-build/c++11',
  '-build/include',
  '-build/include_order',
  '-build/include_what_you_use',
  '-build/namespaces',
  '-build/storage_class',
  '-readability/casting',
  '-readability/fn_size',
  '-readability/todo',
  '-readability/utf8',
  '-runtime/arrays',
  '-runtime/explicit',
  '-runtime/int',
  '-runtime/printf',
  '-runtime/references',
  '-runtime/threadsafe_fn',
  '-whitespace/indent',
  '-whitespace/line_length',
]

def CheckChangeOnUpload(input_api, output_api):
  results = []
  results += input_api.canned_checks.CheckPatchFormatted(input_api, output_api)
  results += input_api.canned_checks.CheckChangeLintsClean(
      input_api, output_api, None, LINT_FILTERS)
  return results
