[iOS] Reformat PRESUBMIT
It seems that the files were not following `git cl format --python`.
Bug: 1311955
Change-Id: I12261053e32395979c4fc2dbe92ee921435ba8f9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3891284
Reviewed-by: Sylvain Defresne <sdefresne@chromium.org>
Commit-Queue: Sylvain Defresne <sdefresne@chromium.org>
Auto-Submit: Gauthier Ambard <gambard@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1046284}
diff --git a/ios/PRESUBMIT.py b/ios/PRESUBMIT.py
index 73a3b23..3c3918b 100644
--- a/ios/PRESUBMIT.py
+++ b/ios/PRESUBMIT.py
@@ -24,139 +24,152 @@
]
def IsSubListOf(needle, hay):
- """Returns whether there is a slice of |hay| equal to |needle|."""
- for i, line in enumerate(hay):
- if line == needle[0]:
- if needle == hay[i:i+len(needle)]:
- return True
- return False
+ """Returns whether there is a slice of |hay| equal to |needle|."""
+ for i, line in enumerate(hay):
+ if line == needle[0]:
+ if needle == hay[i:i + len(needle)]:
+ return True
+ return False
+
def _CheckARCCompilationGuard(input_api, output_api):
- """ Checks whether new objc files have proper ARC compile guards."""
- files_without_headers = []
- for f in input_api.AffectedFiles():
- if f.Action() != 'A':
- continue
+ """ Checks whether new objc files have proper ARC compile guards."""
+ files_without_headers = []
+ for f in input_api.AffectedFiles():
+ if f.Action() != 'A':
+ continue
- _, ext = os.path.splitext(f.LocalPath())
- if ext not in ('.m', '.mm'):
- continue
+ _, ext = os.path.splitext(f.LocalPath())
+ if ext not in ('.m', '.mm'):
+ continue
- if not IsSubListOf(ARC_COMPILE_GUARD, f.NewContents()):
- files_without_headers.append(f.LocalPath())
+ if not IsSubListOf(ARC_COMPILE_GUARD, f.NewContents()):
+ files_without_headers.append(f.LocalPath())
- if not files_without_headers:
- return []
+ if not files_without_headers:
+ return []
- plural_suffix = '' if len(files_without_headers) == 1 else 's'
- error_message = '\n'.join([
- 'Found new Objective-C implementation file%(plural)s without compile'
- ' guard%(plural)s. Please use the following compile guard'
- ':' % {'plural': plural_suffix}
- ] + ARC_COMPILE_GUARD + files_without_headers) + '\n'
+ plural_suffix = '' if len(files_without_headers) == 1 else 's'
+ error_message = '\n'.join([
+ 'Found new Objective-C implementation file%(plural)s without compile'
+ ' guard%(plural)s. Please use the following compile guard'
+ ':' % {
+ 'plural': plural_suffix
+ }
+ ] + ARC_COMPILE_GUARD + files_without_headers) + '\n'
- return [output_api.PresubmitError(error_message)]
+ return [output_api.PresubmitError(error_message)]
def _CheckNullabilityAnnotations(input_api, output_api):
- """ Checks whether there are nullability annotations in ios code."""
- nullability_regex = input_api.re.compile(NULLABILITY_PATTERN)
+ """ Checks whether there are nullability annotations in ios code."""
+ nullability_regex = input_api.re.compile(NULLABILITY_PATTERN)
- errors = []
- for f in input_api.AffectedFiles():
- for line_num, line in f.ChangedContents():
- if nullability_regex.search(line):
- errors.append('%s:%s' % (f.LocalPath(), line_num))
- if not errors:
- return []
+ errors = []
+ for f in input_api.AffectedFiles():
+ for line_num, line in f.ChangedContents():
+ if nullability_regex.search(line):
+ errors.append('%s:%s' % (f.LocalPath(), line_num))
+ if not errors:
+ return []
- plural_suffix = '' if len(errors) == 1 else 's'
- error_message = ('Found Nullability annotation%(plural)s. '
- 'Prefer DCHECKs in ios code to check for nullness:'
- % {'plural': plural_suffix})
+ plural_suffix = '' if len(errors) == 1 else 's'
+ error_message = ('Found Nullability annotation%(plural)s. '
+ 'Prefer DCHECKs in ios code to check for nullness:' % {
+ 'plural': plural_suffix
+ })
- return [output_api.PresubmitPromptWarning(error_message, items=errors)]
+ return [output_api.PresubmitPromptWarning(error_message, items=errors)]
def _CheckBugInToDo(input_api, output_api):
- """ Checks whether TODOs in ios code are identified by a bug number."""
- errors = []
- for f in input_api.AffectedFiles():
- for line_num, line in f.ChangedContents():
- if _HasToDoWithNoBug(input_api, line):
- errors.append('%s:%s' % (f.LocalPath(), line_num))
- if not errors:
- return []
+ """ Checks whether TODOs in ios code are identified by a bug number."""
+ errors = []
+ for f in input_api.AffectedFiles():
+ for line_num, line in f.ChangedContents():
+ if _HasToDoWithNoBug(input_api, line):
+ errors.append('%s:%s' % (f.LocalPath(), line_num))
+ if not errors:
+ return []
- plural_suffix = '' if len(errors) == 1 else 's'
- error_message = '\n'.join([
- 'Found TO''DO%(plural)s without bug number%(plural)s (expected format is '
- '\"TO''DO(crbug.com/######)\":' % {'plural': plural_suffix}
- ] + errors) + '\n'
+ plural_suffix = '' if len(errors) == 1 else 's'
+ error_message = '\n'.join([
+ 'Found TO'
+ 'DO%(plural)s without bug number%(plural)s (expected format '
+ 'is \"TO'
+ 'DO(crbug.com/######)\":' % {
+ 'plural': plural_suffix
+ }
+ ] + errors) + '\n'
- return [output_api.PresubmitError(error_message)]
+ return [output_api.PresubmitError(error_message)]
def _CheckHasNoIncludeDirectives(input_api, output_api):
- """ Checks that #include preprocessor directives are not present."""
- errors = []
- for f in input_api.AffectedFiles():
- if not _IsInIosPackage(input_api, f.LocalPath()):
- continue
- _, ext = os.path.splitext(f.LocalPath())
- if ext != '.mm':
- continue
- for line_num, line in f.ChangedContents():
- if _HasIncludeDirective(input_api, line):
- errors.append('%s:%s' % (f.LocalPath(), line_num))
- if not errors:
- return []
+ """ Checks that #include preprocessor directives are not present."""
+ errors = []
+ for f in input_api.AffectedFiles():
+ if not _IsInIosPackage(input_api, f.LocalPath()):
+ continue
+ _, ext = os.path.splitext(f.LocalPath())
+ if ext != '.mm':
+ continue
+ for line_num, line in f.ChangedContents():
+ if _HasIncludeDirective(input_api, line):
+ errors.append('%s:%s' % (f.LocalPath(), line_num))
+ if not errors:
+ return []
- singular_plural = 'it' if len(errors) == 1 else 'them'
- plural_suffix = '' if len(errors) == 1 else 's'
- error_message = '\n'.join([
- 'Found usage of `#include` preprocessor directive%(plural)s! Please, '
- 'replace %(singular_plural)s with `#import` preprocessor '
- 'directive%(plural)s instead. '
- 'Consider replacing all existing `#include` with `#import` (if any) in '
- 'this file for the code clean up. See '
- 'https://chromium.googlesource.com/chromium/src.git/+/refs/heads/main'
- '/styleguide/objective-c/objective-c.md#import-and-include-in-the-directory'
- ' for more details. '
- '\n\nAffected file%(plural)s:' % {'plural': plural_suffix,
- 'singular_plural': singular_plural }
- ] + errors) + '\n'
+ singular_plural = 'it' if len(errors) == 1 else 'them'
+ plural_suffix = '' if len(errors) == 1 else 's'
+ error_message = '\n'.join([
+ 'Found usage of `#include` preprocessor directive%(plural)s! Please, '
+ 'replace %(singular_plural)s with `#import` preprocessor '
+ 'directive%(plural)s instead. '
+ 'Consider replacing all existing `#include` with `#import` (if any) in '
+ 'this file for the code clean up. See '
+ 'https://chromium.googlesource.com/chromium/src.git/+/refs/heads/main'
+ '/styleguide/objective-c/objective-c.md'
+ '#import-and-include-in-the-directory for more details. '
+ '\n\nAffected file%(plural)s:' % {
+ 'plural': plural_suffix,
+ 'singular_plural': singular_plural
+ }
+ ] + errors) + '\n'
- return [output_api.PresubmitError(error_message)]
+ return [output_api.PresubmitError(error_message)]
+
def _IsInIosPackage(input_api, path):
- """ Returns True if path is within ios package"""
- ios_package_regex = input_api.re.compile(IOS_PACKAGE_PATTERN)
+ """ Returns True if path is within ios package"""
+ ios_package_regex = input_api.re.compile(IOS_PACKAGE_PATTERN)
- return ios_package_regex.search(path)
+ return ios_package_regex.search(path)
+
def _HasIncludeDirective(input_api, line):
- """ Returns True if #include is found in the line"""
- include_regex = input_api.re.compile(INCLUDE_PATTERN)
+ """ Returns True if #include is found in the line"""
+ include_regex = input_api.re.compile(INCLUDE_PATTERN)
- return include_regex.search(line)
+ return include_regex.search(line)
+
def _HasToDoWithNoBug(input_api, line):
- """ Returns True if TODO is not identified by a bug number."""
- todo_regex = input_api.re.compile(TODO_PATTERN)
- crbug_regex = input_api.re.compile(CRBUG_PATTERN)
+ """ Returns True if TODO is not identified by a bug number."""
+ todo_regex = input_api.re.compile(TODO_PATTERN)
+ crbug_regex = input_api.re.compile(CRBUG_PATTERN)
- todo_match = todo_regex.search(line)
- if not todo_match:
- return False
- crbug_match = crbug_regex.match(todo_match.group(1))
- return not crbug_match
+ todo_match = todo_regex.search(line)
+ if not todo_match:
+ return False
+ crbug_match = crbug_regex.match(todo_match.group(1))
+ return not crbug_match
def CheckChangeOnUpload(input_api, output_api):
- results = []
- results.extend(_CheckBugInToDo(input_api, output_api))
- results.extend(_CheckNullabilityAnnotations(input_api, output_api))
- results.extend(_CheckARCCompilationGuard(input_api, output_api))
- results.extend(_CheckHasNoIncludeDirectives(input_api, output_api))
- return results
+ results = []
+ results.extend(_CheckBugInToDo(input_api, output_api))
+ results.extend(_CheckNullabilityAnnotations(input_api, output_api))
+ results.extend(_CheckARCCompilationGuard(input_api, output_api))
+ results.extend(_CheckHasNoIncludeDirectives(input_api, output_api))
+ return results
diff --git a/ios/PRESUBMIT_test.py b/ios/PRESUBMIT_test.py
index 69a30ead..d6d0c5b 100755
--- a/ios/PRESUBMIT_test.py
+++ b/ios/PRESUBMIT_test.py
@@ -13,103 +13,120 @@
import PRESUBMIT_test_mocks
class CheckARCCompilationGuardTest(unittest.TestCase):
- """Test the _CheckARCCompilationGuard presubmit check."""
+ """Test the _CheckARCCompilationGuard presubmit check."""
- def testGoodImplementationFiles(self):
- """Test that .m and .mm files with a guard don't raise any errors."""
- lines = ["foobar"] + PRESUBMIT.ARC_COMPILE_GUARD
- mock_input = PRESUBMIT_test_mocks.MockInputApi()
- mock_input.files = [
- PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.mm', lines),
- PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.m', lines),
- ]
- mock_output = PRESUBMIT_test_mocks.MockOutputApi()
- errors = PRESUBMIT._CheckARCCompilationGuard(mock_input, mock_output)
- self.assertEqual(len(errors), 0)
+ def testGoodImplementationFiles(self):
+ """Test that .m and .mm files with a guard don't raise any errors."""
+ lines = ["foobar"] + PRESUBMIT.ARC_COMPILE_GUARD
+ mock_input = PRESUBMIT_test_mocks.MockInputApi()
+ mock_input.files = [
+ PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.mm', lines),
+ PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.m', lines),
+ ]
+ mock_output = PRESUBMIT_test_mocks.MockOutputApi()
+ errors = PRESUBMIT._CheckARCCompilationGuard(mock_input, mock_output)
+ self.assertEqual(len(errors), 0)
- def testBadImplementationFiles(self):
- """Test that .m and .mm files without a guard raise an error."""
- lines = ["foobar"]
- mock_input = PRESUBMIT_test_mocks.MockInputApi()
- mock_input.files = [
- PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.mm', lines),
- PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.m', lines),
- ]
- mock_output = PRESUBMIT_test_mocks.MockOutputApi()
- errors = PRESUBMIT._CheckARCCompilationGuard(mock_input, mock_output)
- self.assertEqual(len(errors), 1)
- self.assertEqual('error', errors[0].type)
- self.assertTrue('ios/path/foo_controller.m' in errors[0].message)
- self.assertTrue('ios/path/foo_controller.mm' in errors[0].message)
+ def testBadImplementationFiles(self):
+ """Test that .m and .mm files without a guard raise an error."""
+ lines = ["foobar"]
+ mock_input = PRESUBMIT_test_mocks.MockInputApi()
+ mock_input.files = [
+ PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.mm', lines),
+ PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.m', lines),
+ ]
+ mock_output = PRESUBMIT_test_mocks.MockOutputApi()
+ errors = PRESUBMIT._CheckARCCompilationGuard(mock_input, mock_output)
+ self.assertEqual(len(errors), 1)
+ self.assertEqual('error', errors[0].type)
+ self.assertTrue('ios/path/foo_controller.m' in errors[0].message)
+ self.assertTrue('ios/path/foo_controller.mm' in errors[0].message)
- def testOtherFiles(self):
- """Test that other files without a guard don't raise errors."""
- lines = ["foobar"]
- mock_input = PRESUBMIT_test_mocks.MockInputApi()
- mock_input.files = [
- PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.h', lines),
- PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.cc', lines),
- PRESUBMIT_test_mocks.MockFile('ios/path/BUILD.gn', lines),
- ]
- mock_output = PRESUBMIT_test_mocks.MockOutputApi()
- errors = PRESUBMIT._CheckARCCompilationGuard(mock_input, mock_output)
- self.assertEqual(len(errors), 0)
+ def testOtherFiles(self):
+ """Test that other files without a guard don't raise errors."""
+ lines = ["foobar"]
+ mock_input = PRESUBMIT_test_mocks.MockInputApi()
+ mock_input.files = [
+ PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.h', lines),
+ PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.cc', lines),
+ PRESUBMIT_test_mocks.MockFile('ios/path/BUILD.gn', lines),
+ ]
+ mock_output = PRESUBMIT_test_mocks.MockOutputApi()
+ errors = PRESUBMIT._CheckARCCompilationGuard(mock_input, mock_output)
+ self.assertEqual(len(errors), 0)
+
class CheckTODOFormatTest(unittest.TestCase):
- """Test the _CheckBugInToDo presubmit check."""
+ """Test the _CheckBugInToDo presubmit check."""
- def testTODOs(self):
- bad_lines = ['TO''DO(ldap): fix this',
- 'TO''DO(ladp): see crbug.com/8675309',
- 'TO''DO(8675309): fix this',
- 'TO''DO(http://crbug.com/8675309): fix this',
- 'TO''DO( crbug.com/8675309): fix this',
- 'TO''DO(crbug/8675309): fix this',
- 'TO''DO(crbug.com): fix this']
- good_lines = ['TO''DO(crbug.com/8675309): fix this',
- 'TO''DO(crbug.com/8675309): fix this (please)']
- mock_input = PRESUBMIT_test_mocks.MockInputApi()
- mock_input.files = [PRESUBMIT_test_mocks.MockFile(
- 'ios/path/foo_controller.mm', bad_lines + good_lines)]
- mock_output = PRESUBMIT_test_mocks.MockOutputApi()
- errors = PRESUBMIT._CheckBugInToDo(mock_input, mock_output)
- self.assertEqual(len(errors), 1)
- self.assertEqual('error', errors[0].type)
- self.assertTrue('without bug numbers' in errors[0].message)
- error_lines = errors[0].message.split('\n')
- self.assertEqual(len(error_lines), len(bad_lines) + 2)
+ def testTODOs(self):
+ bad_lines = [
+ 'TO'
+ 'DO(ldap): fix this', 'TO'
+ 'DO(ladp): see crbug.com/8675309', 'TO'
+ 'DO(8675309): fix this', 'TO'
+ 'DO(http://crbug.com/8675309): fix this', 'TO'
+ 'DO( crbug.com/8675309): fix this', 'TO'
+ 'DO(crbug/8675309): fix this', 'TO'
+ 'DO(crbug.com): fix this'
+ ]
+ good_lines = [
+ 'TO'
+ 'DO(crbug.com/8675309): fix this', 'TO'
+ 'DO(crbug.com/8675309): fix this (please)'
+ ]
+ mock_input = PRESUBMIT_test_mocks.MockInputApi()
+ mock_input.files = [
+ PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.mm',
+ bad_lines + good_lines)
+ ]
+ mock_output = PRESUBMIT_test_mocks.MockOutputApi()
+ errors = PRESUBMIT._CheckBugInToDo(mock_input, mock_output)
+ self.assertEqual(len(errors), 1)
+ self.assertEqual('error', errors[0].type)
+ self.assertTrue('without bug numbers' in errors[0].message)
+ error_lines = errors[0].message.split('\n')
+ self.assertEqual(len(error_lines), len(bad_lines) + 2)
class CheckHasNoIncludeDirectivesTest(unittest.TestCase):
- """Test the _CheckHasNoIncludeDirectives presubmit check."""
+ """Test the _CheckHasNoIncludeDirectives presubmit check."""
- def testFindsIncludeDirectives(self):
- good_lines = ['#import <system>',
- '#import "my/path/my/header.h"',
- '#import "my/path/my/source.mm"',
- '#import "my/path/my/source.m"']
- bad_lines = ['#include <system>',
- '#import <system>',
- '#include "my/path/my/header.h"',
- '#include "my/path/my/source.mm"',
- '#import "my/path/my/header.h"'
- '#include "my/path/my/source.m"']
- mock_input = PRESUBMIT_test_mocks.MockInputApi()
- mock_input.files = [
- PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.mm', bad_lines),
- PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller_2.mm', good_lines),
- PRESUBMIT_test_mocks.MockFile('ios/path/bar_controller.h', bad_lines),
- PRESUBMIT_test_mocks.MockFile('ios/path/bar_controller.m', bad_lines),
- PRESUBMIT_test_mocks.MockFile('ios/path/bar_controller.cc', bad_lines),
- PRESUBMIT_test_mocks.MockFile('chrome/path/foo_controller.mm', bad_lines),
- ]
- mock_output = PRESUBMIT_test_mocks.MockOutputApi()
- errors = PRESUBMIT._CheckHasNoIncludeDirectives(mock_input, mock_output)
- self.assertEqual(len(errors), 1)
- self.assertEqual('error', errors[0].type)
- self.assertTrue('ios/path/foo_controller.mm:1' in errors[0].message)
- self.assertTrue('ios/path/foo_controller.mm:3' in errors[0].message)
- self.assertTrue('ios/path/foo_controller.mm:4' in errors[0].message)
+ def testFindsIncludeDirectives(self):
+ good_lines = [
+ '#import <system>', '#import "my/path/my/header.h"',
+ '#import "my/path/my/source.mm"', '#import "my/path/my/source.m"'
+ ]
+ bad_lines = [
+ '#include <system>', '#import <system>',
+ '#include "my/path/my/header.h"',
+ '#include "my/path/my/source.mm"', '#import "my/path/my/header.h"'
+ '#include "my/path/my/source.m"'
+ ]
+ mock_input = PRESUBMIT_test_mocks.MockInputApi()
+ mock_input.files = [
+ PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller.mm',
+ bad_lines),
+ PRESUBMIT_test_mocks.MockFile('ios/path/foo_controller_2.mm',
+ good_lines),
+ PRESUBMIT_test_mocks.MockFile('ios/path/bar_controller.h',
+ bad_lines),
+ PRESUBMIT_test_mocks.MockFile('ios/path/bar_controller.m',
+ bad_lines),
+ PRESUBMIT_test_mocks.MockFile('ios/path/bar_controller.cc',
+ bad_lines),
+ PRESUBMIT_test_mocks.MockFile('chrome/path/foo_controller.mm',
+ bad_lines),
+ ]
+ mock_output = PRESUBMIT_test_mocks.MockOutputApi()
+ errors = PRESUBMIT._CheckHasNoIncludeDirectives(
+ mock_input, mock_output)
+ self.assertEqual(len(errors), 1)
+ self.assertEqual('error', errors[0].type)
+ self.assertTrue('ios/path/foo_controller.mm:1' in errors[0].message)
+ self.assertTrue('ios/path/foo_controller.mm:3' in errors[0].message)
+ self.assertTrue('ios/path/foo_controller.mm:4' in errors[0].message)
+
if __name__ == '__main__':
- unittest.main()
+ unittest.main()