Bug 1387830 - Make ./mach lint able to output available linters. r=ahal draft
authorJustin Wood <Callek@gmail.com>
Sun, 06 Aug 2017 09:41:05 -0400
changeset 642613 7658b23e5456377bca9d20b5be93b40ca3c65ecc
parent 641249 fe6609d22dfdd710b11e3ac7773aff89f7a8d12c
child 725060 7099832e8c8e8748aa3a759b83903dce7841636b
push id72825
push userCallek@gmail.com
push dateTue, 08 Aug 2017 15:52:45 +0000
reviewersahal
bugs1387830
milestone57.0a1
Bug 1387830 - Make ./mach lint able to output available linters. r=ahal MozReview-Commit-ID: 2hRtfzohwTR
python/mozlint/mozlint/cli.py
--- a/python/mozlint/mozlint/cli.py
+++ b/python/mozlint/mozlint/cli.py
@@ -22,16 +22,22 @@ class MozlintParser(ArgumentParser):
           }],
         [['-l', '--linter'],
          {'dest': 'linters',
           'default': [],
           'action': 'append',
           'help': "Linters to run, e.g 'eslint'. By default all linters "
                   "are run for all the appropriate files.",
           }],
+        [['--list'],
+          {'dest': 'list_linters',
+          'default': False,
+          'action': 'store_true',
+          'help': "List all available linters and exit.",
+          }],
         [['-f', '--format'],
          {'dest': 'fmt',
           'default': 'stylish',
           'help': "Formatter to use. Defaults to 'stylish'.",
           }],
         [['-n', '--no-filter'],
          {'dest': 'use_filters',
           'default': True,
@@ -102,19 +108,25 @@ def find_linters(linters=None):
 
             if linters and name not in linters:
                 continue
 
             lints.append(os.path.join(search_path, f))
     return lints
 
 
-def run(paths, linters, fmt, outgoing, workdir, **lintargs):
+def run(paths, linters, fmt, outgoing, workdir, list_linters=None, **lintargs):
     from mozlint import LintRoller, formatters
 
+    if list_linters:
+        lint_paths = find_linters(linters)
+        print("Available linters: {}".format(
+            [os.path.splitext(os.path.basename(l))[0] for l in lint_paths]
+        ))
+        return 0
     lint = LintRoller(**lintargs)
     lint.read(find_linters(linters))
 
     # run all linters
     results = lint.roll(paths, outgoing=outgoing, workdir=workdir)
     formatter = formatters.get(fmt)
 
     # Encode output with 'replace' to avoid UnicodeEncodeErrors on