Index: PRESUBMIT.py |
diff --git a/PRESUBMIT.py b/PRESUBMIT.py |
index f16d273ab1d4f0e7caefc583f0e2dd3fc12dd973..252b836826b0ba674d23e9cb4f996c239981986a 100644 |
--- a/PRESUBMIT.py |
+++ b/PRESUBMIT.py |
@@ -542,7 +542,7 @@ def _CheckIncludeOrderForScope(scope, input_api, file_path, changed_linenums): |
return warnings |
-def _CheckIncludeOrderInFile(input_api, f, is_source, changed_linenums): |
+def _CheckIncludeOrderInFile(input_api, f, changed_linenums): |
"""Checks the #include order for the given file f.""" |
system_include_pattern = input_api.re.compile(r'\s*#include \<.*') |
@@ -550,34 +550,34 @@ def _CheckIncludeOrderInFile(input_api, f, is_source, changed_linenums): |
# often need to appear in a specific order. |
excluded_include_pattern = input_api.re.compile(r'\s*#include \<.*/.*') |
custom_include_pattern = input_api.re.compile(r'\s*#include "(?P<FILE>.*)"') |
- if_pattern = input_api.re.compile(r'\s*#\s*(if|elif|else|endif).*') |
+ if_pattern = ( |
+ input_api.re.compile(r'\s*#\s*(if|elif|else|endif|define|undef).*')) |
contents = f.NewContents() |
warnings = [] |
line_num = 0 |
- # Handle the special first include for source files. If the header file is |
- # some/path/file.h, the corresponding source file can be some/path/file.cc, |
- # some/other/path/file.cc, some/path/file_platform.cc etc. It's also possible |
- # that no special first include exists. |
- if is_source: |
- for line in contents: |
- line_num += 1 |
- if system_include_pattern.match(line): |
+ # Handle the special first include. If the first include file is |
+ # some/path/file.h, the corresponding including file can be some/path/file.cc, |
+ # some/other/path/file.cc, some/path/file_platform.cc, some/path/file-suffix.h |
+ # etc. It's also possible that no special first include exists. |
+ for line in contents: |
+ line_num += 1 |
+ if system_include_pattern.match(line): |
+ # No special first include -> process the line again along with normal |
+ # includes. |
+ line_num -= 1 |
+ break |
+ match = custom_include_pattern.match(line) |
+ if match: |
+ match_dict = match.groupdict() |
+ header_basename = input_api.os_path.basename( |
+ match_dict['FILE']).replace('.h', '') |
+ if header_basename not in input_api.os_path.basename(f.LocalPath()): |
# No special first include -> process the line again along with normal |
# includes. |
line_num -= 1 |
- break |
- match = custom_include_pattern.match(line) |
- if match: |
- match_dict = match.groupdict() |
- header_basename = input_api.os_path.basename( |
- match_dict['FILE']).replace('.h', '') |
- if header_basename not in input_api.os_path.basename(f.LocalPath()): |
- # No special first include -> process the line again along with normal |
- # includes. |
- line_num -= 1 |
- break |
+ break |
# Split into scopes: Each region between #if and #endif is its own scope. |
scopes = [] |
@@ -607,18 +607,15 @@ def _CheckIncludeOrder(input_api, output_api): |
3. C++ system files in alphabetical order |
4. Project's .h files in alphabetical order |
- Each region between #if and #endif follows these rules separately. |
+ Each region separated by #if, #elif, #else, #endif, #define and #undef follows |
+ these rules separately. |
""" |
warnings = [] |
for f in input_api.AffectedFiles(): |
- changed_linenums = set([line_num for line_num, _ in f.ChangedContents()]) |
- if f.LocalPath().endswith('.cc'): |
- warnings.extend(_CheckIncludeOrderInFile(input_api, f, True, |
- changed_linenums)) |
- elif f.LocalPath().endswith('.h'): |
- warnings.extend(_CheckIncludeOrderInFile(input_api, f, False, |
- changed_linenums)) |
+ if f.LocalPath().endswith(('.cc', '.h')): |
+ changed_linenums = set(line_num for line_num, _ in f.ChangedContents()) |
+ warnings.extend(_CheckIncludeOrderInFile(input_api, f, changed_linenums)) |
results = [] |
if warnings: |