Index: cc/PRESUBMIT.py |
diff --git a/cc/PRESUBMIT.py b/cc/PRESUBMIT.py |
index e82e9abb0dd5008ab0d15786eb90e077e6035b8a..e022e5f514137da9a5ac7e1c16362a2fc4370abd 100644 |
--- a/cc/PRESUBMIT.py |
+++ b/cc/PRESUBMIT.py |
@@ -9,6 +9,7 @@ details on the presubmit API built into gcl. |
""" |
import re |
+import string |
CC_SOURCE_FILES=(r'^cc/.*\.(cc|h)$',) |
CC_PERF_TEST =(r'^.*_perftest.*\.(cc|h)$',) |
@@ -56,9 +57,14 @@ def CheckAsserts(input_api, output_api, white_list=CC_SOURCE_FILES, black_list=N |
items=notreached_files)] |
return [] |
-def CheckSpamLogging(input_api, output_api, white_list=CC_SOURCE_FILES, black_list=None): |
+def CheckSpamLogging(input_api, |
+ output_api, |
+ white_list=CC_SOURCE_FILES, |
+ black_list=None): |
black_list = tuple(black_list or input_api.DEFAULT_BLACK_LIST) |
- source_file_filter = lambda x: input_api.FilterSourceFile(x, white_list, black_list) |
+ source_file_filter = lambda x: input_api.FilterSourceFile(x, |
+ white_list, |
enne (OOO)
2013/04/22 18:40:23
<_<
danakj
2013/04/22 18:43:34
Linter gets what linter wants. :p
|
+ black_list) |
log_info = [] |
printf = [] |
@@ -80,11 +86,37 @@ def CheckSpamLogging(input_api, output_api, white_list=CC_SOURCE_FILES, black_li |
items=printf)] |
return [] |
+def CheckPassByValue(input_api, |
+ output_api, |
+ white_list=CC_SOURCE_FILES, |
+ black_list=None): |
+ black_list = tuple(black_list or input_api.DEFAULT_BLACK_LIST) |
+ source_file_filter = lambda x: input_api.FilterSourceFile(x, |
+ white_list, |
+ black_list) |
+ |
+ local_errors = [] |
+ |
+ pass_by_value_types = ['Rect', 'Point', 'Size', 'Vector2d', |
+ 'PointF', 'SizeF', 'Vector2dF'] |
+ |
+ for f in input_api.AffectedSourceFiles(source_file_filter): |
+ contents = input_api.ReadFile(f, 'rb') |
+ match = re.search( |
+ r'\bconst +' + '(?P<type>gfx::(%s))&' % |
enne (OOO)
2013/04/22 18:40:23
I'm a little worried about false positives here.
danakj
2013/04/22 18:43:34
Hm.. true.. why must c++ be so hard to regex.
|
+ string.join(pass_by_value_types, '|'), |
+ contents) |
+ if match: |
+ local_errors.append(output_api.PresubmitError( |
+ '%s passes %s by const ref instead of by value.' % |
+ (f.LocalPath(), match.group('type')))) |
+ return local_errors |
def CheckChangeOnUpload(input_api, output_api): |
results = [] |
results += CheckAsserts(input_api, output_api) |
results += CheckSpamLogging(input_api, output_api, black_list=CC_PERF_TEST) |
+ results += CheckPassByValue(input_api, output_api) |
results += CheckChangeLintsClean(input_api, output_api) |
return results |