Remove the #undef check from the Presubmit for .cc files

This CL attempts to remove the #undef check
from the Presubmit for .cc files because we
are removing Jumbo support.

Bug: chromium:994387
Change-Id: I1bb6d22393c1b533f23dd586e5028ecc6d254c99
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2013119
Reviewed-by: Clemens Backes <clemensb@chromium.org>
Reviewed-by: Wez <wez@chromium.org>
Reviewed-by: Michael Achenbach <machenbach@chromium.org>
Commit-Queue: Almothana Athamneh <almuthanna@chromium.org>
Cr-Commit-Position: refs/heads/master@{#65978}
This commit is contained in:
Al Muthanna Athamina 2020-01-24 15:33:16 +01:00 committed by Commit Bot
parent 3fa75eca1b
commit 1830560967

View File

@ -391,7 +391,6 @@ def _CommonChecks(input_api, output_api):
_CheckHeadersHaveIncludeGuards,
_CheckNoInlineHeaderIncludesInNormalHeaders,
_CheckJSONFiles,
_CheckMacroUndefs,
_CheckNoexceptAnnotations,
_RunTestsWithVPythonSpec,
]
@ -454,68 +453,6 @@ def _CheckJSONFiles(input_api, output_api):
return [output_api.PresubmitError(r) for r in results]
def _CheckMacroUndefs(input_api, output_api):
"""
Checks that each #define in a .cc file is eventually followed by an #undef.
TODO(clemensb): This check should eventually be enabled for all cc files via
tools/presubmit.py (https://crbug.com/v8/6811).
"""
def FilterFile(affected_file):
# Skip header files, as they often define type lists which are used in
# other files.
white_list = (r'.+\.cc',r'.+\.cpp',r'.+\.c')
return input_api.FilterSourceFile(affected_file, white_list=white_list)
def Touches(line):
return line.startswith('+') or line.startswith('-')
def InvolvesMacros(text):
return define_pattern.match(text) or undef_pattern.match(text)
def TouchesMacros(f):
return any(Touches(line) and InvolvesMacros(line[1:])
for line in f.GenerateScmDiff().splitlines())
def CollectUndefsWithNoDef(defined_macros, errors, f, line, line_nr):
define_match = define_pattern.match(line)
if define_match:
name = define_match.group(1)
defined_macros[name] = line_nr
undef_match = undef_pattern.match(line)
if undef_match and not "// NOLINT" in line:
name = undef_match.group(1)
if name in defined_macros:
del defined_macros[name]
else:
errors.append('{}:{}: Macro named \'{}\' was not defined before.'
.format(f.LocalPath(), line_nr, name))
define_pattern = input_api.re.compile(r'#define (\w+)')
undef_pattern = input_api.re.compile(r'#undef (\w+)')
errors = []
for f in input_api.AffectedFiles(
file_filter=FilterFile, include_deletes=False):
if not TouchesMacros(f):
continue
defined_macros = dict()
with open(f.LocalPath()) as fh:
for line_nr, line in enumerate(fh, start=1):
CollectUndefsWithNoDef(defined_macros, errors, f, line, line_nr)
for name, line_nr in sorted(defined_macros.items(), key=lambda e: e[1]):
errors.append('{}:{}: Macro missing #undef: {}'
.format(f.LocalPath(), line_nr, name))
if errors:
return [output_api.PresubmitPromptOrNotify(
'Detected mismatches in #define / #undef in the file(s) where you '
'modified preprocessor macros.',
errors)]
return []
def _CheckNoexceptAnnotations(input_api, output_api):
"""
Checks that all user-defined constructors and assignment operators are marked