Chromium Code Reviews| 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 |