Adding CheckNoWarningSuppressionFlagsAreAdded.
This PRESUBMIT check will ensure that WebRTC does not regress on
the amount of warning suppression flags used.
At the moment it only checks for //build/config/clang:extra_warnings.
Error message:
** Presubmit ERRORS **
Usage of //build/config/clang:extra_warnings is discouraged in WebRTC.
If you are not adding this code (e.g. you are just moving existing code) or you want to add an exception,
you can add a comment on the line that causes the problem:
"-Wno-odr" # no-presubmit-check TODO(bugs.webrtc.org/BUG_ID)
Affected files:
api/BUILD.gn (line 30)
Bug: webrtc:9251
Change-Id: I059cbc648ca6f6806cf5e936e0b83b72ec4f3f50
Reviewed-on: https://webrtc-review.googlesource.com/86942
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23831}
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 337d1d2..6cd1984 100755
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -415,14 +415,37 @@
return []
-def _ReportErrorFileAndLineNumber(filename, line_num):
+def _ReportFileAndLine(filename, line_num):
"""Default error formatter for _FindNewViolationsOfRule."""
return '%s (line %s)' % (filename, line_num)
+def CheckNoWarningSuppressionFlagsAreAdded(gn_files, input_api, output_api,
+ error_formatter=_ReportFileAndLine):
+ """Make sure that warning suppression flags are not added wihtout a reason."""
+ msg = ('Usage of //build/config/clang:extra_warnings is discouraged '
+ 'in WebRTC.\n'
+ 'If you are not adding this code (e.g. you are just moving '
+ 'existing code) or you want to add an exception,\n'
+ 'you can add a comment on the line that causes the problem:\n\n'
+ '"-Wno-odr" # no-presubmit-check TODO(bugs.webrtc.org/BUG_ID)\n'
+ '\n'
+ 'Affected files:\n')
+ errors = [] # 2-element tuples with (file, line number)
+ clang_warn_re = input_api.re.compile(r'//build/config/clang:extra_warnings')
+ no_presubmit_re = input_api.re.compile(
+ r'# no-presubmit-check TODO\(bugs\.webrtc\.org/\d+\)')
+ for f in gn_files:
+ for line_num, line in f.ChangedContents():
+ if clang_warn_re.search(line) and not no_presubmit_re.search(line):
+ errors.append(error_formatter(f.LocalPath(), line_num))
+ if errors:
+ return [output_api.PresubmitError(msg, errors)]
+ return []
+
def CheckNoStreamUsageIsAdded(input_api, output_api,
source_file_filter,
- error_formatter=_ReportErrorFileAndLineNumber):
+ error_formatter=_ReportFileAndLine):
"""Make sure that no more dependencies on stringstream are added."""
error_msg = ('Usage of <sstream>, <istream> and <ostream> in WebRTC is '
'deprecated.\n'
@@ -501,11 +524,10 @@
return result
-def CheckGnChanges(input_api, output_api, source_file_filter):
+def CheckGnChanges(input_api, output_api):
file_filter = lambda x: (input_api.FilterSourceFile(
x, white_list=(r'.+\.(gn|gni)$',),
- black_list=(r'.*/presubmit_checks_lib/testdata/.*',))
- and source_file_filter(x))
+ black_list=(r'.*/presubmit_checks_lib/testdata/.*',)))
gn_files = []
for f in input_api.AffectedSourceFiles(file_filter):
@@ -519,6 +541,8 @@
output_api))
result.extend(CheckPublicDepsIsNotUsed(gn_files, input_api, output_api))
result.extend(CheckCheckIncludesIsNotUsed(gn_files, output_api))
+ result.extend(CheckNoWarningSuppressionFlagsAreAdded(gn_files, input_api,
+ output_api))
return result
@@ -814,8 +838,7 @@
input_api, output_api, source_file_filter=non_third_party_sources))
results.extend(CheckNoFRIEND_TEST(
input_api, output_api, source_file_filter=non_third_party_sources))
- results.extend(CheckGnChanges(
- input_api, output_api, source_file_filter=non_third_party_sources))
+ results.extend(CheckGnChanges(input_api, output_api))
results.extend(CheckUnwantedDependencies(
input_api, output_api, source_file_filter=non_third_party_sources))
results.extend(CheckJSONParseErrors(