Bug 1436263 - Part 5: Add a mach lint for virtual function declarations with multiple specifiers. r=froydnj r?ahal draft
authorChris Peterson <cpeterson@mozilla.com>
Thu, 15 Feb 2018 00:50:02 -0800
changeset 755993 4c2d2210ce45faa0e84663e3b5a12faf04a81ce4
parent 755380 b350ac0a209bf590ec106e066b4dee92877554a5
push id99355
push usercpeterson@mozilla.com
push dateFri, 16 Feb 2018 08:25:05 +0000
reviewersfroydnj, ahal
bugs1436263
milestone60.0a1
Bug 1436263 - Part 5: Add a mach lint for virtual function declarations with multiple specifiers. r=froydnj r?ahal Virtual function declarations should specify only one of `virtual`, `final`, or `override`, as per the Mozilla C++ style guide: https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Coding_Style This lint warns about: virtual void Bad1() final void Bad2() final override void Bad3() override final Caveats: This lint doesn't warn about `virtual void NotBad() override` at this time because there are 8000+ instances. It also doesn't warn about function declarations that span multiple lines because the regex can't match across line breaks. MozReview-Commit-ID: LcBsOAKKgz7
taskcluster/ci/source-test/mozlint.yml
tools/lint/cpp-virtual-final.yml
--- a/taskcluster/ci/source-test/mozlint.yml
+++ b/taskcluster/ci/source-test/mozlint.yml
@@ -33,16 +33,29 @@ codespell:
             - '**/*.cpp'
             - '**/*.c'
             - '**/*.h'
             - '**/*.configure'
             - '**/*.py'
             - '**/*.properties'
             - '**/*.rst'
 
+cpp-virtual-final:
+    description: lint C++ virtual function declarations
+    platform: lint/opt
+    treeherder:
+        symbol: Cvf
+    run:
+        mach: lint -l cpp-virtual-final -f treeherder
+    when:
+        files-changed:
+            - '**/*.cpp'
+            - '**/*.h'
+            - '**/*.mm'
+
 eslint:
     description: JS lint check
     platform: lint/opt
     treeherder:
         symbol: ES
     run:
         using: run-task
         command: >
new file mode 100644
--- /dev/null
+++ b/tools/lint/cpp-virtual-final.yml
@@ -0,0 +1,31 @@
+---
+cpp-virtual-final:
+    description: "Virtual function declarations should specify only one of
+                  `virtual`, `final`, or `override`"
+    level: warning
+    include: ['.']
+    exclude:
+        # Third-party code with cpp-virtual-final warnings:
+        - gfx/angle
+        - gfx/skia
+        - media/webrtc/trunk
+        - security/sandbox/chromium
+    extensions: ['cpp', 'h', 'mm']
+    type: regex
+    #
+    # This lint warns about:
+    #
+    #   virtual void Bad1() final
+    #   void Bad2() final override
+    #   void Bad3() override final
+    #
+    # Caveats: This lint ...
+    #
+    #   * Doesn't warn about `virtual void NotBad() override` at this time
+    #     because there are 8000+ instances.
+    #
+    #   * Doesn't warn about function declarations that span multiple lines
+    #     because the regex can't match across line breaks.
+    #
+    #           virtual    )    final  |  final  override  |  override  final
+    payload: ^ *virtual .+\).+\bfinal\b|\bfinal +override\b|\boverride +final\b