Bug 1387830 - Make ./mach lint able to output available linters. r=ahal
☠☠ backed out by 96f8096db632 ☠ ☠
authorJustin Wood <Callek@gmail.com>
Sun, 06 Aug 2017 09:41:05 -0400
changeset 642649 393b0727cba49affa7aec2a84024dfdbf4a5ff10
parent 642648 02f357c8e98090bcf69c1238ace5e72801f4bdab
child 642650 40601ae660c6347cff6a1139c38c3d2c2fa25510
push id72833
push userbmo:emilio+bugs@crisal.io
push dateTue, 08 Aug 2017 16:50:16 +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