summaryrefslogtreecommitdiffstats
path: root/cc/PRESUBMIT.py
diff options
context:
space:
mode:
authordanakj <danakj@chromium.org>2014-09-27 14:55:48 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-27 21:56:07 +0000
commitf446a070a0aa29a153b0cf78b33ef22da84cb023 (patch)
tree58723080156284eca6c914ec067cbf93afac948b /cc/PRESUBMIT.py
parentea60a8e76d887c6b22acc495e5ea3c28540ae2ef (diff)
downloadchromium_src-f446a070a0aa29a153b0cf78b33ef22da84cb023.zip
chromium_src-f446a070a0aa29a153b0cf78b33ef22da84cb023.tar.gz
chromium_src-f446a070a0aa29a153b0cf78b33ef22da84cb023.tar.bz2
cc: Remove use of PassAs() and constructor-casting with scoped_ptr.
Say you have class A and subclass B. Previously it was required to PassAs() a scoped_ptr<B> into a scoped_ptr<A>. This is no longer needed, so just use Pass(). For newly created scoped_ptrs, you can just use make_scoped_ptr always now. And when you want to return or assign an empty scoped_ptr(), you can now use nullptr directly. Also adds PRESUBMIT checks for: - return scoped<T>(foo). This should be return make_scoped_ptr(foo). - bar = scoped<T>(foo). This should be return bar = make_scoped_ptr(foo). - return scoped<T>(). This should be return nullptr. - bar = scoped<T>(). This should be return bar = nullptr. This also replaces p.reset() with p = nullptr; But it does not add a PRESUBMIT check for that because there are things other than scoped_ptr with a reset() function. R=enne@chromium.org Committed: https://crrev.com/7bb3dbede19d87f0338797756ffd738adc6bca08 Cr-Commit-Position: refs/heads/master@{#297096} Review URL: https://codereview.chromium.org/609663003 Cr-Commit-Position: refs/heads/master@{#297121}
Diffstat (limited to 'cc/PRESUBMIT.py')
-rw-r--r--cc/PRESUBMIT.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/cc/PRESUBMIT.py b/cc/PRESUBMIT.py
index 6c08441..f381684 100644
--- a/cc/PRESUBMIT.py
+++ b/cc/PRESUBMIT.py
@@ -146,6 +146,40 @@ def CheckTodos(input_api, output_api):
items=errors)]
return []
+def CheckScopedPtr(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)
+ errors = []
+ for f in input_api.AffectedSourceFiles(source_file_filter):
+ for line_number, line in f.ChangedContents():
+ # Disallow:
+ # return scoped_ptr<T>(foo);
+ # bar = scoped_ptr<T>(foo);
+ # But allow:
+ # return scoped_ptr<T[]>(foo);
+ # bar = scoped_ptr<T[]>(foo);
+ if re.search(r'(=|\breturn)\s*scoped_ptr<.*?(?<!])>\([^)]+\)', line):
+ errors.append(output_api.PresubmitError(
+ ('%s:%d uses explicit scoped_ptr constructor. ' +
+ 'Use make_scoped_ptr() instead.') % (f.LocalPath(), line_number)))
+ # Disallow:
+ # return scoped_ptr<T>();
+ # bar = scoped_ptr<T>();
+ if re.search(r'(=|\breturn)\s*scoped_ptr<.*?>\(\)', line):
+ errors.append(output_api.PresubmitError(
+ '%s:%d uses scoped_ptr<T>(). Use nullptr instead.' %
+ (f.LocalPath(), line_number)))
+ # Disallow:
+ # foo.PassAs<T>();
+ if re.search(r'\bPassAs<.*?>\(\)', line):
+ errors.append(output_api.PresubmitError(
+ '%s:%d uses PassAs<T>(). Use Pass() instead.' %
+ (f.LocalPath(), line_number)))
+ return errors
+
def FindUnquotedQuote(contents, pos):
match = re.search(r"(?<!\\)(?P<quote>\")", contents[pos:])
return -1 if not match else match.start("quote") + pos
@@ -286,6 +320,7 @@ def CheckChangeOnUpload(input_api, output_api):
results += CheckPassByValue(input_api, output_api)
results += CheckChangeLintsClean(input_api, output_api)
results += CheckTodos(input_api, output_api)
+ results += CheckScopedPtr(input_api, output_api)
results += CheckNamespace(input_api, output_api)
results += CheckForUseOfWrongClock(input_api, output_api)
results += FindUselessIfdefs(input_api, output_api)