Add a style guideline regarding spacing in range-based for loops
authormitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 19 Sep 2013 18:13:19 +0000 (18:13 +0000)
committermitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 19 Sep 2013 18:13:19 +0000 (18:13 +0000)
https://bugs.webkit.org/show_bug.cgi?id=121620

Reviewed by Anders Carlsson.

Tools:

* Scripts/webkitpy/style/checkers/cpp.py:
(check_spacing): Added checking that there are spaces around the colon in a range-based for
loop.
(CppChecker): Added whitespace/colon to the categories set.
* Scripts/webkitpy/style/checkers/cpp_unittest.py:
(WebKitStyleTest.test_spacing): Added two tests for the new check.

Websites/webkit.org:

* coding/coding-style.html: Added the guideline that spaces should be placed
around the colon in a range-based for loop.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@156105 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Tools/ChangeLog
Tools/Scripts/webkitpy/style/checkers/cpp.py
Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py
Websites/webkit.org/ChangeLog
Websites/webkit.org/coding/coding-style.html

index be672ae..d26831e 100644 (file)
@@ -1,3 +1,17 @@
+2013-09-19  Dan Bernstein  <mitz@apple.com>
+
+        Add a style guideline regarding spacing in range-based for loops
+        https://bugs.webkit.org/show_bug.cgi?id=121620
+
+        Reviewed by Anders Carlsson.
+
+        * Scripts/webkitpy/style/checkers/cpp.py:
+        (check_spacing): Added checking that there are spaces around the colon in a range-based for
+        loop.
+        (CppChecker): Added whitespace/colon to the categories set.
+        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
+        (WebKitStyleTest.test_spacing): Added two tests for the new check.
+
 2013-09-18  Sam Weinig  <sam@webkit.org>
 
         Replace use of OwnArrayPtr<Foo> with std::unique_ptr<Foo[]> in Tools
index 64ccb4f..0cdb2b7 100644 (file)
@@ -1907,6 +1907,8 @@ def check_spacing(file_extension, clean_lines, line_number, error):
         statement = matched.group('statement')
         condition, rest = up_to_unmatched_closing_paren(matched.group('remainder'))
         if condition is not None:
+            if statement == 'for' and search(r'(?:[^ :]:[^:]|[^:]:[^ :])', condition):
+                error(line_number, 'whitespace/colon', 4, 'Missing space around : in range-based for statement')
             condition_match = search(r'(?P<leading>[ ]*)(?P<separator>.).*[^ ]+(?P<trailing>[ ]*)', condition)
             if condition_match:
                 n_leading = len(condition_match.group('leading'))
@@ -3699,6 +3701,7 @@ class CppChecker(object):
         'runtime/virtual',
         'whitespace/blank_line',
         'whitespace/braces',
+        'whitespace/colon',
         'whitespace/comma',
         'whitespace/comments',
         'whitespace/declaration',
index fb64d05..8d9d4fc 100644 (file)
@@ -3849,7 +3849,18 @@ class WebKitStyleTest(CppStyleTestBase):
         #     'return condition ? 1:0;',
         #     '')
 
-        # 3. Place spaces between control statements and their parentheses.
+        # 3. Place spaces around the colon in a range-based for loop.
+        self.assert_multi_line_lint(
+            '    for (const WTF::Vector& vector : vectors)\n'
+            '        process(vector);\n',
+            '')
+
+        self.assert_multi_line_lint(
+            '    for (const Vector& vector: vectors)\n'
+            '        process(vector);\n',
+            'Missing space around : in range-based for statement  [whitespace/colon] [4]')
+
+        # 5. Place spaces between control statements and their parentheses.
         self.assert_multi_line_lint(
             '    if (condition)\n'
             '        doIt();\n',
@@ -3859,7 +3870,7 @@ class WebKitStyleTest(CppStyleTestBase):
             '        doIt();\n',
             'Missing space before ( in if(  [whitespace/parens] [5]')
 
-        # 4. Do not place spaces between a function and its parentheses,
+        # 6. Do not place spaces between a function and its parentheses,
         #    or between a parenthesis and its content.
         self.assert_multi_line_lint(
             'f(a, b);',
index 0135e38..23f2151 100644 (file)
@@ -1,3 +1,13 @@
+2013-09-19  Dan Bernstein  <mitz@apple.com>
+
+        Add a style guideline regarding spacing in range-based for loops
+        https://bugs.webkit.org/show_bug.cgi?id=121620
+
+        Reviewed by Anders Carlsson.
+
+        * coding/coding-style.html: Added the guideline that spaces should be placed
+        around the colon in a range-based for loop.
+
 2013-09-10  Beth Dakin  <bdakin@apple.com>
 
         Adding another screenshot for a potential blog post.
index 86f8d36..88803e4 100644 (file)
@@ -188,6 +188,22 @@ return condition ? 1:0;
 </pre>
 </li>
 
+<li id="spacing-for-colon">Place spaces around the colon in a range-based for loop.
+<h4 class="right">Right:</h4>
+<pre class="code">
+Vector&lt;PluginModuleInfo> plugins;
+for (const auto&amp; plugin : plugins)
+    registerPlugin(plugin);
+</pre>
+
+<h4 class="wrong">Wrong:</h4>
+<pre class="code">
+Vector&lt;PluginModuleInfo> plugins;
+for (const auto&amp; plugin: plugins)
+    registerPlugin(plugin);
+</pre>
+</li>
+
 <li id="spacing-comma-semicolon">Do not place spaces before comma and semicolon.
 <h4 class="right">Right:</h4>
 <pre class="code">