Bug 1402302 - sync checkers for static-analysis with the mozreview bot. r?sylvestre draft
authorAndi-Bogdan Postelnicu <bpostelnicu@mozilla.com>
Sat, 30 Sep 2017 14:54:58 +0300
changeset 673026 e6e5f7d545c11f0dae8d0058c505777c5c585f42
parent 672978 57f68296c350469d73d788eb3695a898947b4acb
child 733985 b65f3508750a0878a67d1dd5d6e3da784e839196
push id82443
push userbmo:bpostelnicu@mozilla.com
push dateSat, 30 Sep 2017 11:55:35 +0000
reviewerssylvestre
bugs1402302
milestone58.0a1
Bug 1402302 - sync checkers for static-analysis with the mozreview bot. r?sylvestre MozReview-Commit-ID: I5rn4DEXGOK
python/mozbuild/mozbuild/mach_commands.py
tools/clang-tidy/config.yaml
--- a/python/mozbuild/mozbuild/mach_commands.py
+++ b/python/mozbuild/mozbuild/mach_commands.py
@@ -2191,42 +2191,45 @@ class StaticAnalysis(MachCommandBase):
     @CommandArgument('source', nargs='*', default=['.*'],
                      help='Source files to be analyzed (regex on path). '
                           'Can be omitted, in which case the entire code base '
                           'is analyzed.  The source argument is ignored if '
                           'there is anything fed through stdin, in which case '
                           'the analysis is only performed on the files changed '
                           'in the patch streamed through stdin.  This is called '
                           'the diff mode.')
-    @CommandArgument('--checks', '-c', default='-*,mozilla-*', metavar='checks',
+    @CommandArgument('--checks', '-c', default='-*', metavar='checks',
         help='Static analysis checks to enable.  By default, this enables only '
              'custom Mozilla checks, but can be any clang-tidy checks syntax.')
     @CommandArgument('--jobs', '-j', default='0', metavar='jobs', type=int,
         help='Number of concurrent jobs to run. Default is the number of CPUs.')
     @CommandArgument('--strip', '-p', default='1', metavar='NUM',
                      help='Strip NUM leading components from file names in diff mode.')
     @CommandArgument('--fix', '-f', default=False, action='store_true',
                      help='Try to autofix errors detected by clang-tidy checkers.')
     def check(self, source=None, jobs=2, strip=1, verbose=False,
-              checks='-*,mozilla-*', fix=False):
+              checks='-*', fix=False):
         self._set_log_level(verbose)
         rc = self._build_compile_db(verbose=verbose)
         if rc != 0:
             return rc
 
         rc = self._build_export(jobs=jobs, verbose=verbose)
         if rc != 0:
             return rc
 
         rc = self._get_clang_tidy(verbose=verbose)
         if rc != 0:
             return rc
 
         python = self.virtualenv_manager.python_path
 
+        if checks == '-*':
+            checks = self._get_checks()
+
         common_args = ['-clang-tidy-binary', self._clang_tidy_path,
                        '-checks=%s' % checks,
                        '-extra-arg=-DMOZ_CLANG_PLUGIN']
         if fix:
             common_args.append('-fix')
 
         self.log_manager.register_structured_logger(logging.getLogger('mozbuild'))
 
@@ -2291,16 +2294,31 @@ class StaticAnalysis(MachCommandBase):
     def print_checks(self, verbose=False):
         self._set_log_level(verbose)
         rc = self._get_clang_tidy(verbose=verbose)
         if rc != 0:
             return rc
         args = [self._clang_tidy_path, '-list-checks', '-checks=-*,mozilla-*']
         return self._run_command_in_objdir(args=args, pass_thru=True)
 
+    def _get_checks(self):
+        checks = '-*'
+        import yaml
+        with open(mozpath.join(self.topsrcdir, "tools", "clang-tidy", "config.yaml")) as f:
+            try:
+                config = yaml.load(f)
+                for item in config['clang_checkers']:
+                    if item['publish']:
+                        checks += ',' + item['name']
+            except Exception:
+                print('Looks like config.yaml is not valid, so we are unable to '
+                      'determine default checkers, using \'-checks=-*,mozilla-*\'')
+                checks += ',mozilla-*'
+        return checks
+
     def _get_config_environment(self):
         ran_configure = False
         config = None
         builder = Build(self._mach_context)
 
         try:
             config = self.config_environment
         except Exception:
new file mode 100644
--- /dev/null
+++ b/tools/clang-tidy/config.yaml
@@ -0,0 +1,59 @@
+---
+target: obj-x86_64-pc-linux-gnu
+# It is used by 'mach static-analysis' and 'mozreview static-analysis bot'
+# in order to have consistency across the used checkers.
+# All the clang checks used by the static-analysis tools.
+clang_checkers:
+ - name: -*
+   publish: !!bool no
+ - name: clang-analyzer-deadcode.DeadStores
+   publish: !!bool yes
+ - name: clang-analyzer-security.*
+   publish: !!bool no
+ - name: misc-assert-side-effect
+   publish: !!bool yes
+ - name: misc-suspicious-missing-comma
+   publish: !!bool yes
+ - name: misc-suspicious-semicolon
+   publish: !!bool yes
+ - name: modernize-loop-convert
+   publish: !!bool yes
+ - name: modernize-raw-string-literal
+   publish: !!bool yes
+ - name: modernize-redundant-void-arg
+   publish: !!bool no
+ - name: modernize-shrink-to-fit
+   publish: !!bool yes
+ - name: modernize-use-equals-default
+   publish: !!bool yes
+ - name: modernize-use-equals-delete
+   publish: !!bool yes
+ - name: modernize-use-nullptr
+   publish: !!bool yes
+ - name: modernize-use-override
+   publish: !!bool yes
+ - name: mozilla-*
+   publish: !!bool yes
+ - name: performance-*
+   publish: !!bool yes
+ - name: readability-container-size-empty
+   publish: !!bool yes
+ - name: readability-else-after-return
+   publish: !!bool yes
+ - name: readability-misleading-indentation
+   publish: !!bool yes
+ - name: readability-redundant-control-flow
+   publish: !!bool yes
+ - name: readability-redundant-smartptr-get
+   publish: !!bool no
+ - name: readability-uniqueptr-delete-release
+   publish: !!bool yes
+ - name: modernize-use-auto
+   # Controversial, see bug 1371052.
+   publish: !!bool no
+ - name: modernize-use-bool-literals
+   # Too noisy because of `while (0)` in many macros.
+   publish: !!bool no
+
+# Third party files from mozilla-central
+third_party: tools/rewriting/ThirdPartyPaths.txt