| # Copyright 2016 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import os |
| import subprocess |
| import sys |
| |
| |
| _CATAPULT_PATH = os.path.join( |
| os.path.dirname(os.path.abspath(__file__)), |
| os.path.pardir, os.path.pardir, os.path.pardir) |
| |
| |
| def _AddToPathIfNeeded(path): |
| if path not in sys.path: |
| sys.path.insert(0, path) |
| |
| |
| def _UpdateSysPathIfNeeded(): |
| _AddToPathIfNeeded(os.path.join(_CATAPULT_PATH, 'common', 'node_runner')) |
| _AddToPathIfNeeded(os.path.join(_CATAPULT_PATH, 'common', 'py_utils')) |
| |
| |
| _UpdateSysPathIfNeeded() |
| |
| |
| import py_utils |
| from node_runner import node_util |
| |
| |
| BASE_ESLINT_CMD = [ |
| node_util.GetNodePath(), |
| os.path.join(node_util.GetNodeModulesPath(), 'eslint', 'bin', 'eslint.js'), |
| '--color' |
| ] |
| |
| |
| DEFAULT_ESLINT_RULES_DIR = os.path.join( |
| py_utils.GetCatapultDir(), 'common', 'eslint', 'rules') |
| |
| |
| def _CreateEslintCommand(rulesdir, extra_args): |
| eslint_cmd = BASE_ESLINT_CMD + [ |
| '--rulesdir', rulesdir, '--ext', '.js,.html' |
| ] |
| if extra_args: |
| eslint_cmd.extend(extra_args.strip().split(' ')) |
| return eslint_cmd |
| |
| |
| def RunEslint(paths, rules_dir=DEFAULT_ESLINT_RULES_DIR, extra_args=None): |
| """Runs eslint on a list of paths. |
| |
| Args: |
| paths: A list of paths to run eslint on. |
| rules_dir: A directory of custom eslint rules. |
| extra_args: A string to append to the end of the eslint command. |
| """ |
| if type(paths) is not list or len(paths) == 0: |
| raise ValueError('Must specify a non-empty list of paths to lint.') |
| |
| try: |
| eslint_cmd = _CreateEslintCommand(rules_dir, extra_args) |
| return True, subprocess.check_output(eslint_cmd + paths, |
| stderr=subprocess.STDOUT).rstrip() |
| except subprocess.CalledProcessError as e: |
| return False, e.output.rstrip() |