blob: 082178a28c99222ba2e43209fe78b4b83e0e4d1f [file] [log] [blame]
# 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()