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

Side by Side Diff: PRESUBMIT.py

Issue 2532583002: Presubmit: Warn about useless forward declarations (Closed)
Patch Set: Changed version Created 4 years 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 depot_tools. 8 for more details about the presubmit API built into depot_tools.
9 """ 9 """
10 10
(...skipping 1566 matching lines...) Expand 10 before | Expand all | Expand 10 after
1577 break 1577 break
1578 1578
1579 if len(files): 1579 if len(files):
1580 return [output_api.PresubmitError( 1580 return [output_api.PresubmitError(
1581 'Do not introduce new mojom targets with use_new_wrapper_types set to ' 1581 'Do not introduce new mojom targets with use_new_wrapper_types set to '
1582 'false. The mode is deprecated and will be removed soon.', 1582 'false. The mode is deprecated and will be removed soon.',
1583 files)] 1583 files)]
1584 return [] 1584 return []
1585 1585
1586 1586
1587 def _CheckUselessForwardDeclarations(input_api, output_api):
1588 """Checks that added or removed lines in affected header files
1589 do not lead to new useless class or struct forward declaration.
1590 """
1591 results = []
1592 class_pattern = input_api.re.compile(r'^class\s+(\w+);$',
1593 input_api.re.MULTILINE)
1594 struct_pattern = input_api.re.compile(r'^struct\s+(\w+);$',
1595 input_api.re.MULTILINE)
1596 for f in input_api.AffectedFiles(include_deletes=False):
1597 if not f.LocalPath().endswith('.h'):
1598 continue
1599
1600 contents = input_api.ReadFile(f)
1601 fwd_decls = input_api.re.findall(class_pattern, contents)
1602 fwd_decls.extend(input_api.re.findall(struct_pattern, contents))
1603
1604 useless_fwd_decls = []
1605 for decl in fwd_decls:
1606 count = sum(1 for _ in input_api.re.finditer(
1607 r'\b%s\b' % input_api.re.escape(decl), contents))
1608 if count == 1:
1609 useless_fwd_decls.append(decl)
1610
1611 if not useless_fwd_decls:
1612 continue
1613
1614 for line in f.GenerateScmDiff().splitlines():
1615 if (line.startswith('-') and not line.startswith('--') or
1616 line.startswith('+') and not line.startswith('++')):
1617 for decl in useless_fwd_decls:
1618 if input_api.re.search(r'\b%s\b' % decl, line[1:]):
1619 results.append(output_api.PresubmitPromptWarning(
1620 '%s: %s forward declaration is becoming useless' %
1621 (f.LocalPath(), decl)))
1622 useless_fwd_decls.remove(decl)
1623
1624 return results
1625
1626
1587 def _CheckAndroidToastUsage(input_api, output_api): 1627 def _CheckAndroidToastUsage(input_api, output_api):
1588 """Checks that code uses org.chromium.ui.widget.Toast instead of 1628 """Checks that code uses org.chromium.ui.widget.Toast instead of
1589 android.widget.Toast (Chromium Toast doesn't force hardware 1629 android.widget.Toast (Chromium Toast doesn't force hardware
1590 acceleration on low-end devices, saving memory). 1630 acceleration on low-end devices, saving memory).
1591 """ 1631 """
1592 toast_import_pattern = input_api.re.compile( 1632 toast_import_pattern = input_api.re.compile(
1593 r'^import android\.widget\.Toast;$') 1633 r'^import android\.widget\.Toast;$')
1594 1634
1595 errors = [] 1635 errors = []
1596 1636
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
2026 results.extend(_CheckNoDeprecatedJS(input_api, output_api)) 2066 results.extend(_CheckNoDeprecatedJS(input_api, output_api))
2027 results.extend(_CheckParseErrors(input_api, output_api)) 2067 results.extend(_CheckParseErrors(input_api, output_api))
2028 results.extend(_CheckForIPCRules(input_api, output_api)) 2068 results.extend(_CheckForIPCRules(input_api, output_api))
2029 results.extend(_CheckForWindowsLineEndings(input_api, output_api)) 2069 results.extend(_CheckForWindowsLineEndings(input_api, output_api))
2030 results.extend(_CheckSingletonInHeaders(input_api, output_api)) 2070 results.extend(_CheckSingletonInHeaders(input_api, output_api))
2031 results.extend(_CheckNoDeprecatedCompiledResourcesGYP(input_api, output_api)) 2071 results.extend(_CheckNoDeprecatedCompiledResourcesGYP(input_api, output_api))
2032 results.extend(_CheckPydepsNeedsUpdating(input_api, output_api)) 2072 results.extend(_CheckPydepsNeedsUpdating(input_api, output_api))
2033 results.extend(_CheckJavaStyle(input_api, output_api)) 2073 results.extend(_CheckJavaStyle(input_api, output_api))
2034 results.extend(_CheckIpcOwners(input_api, output_api)) 2074 results.extend(_CheckIpcOwners(input_api, output_api))
2035 results.extend(_CheckMojoUsesNewWrapperTypes(input_api, output_api)) 2075 results.extend(_CheckMojoUsesNewWrapperTypes(input_api, output_api))
2076 results.extend(_CheckUselessForwardDeclarations(input_api, output_api))
2036 2077
2037 if any('PRESUBMIT.py' == f.LocalPath() for f in input_api.AffectedFiles()): 2078 if any('PRESUBMIT.py' == f.LocalPath() for f in input_api.AffectedFiles()):
2038 results.extend(input_api.canned_checks.RunUnitTestsInDirectory( 2079 results.extend(input_api.canned_checks.RunUnitTestsInDirectory(
2039 input_api, output_api, 2080 input_api, output_api,
2040 input_api.PresubmitLocalPath(), 2081 input_api.PresubmitLocalPath(),
2041 whitelist=[r'^PRESUBMIT_test\.py$'])) 2082 whitelist=[r'^PRESUBMIT_test\.py$']))
2042 return results 2083 return results
2043 2084
2044 2085
2045 def _CheckAuthorizedAuthor(input_api, output_api): 2086 def _CheckAuthorizedAuthor(input_api, output_api):
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
2306 results.extend(input_api.canned_checks.CheckTreeIsOpen( 2347 results.extend(input_api.canned_checks.CheckTreeIsOpen(
2307 input_api, 2348 input_api,
2308 output_api, 2349 output_api,
2309 json_url='http://chromium-status.appspot.com/current?format=json')) 2350 json_url='http://chromium-status.appspot.com/current?format=json'))
2310 2351
2311 results.extend(input_api.canned_checks.CheckChangeHasBugField( 2352 results.extend(input_api.canned_checks.CheckChangeHasBugField(
2312 input_api, output_api)) 2353 input_api, output_api))
2313 results.extend(input_api.canned_checks.CheckChangeHasDescription( 2354 results.extend(input_api.canned_checks.CheckChangeHasDescription(
2314 input_api, output_api)) 2355 input_api, output_api))
2315 return results 2356 return results
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