Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: PRESUBMIT.py

Issue 595213004: Add PRESUBMIT check for #ifdefs on values that are always defined. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove debug logging Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | PRESUBMIT_test.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Top-level presubmit script for Chromium. 5 """Top-level presubmit script for Chromium.
6 6
7 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts 7 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
8 for more details about the presubmit API built into gcl. 8 for more details about the presubmit API built into gcl.
9 """ 9 """
10 10
(...skipping 1265 matching lines...) Expand 10 before | Expand all | Expand 10 after
1276 results.extend(_CheckNoTrinaryTrueFalse(input_api, output_api)) 1276 results.extend(_CheckNoTrinaryTrueFalse(input_api, output_api))
1277 results.extend(_CheckUnwantedDependencies(input_api, output_api)) 1277 results.extend(_CheckUnwantedDependencies(input_api, output_api))
1278 results.extend(_CheckFilePermissions(input_api, output_api)) 1278 results.extend(_CheckFilePermissions(input_api, output_api))
1279 results.extend(_CheckNoAuraWindowPropertyHInHeaders(input_api, output_api)) 1279 results.extend(_CheckNoAuraWindowPropertyHInHeaders(input_api, output_api))
1280 results.extend(_CheckIncludeOrder(input_api, output_api)) 1280 results.extend(_CheckIncludeOrder(input_api, output_api))
1281 results.extend(_CheckForVersionControlConflicts(input_api, output_api)) 1281 results.extend(_CheckForVersionControlConflicts(input_api, output_api))
1282 results.extend(_CheckPatchFiles(input_api, output_api)) 1282 results.extend(_CheckPatchFiles(input_api, output_api))
1283 results.extend(_CheckHardcodedGoogleHostsInLowerLayers(input_api, output_api)) 1283 results.extend(_CheckHardcodedGoogleHostsInLowerLayers(input_api, output_api))
1284 results.extend(_CheckNoAbbreviationInPngFileName(input_api, output_api)) 1284 results.extend(_CheckNoAbbreviationInPngFileName(input_api, output_api))
1285 results.extend(_CheckForInvalidOSMacros(input_api, output_api)) 1285 results.extend(_CheckForInvalidOSMacros(input_api, output_api))
1286 results.extend(_CheckForInvalidIfDefinedMacros(input_api, output_api))
1286 results.extend(_CheckAddedDepsHaveTargetApprovals(input_api, output_api)) 1287 results.extend(_CheckAddedDepsHaveTargetApprovals(input_api, output_api))
1287 results.extend( 1288 results.extend(
1288 input_api.canned_checks.CheckChangeHasNoTabs( 1289 input_api.canned_checks.CheckChangeHasNoTabs(
1289 input_api, 1290 input_api,
1290 output_api, 1291 output_api,
1291 source_file_filter=lambda x: x.LocalPath().endswith('.grd'))) 1292 source_file_filter=lambda x: x.LocalPath().endswith('.grd')))
1292 results.extend(_CheckSpamLogging(input_api, output_api)) 1293 results.extend(_CheckSpamLogging(input_api, output_api))
1293 results.extend(_CheckForAnonymousVariables(input_api, output_api)) 1294 results.extend(_CheckForAnonymousVariables(input_api, output_api))
1294 results.extend(_CheckCygwinShell(input_api, output_api)) 1295 results.extend(_CheckCygwinShell(input_api, output_api))
1295 results.extend(_CheckUserActionUpdate(input_api, output_api)) 1296 results.extend(_CheckUserActionUpdate(input_api, output_api))
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
1386 if not f.LocalPath().endswith(('.py', '.js', '.html', '.css')): 1387 if not f.LocalPath().endswith(('.py', '.js', '.html', '.css')):
1387 bad_macros.extend(_CheckForInvalidOSMacrosInFile(input_api, f)) 1388 bad_macros.extend(_CheckForInvalidOSMacrosInFile(input_api, f))
1388 1389
1389 if not bad_macros: 1390 if not bad_macros:
1390 return [] 1391 return []
1391 1392
1392 return [output_api.PresubmitError( 1393 return [output_api.PresubmitError(
1393 'Possibly invalid OS macro[s] found. Please fix your code\n' 1394 'Possibly invalid OS macro[s] found. Please fix your code\n'
1394 'or add your macro to src/PRESUBMIT.py.', bad_macros)] 1395 'or add your macro to src/PRESUBMIT.py.', bad_macros)]
1395 1396
1397
1398 def _CheckForInvalidIfDefinedMacrosInFile(input_api, f):
1399 """Check all affected files for invalid "if defined" macros."""
1400 ALWAYS_DEFINED_MACROS = (
1401 "TARGET_IPHONE_SIMULATOR",
stuartmorgan 2014/09/25 23:42:32 From TargetConditionals.h, I'd suggest we also add
lliabraa 2014/09/26 18:22:43 Done. I added all the CPU and OS defines
1402 )
1403 preprocessor_statement = input_api.re.compile(r'^\s*#')
1404 ifdef_macro = input_api.re.compile(r'(ifdef\s|defined\()([^\s\)]+)')
stuartmorgan 2014/09/25 23:42:32 Why separate regexes, vs ^\s*#.*(ifdef|defined\()
lliabraa 2014/09/26 18:22:43 I copied that bit from _CheckForInvalidOSMacrosInF
1405 results = []
1406 for lnum, line in f.ChangedContents():
1407 if preprocessor_statement.search(line):
1408 for match in ifdef_macro.finditer(line):
1409 if match.group(2) in ALWAYS_DEFINED_MACROS:
1410 always_defined = ' %s is always defined. ' % match.group(2)
1411 did_you_mean = 'Did you mean \'#if %s\'?' % match.group(2)
1412 results.append(' %s:%d %s\n\t%s' % (f.LocalPath(),
1413 lnum,
1414 always_defined,
1415 did_you_mean))
1416 return results
1417
1418
1419 def _CheckForInvalidIfDefinedMacros(input_api, output_api):
1420 """Check all affected files for invalid "if defined" macros."""
1421 bad_macros = []
1422 for f in input_api.AffectedFiles():
1423 if f.LocalPath().endswith(('.h', '.c', '.cc', '.m', '.mm')):
1424 bad_macros.extend(_CheckForInvalidIfDefinedMacrosInFile(input_api, f))
1425
1426 if not bad_macros:
1427 return []
1428
1429 return [output_api.PresubmitError(
1430 'Possibly invalid if defined macro[s] found. Please fix your code\n'
1431 'or add your macro to src/PRESUBMIT.py.', bad_macros)]
stuartmorgan 2014/09/25 23:42:32 Where would they add it to fix the error?
lliabraa 2014/09/26 18:22:43 Done. I've changed this text a bit. If the ifdef i
1432
1433
1396 def _CheckForIPCRules(input_api, output_api): 1434 def _CheckForIPCRules(input_api, output_api):
1397 """Check for same IPC rules described in 1435 """Check for same IPC rules described in
1398 http://www.chromium.org/Home/chromium-security/education/security-tips-for-ipc 1436 http://www.chromium.org/Home/chromium-security/education/security-tips-for-ipc
1399 """ 1437 """
1400 base_pattern = r'IPC_ENUM_TRAITS\(' 1438 base_pattern = r'IPC_ENUM_TRAITS\('
1401 inclusion_pattern = input_api.re.compile(r'(%s)' % base_pattern) 1439 inclusion_pattern = input_api.re.compile(r'(%s)' % base_pattern)
1402 comment_pattern = input_api.re.compile(r'//.*(%s)' % base_pattern) 1440 comment_pattern = input_api.re.compile(r'//.*(%s)' % base_pattern)
1403 1441
1404 problems = [] 1442 problems = []
1405 for f in input_api.AffectedSourceFiles(None): 1443 for f in input_api.AffectedSourceFiles(None):
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
1647 builders.extend(['cros_x86']) 1685 builders.extend(['cros_x86'])
1648 1686
1649 # The AOSP bot doesn't build the chrome/ layer, so ignore any changes to it 1687 # The AOSP bot doesn't build the chrome/ layer, so ignore any changes to it
1650 # unless they're .gyp(i) files as changes to those files can break the gyp 1688 # unless they're .gyp(i) files as changes to those files can break the gyp
1651 # step on that bot. 1689 # step on that bot.
1652 if (not all(re.search('^chrome', f) for f in files) or 1690 if (not all(re.search('^chrome', f) for f in files) or
1653 any(re.search('\.gypi?$', f) for f in files)): 1691 any(re.search('\.gypi?$', f) for f in files)):
1654 builders.extend(['android_aosp']) 1692 builders.extend(['android_aosp'])
1655 1693
1656 return GetDefaultTryConfigs(builders) 1694 return GetDefaultTryConfigs(builders)
OLDNEW
« no previous file with comments | « no previous file | PRESUBMIT_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698