PRESUBMIT: detect invalid #include statements
Detects the following:
- #include "foo.h" rather than "src/xxx/foo.h"
- #include "include/perfetto/foo.h" rather than "perfetto/foo.h"
Change-Id: I199119c5e37859b4faa63e39bbac9b49446aa976
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 5d92c14..124a502 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -72,6 +72,7 @@
output)
results += RunAndReportIfLong(CheckIncludeGuards, input, output)
results += RunAndReportIfLong(CheckIncludeViolations, input, output)
+ results += RunAndReportIfLong(CheckIncludePaths, input, output)
results += RunAndReportIfLong(CheckProtoComments, input, output)
results += RunAndReportIfLong(CheckBuild, input, output)
results += RunAndReportIfLong(CheckAndroidBlueprint, input, output)
@@ -251,6 +252,31 @@
return []
+def CheckIncludePaths(input_api, output_api):
+
+ def file_filter(x):
+ return input_api.FilterSourceFile(x, files_to_check=[r'.*\.h$', r'.*\.cc$'])
+
+ error_lines = []
+ for f in input_api.AffectedSourceFiles(file_filter):
+ for line_num, line in f.ChangedContents():
+ m = input_api.re.search(r'^#include "(.*\.h)"', line)
+ if not m:
+ continue
+ inc_hdr = m.group(1)
+ if inc_hdr.startswith('include/perfetto'):
+ error_lines.append(' %s:%s: Redundant "include/" in #include path"' %
+ (f.LocalPath(), line_num))
+ if '/' not in inc_hdr:
+ error_lines.append(
+ ' %s:%s: relative #include not allowed, use full path' %
+ (f.LocalPath(), line_num))
+ return [] if len(error_lines) == 0 else [
+ output_api.PresubmitError('Invalid #include paths detected:\n' +
+ '\n'.join(error_lines))
+ ]
+
+
def CheckBinaryDescriptors(input_api, output_api):
# The script invocation doesn't work on Windows.
if input_api.is_windows: